Преглед изворни кода

GCS Support for Uniform ACL Buckets

Ra'Jiska пре 3 година
родитељ
комит
8dded4e8e4
3 измењених фајлова са 29 додато и 14 уклоњено
  1. 1 0
      cfg/conf.sample.php
  2. 3 2
      lib/Configuration.php
  3. 25 12
      lib/Data/GoogleCloudStorage.php

+ 1 - 0
cfg/conf.sample.php

@@ -175,6 +175,7 @@ dir = PATH "data"
 ;[model_options]
 ;bucket = "my-private-bin"
 ;prefix = "pastes"
+;uniformacl = false
 
 ;[model]
 ; example of DB configuration for MySQL

+ 3 - 2
lib/Configuration.php

@@ -153,8 +153,9 @@ class Configuration
                 )
             ) {
                 $values = array(
-                    'bucket' => getenv('PRIVATEBIN_GCS_BUCKET') ? getenv('PRIVATEBIN_GCS_BUCKET') : null,
-                    'prefix' => 'pastes',
+                    'bucket'     => getenv('PRIVATEBIN_GCS_BUCKET') ? getenv('PRIVATEBIN_GCS_BUCKET') : null,
+                    'prefix'     => 'pastes',
+                    'uniformacl' => false,
                 );
             }
 

+ 25 - 12
lib/Data/GoogleCloudStorage.php

@@ -37,6 +37,15 @@ class GoogleCloudStorage extends AbstractData
      */
     private static $_prefix = 'pastes';
 
+    /**
+     * bucket acl type
+     *
+     * @access private
+     * @static
+     * @var    bool
+     */
+    private static $_uniformacl = false;
+
     /**
      * returns a Google Cloud Storage data backend.
      *
@@ -62,6 +71,9 @@ class GoogleCloudStorage extends AbstractData
         if (is_array($options) && array_key_exists('prefix', $options)) {
             self::$_prefix = $options['prefix'];
         }
+        if (is_array($options) && array_key_exists('uniformacl', $options)) {
+            self::$_uniformacl = $options['uniformacl'];
+        }
 
         if (empty(self::$_client)) {
             self::$_client = class_exists('StorageClientStub', false) ?
@@ -100,21 +112,19 @@ class GoogleCloudStorage extends AbstractData
      */
     private function _upload($key, $payload)
     {
-        $metadata = array_key_exists('meta', $payload) ? $payload['meta'] : array();
-        unset($metadata['attachment'], $metadata['attachmentname'], $metadata['salt']);
-        foreach ($metadata as $k => $v) {
-            $metadata[$k] = strval($v);
-        }
         try {
-            self::$_bucket->upload(Json::encode($payload), array(
+            $data = array(
                 'name'          => $key,
                 'chunkSize'     => 262144,
-                'predefinedAcl' => 'private',
                 'metadata'      => array(
                     'content-type' => 'application/json',
-                    'metadata'     => $metadata,
+                    'metadata'     => $payload,
                 ),
-            ));
+            );
+            if (!self::$_uniformacl) {
+                $data['predefinedAcl'] = 'private';
+            }
+            self::$_bucket->upload(Json::encode($payload), $data);
         } catch (Exception $e) {
             error_log('failed to upload ' . $key . ' to ' . self::$_bucket->name() . ', ' .
                 trim(preg_replace('/\s\s+/', ' ', $e->getMessage())));
@@ -277,15 +287,18 @@ class GoogleCloudStorage extends AbstractData
             $metadata['value'] = strval($value);
         }
         try {
-            self::$_bucket->upload($value, array(
+            $data = array(
                 'name'          => $key,
                 'chunkSize'     => 262144,
-                'predefinedAcl' => 'private',
                 'metadata'      => array(
                     'content-type' => 'application/json',
                     'metadata'     => $metadata,
                 ),
-            ));
+            );
+            if (!self::$_uniformacl) {
+                $data['predefinedAcl'] = 'private';
+            }
+            self::$_bucket->upload($value, $data);
         } catch (Exception $e) {
             error_log('failed to set key ' . $key . ' to ' . self::$_bucket->name() . ', ' .
                 trim(preg_replace('/\s\s+/', ' ', $e->getMessage())));