Skip to content

Commit

Permalink
feat: add reminder to set the API key
Browse files Browse the repository at this point in the history
My guess is a lot of people just install the app. This notification will remind them to actually get an API key.

Signed-off-by: Roeland Jago Douma <[email protected]>
  • Loading branch information
rullzer committed Nov 22, 2022
1 parent 92f58ff commit e8487d0
Show file tree
Hide file tree
Showing 3 changed files with 97 additions and 1 deletion.
3 changes: 2 additions & 1 deletion appinfo/info.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<name>Have I Been Pwned</name>
<summary>Check user accounts against haveibeenpwned</summary>
<description>For the users on your system that have an email set, check haveibeenpwned.com and notify them of new breaches.</description>
<version>0.0.4</version>
<version>0.1.0</version>
<licence>agpl</licence>
<author>Roeland Jago Douma</author>
<namespace>HIBP</namespace>
Expand All @@ -20,6 +20,7 @@

<background-jobs>
<job>OCA\HIBP\Backgroundjob\UserInjector</job>
<job>OCA\HIBP\Backgroundjob\KeyReminderJob</job>
</background-jobs>

<commands>
Expand Down
79 changes: 79 additions & 0 deletions lib/Backgroundjob/KeyReminderJob.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
<?php

declare(strict_types=1);

/**
* @copyright Copyright (c) 2022 Roeland Jago Douma <[email protected]>
*
* @author Roeland Jago Douma <[email protected]>
*
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/

namespace OCA\HIBP\Backgroundjob;

use OCA\HIBP\AppInfo\Application;
use OCA\HIBP\Service\HIBPService;
use OCP\AppFramework\Services\IAppConfig;
use OCP\AppFramework\Utility\ITimeFactory;
use OCP\BackgroundJob\IJob;
use OCP\BackgroundJob\TimedJob;
use OCP\IGroupManager;
use OCP\Notification\IManager;

class KeyReminderJob extends TimedJob {

private IAppConfig $appConfig;
private IManager $notificationManager;
private IGroupManager $groupManager;

public function __construct(ITimeFactory $timeFactory, IAppConfig $appConfig, IManager $notificationManager, IGroupManager $groupManager) {
parent::__construct($timeFactory);

// Run once a week
$this->setInterval(7 * 24 * 60 * 60);

// This job is not time sensitive run whenever
$this->timeSensitivity = IJob::TIME_INSENSITIVE;

$this->appConfig = $appConfig;
$this->notificationManager = $notificationManager;
$this->groupManager = $groupManager;
}

protected function run($argument) {
$apiKey = $this->appConfig->getAppValue('api-key');
if ($apiKey !== '') {
// All is right with the world. Carry on
return;
}


$notification = $this->notificationManager->createNotification();

$adminGroup = $this->groupManager->get('admin');
foreach ($adminGroup->getUsers() as $user) {
$notification->setApp(Application::APP_NAME)
->setUser($user->getUID())
->setDateTime(new \DateTime())
->setObject('key', 'missing')
->setSubject('key', []);

$this->notificationManager->notify($notification);
}
}
}
16 changes: 16 additions & 0 deletions lib/Notification/HIBPNotification.php
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,20 @@ private function parseBreach(INotification $notification, IL10N $l): INotificati
$notification->setLink('https://haveibeenpwned.com');

return $notification;
}

private function parseMissingKey(INotification $notification, IL10N $l): INotification {
$notification->setParsedSubject($l->t('Your HIBP API key is not set.'));
$notification->setRichSubject($l->t('Your HIBP API key is not set'));
$notification->setParsedMessage(
$l->t('Your HIBP API key is not set. Get your key at https://haveibeenpwned.com/API/Key and set it via "occ hibp:set-api-key".')
);
$notification->setRichMessage(
$l->t('Your HIBP API key is not set. Get your key at https://haveibeenpwned.com/API/Key and set it via "occ hibp:set-api-key".')
);
$notification->setLink('https://haveibeenpwned.com/API/Key');

return $notification;
}

public function prepare(INotification $notification, string $languageCode): INotification {
Expand All @@ -80,6 +93,9 @@ public function prepare(INotification $notification, string $languageCode): INot
if ($notification->getObjectType() === 'breach') {
return $this->parseBreach($notification, $l);
}
if ($notification->getObjectType() === 'key' && $notification->getObjectId() === 'missing') {
return $this->parseMissingKey($notification, $l);
}

throw new \InvalidArgumentException();
}
Expand Down

0 comments on commit e8487d0

Please sign in to comment.