specialuserlogin.php

来自「php 开发的内容管理系统」· PHP 代码 · 共 691 行 · 第 1/2 页

PHP
691
字号
<?php/** * * @package MediaWiki * @subpackage SpecialPage */// Modified for mediawiki for XOOPS - by D.J./** * constructor */function wfSpecialUserlogin() {	global $wgCommandLineMode;	global $wgRequest;	global $wgAuth, $wgUser;	global $wgArticlePath;		if( !$wgCommandLineMode && !isset( $_COOKIE[session_name()] )  ) {		User::SetupSession();	}	if(is_object($GLOBALS["xoopsUser"])){		$wgUser = new User();		$wgUser->mId = $GLOBALS["xoopsUser"]->getVar("uid");		$wgUser->loadFromDatabase();		$wgAuth->updateUser( $u );		$wgUser->setCookies();		$wgUser->saveSettings();		if($page = $wgRequest->getVal( 'returnto' )) {			$url = str_replace( "$1", urlencode( $page ), $wgArticlePath );			header( "Location: {$url}" );		}	}else{		header("location: ".XOOPS_URL . '/user.php?xoops_redirect=' . urlencode($wgRequest->getRequestURL()));	}	return;		$form = new LoginForm( $wgRequest );	$form->execute();}/** * * @package MediaWiki * @subpackage SpecialPage */class LoginForm {	var $mName, $mPassword, $mRetype, $mReturnTo, $mCookieCheck, $mPosted;	var $mAction, $mCreateaccount, $mCreateaccountMail, $mMailmypassword;	var $mLoginattempt, $mRemember, $mEmail, $mDomain, $mLanguage;	/**	 * Constructor	 * @param webrequest $request A webrequest object passed by reference	 */	function LoginForm( &$request ) {		global $wgLang, $wgAllowRealName, $wgEnableEmail;		global $wgAuth;		$this->mType = $request->getText( 'type' );		$this->mName = $request->getText( 'wpName' );		$this->mPassword = $request->getText( 'wpPassword' );		$this->mRetype = $request->getText( 'wpRetype' );		$this->mDomain = $request->getText( 'wpDomain' );		$this->mReturnTo = $request->getVal( 'returnto' );		$this->mCookieCheck = $request->getVal( 'wpCookieCheck' );		$this->mPosted = $request->wasPosted();		$this->mCreateaccount = $request->getCheck( 'wpCreateaccount' );		$this->mCreateaccountMail = $request->getCheck( 'wpCreateaccountMail' )		                            && $wgEnableEmail;		$this->mMailmypassword = $request->getCheck( 'wpMailmypassword' )		                         && $wgEnableEmail;		$this->mLoginattempt = $request->getCheck( 'wpLoginattempt' );		$this->mAction = $request->getVal( 'action' );		$this->mRemember = $request->getCheck( 'wpRemember' );		$this->mLanguage = $request->getText( 'uselang' );		if( $wgEnableEmail ) {			$this->mEmail = $request->getText( 'wpEmail' );		} else {			$this->mEmail = '';		}		if( $wgAllowRealName ) {		    $this->mRealName = $request->getText( 'wpRealName' );		} else {		    $this->mRealName = '';		}		if( !$wgAuth->validDomain( $this->mDomain ) ) {			$this->mDomain = 'invaliddomain';		}		$wgAuth->setDomain( $this->mDomain );		# When switching accounts, it sucks to get automatically logged out		if( $this->mReturnTo == $wgLang->specialPage( 'Userlogout' ) ) {			$this->mReturnTo = '';		}	}	function execute() {		if ( !is_null( $this->mCookieCheck ) ) {			$this->onCookieRedirectCheck( $this->mCookieCheck );			return;		} else if( $this->mPosted ) {			if( $this->mCreateaccount ) {				return $this->addNewAccount();			} else if ( $this->mCreateaccountMail ) {				return $this->addNewAccountMailPassword();			} else if ( $this->mMailmypassword ) {				return $this->mailPassword();			} else if ( ( 'submitlogin' == $this->mAction ) || $this->mLoginattempt ) {				return $this->processLogin();			}		}		$this->mainLoginForm( '' );	}	/**	 * @private	 */	function addNewAccountMailPassword() {		global $wgOut;		if ('' == $this->mEmail) {			$this->mainLoginForm( wfMsg( 'noemail', htmlspecialchars( $this->mName ) ) );			return;		}		$u = $this->addNewaccountInternal();		if ($u == NULL) {			return;		}		$u->saveSettings();		$result = $this->mailPasswordInternal($u);		wfRunHooks( 'AddNewAccount', array( $u ) );		$wgOut->setPageTitle( wfMsg( 'accmailtitle' ) );		$wgOut->setRobotpolicy( 'noindex,nofollow' );		$wgOut->setArticleRelated( false );		if( WikiError::isError( $result ) ) {			$this->mainLoginForm( wfMsg( 'mailerror', $result->getMessage() ) );		} else {			$wgOut->addWikiText( wfMsg( 'accmailtext', $u->getName(), $u->getEmail() ) );			$wgOut->returnToMain( false );		}		$u = 0;	}	/**	 * @private	 */	function addNewAccount() {		global $wgUser, $wgEmailAuthentication;				# Create the account and abort if there's a problem doing so		$u = $this->addNewAccountInternal();		if( $u == NULL )			return;					# If we showed up language selection links, and one was in use, be		# smart (and sensible) and save that language as the user's preference		global $wgLoginLanguageSelector;		if( $wgLoginLanguageSelector && $this->mLanguage )			$u->setOption( 'language', $this->mLanguage );				# Save user settings and send out an email authentication message if needed		$u->saveSettings();		if( $wgEmailAuthentication && User::isValidEmailAddr( $u->getEmail() ) )			$u->sendConfirmationMail();					# If not logged in, assume the new account as the current one and set session cookies		# then show a "welcome" message or a "need cookies" message as needed		if( $wgUser->isAnon() ) {			$wgUser = $u;			$wgUser->setCookies();			wfRunHooks( 'AddNewAccount', array( $wgUser ) );			if( $this->hasSessionCookie() ) {				return $this->successfulLogin( wfMsg( 'welcomecreation', $wgUser->getName() ), false );			} else {				return $this->cookieRedirectCheck( 'new' );			}		} else {			# Confirm that the account was created			global $wgOut;			$skin = $wgUser->getSkin();			$self = Title::makeTitle( NS_SPECIAL, 'Userlogin' );			$wgOut->setPageTitle( wfMsgHtml( 'accountcreated' ) );			$wgOut->setArticleRelated( false );			$wgOut->setRobotPolicy( 'noindex,nofollow' );			$wgOut->addHtml( wfMsgWikiHtml( 'accountcreatedtext', $u->getName() ) );			$wgOut->returnToMain( $self->getPrefixedText() );			wfRunHooks( 'AddNewAccount', array( $u ) );			return true;		}	}	/**	 * @private	 */	function addNewAccountInternal() {		global $wgUser, $wgOut;		global $wgEnableSorbs, $wgProxyWhitelist;		global $wgMemc, $wgAccountCreationThrottle, $wgDBname;		global $wgAuth, $wgMinimalPasswordLength, $wgReservedUsernames;		// If the user passes an invalid domain, something is fishy		if( !$wgAuth->validDomain( $this->mDomain ) ) {			$this->mainLoginForm( wfMsg( 'wrongpassword' ) );			return false;		}		// If we are not allowing users to login locally, we should		// be checking to see if the user is actually able to		// authenticate to the authentication server before they		// create an account (otherwise, they can create a local account		// and login as any domain user). We only need to check this for		// domains that aren't local.		if( 'local' != $this->mDomain && '' != $this->mDomain ) {			if( !$wgAuth->canCreateAccounts() && ( !$wgAuth->userExists( $this->mName ) || !$wgAuth->authenticate( $this->mName, $this->mPassword ) ) ) {				$this->mainLoginForm( wfMsg( 'wrongpassword' ) );				return false;			}		}		if ( wfReadOnly() ) {			$wgOut->readOnlyPage();			return false;		}		if (!$wgUser->isAllowedToCreateAccount()) {			$this->userNotPrivilegedMessage();			return false;		}		$ip = wfGetIP();		if ( $wgEnableSorbs && !in_array( $ip, $wgProxyWhitelist ) &&		  $wgUser->inSorbsBlacklist( $ip ) )		{			$this->mainLoginForm( wfMsg( 'sorbs_create_account_reason' ) . ' (' . htmlspecialchars( $ip ) . ')' );			return;		}		$name = trim( $this->mName );		$u = User::newFromName( $name );		if ( is_null( $u ) || in_array( $u->getName(), $wgReservedUsernames ) ) {			$this->mainLoginForm( wfMsg( 'noname' ) );			return false;		}		if ( 0 != $u->idForName() ) {			$this->mainLoginForm( wfMsg( 'userexists' ) );			return false;		}		if ( 0 != strcmp( $this->mPassword, $this->mRetype ) ) {			$this->mainLoginForm( wfMsg( 'badretype' ) );			return false;		}		if ( !$wgUser->isValidPassword( $this->mPassword ) ) {			$this->mainLoginForm( wfMsg( 'passwordtooshort', $wgMinimalPasswordLength ) );			return false;		}		if ( $wgAccountCreationThrottle ) {			$key = $wgDBname.':acctcreate:ip:'.$ip;			$value = $wgMemc->incr( $key );			if ( !$value ) {				$wgMemc->set( $key, 1, 86400 );			}			if ( $value > $wgAccountCreationThrottle ) {				$this->throttleHit( $wgAccountCreationThrottle );				return false;			}		}		$abortError = '';		if( !wfRunHooks( 'AbortNewAccount', array( $u, &$abortError ) ) ) {			// Hook point to add extra creation throttles and blocks			wfDebug( "LoginForm::addNewAccountInternal: a hook blocked creation\n" );			$this->mainLoginForm( $abortError );			return false;		}		if( !$wgAuth->addUser( $u, $this->mPassword ) ) {			$this->mainLoginForm( wfMsg( 'externaldberror' ) );			return false;		}		# Update user count		$ssUpdate = new SiteStatsUpdate( 0, 0, 0, 0, 1 );		$ssUpdate->doUpdate();		return $this->initUser( $u );	}	/**	 * Actually add a user to the database.	 * Give it a User object that has been initialised with a name.	 *	 * @param $u User object.	 * @return User object.	 * @private	 */	function &initUser( &$u ) {		$u->addToDatabase();		$u->setPassword( $this->mPassword );		$u->setEmail( $this->mEmail );		$u->setRealName( $this->mRealName );		$u->setToken();		global $wgAuth;		$wgAuth->initUser( $u );		$u->setOption( 'rememberpassword', $this->mRemember ? 1 : 0 );		return $u;	}	/**	 * @private	 */	function processLogin() {		global $wgUser, $wgAuth, $wgReservedUsernames;		if ( '' == $this->mName ) {			$this->mainLoginForm( wfMsg( 'noname' ) );			return;		}		$u = User::newFromName( $this->mName );		if( is_null( $u ) || in_array( $u->getName(), $wgReservedUsernames ) ) {			$this->mainLoginForm( wfMsg( 'noname' ) );			return;		}		if ( 0 == $u->getID() ) {			global $wgAuth;			/**			 * If the external authentication plugin allows it,			 * automatically create a new account for users that			 * are externally defined but have not yet logged in.			 */			if ( $wgAuth->autoCreate() && $wgAuth->userExists( $u->getName() ) ) {

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?