User:Nguyenh/BasicAutoAuth.php
Appearance
<?php # ------------------------------------------------------------------------- # # BasicAutoAuth 0.12 - Automatic Login Extension for Basic Authentication # # Please visit http://meta.wikimedia.org/wiki/User:Nguyenh/BasicAutoAuth # for important notes and other information. # # WARNING: This is a preview release. It may be unstable, incomplete # and may contain bugs. Use it at your own risk. # # TODO: $wgAuth support # # Portions Copyright (C) 2006 Huy Hoang Nguyen, # with parts derived from SpecialUserlogin.php. # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation, version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # # http://www.gnu.org/copyleft/gpl.html # # ------------------------------------------------------------------------- # Check for MediaWiki environment and # only include when using version 1.6+ if ( !defined( 'MEDIAWIKI' ) || !isset( $wgVersion ) || ( version_compare( $wgVersion, '1.6' ) < 0 ) ) return; $wgHooks[ 'AutoAuthenticate' ][] = 'wfBasicAutoAuthenticateExtension'; $wgExtensionCredits[ 'other' ][] = array( 'name' => 'BasicAutoAuth extension', 'version' => '0.12', 'author' => 'Huy Hoang Nguyen', 'url' => 'http://meta.wikimedia.org/wiki/User:Nguyenh/BasicAutoAuth', ); # ------------------------------------------------------ # Event handler for BasicAutoAuthenticate # ------------------------------------------------------ function wfBasicAutoAuthenticateExtension( &$user ) { global $wgRequest, $wgServer, $wgScriptPath; /* Create user from session or cookie */ /* newFromSession() was introduced in r17004, */ /* before, we have to use loadFromSession() */ if ( method_exists( 'User', 'newFromSession' ) ) $u = User::newFromSession(); else $u = User::loadFromSession(); /* Exit if user is already logged in */ if ( is_object( $u ) and $u->isLoggedIn() ) { $user = $u; return true; } if ( isset( $_SERVER[ 'REMOTE_USER' ] ) ) { global $wgCommandLineMode; global $wgRequest; /* Initialize session for storing user data */ if( !$wgCommandLineMode and !isset( $_COOKIE[ session_name() ] ) ) { User::SetupSession(); } $u =& User::newFromName( $_SERVER[ 'REMOTE_USER' ] ); /* Stop if user object was not created */ if ( !is_object( $u ) ) { return true; } /* -------------------------------------------------- */ /* Check user ID and load user data */ /* Code snippet from SpecialUserlogin::processLogin() */ /* -------------------------------------------------- */ 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 ( is_object($wgAuth) and $wgAuth->autoCreate() and $wgAuth->userExists( $u->getName() ) ) { if ( $wgAuth->authenticate( $u->getName(), $u->mPassword ) ) { $u =& basicAutoAuthenticateInitUser( $u ); $user = $u; return true; } else { return true; } } else { return true; } } else { $u->loadFromDatabase(); /* Check against supplied password */ if ( $u->checkPassword( $_SERVER[ 'PHP_AUTH_PW' ] ) ) { $user = $u; } } /* -------------------------------------------------- */ } return true; } /** * Code taken from SpecialUserlogin::initUser() * * Actually add a user to the database. * Give it a User object that has been initialised with a name. * * @param User $u * @return User * @access private */ function &basicAutoAuthenticateInitUser( &$u ) { $u->addToDatabase(); $u->setPassword( $u->mPassword ); $u->setEmail( $u->mEmail ); $u->setRealName( $u->mRealName ); $u->setToken(); global $wgAuth; $wgAuth->initUser( $u ); $u->setOption( 'rememberpassword', $u->mRemember ? 1 : 0 ); return $u; } ?>