LoginAction somewhat converted to FormAction
This commit is contained in:
parent
f7c6dd4f6e
commit
8dafce34c3
@ -20,44 +20,21 @@
|
|||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
* @category Login
|
* @category Login
|
||||||
* @package StatusNet
|
* @package GNUsocial
|
||||||
* @author Evan Prodromou <evan@status.net>
|
* @author Evan Prodromou <evan@status.net>
|
||||||
* @author Sarven Capadisli <csarven@status.net>
|
* @author Sarven Capadisli <csarven@status.net>
|
||||||
|
* @author Mikael Nordfeldth <mmn@hethane.se>
|
||||||
* @copyright 2008-2009 StatusNet, Inc.
|
* @copyright 2008-2009 StatusNet, Inc.
|
||||||
|
* @copyright 2013 Free Software Foundation, Inc.
|
||||||
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
|
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
|
||||||
* @link http://status.net/
|
* @link http://www.gnu.org/software/social/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (!defined('STATUSNET') && !defined('LACONICA')) {
|
if (!defined('GNUSOCIAL')) { exit(1); }
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
class LoginAction extends FormAction
|
||||||
* Login form
|
|
||||||
*
|
|
||||||
* @category Personal
|
|
||||||
* @package StatusNet
|
|
||||||
* @author Evan Prodromou <evan@status.net>
|
|
||||||
* @author Sarven Capadisli <csarven@status.net>
|
|
||||||
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
|
|
||||||
* @link http://status.net/
|
|
||||||
*/
|
|
||||||
class LoginAction extends Action
|
|
||||||
{
|
{
|
||||||
/**
|
protected $needLogin = false;
|
||||||
* Has there been an error?
|
|
||||||
*/
|
|
||||||
var $error = null;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Is this a read-only action?
|
|
||||||
*
|
|
||||||
* @return boolean false
|
|
||||||
*/
|
|
||||||
function isReadOnly($args)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Prepare page to run
|
* Prepare page to run
|
||||||
@ -66,18 +43,15 @@ class LoginAction extends Action
|
|||||||
* @param $args
|
* @param $args
|
||||||
* @return string title
|
* @return string title
|
||||||
*/
|
*/
|
||||||
function prepare($args)
|
protected function prepare(array $args=array())
|
||||||
{
|
{
|
||||||
parent::prepare($args);
|
|
||||||
|
|
||||||
// @todo this check should really be in index.php for all sensitive actions
|
// @todo this check should really be in index.php for all sensitive actions
|
||||||
$ssl = common_config('site', 'ssl');
|
$ssl = common_config('site', 'ssl');
|
||||||
if (empty($_SERVER['HTTPS']) && ($ssl == 'always' || $ssl == 'sometimes')) {
|
if (empty($_SERVER['HTTPS']) && ($ssl == 'always' || $ssl == 'sometimes')) {
|
||||||
common_redirect(common_local_url('login'));
|
common_redirect(common_local_url('login'));
|
||||||
// exit
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return parent::prepare($args);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -85,23 +59,15 @@ class LoginAction extends Action
|
|||||||
*
|
*
|
||||||
* Switches on request method; either shows the form or handles its input.
|
* Switches on request method; either shows the form or handles its input.
|
||||||
*
|
*
|
||||||
* @param array $args $_REQUEST data
|
|
||||||
*
|
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
function handle($args)
|
protected function handle()
|
||||||
{
|
{
|
||||||
parent::handle($args);
|
|
||||||
|
|
||||||
if (common_is_real_login()) {
|
if (common_is_real_login()) {
|
||||||
$user = common_current_user();
|
common_redirect(common_local_url('all', array('nickname' => $this->scoped->nickname)), 307);
|
||||||
common_redirect(common_local_url('all', array('nickname' => $user->nickname)), 307);
|
|
||||||
} else if ($_SERVER['REQUEST_METHOD'] == 'POST') {
|
|
||||||
$this->checkLogin();
|
|
||||||
} else {
|
|
||||||
common_ensure_session();
|
|
||||||
$this->showForm();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return parent::handle();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -113,8 +79,10 @@ class LoginAction extends Action
|
|||||||
*
|
*
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
function checkLogin($user_id=null, $token=null)
|
protected function handlePost()
|
||||||
{
|
{
|
||||||
|
parent::handlePost();
|
||||||
|
|
||||||
// XXX: login throttle
|
// XXX: login throttle
|
||||||
|
|
||||||
$nickname = $this->trimmed('nickname');
|
$nickname = $this->trimmed('nickname');
|
||||||
@ -122,20 +90,19 @@ class LoginAction extends Action
|
|||||||
|
|
||||||
$user = common_check_user($nickname, $password);
|
$user = common_check_user($nickname, $password);
|
||||||
|
|
||||||
if (!$user) {
|
if (!$user instanceof User) {
|
||||||
// TRANS: Form validation error displayed when trying to log in with incorrect credentials.
|
// TRANS: Form validation error displayed when trying to log in with incorrect credentials.
|
||||||
$this->showForm(_('Incorrect username or password.'));
|
throw new ServerException(_('Incorrect username or password.'));
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// success!
|
// success!
|
||||||
if (!common_set_user($user)) {
|
if (!common_set_user($user)) {
|
||||||
// TRANS: Server error displayed when during login a server error occurs.
|
// TRANS: Server error displayed when during login a server error occurs.
|
||||||
$this->serverError(_('Error setting user. You are probably not authorized.'));
|
throw new ServerException(_('Error setting user. You are probably not authorized.'));
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
common_real_login(true);
|
common_real_login(true);
|
||||||
|
$this->updateScopedProfile();
|
||||||
|
|
||||||
if ($this->boolean('rememberme')) {
|
if ($this->boolean('rememberme')) {
|
||||||
common_rememberme($user);
|
common_rememberme($user);
|
||||||
@ -149,8 +116,7 @@ class LoginAction extends Action
|
|||||||
$url = common_inject_session($url);
|
$url = common_inject_session($url);
|
||||||
} else {
|
} else {
|
||||||
$url = common_local_url('all',
|
$url = common_local_url('all',
|
||||||
array('nickname' =>
|
array('nickname' => $this->scoped->nickname));
|
||||||
$user->nickname));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
common_redirect($url, 303);
|
common_redirect($url, 303);
|
||||||
@ -166,10 +132,10 @@ class LoginAction extends Action
|
|||||||
*
|
*
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
function showForm($error=null)
|
public function showForm($msg=null, $success=false)
|
||||||
{
|
{
|
||||||
$this->error = $error;
|
common_ensure_session();
|
||||||
$this->showPage();
|
return parent::showForm($msg, $success);
|
||||||
}
|
}
|
||||||
|
|
||||||
function showScripts()
|
function showScripts()
|
||||||
@ -189,26 +155,6 @@ class LoginAction extends Action
|
|||||||
return _('Login');
|
return _('Login');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Show page notice
|
|
||||||
*
|
|
||||||
* Display a notice for how to use the page, or the
|
|
||||||
* error if it exists.
|
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
function showPageNotice()
|
|
||||||
{
|
|
||||||
if ($this->error) {
|
|
||||||
$this->element('p', 'error', $this->error);
|
|
||||||
} else {
|
|
||||||
$instr = $this->getInstructions();
|
|
||||||
$output = common_markup_to_html($instr);
|
|
||||||
|
|
||||||
$this->raw($output);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Core of the display code
|
* Core of the display code
|
||||||
*
|
*
|
||||||
@ -244,6 +190,7 @@ class LoginAction extends Action
|
|||||||
$this->elementEnd('ul');
|
$this->elementEnd('ul');
|
||||||
// TRANS: Button text for log in on login page.
|
// TRANS: Button text for log in on login page.
|
||||||
$this->submit('submit', _m('BUTTON','Login'));
|
$this->submit('submit', _m('BUTTON','Login'));
|
||||||
|
$this->hidden('token', common_session_token());
|
||||||
$this->elementEnd('fieldset');
|
$this->elementEnd('fieldset');
|
||||||
$this->elementEnd('form');
|
$this->elementEnd('form');
|
||||||
$this->elementStart('p');
|
$this->elementStart('p');
|
||||||
|
@ -1331,7 +1331,7 @@ var SN = { // StatusNet
|
|||||||
*/
|
*/
|
||||||
Get: function () {
|
Get: function () {
|
||||||
var cookieValue = $.cookie(SN.C.S.StatusNetInstance);
|
var cookieValue = $.cookie(SN.C.S.StatusNetInstance);
|
||||||
if (cookieValue !== null) {
|
if (cookieValue !== undefined) {
|
||||||
return JSON.parse(cookieValue);
|
return JSON.parse(cookieValue);
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
|
@ -152,11 +152,16 @@ class Action extends HTMLOutputter // lawsuit
|
|||||||
$this->checkLogin(); // if not logged in, this redirs/excepts
|
$this->checkLogin(); // if not logged in, this redirs/excepts
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->scoped = Profile::current();
|
$this->updateScopedProfile();
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function updateScopedProfile() {
|
||||||
|
$this->scoped = Profile::current();
|
||||||
|
return $this->scoped;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Show page, a template method.
|
* Show page, a template method.
|
||||||
*
|
*
|
||||||
|
@ -102,6 +102,15 @@ class FormAction extends Action
|
|||||||
public function showInstructions()
|
public function showInstructions()
|
||||||
{
|
{
|
||||||
// instructions are nice, so users know what to do
|
// instructions are nice, so users know what to do
|
||||||
|
$this->raw(common_markup_to_html($this->getInstructions()));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string with instructions to pass into common_markup_to_html()
|
||||||
|
*/
|
||||||
|
public function getInstructions()
|
||||||
|
{
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function showForm($msg=null, $success=false)
|
public function showForm($msg=null, $success=false)
|
||||||
|
16
lib/util.php
16
lib/util.php
@ -244,15 +244,13 @@ function common_check_user($nickname, $password)
|
|||||||
$user = User::getKV('nickname', Nickname::normalize($nickname));
|
$user = User::getKV('nickname', Nickname::normalize($nickname));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!empty($user)) {
|
if ($user instanceof User && !empty($password)) {
|
||||||
if (!empty($password)) { // never allow login with blank password
|
|
||||||
if (0 == strcmp(common_munge_password($password, $user->id),
|
if (0 == strcmp(common_munge_password($password, $user->id),
|
||||||
$user->password)) {
|
$user->password)) {
|
||||||
//internal checking passed
|
//internal checking passed
|
||||||
$authenticatedUser = $user;
|
$authenticatedUser = $user;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
Event::handle('EndCheckPassword', array($nickname, $password, $authenticatedUser));
|
Event::handle('EndCheckPassword', array($nickname, $password, $authenticatedUser));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1302,7 +1300,9 @@ function common_path($relative, $ssl=false, $addSession=true)
|
|||||||
|
|
||||||
function common_inject_session($url, $serverpart = null)
|
function common_inject_session($url, $serverpart = null)
|
||||||
{
|
{
|
||||||
if (common_have_session()) {
|
if (!common_have_session()) {
|
||||||
|
return $url;
|
||||||
|
}
|
||||||
|
|
||||||
if (empty($serverpart)) {
|
if (empty($serverpart)) {
|
||||||
$serverpart = parse_url($url, PHP_URL_HOST);
|
$serverpart = parse_url($url, PHP_URL_HOST);
|
||||||
@ -1312,8 +1312,7 @@ function common_inject_session($url, $serverpart = null)
|
|||||||
|
|
||||||
// Are we pointing to another server (like an SSL server?)
|
// Are we pointing to another server (like an SSL server?)
|
||||||
|
|
||||||
if (!empty($currentServer) &&
|
if (!empty($currentServer) && 0 != strcasecmp($currentServer, $serverpart)) {
|
||||||
0 != strcasecmp($currentServer, $serverpart)) {
|
|
||||||
// Pass the session ID as a GET parameter
|
// Pass the session ID as a GET parameter
|
||||||
$sesspart = session_name() . '=' . session_id();
|
$sesspart = session_name() . '=' . session_id();
|
||||||
$i = strpos($url, '?');
|
$i = strpos($url, '?');
|
||||||
@ -1323,7 +1322,6 @@ function common_inject_session($url, $serverpart = null)
|
|||||||
$url = substr($url, 0, $i + 1).$sesspart.'&'.substr($url, $i + 1);
|
$url = substr($url, 0, $i + 1).$sesspart.'&'.substr($url, $i + 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
return $url;
|
return $url;
|
||||||
}
|
}
|
||||||
@ -1954,6 +1952,10 @@ function common_confirmation_code($bits)
|
|||||||
|
|
||||||
function common_markup_to_html($c, $args=null)
|
function common_markup_to_html($c, $args=null)
|
||||||
{
|
{
|
||||||
|
if ($c === null) {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
if (is_null($args)) {
|
if (is_null($args)) {
|
||||||
$args = array();
|
$args = array();
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user