* @package MediaWiki
* @subpackage SpecialPage
*/
+
class LoginForm {
+
+ const SUCCESS = 0;
+ const NO_NAME = 1;
+ const ILLEGAL = 2;
+ const WRONG_PLUGIN_PASS = 3;
+ const NOT_EXISTS = 4;
+ const WRONG_PASS = 5;
+ const EMPTY_PASS = 6;
+
var $mName, $mPassword, $mRetype, $mReturnTo, $mCookieCheck, $mPosted;
var $mAction, $mCreateaccount, $mCreateaccountMail, $mMailmypassword;
var $mLoginattempt, $mRemember, $mEmail, $mDomain, $mLanguage;
global $wgUser, $wgOut;
global $wgEnableSorbs, $wgProxyWhitelist;
global $wgMemc, $wgAccountCreationThrottle, $wgDBname;
- global $wgAuth, $wgMinimalPasswordLength, $wgReservedUsernames;
+ global $wgAuth, $wgMinimalPasswordLength;
// If the user passes an invalid domain, something is fishy
if( !$wgAuth->validDomain( $this->mDomain ) ) {
$name = trim( $this->mName );
$u = User::newFromName( $name );
- if ( is_null( $u ) || in_array( $u->getName(), $wgReservedUsernames ) ) {
+ if ( is_null( $u ) || !User::isCreatableName( $u->getName() ) ) {
$this->mainLoginForm( wfMsg( 'noname' ) );
return false;
}
/**
* @private
*/
- function processLogin() {
- global $wgUser, $wgAuth, $wgReservedUsernames;
-
+
+ function authenticateUserData()
+ {
+ global $wgUser, $wgAuth;
if ( '' == $this->mName ) {
- $this->mainLoginForm( wfMsg( 'noname' ) );
- return;
+ return self::NO_NAME;
}
$u = User::newFromName( $this->mName );
- if( is_null( $u ) || in_array( $u->getName(), $wgReservedUsernames ) ) {
- $this->mainLoginForm( wfMsg( 'noname' ) );
- return;
+ if( is_null( $u ) || !User::isUsableName( $u->getName() ) ) {
+ return self::ILLEGAL;
}
if ( 0 == $u->getID() ) {
global $wgAuth;
if ( $wgAuth->authenticate( $u->getName(), $this->mPassword ) ) {
$u =& $this->initUser( $u );
} else {
- $this->mainLoginForm( wfMsg( 'wrongpassword' ) );
- return;
+ return self::WRONG_PLUGIN_PASS;
}
} else {
- $this->mainLoginForm( wfMsg( 'nosuchuser', $u->getName() ) );
- return;
+ return self::NOT_EXISTS;
}
} else {
$u->loadFromDatabase();
}
if (!$u->checkPassword( $this->mPassword )) {
- $this->mainLoginForm( wfMsg( $this->mPassword == '' ? 'wrongpasswordempty' : 'wrongpassword' ) );
- return;
+ return '' == $this->mPassword ? self::EMPTY_PASS : self::WRONG_PASS;
}
+ else
+ {
+ $wgAuth->updateUser( $u );
+ $wgUser = $u;
- # We've verified now, update the real record
- #
- if ( $this->mRemember ) {
- $r = 1;
- } else {
- $r = 0;
+ return self::SUCCESS;
}
- $u->setOption( 'rememberpassword', $r );
-
- $wgAuth->updateUser( $u );
+ }
+
+ function processLogin() {
+ global $wgUser, $wgAuth;
- $wgUser = $u;
- $wgUser->setCookies();
+ switch ($this->authenticateUserData())
+ {
+ case self::SUCCESS:
+ # We've verified now, update the real record
+ if( (bool)$this->mRemember != (bool)$wgUser->getOption( 'rememberpassword' ) ) {
+ $wgUser->setOption( 'rememberpassword', $this->mRemember ? 1 : 0 );
+ $wgUser->saveSettings();
+ } else {
+ $wgUser->invalidateCache();
+ }
+ $wgUser->setCookies();
- $wgUser->saveSettings();
+ if( $this->hasSessionCookie() ) {
+ return $this->successfulLogin( wfMsg( 'loginsuccess', $wgUser->getName() ) );
+ } else {
+ return $this->cookieRedirectCheck( 'login' );
+ }
+ break;
- if( $this->hasSessionCookie() ) {
- return $this->successfulLogin( wfMsg( 'loginsuccess', $wgUser->getName() ) );
- } else {
- return $this->cookieRedirectCheck( 'login' );
+ case self::NO_NAME:
+ case self::ILLEGAL:
+ $this->mainLoginForm( wfMsg( 'noname' ) );
+ break;
+ case self::WRONG_PLUGIN_PASS:
+ $this->mainLoginForm( wfMsg( 'wrongpassword' ) );
+ break;
+ case self::NOT_EXISTS:
+ $this->mainLoginForm( wfMsg( 'nosuchuser', htmlspecialchars( $this->mName ) ) );
+ break;
+ case self::WRONG_PASS:
+ $this->mainLoginForm( wfMsg( 'wrongpassword' ) );
+ break;
+ case self::EMPTY_PASS:
+ $this->mainLoginForm( wfMsg( 'wrongpasswordempty' ) );
+ break;
+ default:
+ wfDebugDieBacktrace( "Unhandled case value" );
}
}
global $wgServer, $wgScript;
if ( '' == $u->getEmail() ) {
- return wfMsg( 'noemail', $u->getName() );
+ return new WikiError( wfMsg( 'noemail', $u->getName() ) );
}
$np = $u->randomPassword();
*/
function makeLanguageSelector() {
$msg = wfMsgForContent( 'loginlanguagelinks' );
- if( $msg != '' && $msg != '<loginlanguagelinks>' ) {
+ if( $msg != '' && !wfEmptyMsg( 'loginlanguagelinks', $msg ) ) {
$langs = explode( "\n", $msg );
$links = array();
foreach( $langs as $lang ) {