%PDF- %PDF-
Direktori : /www/varak.net/nextcloud.varak.net/apps_old/apps/passwords/lib/Services/ |
Current File : //www/varak.net/nextcloud.varak.net/apps_old/apps/passwords/lib/Services/NotificationService.php |
<?php /* * @copyright 2023 Passwords App * * @author Marius David Wieschollek * @license AGPL-3.0 * * This file is part of the Passwords App * created by Marius David Wieschollek. */ namespace OCA\Passwords\Services; use Exception; use InvalidArgumentException; use OCA\Passwords\AppInfo\Application; use OCA\Passwords\Notification\AbstractNotification; use OCA\Passwords\Notification\BackupFailedNotification; use OCA\Passwords\Notification\BackupRestoredNotification; use OCA\Passwords\Notification\BadPasswordNotification; use OCA\Passwords\Notification\BesticonApiNotification; use OCA\Passwords\Notification\BreachedPasswordsUpdateFailedNotification; use OCA\Passwords\Notification\EmptyRequiredSettingNotification; use OCA\Passwords\Notification\ExportNotPossibleNotification; use OCA\Passwords\Notification\ImpersonationNotification; use OCA\Passwords\Notification\LoginAttemptNotification; use OCA\Passwords\Notification\NewClientNotification; use OCA\Passwords\Notification\ShareCreatedNotification; use OCA\Passwords\Notification\ShareLoopNotification; use OCA\Passwords\Notification\SurveyNotification; use OCA\Passwords\Notification\UpgradeRequiredNotification; use OCP\L10N\IFactory; use OCP\Notification\INotification; use OCP\Notification\INotifier; /** * Class NotificationService * * @package OCA\Passwords\Notification */ class NotificationService implements INotifier { /** * NotificationService constructor. * * @param IFactory $l10NFactory * @param UserSettingsService $settings * @param SurveyNotification $surveyNotification * @param ConfigurationService $configurationService * @param NewClientNotification $newClientNotification * @param ShareLoopNotification $shareLoopNotification * @param BadPasswordNotification $badPasswordNotification * @param BesticonApiNotification $besticonApiNotification * @param ShareCreatedNotification $shareCreatedNotification * @param LoginAttemptNotification $loginAttemptNotification * @param BackupFailedNotification $backupFailedNotification * @param ImpersonationNotification $impersonationNotification * @param BackupRestoredNotification $backupRestoredNotification * @param UpgradeRequiredNotification $upgradeRequiredNotification * @param EmptyRequiredSettingNotification $emptyRequiredSettingNotification * @param ExportNotPossibleNotification $exportNotPossibleNotification */ public function __construct( protected IFactory $l10NFactory, protected UserSettingsService $settings, protected SurveyNotification $surveyNotification, protected ConfigurationService $configurationService, protected NewClientNotification $newClientNotification, protected ShareLoopNotification $shareLoopNotification, protected BadPasswordNotification $badPasswordNotification, protected BesticonApiNotification $besticonApiNotification, protected ShareCreatedNotification $shareCreatedNotification, protected LoginAttemptNotification $loginAttemptNotification, protected BackupFailedNotification $backupFailedNotification, protected ImpersonationNotification $impersonationNotification, protected BackupRestoredNotification $backupRestoredNotification, protected UpgradeRequiredNotification $upgradeRequiredNotification, protected EmptyRequiredSettingNotification $emptyRequiredSettingNotification, protected ExportNotPossibleNotification $exportNotPossibleNotification, protected BreachedPasswordsUpdateFailedNotification $breachedPasswordsUpdateFailedNotification ) { } /** * Identifier of the notifier, only use [a-z0-9_] * * @return string * @since 17.0.0 */ public function getID(): string { return Application::APP_NAME; } /** * Human readable name describing the notifier * * @return string * @since 17.0.0 */ public function getName(): string { return $this->l10NFactory->get(Application::APP_NAME)->t('Passwords'); } /** * @param string $userId * @param int $passwordCount */ public function sendBadPasswordNotification(string $userId, int $passwordCount): void { $this->sendNotification( $this->badPasswordNotification, $userId, ['count' => $passwordCount] ); } /** * @param string $receiverId * @param array $owners */ public function sendShareCreatedNotification(string $receiverId, array $owners): void { $this->sendNotification( $this->shareCreatedNotification, $receiverId, ['owners' => $owners] ); } /** * @param string $userId * @param int $passwords */ public function sendShareLoopNotification(string $userId, int $passwords): void { $this->sendNotification( $this->shareLoopNotification, $userId, ['passwords' => $passwords] ); } /** * @param string $userId * @param string $impersonatorId */ public function sendImpersonationNotification(string $userId, string $impersonatorId): void { $this->sendNotification( $this->impersonationNotification, $userId, ['impersonator' => $impersonatorId] ); } /** * @param string $userId * @param string $client * @param bool $revoked */ public function sendLoginAttemptNotification(string $userId, string $client, $revoked = false): void { $this->sendNotification( $this->loginAttemptNotification, $userId, ['client' => $client, 'revoked' => $revoked] ); } /** * @param string $userId */ public function sendSurveyNotification(string $userId): void { $this->sendNotification( $this->surveyNotification, $userId, [] ); } /** * @param string $userId * @param string $setting */ public function sendEmptyRequiredSettingNotification(string $userId, string $setting): void { $this->sendNotification( $this->emptyRequiredSettingNotification, $userId, ['setting' => $setting] ); } /** * @param string $userId */ public function sendBesticonApiNotification(string $userId): void { $this->sendNotification( $this->besticonApiNotification, $userId, [] ); } /** * @param string $userId * @param int $ncVersion * @param int $phpVersion * @param string $appVersion * * @throws Exception */ public function sendUpgradeRequiredNotification(string $userId, int $ncVersion, int $phpVersion, string $appVersion): void { $date = date('Y-m'); if($this->configurationService->getUserValue('notification/eol', '0-0', $userId) !== $date) { $this->sendNotification( $this->upgradeRequiredNotification, $userId, ['ncVersion' => $ncVersion, 'phpVersion' => $phpVersion, 'appVersion' => $appVersion] ); $this->configurationService->setUserValue('notification/eol', $date, $userId); } } /** * @param string $userId * @param string $client */ public function sendNewClientNotification(string $userId, string $client): void { $this->sendNotification( $this->newClientNotification, $userId, ['client' => $client] ); } /** * @param string $userId * @param string $backup */ public function sendBackupRestoredNotification(string $userId, string $backup): void { $this->sendNotification( $this->backupRestoredNotification, $userId, ['backup' => $backup] ); } /** * @param string $userId * @param string $backup */ public function sendBackupFailedNotification(string $userId, string $backup): void { $this->sendNotification( $this->backupFailedNotification, $userId, ['backup' => $backup] ); } public function sendUserExportNotPossibleNotification(string $userId, string $reason) { $this->sendNotification( $this->exportNotPossibleNotification, $userId, ['reason' => $reason] ); } public function sendBreachedPasswordsUpdateFailedNotification(string $userId, string $reason) { $this->sendNotification( $this->breachedPasswordsUpdateFailedNotification, $userId, ['reason' => $reason] ); } /** * @param AbstractNotification $notification * @param string $userId * @param array $parameters */ protected function sendNotification(AbstractNotification $notification, string $userId, array $parameters): void { if($this->isNotificationEnabled($userId, $notification::TYPE)) { $notification->send($userId, $parameters); } } /** * @param INotification $notification * @param string $languageCode * * @return INotification * @throws Exception */ public function prepare(INotification $notification, string $languageCode): INotification { if($notification->getApp() !== Application::APP_NAME) throw new InvalidArgumentException(); $localisation = $this->l10NFactory->get(Application::APP_NAME, $languageCode); return match ($notification->getSubject()) { BreachedPasswordsUpdateFailedNotification::NAME => $this->breachedPasswordsUpdateFailedNotification->process($notification, $localisation), EmptyRequiredSettingNotification::NAME => $this->emptyRequiredSettingNotification->process($notification, $localisation), ExportNotPossibleNotification::NAME => $this->exportNotPossibleNotification->process($notification, $localisation), UpgradeRequiredNotification::NAME => $this->upgradeRequiredNotification->process($notification, $localisation), BackupRestoredNotification::NAME => $this->backupRestoredNotification->process($notification, $localisation), BackupFailedNotification::NAME => $this->backupFailedNotification->process($notification, $localisation), BadPasswordNotification::NAME => $this->badPasswordNotification->process($notification, $localisation), ShareCreatedNotification::NAME => $this->shareCreatedNotification->process($notification, $localisation), ImpersonationNotification::NAME => $this->impersonationNotification->process($notification, $localisation), BesticonApiNotification::NAME => $this->besticonApiNotification->process($notification, $localisation), LoginAttemptNotification::NAME => $this->loginAttemptNotification->process($notification, $localisation), NewClientNotification::NAME => $this->newClientNotification->process($notification, $localisation), ShareLoopNotification::NAME => $this->shareLoopNotification->process($notification, $localisation), SurveyNotification::NAME => $this->surveyNotification->process($notification, $localisation), default => $notification, }; } /** * @param string $userId * @param string $type * * @return bool */ protected function isNotificationEnabled(string $userId, string $type): bool { try { return $this->settings->get('user.notification.'.$type, $userId) === true; } catch(Exception $e) { return false; } } }