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);
}
/**
--- /dev/null
+<?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 {
+}
* @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));
$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;
}