Do not send notification if no active 2fa
If the job is still present we should also not fire it off if there is not a single active 2FA provider. Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
This commit is contained in:
parent
1c29a01956
commit
3d17ab0936
2 changed files with 39 additions and 2 deletions
|
@ -70,7 +70,15 @@ class RememberBackupCodesJob extends TimedJob {
|
|||
}
|
||||
|
||||
$providers = $this->registry->getProviderStates($user);
|
||||
if (isset($providers['backup_codes']) && $providers['backup_codes'] === true) {
|
||||
$state2fa = array_reduce($providers, function(bool $carry, bool $state) {
|
||||
return $carry || $state;
|
||||
}, false);
|
||||
|
||||
/*
|
||||
* If no provider is active or if the backup codes are already generate
|
||||
* we can remove the job
|
||||
*/
|
||||
if ($state2fa === false || (isset($providers['backup_codes']) && $providers['backup_codes'] === true)) {
|
||||
// Backup codes already generated lets remove this job
|
||||
$this->jobList->remove(self::class, $argument);
|
||||
return;
|
||||
|
|
|
@ -114,6 +114,34 @@ class RememberBackupCodesJobTest extends TestCase {
|
|||
$this->invokePrivate($this->job, 'run', [['uid' => 'validUID']]);
|
||||
}
|
||||
|
||||
public function testNoActiveProvider() {
|
||||
$user = $this->createMock(IUser::class);
|
||||
$user->method('getUID')
|
||||
->willReturn('validUID');
|
||||
$this->userManager->method('get')
|
||||
->with('validUID')
|
||||
->willReturn($user);
|
||||
|
||||
$this->registry->method('getProviderStates')
|
||||
->with($user)
|
||||
->willReturn([
|
||||
'backup_codes' => false,
|
||||
'foo' => false,
|
||||
]);
|
||||
|
||||
$this->jobList->expects($this->once())
|
||||
->method('remove')
|
||||
->with(
|
||||
RememberBackupCodesJob::class,
|
||||
['uid' => 'validUID']
|
||||
);
|
||||
|
||||
$this->notificationManager->expects($this->never())
|
||||
->method($this->anything());
|
||||
|
||||
$this->invokePrivate($this->job, 'run', [['uid' => 'validUID']]);
|
||||
}
|
||||
|
||||
public function testNotificationSend() {
|
||||
$user = $this->createMock(IUser::class);
|
||||
$user->method('getUID')
|
||||
|
@ -125,7 +153,8 @@ class RememberBackupCodesJobTest extends TestCase {
|
|||
$this->registry->method('getProviderStates')
|
||||
->with($user)
|
||||
->willReturn([
|
||||
'backup_codes' => false
|
||||
'backup_codes' => false,
|
||||
'foo' => true,
|
||||
]);
|
||||
|
||||
$this->jobList->expects($this->never())
|
||||
|
|
Loading…
Reference in a new issue