Skip to content

Commit 339812f

Browse files
committed
fix: Handle 2fa enforcement earlier
Signed-off-by: Joas Schilling <coding@schilljs.com>
1 parent cf66d77 commit 339812f

2 files changed

Lines changed: 6 additions & 7 deletions

File tree

lib/private/User/Session.php

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -403,10 +403,8 @@ public function logClientIn($user,
403403
return false;
404404
}
405405

406-
if (!$isTokenPassword && $this->isTokenAuthEnforced()) {
407-
throw new PasswordLoginForbiddenException();
408-
}
409-
if (!$isTokenPassword && $this->isTwoFactorEnforced($user)) {
406+
if (!$isTokenPassword && ($this->isTokenAuthEnforced() || $this->isTwoFactorEnforced($user))) {
407+
$this->handleLoginFailed($throttler, $currentDelay, $remoteAddress, $user, $password);
410408
throw new PasswordLoginForbiddenException();
411409
}
412410

@@ -587,7 +585,8 @@ public function tryBasicAuthLogin(IRequest $request,
587585
// If credentials were provided, they need to be valid, otherwise we do boom
588586
throw new LoginException();
589587
} catch (PasswordLoginForbiddenException $ex) {
590-
// Nothing to do
588+
// If credentials were provided, they need to be valid, otherwise we do boom
589+
throw new LoginException(previous: $ex);
591590
}
592591
}
593592
return false;

tests/lib/User/SessionTest.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -439,7 +439,7 @@ public function testLogClientInNoTokenPasswordWith2fa(): void {
439439
->method('getRemoteAddress')
440440
->willReturn('192.168.0.1');
441441
$this->throttler
442-
->expects($this->once())
442+
->expects($this->exactly(2))
443443
->method('sleepDelayOrThrowOnMax')
444444
->with('192.168.0.1');
445445
$this->throttler
@@ -551,7 +551,7 @@ public function testLogClientInNoTokenPasswordNo2fa(): void {
551551
->method('getRemoteAddress')
552552
->willReturn('192.168.0.1');
553553
$this->throttler
554-
->expects($this->once())
554+
->expects($this->exactly(2))
555555
->method('sleepDelayOrThrowOnMax')
556556
->with('192.168.0.1');
557557
$this->throttler

0 commit comments

Comments
 (0)