Fix logClientIn for non-existing users (#26292)
The check for two factor enforcement would return true for non-existing users. This fix makes it return false in order to be able to perform the regular login which will then fail and return false. This prevents throwing PasswordLoginForbidden for non-existing users.
This commit is contained in:
parent
1ff328ae65
commit
6d1e858aa4
2 changed files with 29 additions and 0 deletions
|
@ -362,6 +362,9 @@ class Session implements IUserSession, Emitter {
|
||||||
$user = $this->manager->get($username);
|
$user = $this->manager->get($username);
|
||||||
if (is_null($user)) {
|
if (is_null($user)) {
|
||||||
$users = $this->manager->getByEmail($username);
|
$users = $this->manager->getByEmail($username);
|
||||||
|
if (empty($users)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
if (count($users) !== 1) {
|
if (count($users) !== 1) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -401,6 +401,32 @@ class SessionTest extends \Test\TestCase {
|
||||||
$userSession->logClientIn('john', 'doe', $request, $this->throttler);
|
$userSession->logClientIn('john', 'doe', $request, $this->throttler);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testLogClientInUnexist() {
|
||||||
|
$manager = $this->getMockBuilder('\OC\User\Manager')
|
||||||
|
->disableOriginalConstructor()
|
||||||
|
->getMock();
|
||||||
|
$session = $this->createMock('\OCP\ISession');
|
||||||
|
$request = $this->createMock('\OCP\IRequest');
|
||||||
|
$user = $this->createMock('\OCP\IUser');
|
||||||
|
|
||||||
|
/** @var \OC\User\Session $userSession */
|
||||||
|
$userSession = $this->getMockBuilder('\OC\User\Session')
|
||||||
|
->setConstructorArgs([$manager, $session, $this->timeFactory, $this->tokenProvider, $this->config])
|
||||||
|
->setMethods(['login', 'supportsCookies', 'createSessionToken', 'getUser'])
|
||||||
|
->getMock();
|
||||||
|
|
||||||
|
$this->tokenProvider->expects($this->once())
|
||||||
|
->method('getToken')
|
||||||
|
->with('doe')
|
||||||
|
->will($this->throwException(new \OC\Authentication\Exceptions\InvalidTokenException()));
|
||||||
|
$this->config->expects($this->once())
|
||||||
|
->method('getSystemValue')
|
||||||
|
->with('token_auth_enforced', false)
|
||||||
|
->will($this->returnValue(false));
|
||||||
|
|
||||||
|
$this->assertFalse($userSession->logClientIn('unexist', 'doe', $request));
|
||||||
|
}
|
||||||
|
|
||||||
public function testLogClientInWithTokenPassword() {
|
public function testLogClientInWithTokenPassword() {
|
||||||
$manager = $this->getMockBuilder('\OC\User\Manager')
|
$manager = $this->getMockBuilder('\OC\User\Manager')
|
||||||
->disableOriginalConstructor()
|
->disableOriginalConstructor()
|
||||||
|
|
Loading…
Reference in a new issue