Merge pull request #2606 from temparus/master

Add preLoginValidation hook
This commit is contained in:
blizzz 2017-02-15 21:47:47 +01:00 committed by GitHub
commit 19fc68cbdc
2 changed files with 13 additions and 3 deletions

View File

@ -1,8 +1,10 @@
<?php <?php
/** /**
* @copyright Copyright (c) 2017, Sandro Lutz <sandro.lutz@temparus.ch>
* @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com> * @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>
* @copyright Copyright (c) 2016, ownCloud, Inc. * @copyright Copyright (c) 2016, ownCloud, Inc.
* *
* @author Sandro Lutz <sandro.lutz@temparus.ch>
* @author Christoph Wurst <christoph@owncloud.com> * @author Christoph Wurst <christoph@owncloud.com>
* @author Joas Schilling <coding@schilljs.com> * @author Joas Schilling <coding@schilljs.com>
* @author Lukas Reschke <lukas@statuscode.ch> * @author Lukas Reschke <lukas@statuscode.ch>
@ -44,6 +46,7 @@ use OCP\IURLGenerator;
use OCP\IUser; use OCP\IUser;
use OCP\IUserManager; use OCP\IUserManager;
use OCP\IUserSession; use OCP\IUserSession;
use OC\Hooks\PublicEmitter;
class LoginController extends Controller { class LoginController extends Controller {
/** @var IUserManager */ /** @var IUserManager */
@ -214,6 +217,10 @@ class LoginController extends Controller {
return $this->generateRedirect($redirect_url); return $this->generateRedirect($redirect_url);
} }
if ($this->userManager instanceof PublicEmitter) {
$this->userManager->emit('\OC\User', 'preLogin', array($user, $password));
}
$originalUser = $user; $originalUser = $user;
// TODO: Add all the insane error handling // TODO: Add all the insane error handling
/* @var $loginResult IUser */ /* @var $loginResult IUser */

View File

@ -1,7 +1,9 @@
<?php <?php
/** /**
* @copyright Copyright (c) 2017, Sandro Lutz <sandro.lutz@temparus.ch>
* @copyright Copyright (c) 2016, ownCloud, Inc. * @copyright Copyright (c) 2016, ownCloud, Inc.
* *
* @author Sandro Lutz <sandro.lutz@temparus.ch>
* @author Arthur Schiwon <blizzz@arthur-schiwon.de> * @author Arthur Schiwon <blizzz@arthur-schiwon.de>
* @author Bernhard Posselt <dev@bernhard-posselt.com> * @author Bernhard Posselt <dev@bernhard-posselt.com>
* @author Christoph Wurst <christoph@owncloud.com> * @author Christoph Wurst <christoph@owncloud.com>
@ -332,6 +334,10 @@ class Session implements IUserSession, Emitter {
OC\Security\Bruteforce\Throttler $throttler) { OC\Security\Bruteforce\Throttler $throttler) {
$currentDelay = $throttler->sleepDelay($request->getRemoteAddress(), 'login'); $currentDelay = $throttler->sleepDelay($request->getRemoteAddress(), 'login');
if ($this->manager instanceof PublicEmitter) {
$this->manager->emit('\OC\User', 'preLogin', array($user, $password));
}
$isTokenPassword = $this->isTokenPassword($password); $isTokenPassword = $this->isTokenPassword($password);
if (!$isTokenPassword && $this->isTokenAuthEnforced()) { if (!$isTokenPassword && $this->isTokenAuthEnforced()) {
throw new PasswordLoginForbiddenException(); throw new PasswordLoginForbiddenException();
@ -476,7 +482,6 @@ class Session implements IUserSession, Emitter {
* @throws LoginException if an app canceld the login process or the user is not enabled * @throws LoginException if an app canceld the login process or the user is not enabled
*/ */
private function loginWithPassword($uid, $password) { private function loginWithPassword($uid, $password) {
$this->manager->emit('\OC\User', 'preLogin', array($uid, $password));
$user = $this->manager->checkPassword($uid, $password); $user = $this->manager->checkPassword($uid, $password);
if ($user === false) { if ($user === false) {
// Password check failed // Password check failed
@ -527,8 +532,6 @@ class Session implements IUserSession, Emitter {
// Ignore and use empty string instead // Ignore and use empty string instead
} }
$this->manager->emit('\OC\User', 'preLogin', array($uid, $password));
$user = $this->manager->get($uid); $user = $this->manager->get($uid);
if (is_null($user)) { if (is_null($user)) {
// user does not exist // user does not exist