. * */ namespace OCA\Passman\Service; use OCP\IURLGenerator; use OCP\Notification\IManager; class NotificationService { private IManager $manager; private IURLGenerator $urlGenerator; public function __construct(IManager $IManager, IURLGenerator $urlGenerator) { $this->manager = $IManager; $this->urlGenerator = $urlGenerator; } function credentialExpiredNotification($credential) { $link = $this->urlGenerator->getAbsoluteURL($this->urlGenerator->linkTo('', 'index.php/apps/passman/#/vault/' . $credential->getVaultId() . '/edit/' . $credential->getId())); $api = $this->urlGenerator->getAbsoluteURL($this->urlGenerator->linkTo('', 'index.php/apps/passman')); $notification = $this->manager->createNotification(); $remindAction = $notification->createAction(); $remindAction->setLabel('remind') ->setLink($api . '/api/internal/notifications/remind/' . $credential->getId(), 'POST'); $declineAction = $notification->createAction(); $declineAction->setLabel('ignore') ->setLink($api . '/api/internal/notifications/read/' . $credential->getId(), 'DELETE'); $notification->setApp('passman') ->setUser($credential->getUserId()) ->setDateTime(new \DateTime()) ->setObject('credential', $credential->getId()) // Set notification type and id ->setSubject('credential_expired', [$credential->getLabel()]) // set subject and parameters ->setLink($link) ->addAction($declineAction) ->addAction($remindAction); $this->manager->notify($notification); } function credentialSharedNotification($data) { $link = $this->urlGenerator->getAbsoluteURL($this->urlGenerator->linkTo('', 'index.php/apps/passman/#/')); $api = $this->urlGenerator->getAbsoluteURL($this->urlGenerator->linkTo('', 'index.php/apps/passman')); $notification = $this->manager->createNotification(); $declineAction = $notification->createAction(); $declineAction->setLabel('decline') ->setLink($api . '/api/v2/sharing/decline/' . $data['req_id'], 'DELETE'); $notification->setApp('passman') ->setUser($data['target_user']) ->setDateTime(new \DateTime()) ->setObject('passman_share_request', $data['req_id']) // type and id ->setSubject('credential_shared', [$data['from_user'], $data['credential_label']]) // subject and parameters ->setLink($link) ->addAction($declineAction); $this->manager->notify($notification); } function credentialDeclinedSharedNotification($data) { $notification = $this->manager->createNotification(); $notification->setApp('passman') ->setUser($data['target_user']) ->setDateTime(new \DateTime()) ->setObject('passman_share_request', $data['req_id']) // type and id ->setSubject('credential_share_denied', [$data['from_user'], $data['credential_label']]); // subject and parameters $this->manager->notify($notification); } function credentialAcceptedSharedNotification($data) { $notification = $this->manager->createNotification(); $notification->setApp('passman') ->setUser($data['target_user']) ->setDateTime(new \DateTime()) ->setObject('passman_share_request', $data['req_id']) // type and id ->setSubject('credential_share_accepted', [$data['from_user'], $data['credential_label']]); // subject and parameters $this->manager->notify($notification); } }