diff options
author | binsky <timo@binsky.org> | 2021-10-22 10:51:23 +0300 |
---|---|---|
committer | binsky <timo@binsky.org> | 2021-10-22 10:51:23 +0300 |
commit | cef5bce47b59d42768018298d3069ea63a579a19 (patch) | |
tree | 830dcd1f4c5282d5806290e3a76feacd56c97c64 | |
parent | aa0a586cb44aa985594d3516f689b6bf5ca5c864 (diff) |
delete credentials before vault is deleted from backend
-rw-r--r-- | controller/credentialcontroller.php | 33 | ||||
-rw-r--r-- | controller/vaultcontroller.php | 60 | ||||
-rw-r--r-- | lib/Service/CredentialService.php | 32 |
3 files changed, 84 insertions, 41 deletions
diff --git a/controller/credentialcontroller.php b/controller/credentialcontroller.php index 4984df6c..d7b4dc91 100644 --- a/controller/credentialcontroller.php +++ b/controller/credentialcontroller.php @@ -37,12 +37,12 @@ class CredentialController extends ApiController { public function __construct($AppName, IRequest $request, - $userId, - CredentialService $credentialService, - ActivityService $activityService, - CredentialRevisionService $credentialRevisionService, - ShareService $sharingService, - SettingsService $settings + $userId, + CredentialService $credentialService, + ActivityService $activityService, + CredentialRevisionService $credentialRevisionService, + ShareService $sharingService, + SettingsService $settings ) { parent::__construct( @@ -275,7 +275,7 @@ class CredentialController extends ApiController { if ($credential instanceof Credential) { $result = $this->credentialService->deleteCredential($credential); //print_r($credential); - $this->deleteCredentialParts($credential); + $this->credentialService->deleteCredentialParts($credential, $this->userId); } else { $result = false; } @@ -283,25 +283,6 @@ class CredentialController extends ApiController { } /** - * Delete leftovers from a credential - * @param Credential $credential - * @throws \Exception - */ - private function deleteCredentialParts(Credential $credential) { - $this->activityService->add( - 'item_destroyed_self', array($credential->getLabel()), - '', array(), - '', $this->userId, Activity::TYPE_ITEM_ACTION); - $this->sharingService->unshareCredential($credential->getGuid()); - foreach ($this->credentialRevisionService->getRevisions($credential->getId()) as $revision) { - $id = $revision['revision_id']; - if (isset($id)) { - $this->credentialRevisionService->deleteRevision($id, $this->userId); - } - } - } - - /** * @NoAdminRequired * @NoCSRFRequired * @throws \Exception diff --git a/controller/vaultcontroller.php b/controller/vaultcontroller.php index 357608eb..c9499786 100644 --- a/controller/vaultcontroller.php +++ b/controller/vaultcontroller.php @@ -11,16 +11,17 @@ namespace OCA\Passman\Controller; +use OCA\Passman\Db\Credential; +use OCA\Passman\Service\CredentialService; use OCA\Passman\Service\DeleteVaultRequestService; -use OCA\Passman\Service\EncryptService; +use OCA\Passman\Service\FileService; use OCA\Passman\Service\SettingsService; +use OCA\Passman\Service\VaultService; use OCA\Passman\Utility\NotFoundJSONResponse; +use OCP\AppFramework\ApiController; use OCP\AppFramework\Db\DoesNotExistException; -use OCP\IRequest; use OCP\AppFramework\Http\JSONResponse; -use OCP\AppFramework\ApiController; -use OCA\Passman\Service\VaultService; -use OCA\Passman\Service\CredentialService; +use OCP\IRequest; class VaultController extends ApiController { @@ -28,15 +29,17 @@ class VaultController extends ApiController { private $vaultService; private $credentialService; private $settings; + private $fileService; private $deleteVaultRequestService; public function __construct($AppName, - IRequest $request, - $UserId, - VaultService $vaultService, - CredentialService $credentialService, - DeleteVaultRequestService $deleteVaultRequestService, - SettingsService $settings) { + IRequest $request, + $UserId, + VaultService $vaultService, + CredentialService $credentialService, + DeleteVaultRequestService $deleteVaultRequestService, + SettingsService $settings, + FileService $fileService) { parent::__construct( $AppName, $request, @@ -48,6 +51,7 @@ class VaultController extends ApiController { $this->credentialService = $credentialService; $this->deleteVaultRequestService = $deleteVaultRequestService; $this->settings = $settings; + $this->fileService = $fileService; } /** @@ -63,7 +67,7 @@ class VaultController extends ApiController { foreach ($vaults as $vault) { $credential = $this->credentialService->getRandomCredentialByVaultId($vault->getId(), $this->userId); $secret_field = $protected_credential_fields[array_rand($protected_credential_fields)]; - if(isset($credential)) { + if (isset($credential)) { array_push($result, array( 'vault_id' => $vault->getId(), 'guid' => $vault->getGuid(), @@ -164,8 +168,36 @@ class VaultController extends ApiController { * @NoAdminRequired * @NoCSRFRequired */ - public function delete($vault_guid) { + public function delete($vault_guid, $credential_guids, $file_ids) { + try { + $this->vaultService->getByGuid($vault_guid, $this->userId); + } catch (\Exception $e) { + return new NotFoundJSONResponse(); + } + + if ($credential_guids != null && !empty($credential_guids)) { + foreach ($credential_guids as $credential_guid) { + try { + $credential = $this->credentialService->getCredentialByGUID($credential_guid, $this->userId); + } catch (\Exception $e) { + continue; + } + if ($credential instanceof Credential) { + $this->credentialService->deleteCredential($credential); + $this->credentialService->deleteCredentialParts($credential, $this->userId); + } + } + } + if ($file_ids != null && !empty($file_ids)) { + foreach ($file_ids as $file_id) { + try { + $this->fileService->deleteFile($file_id, $this->userId); + } catch (\Exception $e) { + continue; + } + } + } $this->vaultService->deleteVault($vault_guid, $this->userId); return new JSONResponse(array('ok' => true)); } -}
\ No newline at end of file +} diff --git a/lib/Service/CredentialService.php b/lib/Service/CredentialService.php index 69fcc973..1679dfda 100644 --- a/lib/Service/CredentialService.php +++ b/lib/Service/CredentialService.php @@ -23,6 +23,7 @@ namespace OCA\Passman\Service; +use OCA\Passman\Activity; use OCA\Passman\Db\Credential; use OCA\Passman\Db\CredentialMapper; use OCA\Passman\Db\SharingACL; @@ -37,15 +38,25 @@ class CredentialService { private CredentialMapper $credentialMapper; private SharingACLMapper $sharingACL; + private ActivityService $activityService; private ShareService $shareService; private EncryptService $encryptService; + private CredentialRevisionService $credentialRevisionService; private $server_key; - public function __construct(CredentialMapper $credentialMapper, SharingACLMapper $sharingACL, ShareService $shareService, EncryptService $encryptService, IConfig $config) { + public function __construct(CredentialMapper $credentialMapper, + SharingACLMapper $sharingACL, + ActivityService $activityService, + ShareService $shareService, + EncryptService $encryptService, + CredentialRevisionService $credentialRevisionService, + IConfig $config) { $this->credentialMapper = $credentialMapper; $this->sharingACL = $sharingACL; + $this->activityService = $activityService; $this->shareService = $shareService; $this->encryptService = $encryptService; + $this->credentialRevisionService = $credentialRevisionService; $this->server_key = $config->getSystemValue('passwordsalt', ''); } @@ -100,6 +111,25 @@ class CredentialService { } /** + * Delete leftovers from a credential + * @param Credential $credential + * @throws \Exception + */ + public function deleteCredentialParts(Credential $credential, $userId) { + $this->activityService->add( + 'item_destroyed_self', array($credential->getLabel()), + '', array(), + '', $userId, Activity::TYPE_ITEM_ACTION); + $this->shareService->unshareCredential($credential->getGuid()); + foreach ($this->credentialRevisionService->getRevisions($credential->getId()) as $revision) { + $id = $revision['revision_id']; + if (isset($id)) { + $this->credentialRevisionService->deleteRevision($id, $userId); + } + } + } + + /** * Get credentials by vault id * * @param int $vault_id |