summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'PluggableAuth/includes/PluggableAuthLogin.php')
-rw-r--r--PluggableAuth/includes/PluggableAuthLogin.php83
1 files changed, 83 insertions, 0 deletions
diff --git a/PluggableAuth/includes/PluggableAuthLogin.php b/PluggableAuth/includes/PluggableAuthLogin.php
new file mode 100644
index 00000000..c27e6a6b
--- /dev/null
+++ b/PluggableAuth/includes/PluggableAuthLogin.php
@@ -0,0 +1,83 @@
+<?php
+
+use \MediaWiki\Auth\AuthManager;
+
+class PluggableAuthLogin extends UnlistedSpecialPage {
+
+ const RETURNTOURL_SESSION_KEY = 'PluggableAuthLoginReturnToUrl';
+ const RETURNTOPAGE_SESSION_KEY = 'PluggableAuthLoginReturnToPage';
+ const RETURNTOQUERY_SESSION_KEY = 'PluggableAuthLoginReturnToQuery';
+ const EXTRALOGINFIELDS_SESSION_KEY = 'PluggableAuthLoginExtraLoginFields';
+ const USERNAME_SESSION_KEY = 'PluggableAuthLoginUsername';
+ const REALNAME_SESSION_KEY = 'PluggableAuthLoginRealname';
+ const EMAIL_SESSION_KEY = 'PluggableAuthLoginEmail';
+ const ERROR_SESSION_KEY = 'PluggableAuthLoginError';
+
+ public function __construct() {
+ parent::__construct( 'PluggableAuthLogin' );
+ }
+
+ /**
+ * @param string|null $param parameters (ignored)
+ */
+ public function execute( $param ) {
+ wfDebugLog( 'PluggableAuth', 'In execute()' );
+ $authManager = AuthManager::singleton();
+ $user = $this->getUser();
+ $pluggableauth = PluggableAuth::singleton();
+ $error = null;
+ if ( $pluggableauth ) {
+ if ( $pluggableauth->authenticate( $id, $username, $realname, $email,
+ $error ) ) {
+ if ( is_null( $id ) ) {
+ $user->loadDefaults( $username );
+ $user->mName = $username;
+ $user->mRealName = $realname;
+ $user->mEmail = $email;
+ $user->mEmailAuthenticated = wfTimestamp();
+ $user->mTouched = wfTimestamp();
+ wfDebugLog( 'PluggableAuth', 'Authenticated new user: ' . $username );
+ } else {
+ $user->mId = $id;
+ $user->loadFromId();
+ wfDebugLog( 'PluggableAuth', 'Authenticated existing user: ' . $user->mName );
+ }
+ $authorized = true;
+ Hooks::run( 'PluggableAuthUserAuthorization', [ $user, &$authorized ] );
+ if ( $authorized ) {
+ $authManager->setAuthenticationSessionData(
+ self::USERNAME_SESSION_KEY, $username );
+ $authManager->setAuthenticationSessionData(
+ self::REALNAME_SESSION_KEY, $realname );
+ $authManager->setAuthenticationSessionData(
+ self::EMAIL_SESSION_KEY, $email );
+ wfDebugLog( 'PluggableAuth', 'User is authorized.' );
+ } else {
+ wfDebugLog( 'PluggableAuth', 'Authorization failure.' );
+ $error = wfMessage( 'pluggableauth-not-authorized', $username )->text();
+ }
+ } else {
+ wfDebugLog( 'PluggableAuth', 'Authentication failure.' );
+ if ( is_null( $error ) ) {
+ $error = wfMessage( 'pluggableauth-authentication-failure' )->text();
+ } else {
+ if ( !is_string( $error ) ) {
+ $error = strval( $error );
+ }
+ wfDebugLog( 'PluggableAuth', 'ERROR: ' . $error );
+ }
+ }
+ }
+ if ( !is_null( $error ) ) {
+ $authManager->setAuthenticationSessionData( self::ERROR_SESSION_KEY,
+ $error );
+ }
+ $returnToUrl = $authManager->getAuthenticationSessionData(
+ self::RETURNTOURL_SESSION_KEY );
+ if ( is_null( $returnToUrl ) || count( $returnToUrl ) === 0 ) {
+ wfDebugLog( 'PluggableAuth', 'ERROR: return to URL is null or empty' );
+ } else {
+ $this->getOutput()->redirect( $returnToUrl );
+ }
+ }
+}