diff options
author | Julius Härtl <jus@bitgrid.net> | 2023-11-30 11:46:54 +0100 |
---|---|---|
committer | Julius Härtl <jus@bitgrid.net> | 2023-11-30 20:51:47 +0100 |
commit | a3a343ce413d0f86f70d5b47ab28e40d6dd763aa (patch) | |
tree | 63ad16254ae521bc10d90c5cf7573ce48b5f4c38 | |
parent | e0d1e7cbf8033ec9bd1925b0e60fda5ec9eb1fe8 (diff) | |
download | nextcloud-server-a3a343ce413d0f86f70d5b47ab28e40d6dd763aa.tar.gz nextcloud-server-a3a343ce413d0f86f70d5b47ab28e40d6dd763aa.zip |
perf: Use more performant way to obtain and check the email as a login name with token login
Signed-off-by: Julius Härtl <jus@bitgrid.net>
-rw-r--r-- | lib/private/User/Session.php | 13 | ||||
-rw-r--r-- | tests/lib/User/SessionTest.php | 2 |
2 files changed, 12 insertions, 3 deletions
diff --git a/lib/private/User/Session.php b/lib/private/User/Session.php index f3282009a4d..5689de3995f 100644 --- a/lib/private/User/Session.php +++ b/lib/private/User/Session.php @@ -456,8 +456,17 @@ class Session implements IUserSession, Emitter { $this->handleLoginFailed($throttler, $currentDelay, $remoteAddress, $user, $password); return false; } - $users = $this->manager->getByEmail($user); - if (!(\count($users) === 1 && $this->login($users[0]->getUID(), $password))) { + + if ($isTokenPassword) { + $dbToken = $this->tokenProvider->getToken($password); + $userFromToken = $this->manager->get($dbToken->getUID()); + $isValidEmailLogin = $userFromToken->getEMailAddress() === $user; + } else { + $users = $this->manager->getByEmail($user); + $isValidEmailLogin = (\count($users) === 1 && $this->login($users[0]->getUID(), $password)); + } + + if (!$isValidEmailLogin) { $this->handleLoginFailed($throttler, $currentDelay, $remoteAddress, $user, $password); return false; } diff --git a/tests/lib/User/SessionTest.php b/tests/lib/User/SessionTest.php index d6db17d9d45..3b8d75f694c 100644 --- a/tests/lib/User/SessionTest.php +++ b/tests/lib/User/SessionTest.php @@ -1110,7 +1110,7 @@ class SessionTest extends \Test\TestCase { $userSession->expects($this->once()) ->method('isTokenPassword') - ->willReturn(true); + ->willReturn(false); $userSession->expects($this->once()) ->method('login') ->with('john@foo.bar', 'I-AM-AN-PASSWORD') |