diff options
author | brantje <brantje@gmail.com> | 2017-02-19 17:13:40 +0300 |
---|---|---|
committer | brantje <brantje@gmail.com> | 2017-02-22 20:02:55 +0300 |
commit | 514cb569fba1ee7333f49d8adc4b7be6b52497b4 (patch) | |
tree | 6ba17ac4c2393d4d0ef50bcfefa6816427dbb18a /controller | |
parent | ca4f6dfeaf033a9161294ccf6999b96decf69bcd (diff) |
Add feature to move vaults to other account
Diffstat (limited to 'controller')
-rw-r--r-- | controller/admincontroller.php | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/controller/admincontroller.php b/controller/admincontroller.php new file mode 100644 index 00000000..4830f040 --- /dev/null +++ b/controller/admincontroller.php @@ -0,0 +1,103 @@ +<?php +/** + * Nextcloud - passman + * + * This file is licensed under the Affero General Public License version 3 or + * later. See the COPYING file. + * + * @author Sander Brand <brantje@gmail.com> + * @copyright Sander Brand 2016 + */ + +namespace OCA\Passman\Controller; + +use OCA\Passman\Db\CredentialRevision; +use OCA\Passman\Service\CredentialRevisionService; +use OCA\Passman\Service\FileService; +use OCA\Passman\Service\VaultService; +use OCP\IConfig; +use OCP\IRequest; +use OCP\AppFramework\Http\JSONResponse; +use OCP\AppFramework\ApiController; +use OCA\Passman\Service\CredentialService; +use \OCP\App; + +class AdminController extends ApiController { + private $userId; + private $vaultService; + private $credentialService; + private $fileService; + private $revisionService; + private $config; + + public function __construct($AppName, + IRequest $request, + $UserId, + VaultService $vaultService, + CredentialService $credentialService, + FileService $fileService, + CredentialRevisionService $revisionService, + IConfig $config + ) { + parent::__construct( + $AppName, + $request, + 'GET, POST, DELETE, PUT, PATCH, OPTIONS', + 'Authorization, Content-Type, Accept', + 86400); + $this->userId = $UserId; + $this->vaultService = $vaultService; + $this->credentialService = $credentialService; + $this->fileService = $fileService; + $this->revisionService = $revisionService; + $this->config = $config; + } + + + public function searchUser($term){ + $um = \OC::$server->getUserManager(); + $results = array(); + $searchResult = $um->search($term); + foreach ($searchResult as $user){ + array_push($results, array( + "value" => $user->getUID(), + "label" => $user->getDisplayName() . ' ('. $user->getBackendClassName() .')', + )); + } + return new JSONResponse($results); + } + + 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); + } + + $c = $credential->jsonSerialize(); + $c['user_id'] = $destination_account; + $this->credentialService->updateCredential($c, true); + } + $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); + } + return new JSONResponse(array('success'=> true)); + } +}
\ No newline at end of file |