diff --git a/lib/Service/CredentialService.php b/lib/Service/CredentialService.php index 5b902b77..b631231a 100644 --- a/lib/Service/CredentialService.php +++ b/lib/Service/CredentialService.php @@ -32,6 +32,7 @@ use OCP\AppFramework\Db\DoesNotExistException; use OCP\AppFramework\Db\Entity; use OCP\AppFramework\Db\MultipleObjectsReturnedException; use OCP\IConfig; +use OCP\IURLGenerator; class CredentialService { @@ -45,6 +46,8 @@ class CredentialService { private ShareService $shareService, private EncryptService $encryptService, private CredentialRevisionService $credentialRevisionService, + private IURLGenerator $urlGenerator, + private VaultService $vaultService, IConfig $config, ) { $this->server_key = $config->getSystemValue('passwordsalt', ''); @@ -214,4 +217,14 @@ class CredentialService { $credential = $this->credentialMapper->getCredentialByGUID($credential_guid, $user_id); return $this->encryptService->decryptCredential($credential); } + + public function getDirectEditLink(Credential $credential): string { + $vaults = $this->vaultService->getById($credential->getVaultId(), $credential->getUserId()); + return $this->urlGenerator->getAbsoluteURL( + $this->urlGenerator->linkTo( + '', + 'index.php/apps/passman/#/vault/' . $vaults[0]->getGuid() . '/edit/' . $credential->getGuid() + ) + ); + } } diff --git a/lib/Service/CronService.php b/lib/Service/CronService.php index 6459950b..de39670d 100644 --- a/lib/Service/CronService.php +++ b/lib/Service/CronService.php @@ -24,6 +24,7 @@ namespace OCA\Passman\Service; use OCA\Passman\Activity; +use OCA\Passman\Db\Credential; use OCA\Passman\Utility\Utils; use OCP\DB\Exception; use Psr\Log\LoggerInterface; @@ -40,19 +41,19 @@ class CronService { } public function expireCredentials() { + /** @var Credential[] $expired_credentials */ $expired_credentials = $this->credentialService->getExpiredCredentials($this->utils->getTime()); foreach ($expired_credentials as $credential) { - $link = ''; // @TODO create direct link to credential - try { $this->logger->debug($credential->getLabel() . ' is expired, checking notifications!', ['app' => 'passman']); if (!$this->notificationService->hasCredentialExpirationNotification($credential)) { + $link = $this->credentialService->getDirectEditLink($credential); $this->logger->debug($credential->getLabel() . ' is expired, adding notification!', ['app' => 'passman']); $this->activityService->add( Activity::SUBJECT_ITEM_EXPIRED, [$credential->getLabel(), $credential->getUserId()], '', [], $link, $credential->getUserId(), Activity::TYPE_ITEM_EXPIRED); - $this->notificationService->credentialExpiredNotification($credential); + $this->notificationService->credentialExpiredNotification($credential, $link); } } catch (Exception $exception) { $this->logger->error('Error while creating a notification: ' . $exception->getMessage(), ['app' => 'passman']); diff --git a/lib/Service/NotificationService.php b/lib/Service/NotificationService.php index 80d0f265..2b6c1dfd 100644 --- a/lib/Service/NotificationService.php +++ b/lib/Service/NotificationService.php @@ -34,13 +34,10 @@ class NotificationService { private IManager $manager, private IURLGenerator $urlGenerator, private IDBConnection $db, - private VaultService $vaultService, ) { } - function credentialExpiredNotification($credential) { - $vaults = $this->vaultService->getById($credential->getVaultId(), $credential->getUserId()); - $link = $this->urlGenerator->getAbsoluteURL($this->urlGenerator->linkTo('', 'index.php/apps/passman/#/vault/' . $vaults[0]->getGuid() . '/edit/' . $credential->getGuid())); + function credentialExpiredNotification($credential, $link) { $api = $this->urlGenerator->getAbsoluteURL($this->urlGenerator->linkTo('', 'index.php/apps/passman')); $notification = $this->manager->createNotification(); $remindAction = $notification->createAction(); @@ -106,7 +103,7 @@ class NotificationService { $this->manager->notify($notification); } - function hasCredentialExpirationNotification($credential) { + function hasCredentialExpirationNotification($credential): bool { $qb = $this->db->getQueryBuilder(); $qb->select('*') ->from('notifications')