From 11d774405be2af4d4dcfa3a5d84c04b8968e221c Mon Sep 17 00:00:00 2001 From: binsky Date: Sat, 3 Apr 2021 13:21:34 +0200 Subject: [PATCH] catch error for using the same source and destination account in the credential mover --- controller/admincontroller.php | 61 ++++++++++++++++++---------------- js/settings-admin.js | 13 +++++--- templates/admin.php | 3 +- 3 files changed, 44 insertions(+), 33 deletions(-) diff --git a/controller/admincontroller.php b/controller/admincontroller.php index 8545b185..5d072f1b 100644 --- a/controller/admincontroller.php +++ b/controller/admincontroller.php @@ -79,38 +79,43 @@ class AdminController extends ApiController { } public function moveCredentials($source_account, $destination_account) { - $vaults = $this->vaultService->getByUser($source_account); - foreach ($vaults as $vault) { - $credentials = $this->credentialService->getCredentialsByVaultId($vault->getId(), $source_account); - foreach ($credentials as $credential) { - $revisions = $this->revisionService->getRevisions($credential->getId()); - foreach ($revisions as $revision) { - $r = new CredentialRevision(); - $r->setId($revision['revision_id']); - $r->setGuid($revision['guid']); - $r->setCredentialId($credential->getId()); - $r->setUserId($destination_account); - $r->setCreated($revision['created']); - $r->setCredentialData(base64_encode(json_encode($revision['credential_data']))); - $r->setEditedBy($revision['edited_by']); - $this->revisionService->updateRevision($r); + $succeed = false; + if ($source_account != $destination_account){ + $vaults = $this->vaultService->getByUser($source_account); + foreach ($vaults as $vault) { + $credentials = $this->credentialService->getCredentialsByVaultId($vault->getId(), $source_account); + foreach ($credentials as $credential) { + $revisions = $this->revisionService->getRevisions($credential->getId()); + foreach ($revisions as $revision) { + $r = new CredentialRevision(); + $r->setId($revision['revision_id']); + $r->setGuid($revision['guid']); + $r->setCredentialId($credential->getId()); + $r->setUserId($destination_account); + $r->setCreated($revision['created']); + $r->setCredentialData(base64_encode(json_encode($revision['credential_data']))); + $r->setEditedBy($revision['edited_by']); + $this->revisionService->updateRevision($r); + } + + $c = $credential->jsonSerialize(); + $c['user_id'] = $destination_account; + $c['icon'] = json_encode($c['icon']); + $this->credentialService->updateCredential($c, true); } - - $c = $credential->jsonSerialize(); - $c['user_id'] = $destination_account; - $c['icon'] = json_encode($c['icon']); - $this->credentialService->updateCredential($c, true); + $vault->setUserId($destination_account); + $this->vaultService->updateVault($vault); } - $vault->setUserId($destination_account); - $this->vaultService->updateVault($vault); + + $files = $this->fileService->getFilesFromUser($source_account); + foreach ($files as $file) { + $file->setUserId($destination_account); + $this->fileService->updateFile($file); + } + $succeed = true; } - $files = $this->fileService->getFilesFromUser($source_account); - foreach ($files as $file) { - $file->setUserId($destination_account); - $this->fileService->updateFile($file); - } - return new JSONResponse(array('success' => true)); + return new JSONResponse(array('success' => $succeed)); } public function listRequests(){ diff --git a/js/settings-admin.js b/js/settings-admin.js index 50146b07..c9d4f32b 100644 --- a/js/settings-admin.js +++ b/js/settings-admin.js @@ -174,12 +174,17 @@ $(document).ready(function () { $(self).html(' ' + OC.L10N.translate('passman', 'Moving') + '...'); if (accountMover.source_account && accountMover.destination_account) { $.post(OC.generateUrl('apps/passman/admin/move'), accountMover, function (data) { + $(self).removeAttr('disabled'); + $(self).html('Move'); if (data.success) { - $(self).removeAttr('disabled'); - $(self).html('Move'); - $('#moveStatus').fadeIn(); + $('#moveStatusSucceeded').fadeIn(); setTimeout(function () { - $('#moveStatus').fadeOut(); + $('#moveStatusSucceeded').fadeOut(); + }, 3500); + } else { + $('#moveStatusFailed').fadeIn(); + setTimeout(function () { + $('#moveStatusFailed').fadeOut(); }, 3500); } }); diff --git a/templates/admin.php b/templates/admin.php index 84918eab..71b38e9d 100644 --- a/templates/admin.php +++ b/templates/admin.php @@ -131,7 +131,8 @@ style('passman', 'vendor/font-awesome/font-awesome.min'); - + +