From 1a7ed9ae81aed3e106367320ccc14db7309d41ef Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Mon, 9 Sep 2019 17:14:21 +0200 Subject: [PATCH] allow setting user provided global credentials trough credentials popup Signed-off-by: Robin Appelman --- apps/files_external/js/statusmanager.js | 5 +++-- .../lib/Controller/UserGlobalStoragesController.php | 3 ++- .../lib/Lib/Auth/Password/UserGlobalAuth.php | 11 ++++++++++- 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/apps/files_external/js/statusmanager.js b/apps/files_external/js/statusmanager.js index bd42319252..0c0c8b36c7 100644 --- a/apps/files_external/js/statusmanager.js +++ b/apps/files_external/js/statusmanager.js @@ -93,7 +93,8 @@ OCA.Files_External.StatusManager = { status: statusCode, id: mountData.id, error: statusMessage, - userProvided: response.userProvided + userProvided: response.userProvided, + authMechanism: response.authMechanism }; } afterCallback(mountData, self.mountStatus[mountData.mount_point]); @@ -178,7 +179,7 @@ OCA.Files_External.StatusManager = { if (allMountStatus.hasOwnProperty(name) && allMountStatus[name].status > 0 && allMountStatus[name].status < 7) { var mountData = allMountStatus[name]; if (mountData.type === "system") { - if (mountData.userProvided) { + if (mountData.userProvided || mountData.authMechanism === 'password::global::user') { // personal mount whit credentials problems this.showCredentialsDialog(name, mountData); } else { diff --git a/apps/files_external/lib/Controller/UserGlobalStoragesController.php b/apps/files_external/lib/Controller/UserGlobalStoragesController.php index 22c9c86785..55d079e9c6 100644 --- a/apps/files_external/lib/Controller/UserGlobalStoragesController.php +++ b/apps/files_external/lib/Controller/UserGlobalStoragesController.php @@ -27,6 +27,7 @@ namespace OCA\Files_External\Controller; use OCA\Files_External\Lib\Auth\AuthMechanism; use OCA\Files_External\Lib\Auth\IUserProvided; +use OCA\Files_External\Lib\Auth\Password\UserGlobalAuth; use OCA\Files_External\Lib\InsufficientDataForMeaningfulAnswerException; use OCP\ILogger; use \OCP\IRequest; @@ -156,7 +157,7 @@ class UserGlobalStoragesController extends StoragesController { try { $storage = $this->service->getStorage($id); $authMechanism = $storage->getAuthMechanism(); - if ($authMechanism instanceof IUserProvided) { + if ($authMechanism instanceof IUserProvided || $authMechanism instanceof UserGlobalAuth) { $authMechanism->saveBackendOptions($this->userSession->getUser(), $id, $backendOptions); $authMechanism->manipulateStorageConfig($storage, $this->userSession->getUser()); } else { diff --git a/apps/files_external/lib/Lib/Auth/Password/UserGlobalAuth.php b/apps/files_external/lib/Lib/Auth/Password/UserGlobalAuth.php index 6326830f02..8ea9ad0f78 100644 --- a/apps/files_external/lib/Lib/Auth/Password/UserGlobalAuth.php +++ b/apps/files_external/lib/Lib/Auth/Password/UserGlobalAuth.php @@ -44,11 +44,20 @@ class UserGlobalAuth extends AuthMechanism { $this ->setIdentifier('password::global::user') - ->setVisibility(BackendService::VISIBILITY_ADMIN) + ->setVisibility(BackendService::VISIBILITY_DEFAULT) ->setScheme(self::SCHEME_PASSWORD) ->setText($l->t('Global credentials, user entered')); } + public function saveBackendOptions(IUser $user, $id, $backendOptions) { + // make sure we're not setting any unexpected keys + $credentials = [ + 'user' => $backendOptions['user'], + 'password' => $backendOptions['password'], + ]; + $this->credentialsManager->store($user->getUID(), self::CREDENTIALS_IDENTIFIER, $credentials); + } + public function manipulateStorageConfig(StorageConfig &$storage, IUser $user = null) { if ($user === null) { throw new InsufficientDataForMeaningfulAnswerException('No credentials saved');