diff options
author | Thomas Müller <thomas.mueller@tmit.eu> | 2015-04-04 12:51:41 +0200 |
---|---|---|
committer | Thomas Müller <thomas.mueller@tmit.eu> | 2015-04-04 12:51:41 +0200 |
commit | 4996706078a901fa532b0fed0fb0bc264d1ba778 (patch) | |
tree | 38975186744d2bf9e96b9f28f66864f4f3531412 | |
parent | 9b250baf9e1f4cf7a721304b0748758ece6f59f5 (diff) | |
parent | 519d5688478d44de83ab4997b790c8e7c6371a10 (diff) | |
download | nextcloud-server-4996706078a901fa532b0fed0fb0bc264d1ba778.tar.gz nextcloud-server-4996706078a901fa532b0fed0fb0bc264d1ba778.zip |
Merge pull request #15338 from owncloud/encryption-mount-option
Add mount point to disable the encryption wrapper
-rw-r--r-- | apps/files_external/js/settings.js | 38 | ||||
-rw-r--r-- | apps/files_external/personal.php | 1 | ||||
-rw-r--r-- | apps/files_external/settings.php | 1 | ||||
-rw-r--r-- | apps/files_external/templates/settings.php | 2 | ||||
-rw-r--r-- | apps/files_external/tests/js/settingsSpec.js | 14 | ||||
-rw-r--r-- | lib/base.php | 20 |
6 files changed, 60 insertions, 16 deletions
diff --git a/apps/files_external/js/settings.js b/apps/files_external/js/settings.js index ae3aef4ef35..1dae64216e1 100644 --- a/apps/files_external/js/settings.js +++ b/apps/files_external/js/settings.js @@ -15,6 +15,10 @@ var MOUNT_OPTIONS_DROPDOWN_TEMPLATE = '<div class="drop dropdown mountOptionsDropdown">' + // FIXME: options are hard-coded for now ' <div class="optionRow">' + + ' <label for="mountOptionsEncrypt">{{t "files_external" "Enable encryption"}}</label>' + + ' <input id="mountOptionsEncrypt" name="encrypt" type="checkbox" value="true" checked="checked"/>' + + ' </div>' + + ' <div class="optionRow">' + ' <label for="mountOptionsPreviews">{{t "files_external" "Enable previews"}}</label>' + ' <input id="mountOptionsPreviews" name="previews" type="checkbox" value="true" checked="checked"/>' + ' </div>' + @@ -422,8 +426,9 @@ MountOptionsDropdown.prototype = { * * @param {Object} $container container * @param {Object} mountOptions mount options + * @param {Array} enabledOptions enabled mount options */ - show: function($container, mountOptions) { + show: function($container, mountOptions, enabledOptions) { if (MountOptionsDropdown._last) { MountOptionsDropdown._last.hide(); } @@ -438,7 +443,7 @@ MountOptionsDropdown.prototype = { this.$el = $el; $el.addClass('hidden'); - this.setOptions(mountOptions); + this.setOptions(mountOptions, enabledOptions); this.$el.appendTo($container); MountOptionsDropdown._last = this; @@ -484,8 +489,9 @@ MountOptionsDropdown.prototype = { * Sets the mount options to the dropdown controls * * @param {Object} options mount options + * @param {Array} enabledOptions enabled mount options */ - setOptions: function(options) { + setOptions: function(options, enabledOptions) { var $el = this.$el; _.each(options, function(value, key) { var $optionEl = $el.find('input, select').filterAttr('name', key); @@ -498,6 +504,15 @@ MountOptionsDropdown.prototype = { $optionEl.val(value); } }); + $el.find('.optionRow').each(function(i, row){ + var $row = $(row); + var optionId = $row.find('input, select').attr('name'); + if (enabledOptions.indexOf(optionId) === -1) { + $row.hide(); + } else { + $row.show(); + } + }); } }; @@ -554,6 +569,8 @@ MountConfigListView.prototype = { */ _allBackends: null, + _encryptionEnabled: false, + /** * @param {Object} $el DOM object containing the list * @param {Object} [options] @@ -573,6 +590,8 @@ MountConfigListView.prototype = { this._userListLimit = options.userListLimit; } + this._encryptionEnabled = options.encryptionEnabled; + // read the backend config that was carefully crammed // into the data-configurations attribute of the select this._allBackends = this.$el.find('.selectBackend').data('configurations'); @@ -935,8 +954,11 @@ MountConfigListView.prototype = { var storage = this.getStorageConfig($tr); var $toggle = $tr.find('.mountOptionsToggle'); var dropDown = new MountOptionsDropdown(); - dropDown.show($toggle, storage.mountOptions || []); - + var enabledOptions = ['previews', 'filesystem_check_changes']; + if (this._encryptionEnabled) { + enabledOptions.push('encrypt'); + } + dropDown.show($toggle, storage.mountOptions || [], enabledOptions); $('body').on('mouseup.mountOptionsDropdown', function(event) { var $target = $(event.target); if ($toggle.has($target).length) { @@ -963,7 +985,11 @@ MountConfigListView.prototype = { }; $(document).ready(function() { - var mountConfigListView = new MountConfigListView($('#externalStorage')); + var enabled = $('#files_external').attr('data-encryption-enabled'); + var encryptionEnabled = (enabled ==='true')? true: false; + var mountConfigListView = new MountConfigListView($('#externalStorage'), { + encryptionEnabled: encryptionEnabled + }); $('#sslCertificate').on('click', 'td.remove>img', function() { var $tr = $(this).closest('tr'); diff --git a/apps/files_external/personal.php b/apps/files_external/personal.php index e09f0f803ac..b2ab32411f9 100644 --- a/apps/files_external/personal.php +++ b/apps/files_external/personal.php @@ -48,6 +48,7 @@ if (!$hasId) { } $tmpl = new OCP\Template('files_external', 'settings'); +$tmpl->assign('encryptionEnabled', \OC::$server->getEncryptionManager()->isEnabled()); $tmpl->assign('isAdminPage', false); $tmpl->assign('mounts', $mounts); $tmpl->assign('dependencies', OC_Mount_Config::checkDependencies()); diff --git a/apps/files_external/settings.php b/apps/files_external/settings.php index ee4982a9ad4..daf205d3d57 100644 --- a/apps/files_external/settings.php +++ b/apps/files_external/settings.php @@ -68,6 +68,7 @@ if (!$hasId) { } $tmpl = new OCP\Template('files_external', 'settings'); +$tmpl->assign('encryptionEnabled', \OC::$server->getEncryptionManager()->isEnabled()); $tmpl->assign('isAdminPage', true); $tmpl->assign('mounts', $mounts); $tmpl->assign('backends', $backends); diff --git a/apps/files_external/templates/settings.php b/apps/files_external/templates/settings.php index 967c59debe6..b886c2e1b1b 100644 --- a/apps/files_external/templates/settings.php +++ b/apps/files_external/templates/settings.php @@ -1,4 +1,4 @@ -<form id="files_external" class="section"> +<form id="files_external" class="section" data-encryption-enabled="<?php echo $_['encryptionEnabled']?'true': 'false'; ?>"> <h2><?php p($l->t('External Storage')); ?></h2> <?php if (isset($_['dependencies']) and ($_['dependencies']<>'')) print_unescaped(''.$_['dependencies'].''); ?> <table id="externalStorage" class="grid" data-admin='<?php print_unescaped(json_encode($_['isAdminPage'])); ?>'> diff --git a/apps/files_external/tests/js/settingsSpec.js b/apps/files_external/tests/js/settingsSpec.js index f030965835a..7cb86d7270b 100644 --- a/apps/files_external/tests/js/settingsSpec.js +++ b/apps/files_external/tests/js/settingsSpec.js @@ -85,7 +85,7 @@ describe('OCA.External.Settings tests', function() { beforeEach(function() { var $el = $('#externalStorage'); - view = new OCA.External.Settings.MountConfigListView($el); + view = new OCA.External.Settings.MountConfigListView($el, {encryptionEnabled: false}); }); afterEach(function() { view = null; @@ -205,6 +205,17 @@ describe('OCA.External.Settings tests', function() { expect($td.find('.dropdown').length).toEqual(0); }); + it('doesnt show the encryption option when encryption is disabled', function () { + view._encryptionEnabled = false; + $td.find('img').click(); + + expect($td.find('.dropdown [name=encrypt]:visible').length).toEqual(0); + + $('body').mouseup(); + + expect($td.find('.dropdown').length).toEqual(0); + }); + it('reads config from mountOptions field', function() { $tr.find('input.mountOptions').val(JSON.stringify({previews:false})); @@ -226,6 +237,7 @@ describe('OCA.External.Settings tests', function() { $('body').mouseup(); expect(JSON.parse($tr.find('input.mountOptions').val())).toEqual({ + encrypt: true, previews: true, filesystem_check_changes: 2 }); diff --git a/lib/base.php b/lib/base.php index b441d5f1927..98da75b61a8 100644 --- a/lib/base.php +++ b/lib/base.php @@ -703,14 +703,18 @@ class OC { private static function registerEncryptionWrapper() { $enabled = self::$server->getEncryptionManager()->isEnabled(); if ($enabled) { - \OC\Files\Filesystem::addStorageWrapper('oc_encryption', function ($mountPoint, $storage) { - $parameters = array('storage' => $storage, 'mountPoint' => $mountPoint); - $manager = \OC::$server->getEncryptionManager(); - $util = new \OC\Encryption\Util(new \OC\Files\View(), \OC::$server->getUserManager()); - $user = \OC::$server->getUserSession()->getUser(); - $logger = \OC::$server->getLogger(); - $uid = $user ? $user->getUID() : null; - return new \OC\Files\Storage\Wrapper\Encryption($parameters, $manager,$util, $logger, $uid); + \OC\Files\Filesystem::addStorageWrapper('oc_encryption', function ($mountPoint, $storage, \OCP\Files\Mount\IMountPoint $mount) { + if($mount->getOption('encrypt', true)) { + $parameters = array('storage' => $storage, 'mountPoint' => $mountPoint); + $manager = \OC::$server->getEncryptionManager(); + $util = new \OC\Encryption\Util(new \OC\Files\View(), \OC::$server->getUserManager()); + $user = \OC::$server->getUserSession()->getUser(); + $logger = \OC::$server->getLogger(); + $uid = $user ? $user->getUID() : null; + return new \OC\Files\Storage\Wrapper\Encryption($parameters, $manager, $util, $logger, $uid); + } else { + return $storage; + } }); } |