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
No known key found for this signature in database
GPG Key ID: F941078878347C0C
2 changed files with
39 additions and
2 deletions
apps/twofactor_backupcodes/lib/BackgroundJob/RememberBackupCodesJob.php
apps/twofactor_backupcodes/tests/Unit/BackgroundJob/RememberBackupCodesJobTest.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 ;
@ -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 ())