Kaynağa Gözat

Merge remote-tracking branch 'origin/master' into php8

github-actions[bot] 3 yıl önce
ebeveyn
işleme
c19df94fc2
2 değiştirilmiş dosya ile 40 ekleme ve 25 silme
  1. 13 0
      cfg/conf.sample.php
  2. 27 25
      lib/Data/S3Storage.php

+ 13 - 0
cfg/conf.sample.php

@@ -230,6 +230,19 @@ dir = PATH "data"
 ;accesskey = "access key id"
 ;secretkey = "secret access key"
 
+;[model]
+; example of S3 configuration for AWS using its SDK default credential provider chain
+; if relying on environment variables, the AWS SDK will look for the following:
+; - AWS_ACCESS_KEY_ID
+; - AWS_SECRET_ACCESS_KEY
+; - AWS_SESSION_TOKEN (if needed)
+; for more details, see https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/guide_credentials.html#default-credential-chain 
+;class = S3Storage
+;[model_options]
+;region = "eu-central-1"
+;version = "latest"
+;bucket = "my-bucket"
+
 [yourls]
 ; When using YOURLS as a "urlshortener" config item:
 ; - By default, "urlshortener" will point to the YOURLS API URL, with or without

+ 27 - 25
lib/Data/S3Storage.php

@@ -82,31 +82,33 @@ class S3Storage extends AbstractData
      */
     public function __construct(array $options)
     {
-        $this->_options['credentials'] = array();
-
-        if (is_array($options) && array_key_exists('region', $options)) {
-            $this->_options['region'] = $options['region'];
-        }
-        if (is_array($options) && array_key_exists('version', $options)) {
-            $this->_options['version'] = $options['version'];
-        }
-        if (is_array($options) && array_key_exists('endpoint', $options)) {
-            $this->_options['endpoint'] = $options['endpoint'];
-        }
-        if (is_array($options) && array_key_exists('accesskey', $options)) {
-            $this->_options['credentials']['key'] = $options['accesskey'];
-        }
-        if (is_array($options) && array_key_exists('secretkey', $options)) {
-            $this->_options['credentials']['secret'] = $options['secretkey'];
-        }
-        if (is_array($options) && array_key_exists('use_path_style_endpoint', $options)) {
-            $this->_options['use_path_style_endpoint'] = filter_var($options['use_path_style_endpoint'], FILTER_VALIDATE_BOOLEAN);
-        }
-        if (is_array($options) && array_key_exists('bucket', $options)) {
-            $this->_bucket = $options['bucket'];
-        }
-        if (is_array($options) && array_key_exists('prefix', $options)) {
-            $this->_prefix = $options['prefix'];
+        if (is_array($options)) {
+            // AWS SDK will try to load credentials from environment if credentials are not passed via configuration
+            // ref: https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/guide_credentials.html#default-credential-chain
+            if (isset($options['accesskey']) && isset($options['secretkey'])) {
+                $this->_options['credentials'] = array();
+
+                $this->_options['credentials']['key']    = $options['accesskey'];
+                $this->_options['credentials']['secret'] = $options['secretkey'];
+            }
+            if (array_key_exists('region', $options)) {
+                $this->_options['region'] = $options['region'];
+            }
+            if (array_key_exists('version', $options)) {
+                $this->_options['version'] = $options['version'];
+            }
+            if (array_key_exists('endpoint', $options)) {
+                $this->_options['endpoint'] = $options['endpoint'];
+            }
+            if (array_key_exists('use_path_style_endpoint', $options)) {
+                $this->_options['use_path_style_endpoint'] = filter_var($options['use_path_style_endpoint'], FILTER_VALIDATE_BOOLEAN);
+            }
+            if (array_key_exists('bucket', $options)) {
+                $this->_bucket = $options['bucket'];
+            }
+            if (array_key_exists('prefix', $options)) {
+                $this->_prefix = $options['prefix'];
+            }
         }
 
         $this->_client = new S3Client($this->_options);