]> source.dussan.org Git - nextcloud-server.git/commitdiff
Mount options for ext storage are now passed around
authorVincent Petry <pvince81@owncloud.com>
Fri, 13 Mar 2015 11:49:11 +0000 (12:49 +0100)
committerVincent Petry <pvince81@owncloud.com>
Fri, 13 Mar 2015 11:49:11 +0000 (12:49 +0100)
The mount options are now passed to the UI and stored in a hidden field.
The ext storage controllers and services also know how to load/save them
from the legacy config.

13 files changed:
apps/files_external/controller/globalstoragescontroller.php
apps/files_external/controller/userstoragescontroller.php
apps/files_external/js/settings.js
apps/files_external/lib/config.php
apps/files_external/lib/storageconfig.php
apps/files_external/service/storagesservice.php
apps/files_external/templates/settings.php
apps/files_external/tests/controller/storagescontrollertest.php
apps/files_external/tests/controller/userstoragescontrollertest.php
apps/files_external/tests/service/globalstoragesservicetest.php
apps/files_external/tests/service/storagesservicetest.php
apps/files_external/tests/service/userstoragesservicetest.php
apps/files_external/tests/storageconfigtest.php

index 3aa64f0d85d6dc3573e0a567c639a021e29580b3..e5aff4f95a24ca06ddd9b79cdccef83f7fd4825d 100644 (file)
@@ -49,6 +49,7 @@ class GlobalStoragesController extends StoragesController {
         * @param string $mountPoint storage mount point
         * @param string $backendClass backend class name
         * @param array $backendOptions backend-specific options
+        * @param array $mountOptions mount-specific options
         * @param array $applicableUsers users for which to mount the storage
         * @param array $applicableGroups groups for which to mount the storage
         * @param int $priority priority
@@ -59,6 +60,7 @@ class GlobalStoragesController extends StoragesController {
                $mountPoint,
                $backendClass,
                $backendOptions,
+               $mountOptions,
                $applicableUsers,
                $applicableGroups,
                $priority
@@ -67,6 +69,7 @@ class GlobalStoragesController extends StoragesController {
                $newStorage->setMountPoint($mountPoint);
                $newStorage->setBackendClass($backendClass);
                $newStorage->setBackendOptions($backendOptions);
+               $newStorage->setMountOptions($mountOptions);
                $newStorage->setApplicableUsers($applicableUsers);
                $newStorage->setApplicableGroups($applicableGroups);
                $newStorage->setPriority($priority);
@@ -93,6 +96,7 @@ class GlobalStoragesController extends StoragesController {
         * @param string $mountPoint storage mount point
         * @param string $backendClass backend class name
         * @param array $backendOptions backend-specific options
+        * @param array $mountOptions mount-specific options
         * @param array $applicableUsers users for which to mount the storage
         * @param array $applicableGroups groups for which to mount the storage
         * @param int $priority priority
@@ -104,6 +108,7 @@ class GlobalStoragesController extends StoragesController {
                $mountPoint,
                $backendClass,
                $backendOptions,
+               $mountOptions,
                $applicableUsers,
                $applicableGroups,
                $priority
@@ -112,6 +117,7 @@ class GlobalStoragesController extends StoragesController {
                $storage->setMountPoint($mountPoint);
                $storage->setBackendClass($backendClass);
                $storage->setBackendOptions($backendOptions);
+               $storage->setMountOptions($mountOptions);
                $storage->setApplicableUsers($applicableUsers);
                $storage->setApplicableGroups($applicableGroups);
                $storage->setPriority($priority);
index b77cbca59fdcd240809b5aa735af3f2d09aa32ad..64202b5e5428f2e2fd090353a2a7003b60f80a31 100644 (file)
@@ -86,6 +86,7 @@ class UserStoragesController extends StoragesController {
         * @param string $mountPoint storage mount point
         * @param string $backendClass backend class name
         * @param array $backendOptions backend-specific options
+        * @param array $mountOptions backend-specific mount options
         *
         * @return DataResponse
         *
@@ -94,12 +95,14 @@ class UserStoragesController extends StoragesController {
        public function create(
                $mountPoint,
                $backendClass,
-               $backendOptions
+               $backendOptions,
+               $mountOptions
        ) {
                $newStorage = new StorageConfig();
                $newStorage->setMountPoint($mountPoint);
                $newStorage->setBackendClass($backendClass);
                $newStorage->setBackendOptions($backendOptions);
+               $newStorage->setMountOptions($mountOptions);
 
                $response = $this->validate($newStorage);
                if (!empty($response)) {
@@ -122,6 +125,7 @@ class UserStoragesController extends StoragesController {
         * @param string $mountPoint storage mount point
         * @param string $backendClass backend class name
         * @param array $backendOptions backend-specific options
+        * @param array $mountOptions backend-specific mount options
         *
         * @return DataResponse
         */
@@ -129,12 +133,14 @@ class UserStoragesController extends StoragesController {
                $id,
                $mountPoint,
                $backendClass,
-               $backendOptions
+               $backendOptions,
+               $mountOptions
        ) {
                $storage = new StorageConfig($id);
                $storage->setMountPoint($mountPoint);
                $storage->setBackendClass($backendClass);
                $storage->setBackendOptions($backendOptions);
+               $storage->setMountOptions($mountOptions);
 
                $response = $this->validate($storage);
                if (!empty($response)) {
index 44488db4bc3122a664bd67de9a957cd413cb531d..ef64d087884cbea0dcf99520d216f58447a79d45 100644 (file)
@@ -194,6 +194,13 @@ StorageConfig.prototype = {
         */
        backendOptions: null,
 
+       /**
+        * Mount-specific options
+        *
+        * @type Object.<string,object>
+        */
+       mountOptions: null,
+
        /**
         * Creates or saves the storage.
         *
@@ -237,6 +244,9 @@ StorageConfig.prototype = {
                if (this.id) {
                        data.id = this.id;
                }
+               if (this.mountOptions) {
+                       data.mountOptions = this.mountOptions;
+               }
                return data;
        },
 
@@ -641,6 +651,11 @@ MountConfigListView.prototype = {
                        storage.priority = $tr.find('input.priority').val();
                }
 
+               var mountOptions = $tr.find('input.mountOptions').val();
+               if (mountOptions) {
+                       storage.mountOptions = JSON.parse(mountOptions);
+               }
+
                return storage;
        },
 
index deeedb9855177865b38f0bab6a8575d3c6b6591c..378bedfa8debb99d72da8af5e23743a7b04a3713 100644 (file)
@@ -357,6 +357,9 @@ class OC_Mount_Config {
                                                'applicable' => array('groups' => array($group), 'users' => array()),
                                                'status' => self::getBackendStatus($mount['class'], $mount['options'], false)
                                        );
+                                       if (isset($mount['mountOptions'])) {
+                                               $config['mountOptions'] = $mount['mountOptions'];
+                                       }
                                        $hash = self::makeConfigHash($config);
                                        // If an existing config exists (with same class, mountpoint and options)
                                        if (isset($system[$hash])) {
@@ -393,6 +396,9 @@ class OC_Mount_Config {
                                                'applicable' => array('groups' => array(), 'users' => array($user)),
                                                'status' => self::getBackendStatus($mount['class'], $mount['options'], false)
                                        );
+                                       if (isset($mount['mountOptions'])) {
+                                               $config['mountOptions'] = $mount['mountOptions'];
+                                       }
                                        $hash = self::makeConfigHash($config);
                                        // If an existing config exists (with same class, mountpoint and options)
                                        if (isset($system[$hash])) {
@@ -426,7 +432,7 @@ class OC_Mount_Config {
                                        $mount['class'] = '\OC\Files\Storage\\' . substr($mount['class'], 15);
                                }
                                $mount['options'] = self::decryptPasswords($mount['options']);
-                               $personal[] = array(
+                               $config = array(
                                        'id' => (int) $mount['id'],
                                        'storage_id' => (int) $mount['storage_id'],
                                        'class' => $mount['class'],
@@ -436,6 +442,10 @@ class OC_Mount_Config {
                                        'options' => $mount['options'],
                                        'status' => self::getBackendStatus($mount['class'], $mount['options'], true)
                                );
+                               if (isset($mount['mountOptions'])) {
+                                       $config['mountOptions'] = $mount['mountOptions'];
+                               }
+                               $personal[] = $config;
                        }
                }
                return $personal;
index f23b5cd86a95cf59caae1e7f04f6cf2b17d1ef93..a45321516d4a8e7e6e57cc09ff25eeafbb6f5fcd 100644 (file)
@@ -53,6 +53,11 @@ class StorageConfig implements \JsonSerializable {
         */
        private $applicableGroups = [];
 
+       /**
+        * @var array
+        */
+       private $mountOptions = [];
+
        /**
         * @param int|null $id config id or null for a new config
         */
@@ -195,6 +200,27 @@ class StorageConfig implements \JsonSerializable {
                $this->applicableGroups = $applicableGroups;
        }
 
+       /**
+        * Returns the mount-specific options
+        *
+        * @return array mount specific options
+        */
+       public function getMountOptions() {
+               return $this->mountOptions;
+       }
+
+       /**
+        * Sets the mount-specific options
+        *
+        * @param array applicable groups
+        */
+       public function setMountOptions($mountOptions) {
+               if (is_null($mountOptions)) {
+                       $mountOptions = [];
+               }
+               $this->mountOptions = $mountOptions;
+       }
+
        /**
         * Sets the storage status, whether the config worked last time
         *
@@ -235,6 +261,9 @@ class StorageConfig implements \JsonSerializable {
                if (!empty($this->applicableGroups)) {
                        $result['applicableGroups'] = $this->applicableGroups;
                }
+               if (!empty($this->mountOptions)) {
+                       $result['mountOptions'] = $this->mountOptions;
+               }
                if (!is_null($this->status)) {
                        $result['status'] = $this->status;
                }
index 52188b23a3907307fe44f93a7429cbbdec1c0746..46a485a169c47d7ad0951a02d579fa9bcc6cc611 100644 (file)
@@ -50,6 +50,7 @@ abstract class StoragesService {
                 *     - "priority": storage priority
                 *     - "backend": backend class name
                 *     - "options": backend-specific options
+                *     - "mountOptions": mount-specific options (ex: disable previews, scanner, etc)
                 */
 
                // group by storage id
@@ -82,6 +83,9 @@ abstract class StoragesService {
 
                                        $currentStorage->setBackendClass($storageOptions['class']);
                                        $currentStorage->setBackendOptions($storageOptions['options']);
+                                       if (isset($storageOptions['mountOptions'])) {
+                                               $currentStorage->setMountOptions($storageOptions['mountOptions']);
+                                       }
                                        if (isset($storageOptions['priority'])) {
                                                $currentStorage->setPriority($storageOptions['priority']);
                                        }
@@ -141,6 +145,9 @@ abstract class StoragesService {
                if (!is_null($storageConfig->getPriority())) {
                        $options['priority'] = $storageConfig->getPriority();
                }
+               if (!empty($storageConfig->getMountOptions())) {
+                       $options['mountOptions'] = $storageConfig->getMountOptions();
+               }
 
                $mountPoints[$mountType][$applicable][$rootMountPoint] = $options;
        }
index 4c54d4069b2eda1da43e9009bfd354afda92a226..3368b96a1227dd498f3449c2aefee8917af6ea47 100644 (file)
                                                        <?php OCP\Util::addScript('files_external', $_['backends'][$mount['class']]['custom']); ?>
                                                <?php endif; ?>
                                        <?php endif; ?>
+                                       <?php if (isset($mount['mountOptions'])): ?>
+                                       <input type="hidden" class="mountOptions" value="<?php p(json_encode($mount['mountOptions'])) ?>" />
+                                       <?php endif; ?>
+                                       <?php if ($_['isAdminPage']): ?>
+                                       <?php if (isset($mount['priority'])): ?>
+                                       <input type="hidden" class="priority" value="<?php p($mount['priority']) ?>" />
+                                       <?php endif; ?>
+                                       <?php endif; ?>
                                </td>
                                <?php if ($_['isAdminPage']): ?>
                                <td class="applicable"
@@ -90,9 +98,6 @@
                                                                                                        print_unescaped(json_encode($mount['applicable']['users'])); ?>'>
                                        <input type="hidden" class="applicableUsers" style="width:20em;" value=""/>
                                </td>
-                               <?php if (isset($mount['priority'])): ?>
-                               <input type="hidden" class="priority" value="<?php p($mount['priority']) ?>" />
-                               <?php endif; ?>
                                <?php endif; ?>
                                <td <?php if (isset($mount['mountpoint'])): ?>class="remove"
                                        <?php else: ?>style="visibility:hidden;"
index fefe2928d766644d3bfd541b45eccad59f590821..853b4a86f036e9d5688bc33a1aae7330c1cf7596 100644 (file)
@@ -62,6 +62,7 @@ abstract class StoragesControllerTest extends \Test\TestCase {
                        array(),
                        [],
                        [],
+                       [],
                        null
                );
 
@@ -85,6 +86,7 @@ abstract class StoragesControllerTest extends \Test\TestCase {
                        array(),
                        [],
                        [],
+                       [],
                        null
                );
 
@@ -116,6 +118,7 @@ abstract class StoragesControllerTest extends \Test\TestCase {
                        array(),
                        [],
                        [],
+                       [],
                        null
                );
 
@@ -128,6 +131,7 @@ abstract class StoragesControllerTest extends \Test\TestCase {
                        array(),
                        [],
                        [],
+                       [],
                        null
                );
 
@@ -146,6 +150,7 @@ abstract class StoragesControllerTest extends \Test\TestCase {
                        array(),
                        [],
                        [],
+                       [],
                        null
                );
 
@@ -158,6 +163,7 @@ abstract class StoragesControllerTest extends \Test\TestCase {
                        array(),
                        [],
                        [],
+                       [],
                        null
                );
 
@@ -176,6 +182,7 @@ abstract class StoragesControllerTest extends \Test\TestCase {
                        array(),
                        [],
                        [],
+                       [],
                        null
                );
 
@@ -204,6 +211,7 @@ abstract class StoragesControllerTest extends \Test\TestCase {
                $storageConfig->setMountPoint('test');
                $storageConfig->setBackendClass('\OC\Files\Storage\SMB');
                $storageConfig->setBackendOptions(['user' => 'test', 'password', 'password123']);
+               $storageConfig->setMountOptions(['priority' => false]);
 
                $this->service->expects($this->once())
                        ->method('getStorage')
index 9d6fbb15e23e64bbebbc84f9af5fca44fbd22a10..0ba413f6959dd8f1a492b346900fe1d5ca2b8877 100644 (file)
@@ -91,6 +91,7 @@ class UserStoragesControllerTest extends StoragesControllerTest {
                        array(),
                        [],
                        [],
+                       [],
                        null
                );
 
@@ -103,6 +104,7 @@ class UserStoragesControllerTest extends StoragesControllerTest {
                        array(),
                        [],
                        [],
+                       [],
                        null
                );
 
index 6286865bf43b512507b1ed5217e0e216f7508183..f5cdcfa3907f76411abc5f0fb93af679cf0e0b80 100644 (file)
@@ -50,6 +50,9 @@ class GlobalStoragesServiceTest extends StoragesServiceTest {
                        'applicableUsers' => [],
                        'applicableGroups' => [],
                        'priority' => 15,
+                       'mountOptions' => [
+                               'preview' => false,
+                       ]
                ]);
        }
 
@@ -638,6 +641,7 @@ class GlobalStoragesServiceTest extends StoragesServiceTest {
                $this->assertEquals(1, $mountPointOptions['id']);
                $this->assertEquals('\OC\Files\Storage\SMB', $mountPointOptions['class']);
                $this->assertEquals(15, $mountPointOptions['priority']);
+               $this->assertEquals(false, $mountPointOptions['mountOptions']['preview']);
 
                $backendOptions = $mountPointOptions['options'];
                $this->assertEquals('value1', $backendOptions['option1']);
@@ -677,6 +681,7 @@ class GlobalStoragesServiceTest extends StoragesServiceTest {
                        $this->assertEquals(1, $mountPointOptions['id']);
                        $this->assertEquals('\OC\Files\Storage\SMB', $mountPointOptions['class']);
                        $this->assertEquals(15, $mountPointOptions['priority']);
+                       $this->assertEquals(false, $mountPointOptions['mountOptions']['preview']);
 
                        $backendOptions = $mountPointOptions['options'];
                        $this->assertEquals('value1', $backendOptions['option1']);
@@ -693,6 +698,7 @@ class GlobalStoragesServiceTest extends StoragesServiceTest {
                        $this->assertEquals(1, $mountPointOptions['id']);
                        $this->assertEquals('\OC\Files\Storage\SMB', $mountPointOptions['class']);
                        $this->assertEquals(15, $mountPointOptions['priority']);
+                       $this->assertEquals(false, $mountPointOptions['mountOptions']['preview']);
 
                        $backendOptions = $mountPointOptions['options'];
                        $this->assertEquals('value1', $backendOptions['option1']);
index 1e338b3948d16ecd8bab87cc224535d64ba200a9..445e86d4117b4bc52879758a5e5bfad54931507f 100644 (file)
@@ -96,6 +96,9 @@ abstract class StoragesServiceTest extends \Test\TestCase {
                if (isset($data['priority'])) {
                        $storage->setPriority($data['priority']);
                }
+               if (isset($data['mountOptions'])) {
+                       $storage->setMountOptions($data['mountOptions']);
+               }
                return $storage;
        }
 
index 64d59dc7d03680a4b673f06364129a74693ffb48..77b3842b3186919adabfd01400ab02122fbf4747 100644 (file)
@@ -61,6 +61,9 @@ class UserStoragesServiceTest extends StoragesServiceTest {
                                'option2' => 'value2',
                                'password' => 'testPassword',
                        ],
+                       'mountOptions' => [
+                               'preview' => false,
+                       ]
                ]);
        }
 
@@ -190,6 +193,7 @@ class UserStoragesServiceTest extends StoragesServiceTest {
                $mountPointOptions = current($mountPointData);
                $this->assertEquals(1, $mountPointOptions['id']);
                $this->assertEquals('\OC\Files\Storage\SMB', $mountPointOptions['class']);
+               $this->assertEquals(false, $mountPointOptions['mountOptions']['preview']);
 
                $backendOptions = $mountPointOptions['options'];
                $this->assertEquals('value1', $backendOptions['option1']);
index 473dc20b38745750dcd2388f1012fdb71cab7a44..ec79b1bf3062c8d3ffe35f2e0a4acdd4f93bc530 100644 (file)
@@ -34,6 +34,7 @@ class StorageConfigTest extends \Test\TestCase {
                $storageConfig->setPriority(128);
                $storageConfig->setApplicableUsers(['user1', 'user2']);
                $storageConfig->setApplicableGroups(['group1', 'group2']);
+               $storageConfig->setMountOptions(['preview' => false]);
 
                $json = $storageConfig->jsonSerialize();
 
@@ -45,6 +46,7 @@ class StorageConfigTest extends \Test\TestCase {
                $this->assertEquals(128, $json['priority']);
                $this->assertEquals(['user1', 'user2'], $json['applicableUsers']);
                $this->assertEquals(['group1', 'group2'], $json['applicableGroups']);
+               $this->assertEquals(['preview' => false], $json['mountOptions']);
        }
 
 }