summaryrefslogtreecommitdiffstats
path: root/apps/twofactor_backupcodes
diff options
context:
space:
mode:
Diffstat (limited to 'apps/twofactor_backupcodes')
-rw-r--r--apps/twofactor_backupcodes/lib/BackgroundJob/RememberBackupCodesJob.php10
-rw-r--r--apps/twofactor_backupcodes/tests/Unit/BackgroundJob/RememberBackupCodesJobTest.php31
2 files changed, 39 insertions, 2 deletions
diff --git a/apps/twofactor_backupcodes/lib/BackgroundJob/RememberBackupCodesJob.php b/apps/twofactor_backupcodes/lib/BackgroundJob/RememberBackupCodesJob.php
index b04a8c3a29f..1a7f5aca3eb 100644
--- a/apps/twofactor_backupcodes/lib/BackgroundJob/RememberBackupCodesJob.php
+++ b/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;
diff --git a/apps/twofactor_backupcodes/tests/Unit/BackgroundJob/RememberBackupCodesJobTest.php b/apps/twofactor_backupcodes/tests/Unit/BackgroundJob/RememberBackupCodesJobTest.php
index 0e23e032bd8..fe68da8ebf5 100644
--- a/apps/twofactor_backupcodes/tests/Unit/BackgroundJob/RememberBackupCodesJobTest.php
+++ b/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())