diff options
author | binsky <timo@binsky.org> | 2021-04-03 14:21:34 +0300 |
---|---|---|
committer | binsky <timo@binsky.org> | 2021-04-03 14:35:39 +0300 |
commit | 11d774405be2af4d4dcfa3a5d84c04b8968e221c (patch) | |
tree | 459216199b4b3fb25b6b62546ec894ec831459c9 | |
parent | 1e15710bdb6ff654409b8e9f2a26e556f4c292b1 (diff) |
catch error for using the same source and destination account in the credential mover
-rw-r--r-- | controller/admincontroller.php | 59 | ||||
-rw-r--r-- | js/settings-admin.js | 13 | ||||
-rw-r--r-- | templates/admin.php | 3 |
3 files changed, 43 insertions, 32 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); } + $vault->setUserId($destination_account); + $this->vaultService->updateVault($vault); + } - $c = $credential->jsonSerialize(); - $c['user_id'] = $destination_account; - $c['icon'] = json_encode($c['icon']); - $this->credentialService->updateCredential($c, true); + $files = $this->fileService->getFilesFromUser($source_account); + foreach ($files as $file) { + $file->setUserId($destination_account); + $this->fileService->updateFile($file); } - $vault->setUserId($destination_account); - $this->vaultService->updateVault($vault); + $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('<i class="fa fa-spinner fa-spin"></i> ' + 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'); </tr> </table> <button class="success" id="move_credentials">Move</button> - <span id="moveStatus" style="display: none;"><?php p($l->t('Credentials moved!')); ?></span> + <span id="moveStatusSucceeded" style="display: none;"><?php p($l->t('Credentials moved!')); ?></span> + <span id="moveStatusFailed" style="display: none;"><?php p($l->t('An error occurred!')); ?></span> </div> <div id="tabs-3"> |