move credential edit link generation into CredentialService

This commit is contained in:
binsky 2024-04-05 03:24:14 +02:00
parent 2fc9844ac7
commit 594583bd00
No known key found for this signature in database
GPG key ID: B438F7FA2E3AC98F
3 changed files with 19 additions and 8 deletions

View file

@ -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()
)
);
}
}

View file

@ -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']);

View file

@ -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')