Throw an exception when login is canceled by an app

This commit is contained in:
Robin Appelman 2015-01-22 14:13:17 +01:00
parent 8a9acc5083
commit 8eda661761
3 changed files with 33 additions and 11 deletions

View file

@ -844,19 +844,24 @@ class OC {
protected static function handleLogin() {
OC_App::loadApps(array('prelogin'));
$error = array();
$messages = [];
// auth possible via apache module?
if (OC::tryApacheAuth()) {
$error[] = 'apacheauthfailed';
} // remember was checked after last login
elseif (OC::tryRememberLogin()) {
$error[] = 'invalidcookie';
} // logon via web form
elseif (OC::tryFormLogin()) {
$error[] = 'invalidpassword';
try {
// auth possible via apache module?
if (OC::tryApacheAuth()) {
$error[] = 'apacheauthfailed';
} // remember was checked after last login
elseif (OC::tryRememberLogin()) {
$error[] = 'invalidcookie';
} // logon via web form
elseif (OC::tryFormLogin()) {
$error[] = 'invalidpassword';
}
} catch (\OC\User\LoginException $e) {
$messages[] = $e->getMessage();
}
OC_Util::displayLoginPage(array_unique($error));
OC_Util::displayLoginPage(array_unique($error), $messages);
}
/**

View file

@ -0,0 +1,12 @@
<?php
/**
* Copyright (c) 2014 Robin Appelman <icewind@owncloud.com>
* This file is licensed under the Affero General Public License version 3 or
* later.
* See the COPYING-README file.
*/
namespace OC\User;
class LoginException extends \Exception {
}

View file

@ -189,6 +189,7 @@ class Session implements IUserSession, Emitter {
* @param string $uid
* @param string $password
* @return boolean|null
* @throws LoginException
*/
public function login($uid, $password) {
$this->manager->emit('\OC\User', 'preLogin', array($uid, $password));
@ -199,7 +200,11 @@ class Session implements IUserSession, Emitter {
$this->setUser($user);
$this->setLoginName($uid);
$this->manager->emit('\OC\User', 'postLogin', array($user, $password));
return $this->isLoggedIn();
if ($this->isLoggedIn()) {
return true;
} else {
throw new LoginException('Login canceled by app');
}
} else {
return false;
}