jenkins-bot has submitted this change and it was merged.

Change subject: Fixed whitelist issue for non-English wikis.
......................................................................


Fixed whitelist issue for non-English wikis.

Change-Id: I77fe4d8c66df632b8a9c647ab3e69ac7f2fb86be
---
M PluggableAuthHooks.php
M ext.PluggableAuthAutoLogin.js
M extension.json
3 files changed, 77 insertions(+), 62 deletions(-)

Approvals:
  Cicalese: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/PluggableAuthHooks.php b/PluggableAuthHooks.php
index cccd09d..d550b8a 100644
--- a/PluggableAuthHooks.php
+++ b/PluggableAuthHooks.php
@@ -27,15 +27,12 @@
        /**
         * Implements extension registration callback.
         * See 
https://www.mediawiki.org/wiki/Manual:Extension_registration#Customizing_registration
+        * Removes password providers if local login is not enabled.
         *
         * @since 2.0
         *
         */
        public static function onRegistration() {
-               if ( !$GLOBALS['wgWhitelistRead'] ) {
-                       $GLOBALS['wgWhitelistRead'] = [];
-               }
-               $GLOBALS['wgWhitelistRead'][] = 'Special:PluggableAuthLogin';
                if ( $GLOBALS['wgPluggableAuth_EnableLocalLogin'] ) {
                        return;
                }
@@ -56,8 +53,30 @@
 
        /**
         *
+        * Implements TitleReadWhitelist hook.
+        * See https://www.mediawiki.org/wiki/Manual:Hooks/TitleReadWhitelist
+        * Adds PluggableAuth login special pages to whitelist.
+        *
+        * @since 2.0
+        *
+        */
+       public static function onTitleReadWhitelist( $title, $user, 
&$whitelisted ) {
+               $loginSpecialPages = 
ExtensionRegistry::getInstance()->getAttribute(
+                       'PluggableAuthLoginSpecialPages' );
+               foreach ( $loginSpecialPages as $page ) {
+                       if ( $title->isSpecial( $page ) ) {
+                               $whitelisted = true;
+                               return true;
+                       }
+               }
+               return true;
+       }
+
+       /**
+        *
         * Implements AuthChangeFormFields hook.
         * See https://www.mediawiki.org/wiki/Manual:Hooks/AuthChangeFormFields
+        * Moves login button to bottom of form.
         *
         * @since 2.0
         *
@@ -76,6 +95,7 @@
        /**
         * Implements UserLogoutComplete hook.
         * See https://www.mediawiki.org/wiki/Manual:Hooks/UserLogoutComplete
+        * Calls deauthenticate hook in authentication plugin.
         *
         * @since 2.0
         *
@@ -100,6 +120,15 @@
 
        /**
         * Implements BeforePageDisplay hook.
+        * Adds auto login JavaScript module if all of the following are true:
+        * - auto login is enabled
+        * - no user is already logged in
+        * - the current page is not a PluggableAuth login special page (which 
would
+        *   cause an infinite loop)
+        * - if the wiki requires login to read, the current page is 
whitelisted (in
+        *   other words, users than cannot login to a wiki that requires login 
to
+        *   read will still be able to read whitelisted pages, since those 
pages
+        *   will not trigger auto login).
         *
         * @since 2.0
         *
@@ -107,15 +136,31 @@
         * @param Skin $skin
         */
        public static function autoLoginInit( &$out, &$skin ) {
-               if ( $GLOBALS['wgPluggableAuth_EnableAutoLogin'] ) {
-                       $out->addModules( 'ext.PluggableAuthAutoLogin' );
+               if ( !$GLOBALS['wgPluggableAuth_EnableAutoLogin'] ) {
+                       return true;
                }
+               if ( !$out->getUser()->isAnon() ) {
+                       return true;
+               }
+               $loginSpecialPages = 
ExtensionRegistry::getInstance()->getAttribute(
+                       'PluggableAuthLoginSpecialPages' );
+               $title = $out->getTitle();
+               foreach ( $loginSpecialPages as $page ) {
+                       if ( $title->isSpecial( $page ) ) {
+                               return true;
+                       }
+               }
+               if ( !User::isEveryoneAllowed( 'read' ) && $title->userCan( 
'read' ) ) {
+                       return true;
+               }
+               $out->addModules( 'ext.PluggableAuthAutoLogin' );
                return true;
        }
 
        /**
         * Implements PersonalUrls hook.
         * See https://www.mediawiki.org/wiki/Manual:Hooks/PersonalUrls
+        * Removes logout link from skin if auto login is enabled.
         *
         * @since 1.0
         *
@@ -129,17 +174,5 @@
                        unset( $personal_urls['logout'] );
                }
                return true;
-       }
-
-       /**
-        * Implements ResourceLoaderGetConfigVars hook.
-        * See 
https://www.mediawiki.org/wiki/Manual:Hooks/ResourceLoaderGetConfigVars
-        *
-        * @since 2.0
-        *
-        * @param array &$vars
-        */
-       public static function onResourceLoaderGetConfigVars( array &$vars ) {
-               $vars['wgWhitelistRead'] = $GLOBALS['wgWhitelistRead'];
        }
 }
diff --git a/ext.PluggableAuthAutoLogin.js b/ext.PluggableAuthAutoLogin.js
index cf5f12c..990c78f 100644
--- a/ext.PluggableAuthAutoLogin.js
+++ b/ext.PluggableAuthAutoLogin.js
@@ -21,56 +21,35 @@
  */
 
 ( function ( mw ) {
-       // Are we already logged in?
-       if ( mw.config.get( 'wgUserName' ) !== null ) {
-               return;
-       }
-
-       var pageName = mw.config.get( 'wgPageName' );
-       var namespace = mw.config.get( 'wgCanonicalNamespace' );
-       if ( namespace === 'Special' ) {
-               var specialPageName = mw.config.get( 
'wgCanonicalSpecialPageName' );
-               if ( specialPageName === 'Userlogin' || pageName === 
'Special:UserLogin' ) {
-                       return;
-               } else if ( specialPageName === 'Badtitle' || pageName === 
'Special:Badtitle' ) {
-                       pageName = null;
-               } else {
-                       pageName = namespace + ':' + specialPageName;
-               }
-       }
-
-       // Is this page whitelisted?
-       var whitelist = mw.config.get( 'wgWhitelistRead' );
-       for ( i = 0; i < whitelist.length; i++ ) {
-               if ( whitelist[i] === pageName ) {
-                       return;
-               }
-       }
-
-       // Redirect to Special:UserLogin
        mw.loader.using( [ 'mediawiki.Uri', 'mediawiki.Title' ], function () {
+               var pageName = mw.config.get( 'wgPageName' );
                var uri = new mw.Uri();
-               if ( pageName === null ) {
-                       if ( uri.query.title === undefined ) {
-                               var articlePath = mw.config.get( 
'wgArticlePath' );
-                               articlePath = articlePath.replace( '$1', '(.*)' 
);
-                               var re = new RegExp( articlePath );
-                               var path = uri.path;
-                               var matches = path.match( re );
-                               if ( matches.length > 1 ) {
-                                       pageName = matches[1];
+               if ( mw.config.get( 'wgCanonicalNamespace' ) === 'Special' ) {
+                       var specialPageName = mw.config.get( 
'wgCanonicalSpecialPageName' );
+                       if ( specialPageName === 'Userlogin' ) {
+                               return;
+                       } else if ( specialPageName === 'Badtitle' ) {
+                               if ( uri.query.title === undefined ) {
+                                       var articlePath = mw.config.get( 
'wgArticlePath' );
+                                       articlePath = articlePath.replace( 
'$1', '(.*)' );
+                                       var re = new RegExp( articlePath );
+                                       var path = uri.path;
+                                       var matches = path.match( re );
+                                       if ( matches.length > 1 ) {
+                                               pageName = matches[1];
+                                       } else {
+                                               pageName = mw.config.get( 
'wgMainPageName' );
+                                       }
                                } else {
-                                       pageName = mw.config.get( 
'wgMainPageName' );
+                                       pageName = uri.query.title;
                                }
-                       } else {
-                               pageName = uri.query.title;
                        }
                }
                delete uri.query.title;
                var query = uri.getQueryString();
-               var loginPageName = "Special:Userlogin";
-               var loginUrl = new mw.Title( loginPageName ).getUrl(
-                       { returnto: pageName, returntoquery: query } );
+               var namespace = mw.config.get( 'wgNamespaceIds' ).special;
+               var title = mw.Title.makeTitle( namespace, 'Userlogin' );
+               var loginUrl = title.getUrl( { returnto: pageName, 
returntoquery: query } );
                window.location = loginUrl;
        } );
 }( mediaWiki ) );
diff --git a/extension.json b/extension.json
index 082b10c..6015207 100644
--- a/extension.json
+++ b/extension.json
@@ -41,11 +41,11 @@
        },
        "callback": "PluggableAuthHooks::onRegistration",
        "Hooks": {
+               "TitleReadWhitelist": 
"PluggableAuthHooks::onTitleReadWhitelist",
                "UserLogoutComplete": "PluggableAuthHooks::deauthenticate",
                "AuthChangeFormFields": 
"PluggableAuthHooks::onAuthChangeFormFields",
                "BeforePageDisplay": "PluggableAuthHooks::autoLoginInit",
-               "PersonalUrls": "PluggableAuthHooks::modifyLoginURLs",
-               "ResourceLoaderGetConfigVars": 
"PluggableAuthHooks::onResourceLoaderGetConfigVars"
+               "PersonalUrls": "PluggableAuthHooks::modifyLoginURLs"
        },
        "AuthManagerAutoConfig": {
                "primaryauth": {
@@ -55,6 +55,9 @@
                        }
                }
        },
+       "PluggableAuthLoginSpecialPages": [
+               "PluggableAuthLogin"
+       ],
        "config": {
                "PluggableAuth_EnableAutoLogin": false,
                "PluggableAuth_EnableLocalLogin": false

-- 
To view, visit https://gerrit.wikimedia.org/r/315502
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: I77fe4d8c66df632b8a9c647ab3e69ac7f2fb86be
Gerrit-PatchSet: 4
Gerrit-Project: mediawiki/extensions/PluggableAuth
Gerrit-Branch: master
Gerrit-Owner: Cicalese <cical...@mitre.org>
Gerrit-Reviewer: Cicalese <cical...@mitre.org>
Gerrit-Reviewer: HermannSchwaerzler <hermann.schwaerz...@uibk.ac.at>
Gerrit-Reviewer: Legoktm <legoktm.wikipe...@gmail.com>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to