Completed
Push — master ( 8743fe...6080d9 )
by Morris
33:24 queued 19:49
created

RememberBackupCodesJob::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 13

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
nc 1
nop 5
dl 0
loc 13
rs 9.8333
c 0
b 0
f 0
1
<?php
2
declare(strict_types=1);
3
/**
4
 * @copyright Copyright (c) 2018, Roeland Jago Douma <[email protected]>
5
 *
6
 * @author Roeland Jago Douma <[email protected]>
7
 *
8
 * @license GNU AGPL version 3 or any later version
9
 *
10
 * This program is free software: you can redistribute it and/or modify
11
 * it under the terms of the GNU Affero General Public License as
12
 * published by the Free Software Foundation, either version 3 of the
13
 * License, or (at your option) any later version.
14
 *
15
 * This program is distributed in the hope that it will be useful,
16
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18
 * GNU Affero General Public License for more details.
19
 *
20
 * You should have received a copy of the GNU Affero General Public License
21
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
22
 *
23
 */
24
25
namespace OCA\TwoFactorBackupCodes\BackgroundJob;
26
27
use OC\BackgroundJob\TimedJob;
28
use OCP\AppFramework\Utility\ITimeFactory;
29
use OCP\Authentication\TwoFactorAuth\IRegistry;
30
use OCP\BackgroundJob\IJobList;
31
use OCP\IUserManager;
32
use OCP\Notification\IManager;
33
34
class RememberBackupCodesJob extends TimedJob {
35
36
	/** @var IRegistry */
37
	private $registry;
38
39
	/** @var IUserManager */
40
	private $userManager;
41
42
	/** @var ITimeFactory */
43
	private $time;
44
45
	/** @var IManager */
46
	private $notificationManager;
47
48
	/** @var IJobList */
49
	private $jobList;
50
51
	public function __construct(IRegistry $registry,
52
								IUserManager $userManager,
53
								ITimeFactory $timeFactory,
54
								IManager $notificationManager,
55
								IJobList $jobList) {
56
		$this->registry = $registry;
57
		$this->userManager = $userManager;
58
		$this->time = $timeFactory;
59
		$this->notificationManager = $notificationManager;
60
		$this->jobList = $jobList;
61
62
		$this->setInterval(60*60*24*14);
63
	}
64
65
	protected function run($argument) {
66
		$uid = $argument['uid'];
67
		$user = $this->userManager->get($uid);
68
69
		if ($user === null) {
70
			// We can't run with an invalid user
71
			return;
72
		}
73
74
		$providers = $this->registry->getProviderStates($user);
75
		if (isset($providers['backup_codes']) && $providers['backup_codes'] === true) {
76
			// Backup codes already generated lets remove this job
77
			$this->jobList->remove(self::class, $argument);
78
			return;
79
		}
80
81
		$date = new \DateTime();
82
		$date->setTimestamp($this->time->getTime());
83
84
		$notification = $this->notificationManager->createNotification();
85
		$notification->setApp('twofactor_backupcodes')
86
			->setUser($user->getUID())
87
			->setDateTime($date)
88
			->setObject('create', 'codes')
89
			->setSubject('create_backupcodes');
90
		$this->notificationManager->notify($notification);
91
	}
92
}
93