diff --git a/apps/files_external/js/settings.js b/apps/files_external/js/settings.js index f4829aba6465e..8117084de1e4f 100644 --- a/apps/files_external/js/settings.js +++ b/apps/files_external/js/settings.js @@ -659,6 +659,7 @@ MountConfigListView.prototype = _.extend({ } this._encryptionEnabled = options.encryptionEnabled; + this._canCreateLocal = options.canCreateLocal; // read the backend config that was carefully crammed // into the data-configurations attribute of the select @@ -825,10 +826,13 @@ MountConfigListView.prototype = _.extend({ $tr.addClass(backend.identifier); $tr.find('.backend').data('identifier', backend.identifier); - if (backend.invalid) { + if (backend.invalid || (backend.identifier === 'local' && !this._canCreateLocal)) { $tr.find('[name=mountPoint]').prop('disabled', true); $tr.find('.applicable,.mountOptionsToggle').empty(); - this.updateStatus($tr, false, 'Unknown backend: ' + backend.name); + $tr.find('.save').empty(); + if (backend.invalid) { + this.updateStatus($tr, false, 'Unknown backend: ' + backend.name); + } return $tr; } @@ -970,6 +974,7 @@ MountConfigListView.prototype = _.extend({ var storageConfig = new self._storageConfigClass(); _.extend(storageConfig, storageParams); var $tr = self.newStorage(storageConfig, onCompletion); + self.recheckStorageConfig($tr); }); onCompletion.resolve(); @@ -1313,9 +1318,11 @@ MountConfigListView.prototype = _.extend({ window.addEventListener('DOMContentLoaded', function() { var enabled = $('#files_external').attr('data-encryption-enabled'); + var canCreateLocal = $('#files_external').attr('data-can-create-local'); var encryptionEnabled = (enabled ==='true')? true: false; var mountConfigListView = new MountConfigListView($('#externalStorage'), { - encryptionEnabled: encryptionEnabled + encryptionEnabled: encryptionEnabled, + canCreateLocal: (canCreateLocal === 'true') ? true: false, }); mountConfigListView.loadStorages(); diff --git a/apps/files_external/lib/Controller/GlobalStoragesController.php b/apps/files_external/lib/Controller/GlobalStoragesController.php index 53173f88ee579..89939640acc8a 100644 --- a/apps/files_external/lib/Controller/GlobalStoragesController.php +++ b/apps/files_external/lib/Controller/GlobalStoragesController.php @@ -31,6 +31,7 @@ use OCA\Files_External\Service\GlobalStoragesService; use OCP\AppFramework\Http; use OCP\AppFramework\Http\DataResponse; +use OCP\IConfig; use OCP\IGroupManager; use OCP\IL10N; use OCP\ILogger; @@ -51,6 +52,7 @@ class GlobalStoragesController extends StoragesController { * @param ILogger $logger * @param IUserSession $userSession * @param IGroupManager $groupManager + * @param IConfig $config */ public function __construct( $AppName, @@ -59,7 +61,8 @@ public function __construct( GlobalStoragesService $globalStoragesService, ILogger $logger, IUserSession $userSession, - IGroupManager $groupManager + IGroupManager $groupManager, + IConfig $config ) { parent::__construct( $AppName, @@ -68,7 +71,8 @@ public function __construct( $globalStoragesService, $logger, $userSession, - $groupManager + $groupManager, + $config ); } @@ -96,6 +100,16 @@ public function create( $applicableGroups, $priority ) { + $canCreateNewLocalStorage = $this->config->getSystemValue('files_external_allow_create_new_local', true); + if (!$canCreateNewLocalStorage && $backend === 'local') { + return new DataResponse( + [ + 'message' => $this->l10n->t('Forbidden to manage local mounts') + ], + Http::STATUS_FORBIDDEN + ); + } + $newStorage = $this->createStorage( $mountPoint, $backend, diff --git a/apps/files_external/lib/Controller/StoragesController.php b/apps/files_external/lib/Controller/StoragesController.php index 47021bd7d1193..b82d2a4a4c71f 100644 --- a/apps/files_external/lib/Controller/StoragesController.php +++ b/apps/files_external/lib/Controller/StoragesController.php @@ -39,6 +39,7 @@ use OCP\AppFramework\Http; use OCP\AppFramework\Http\DataResponse; use OCP\Files\StorageNotAvailableException; +use OCP\IConfig; use OCP\IGroupManager; use OCP\IL10N; use OCP\ILogger; @@ -79,6 +80,11 @@ abstract class StoragesController extends Controller { */ protected $groupManager; + /** + * @var IConfig + */ + protected $config; + /** * Creates a new storages controller. * @@ -95,7 +101,8 @@ public function __construct( StoragesService $storagesService, ILogger $logger, IUserSession $userSession, - IGroupManager $groupManager + IGroupManager $groupManager, + IConfig $config ) { parent::__construct($AppName, $request); $this->l10n = $l10n; @@ -103,6 +110,7 @@ public function __construct( $this->logger = $logger; $this->userSession = $userSession; $this->groupManager = $groupManager; + $this->config = $config; } /** @@ -129,6 +137,16 @@ protected function createStorage( $applicableGroups = null, $priority = null ) { + $canCreateNewLocalStorage = $this->config->getSystemValue('files_external_allow_create_new_local', true); + if (!$canCreateNewLocalStorage && $backend === 'local') { + return new DataResponse( + [ + 'message' => $this->l10n->t('Forbidden to manage local mounts') + ], + Http::STATUS_FORBIDDEN + ); + } + try { return $this->service->createStorage( $mountPoint, diff --git a/apps/files_external/lib/Controller/UserGlobalStoragesController.php b/apps/files_external/lib/Controller/UserGlobalStoragesController.php index 02fd563df0fd8..74424bce006ca 100644 --- a/apps/files_external/lib/Controller/UserGlobalStoragesController.php +++ b/apps/files_external/lib/Controller/UserGlobalStoragesController.php @@ -36,6 +36,7 @@ use OCA\Files_External\Service\UserGlobalStoragesService; use OCP\AppFramework\Http; use OCP\AppFramework\Http\DataResponse; +use OCP\IConfig; use OCP\IGroupManager; use OCP\IL10N; use OCP\ILogger; @@ -64,7 +65,8 @@ public function __construct( UserGlobalStoragesService $userGlobalStoragesService, ILogger $logger, IUserSession $userSession, - IGroupManager $groupManager + IGroupManager $groupManager, + IConfig $config ) { parent::__construct( $AppName, @@ -73,7 +75,8 @@ public function __construct( $userGlobalStoragesService, $logger, $userSession, - $groupManager + $groupManager, + $config ); } diff --git a/apps/files_external/lib/Controller/UserStoragesController.php b/apps/files_external/lib/Controller/UserStoragesController.php index 4032ba1d96c89..c0a460fd8e316 100644 --- a/apps/files_external/lib/Controller/UserStoragesController.php +++ b/apps/files_external/lib/Controller/UserStoragesController.php @@ -35,6 +35,7 @@ use OCA\Files_External\Service\UserStoragesService; use OCP\AppFramework\Http; use OCP\AppFramework\Http\DataResponse; +use OCP\IConfig; use OCP\IGroupManager; use OCP\IL10N; use OCP\ILogger; @@ -63,7 +64,8 @@ public function __construct( UserStoragesService $userStoragesService, ILogger $logger, IUserSession $userSession, - IGroupManager $groupManager + IGroupManager $groupManager, + IConfig $config ) { parent::__construct( $AppName, @@ -72,7 +74,8 @@ public function __construct( $userStoragesService, $logger, $userSession, - $groupManager + $groupManager, + $config ); } @@ -127,6 +130,15 @@ public function create( $backendOptions, $mountOptions ) { + $canCreateNewLocalStorage = $this->config->getSystemValue('files_external_allow_create_new_local', true); + if (!$canCreateNewLocalStorage && $backend === 'local') { + return new DataResponse( + [ + 'message' => $this->l10n->t('Forbidden to manage local mounts') + ], + Http::STATUS_FORBIDDEN + ); + } $newStorage = $this->createStorage( $mountPoint, $backend, diff --git a/apps/files_external/templates/settings.php b/apps/files_external/templates/settings.php index f63cab07560fb..316467c5563ca 100644 --- a/apps/files_external/templates/settings.php +++ b/apps/files_external/templates/settings.php @@ -100,7 +100,10 @@ function writeParameterInput($parameter, $options, $classes = []) {