Browse Source

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>
pull/14553/head
Roeland Jago Douma 7 years ago
parent
commit
3d17ab0936
No known key found for this signature in database GPG Key ID: F941078878347C0C
  1. 10
      apps/twofactor_backupcodes/lib/BackgroundJob/RememberBackupCodesJob.php
  2. 31
      apps/twofactor_backupcodes/tests/Unit/BackgroundJob/RememberBackupCodesJobTest.php

10
apps/twofactor_backupcodes/lib/BackgroundJob/RememberBackupCodesJob.php

@ -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;

31
apps/twofactor_backupcodes/tests/Unit/BackgroundJob/RememberBackupCodesJobTest.php

@ -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…
Cancel
Save