From 518e91b0087058f2c9813da6a2427a56fc14e32c Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Fri, 11 Dec 2020 16:40:29 +0100 Subject: [PATCH] dont offer to edit external config settings if we can't edit them Signed-off-by: Robin Appelman --- apps/files_external/js/statusmanager.js | 7 ++++-- .../Controller/GlobalStoragesController.php | 12 ++++++++-- .../lib/Controller/StoragesController.php | 24 +++++++++++++++++-- .../UserGlobalStoragesController.php | 22 ++++++++++------- .../lib/Controller/UserStoragesController.php | 17 +++++++------ 5 files changed, 58 insertions(+), 24 deletions(-) diff --git a/apps/files_external/js/statusmanager.js b/apps/files_external/js/statusmanager.js index e8273dca0d..c394599181 100644 --- a/apps/files_external/js/statusmanager.js +++ b/apps/files_external/js/statusmanager.js @@ -94,7 +94,8 @@ OCA.Files_External.StatusManager = { id: mountData.id, error: statusMessage, userProvided: response.userProvided, - authMechanism: response.authMechanism + authMechanism: response.authMechanism, + canEdit: response.can_edit, }; } afterCallback(mountData, self.mountStatus[mountData.mount_point]); @@ -182,12 +183,14 @@ OCA.Files_External.StatusManager = { if (mountData.userProvided || mountData.authMechanism === 'password::global::user') { // personal mount whit credentials problems this.showCredentialsDialog(name, mountData); - } else { + } else if (mountData.canEdit) { OC.dialogs.confirm(t('files_external', 'There was an error with message: ') + mountData.error + '. Do you want to review mount point config in admin settings page?', t('files_external', 'External mount error'), function (e) { if (e === true) { OC.redirect(OC.generateUrl('/settings/admin/externalstorages')); } }); + } else { + OC.dialogs.info(t('files_external', 'There was an error with message: ') + mountData.error + '. Please contact your system administrator.', t('files_external', 'External mount error'), () => {}); } } else { OC.dialogs.confirm(t('files_external', 'There was an error with message: ') + mountData.error + '. Do you want to review mount point config in personal settings page?', t('files_external', 'External mount error'), function (e) { diff --git a/apps/files_external/lib/Controller/GlobalStoragesController.php b/apps/files_external/lib/Controller/GlobalStoragesController.php index 4d8b6c4bc8..7ce2c84b8a 100644 --- a/apps/files_external/lib/Controller/GlobalStoragesController.php +++ b/apps/files_external/lib/Controller/GlobalStoragesController.php @@ -32,9 +32,11 @@ use OCA\Files_External\NotFoundException; use OCA\Files_External\Service\GlobalStoragesService; use OCP\AppFramework\Http; use OCP\AppFramework\Http\DataResponse; +use OCP\IGroupManager; use OCP\IL10N; use OCP\ILogger; use OCP\IRequest; +use OCP\IUserSession; /** * Global storages controller @@ -48,20 +50,26 @@ class GlobalStoragesController extends StoragesController { * @param IL10N $l10n l10n service * @param GlobalStoragesService $globalStoragesService storage service * @param ILogger $logger + * @param IUserSession $userSession + * @param IGroupManager $groupManager */ public function __construct( $AppName, IRequest $request, IL10N $l10n, GlobalStoragesService $globalStoragesService, - ILogger $logger + ILogger $logger, + IUserSession $userSession, + IGroupManager $groupManager ) { parent::__construct( $AppName, $request, $l10n, $globalStoragesService, - $logger + $logger, + $userSession, + $groupManager ); } diff --git a/apps/files_external/lib/Controller/StoragesController.php b/apps/files_external/lib/Controller/StoragesController.php index 5d9ffedf88..d58d61e393 100644 --- a/apps/files_external/lib/Controller/StoragesController.php +++ b/apps/files_external/lib/Controller/StoragesController.php @@ -40,9 +40,11 @@ use OCP\AppFramework\Controller; use OCP\AppFramework\Http; use OCP\AppFramework\Http\DataResponse; use OCP\Files\StorageNotAvailableException; +use OCP\IGroupManager; use OCP\IL10N; use OCP\ILogger; use OCP\IRequest; +use OCP\IUserSession; /** * Base class for storages controllers @@ -68,6 +70,16 @@ abstract class StoragesController extends Controller { */ protected $logger; + /** + * @var IUserSession + */ + protected $userSession; + + /** + * @var IGroupManager + */ + protected $groupManager; + /** * Creates a new storages controller. * @@ -82,12 +94,16 @@ abstract class StoragesController extends Controller { IRequest $request, IL10N $l10n, StoragesService $storagesService, - ILogger $logger + ILogger $logger, + IUserSession $userSession, + IGroupManager $groupManager ) { parent::__construct($AppName, $request); $this->l10n = $l10n; $this->service = $storagesService; $this->logger = $logger; + $this->userSession = $userSession; + $this->groupManager = $groupManager; } /** @@ -337,8 +353,12 @@ abstract class StoragesController extends Controller { ); } + $data = $this->formatStorageForUI($storage)->jsonSerialize(); + $isAdmin = $this->groupManager->isAdmin($this->userSession->getUser()->getUID()); + $data['can_edit'] = $storage->getType() === StorageConfig::MOUNT_TYPE_PERSONAl || $isAdmin; + return new DataResponse( - $this->formatStorageForUI($storage), + $data, Http::STATUS_OK ); } diff --git a/apps/files_external/lib/Controller/UserGlobalStoragesController.php b/apps/files_external/lib/Controller/UserGlobalStoragesController.php index 1f7eb59570..f26b4dd67f 100644 --- a/apps/files_external/lib/Controller/UserGlobalStoragesController.php +++ b/apps/files_external/lib/Controller/UserGlobalStoragesController.php @@ -37,6 +37,7 @@ use OCA\Files_External\NotFoundException; use OCA\Files_External\Service\UserGlobalStoragesService; use OCP\AppFramework\Http; use OCP\AppFramework\Http\DataResponse; +use OCP\IGroupManager; use OCP\IL10N; use OCP\ILogger; use OCP\IRequest; @@ -46,11 +47,6 @@ use OCP\IUserSession; * User global storages controller */ class UserGlobalStoragesController extends StoragesController { - /** - * @var IUserSession - */ - private $userSession; - /** * Creates a new user global storages controller. * @@ -58,24 +54,28 @@ class UserGlobalStoragesController extends StoragesController { * @param IRequest $request request object * @param IL10N $l10n l10n service * @param UserGlobalStoragesService $userGlobalStoragesService storage service + * @param ILogger $logger * @param IUserSession $userSession + * @param IGroupManager $groupManager */ public function __construct( $AppName, IRequest $request, IL10N $l10n, UserGlobalStoragesService $userGlobalStoragesService, + ILogger $logger, IUserSession $userSession, - ILogger $logger + IGroupManager $groupManager ) { parent::__construct( $AppName, $request, $l10n, $userGlobalStoragesService, - $logger + $logger, + $userSession, + $groupManager ); - $this->userSession = $userSession; } /** @@ -133,8 +133,12 @@ class UserGlobalStoragesController extends StoragesController { $this->sanitizeStorage($storage); + $data = $this->formatStorageForUI($storage)->jsonSerialize(); + $isAdmin = $this->groupManager->isAdmin($this->userSession->getUser()->getUID()); + $data['can_edit'] = $storage->getType() === StorageConfig::MOUNT_TYPE_PERSONAl || $isAdmin; + return new DataResponse( - $this->formatStorageForUI($storage), + $data, Http::STATUS_OK ); } diff --git a/apps/files_external/lib/Controller/UserStoragesController.php b/apps/files_external/lib/Controller/UserStoragesController.php index c297d3db38..8686921c90 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\NotFoundException; use OCA\Files_External\Service\UserStoragesService; use OCP\AppFramework\Http; use OCP\AppFramework\Http\DataResponse; +use OCP\IGroupManager; use OCP\IL10N; use OCP\ILogger; use OCP\IRequest; @@ -44,11 +45,6 @@ use OCP\IUserSession; * User storages controller */ class UserStoragesController extends StoragesController { - /** - * @var IUserSession - */ - private $userSession; - /** * Creates a new user storages controller. * @@ -56,25 +52,28 @@ class UserStoragesController extends StoragesController { * @param IRequest $request request object * @param IL10N $l10n l10n service * @param UserStoragesService $userStoragesService storage service - * @param IUserSession $userSession * @param ILogger $logger + * @param IUserSession $userSession + * @param IGroupManager $groupManager */ public function __construct( $AppName, IRequest $request, IL10N $l10n, UserStoragesService $userStoragesService, + ILogger $logger, IUserSession $userSession, - ILogger $logger + IGroupManager $groupManager ) { parent::__construct( $AppName, $request, $l10n, $userStoragesService, - $logger + $logger, + $userSession, + $groupManager ); - $this->userSession = $userSession; } protected function manipulateStorageConfig(StorageConfig $storage) {