Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/passman.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbinsky <timo@binsky.org>2021-10-22 10:51:23 +0300
committerbinsky <timo@binsky.org>2021-10-22 10:51:23 +0300
commitcef5bce47b59d42768018298d3069ea63a579a19 (patch)
tree830dcd1f4c5282d5806290e3a76feacd56c97c64
parentaa0a586cb44aa985594d3516f689b6bf5ca5c864 (diff)
delete credentials before vault is deleted from backend
-rw-r--r--controller/credentialcontroller.php33
-rw-r--r--controller/vaultcontroller.php60
-rw-r--r--lib/Service/CredentialService.php32
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