jenkins-bot has submitted this change and it was merged.
Change subject: Reorganizing things
......................................................................
Reorganizing things
* Moved core patches into the new patches/ directory
* Moved the main MediaWikiAuthPlugin class from the MediaWikiAuth.php file
* into its own, new file (MediaWikiAuthPlugin.class.php)
The only code change here is adding the MediaWikiAuthPlugin class to the
autoloader in MediaWikiAuth.php.
Change-Id: Ib5cc6ef78fabf00946bbed0c801d133777ece798
---
M MediaWikiAuth.php
A MediaWikiAuthPlugin.class.php
R patches/SpecialUserlogin.php-1.17alpha.r67921.patch
R patches/SpecialUserlogin.php-1.20.0.patch
R patches/SpecialUserlogin.php-1.21.2.patch
R patches/SpecialUserlogin.php-1.23.3.patch
6 files changed, 408 insertions(+), 406 deletions(-)
Approvals:
Legoktm: Looks good to me, approved
jenkins-bot: Verified
diff --git a/MediaWikiAuth.php b/MediaWikiAuth.php
index dbc0598..3aa8c8b 100644
--- a/MediaWikiAuth.php
+++ b/MediaWikiAuth.php
@@ -49,409 +49,4 @@
$wgMessagesDirs['MediaWikiAuth'] = __DIR__ . '/i18n';
$wgExtensionMessagesFiles['MediaWikiAuth'] = dirname( __FILE__ ) .
'/MediaWikiAuth.i18n.php';
-class MediaWikiAuthPlugin extends AuthPlugin {
- private $snoopy;
- private $old_user_id;
- private $old_user_name;
- #private $old_user_rev_cnt;
- #private $old_user_singlegroup;
-
- function userExists( $username ) {
- # Check against a table of existing names to import
- $dbr = wfGetDB( DB_SLAVE );
-
- # If this table doesn't exist, we can't check this way
- if ( $dbr->tableExists( 'user' ) ) {
- $res = $dbr->select(
- 'user',
- array( 'user_id' ),
- array( 'user_name' => $username ),
- __METHOD__
- );
- $row = $dbr->fetchObject( $res );
- if ( $row ) {
- $this->old_user_id = $row->user_id;
- return true;
- }
- }
- # Just say they exist for now, the authenticate() check will
provide an appropriate
- # error message if the user does not exist on the remote wiki
- return true;
- }
-
- /**
- * This will be called if the user did not exist locally and userExists
returned true
- * Using &$errormsg requires a patch, otherwise it'll always be "bad
password"
- * See Extension:MediaWikiAuth for this patch
- *
- * @param $username Mixed: username
- * @param $password Mixed: password to the above username
- * @param $errormsg Mixed: error message or null
- */
- function authenticate( $username, $password, &$errormsg = null ) {
- $dbr = wfGetDB( DB_SLAVE );
-
- # If the user exists locally, fall back to local auth
- if ( $dbr->tableExists( 'user' ) ) {
- $res = $dbr->select(
- 'user',
- array( 'user_id' ),
- array( 'user_name' => $username ),
- __METHOD__
- );
- $row = $dbr->fetchObject( $res );
- if ( $row ) {
- $this->old_user_id = $row->user_id;
- return false;
- }
- }
- global $wgMediaWikiAuthAPIURL;
-
- # This is loaded here so it isn't loaded needlessly
- if ( !class_exists( 'Snoopy', false ) ) {
- require_once( dirname( __FILE__ ) . '/Snoopy.class.php'
);
- }
- $this->snoopy = new Snoopy();
- $this->snoopy->agent = 'Mozilla/5.0 (compatible; MSIE 9.0;
Windows NT 6.1; Trident/5.0)';
-
- # The user should exist remotely. Let's try to login.
- $login_vars = array(
- 'action' => 'login',
- 'lgname' => $username,
- 'lgpassword' => $password,
- 'format' => 'php'
- );
- do {
- $this->snoopy->submit( $wgMediaWikiAuthAPIURL,
$login_vars );
-
- # Did we get in? Look for result: 'Success'
- $results = unserialize( $this->snoopy->results );
- wfDebugLog( 'MediaWikiAuth', 'Login result:' . print_r(
$results, true ) );
- $errormsg = wfMsg( 'mwa-error-unknown' );
- if ( isset( $results['login'] ) ) {
- $login = $results['login'];
- # This ignores the NoName option as it will be
filtered out before now
- switch ( $login['result'] ) {
- case 'Success':
- # Set cookies from the
successful login
- $this->snoopy->setcookies();
-
- # Did we not have an ID from
earlier? Use the one we're given now
- if ( !isset( $this->old_user_id
) ) {
- $this->old_user_id =
$login['lguserid'];
- # Check if ID already
exists and handle
- $dbr = wfGetDB(
DB_SLAVE );
- $localUser =
$dbr->select(
- 'user',
- 'user_name',
- array(
'user_id' => $this->old_user_id ),
- __METHOD__
- );
- if( $dbr->fetchObject(
$localUser ) ) {
- $resid =
(int)$dbr->selectField(
- 'user',
-
'user_id',
- array(),
-
__METHOD__,
- array(
'ORDER BY' => 'user_id desc' )
- );
-
$this->old_user_id = $resid + 1;
- }
- }
- $this->old_user_name =
$login['lgusername'];
- return true;
-
- case 'NotExists':
- global $wgUser;
- if( $wgUser->isAllowed(
'createaccount' ) ) {
- $errormsg =
wfMsgWikiHtml( 'nosuchuser', htmlspecialchars( $username ) );
- } else {
- $errormsg = wfMsg(
'nosuchusershort', htmlspecialchars( $username ) );
- }
- break;
-
- case 'NeedToken':
- # Set cookies and break out to
resubmit
- $this->snoopy->setcookies();
- $login_vars['lgtoken'] =
$login['token'];
- break;
-
- case 'WrongToken':
- $errormsg = wfMsg(
'mwa-error-wrong-token' );
- break;
-
- case 'EmptyPass':
- $errormsg = wfMsg(
'wrongpasswordempty' );
- break;
-
- case 'WrongPass':
- case 'WrongPluginPass':
- $errormsg = wfMsg(
'wrongpassword' );
- break;
-
- case 'CreateBlocked':
- $errormsg = wfMsg(
'mwa-autocreate-blocked' );
- break;
-
- case 'Throttled':
- $errormsg = wfMsg(
'login-throttled' );
- break;
-
- case 'ResetPass':
- $errormsg = wfMsg(
'mwa-resetpass' );
- break;
- }
- if ( isset( $login['wait'] ) ) {
- $errormsg .= ' ' . wfMsg( 'mwa-wait',
$login['wait'] );
- }
- }
- } while ( isset( $results['login'] ) && $login['result'] ==
'NeedToken' );
-
- # Login failed! Display a message
- return false;
- }
-
- /**
- * We do want to auto-create local accounts when a remote account
exists.
- */
- function autoCreate() {
- return true;
- }
-
- function initUser( &$user, $autocreate = false ) {
- global $wgMediaWikiAuthAPIURL, $wgMediaWikiAuthPrefsURL;
-
- # If autocreate is true (if it isn't, something's very wrong),
- # import preferences, and remove from our local table of names
to be imported
- # $this->snoopy should still be active and logged in at this
point
- if ( $autocreate && !$user->isAnon() && $this->old_user_id ) {
- # Save user settings
- # $user->saveSettings();
-
- $dbw = wfGetDB( DB_MASTER );
- # Set old revisions with the old username to the new
userID
- # (might have been imported with 0, or a temp ID)
- $dbw->update(
- 'revision',
- array( 'rev_user' => $this->old_user_id ),
- array( 'rev_user_text' => $this->old_user_name
),
- __METHOD__
- );
- $dbw->update(
- 'logging',
- array( 'log_user' => $this->old_user_id ),
- array( 'log_user_text' => $this->old_user_name
),
- __METHOD__
- );
-
- # Get correct edit count
- $dbr = wfGetDB( DB_SLAVE );
- $count = $dbr->selectField(
- 'revision',
- 'COUNT(rev_user)',
- array( 'rev_user' => $this->old_user_id ),
- __METHOD__
- );
-
- # Set real user editcount, email, and ID
- $dbw->update(
- 'user',
- array(
- 'user_editcount' => $count,
- 'user_email' => $user->mEmail,
- 'user_id' => $this->old_user_id
- ),
- array( 'user_name' => $user->mName ),
- __METHOD__
- );
- $user->mId = $this->old_user_id;
- $user->mFrom = 'id';
-
- # Get account creation date
- $account_vars = array(
- 'action' => 'query',
- 'list' => 'users',
- 'ususers' => $user->mName,
- 'usprop' => 'registration',
- 'format' => 'php'
- );
- $this->snoopy->submit( $wgMediaWikiAuthAPIURL,
$account_vars );
- $unserializedResults = unserialize(
$this->snoopy->results );
- # Remove formatting from API timestamp; database
expects a plain number
- $results = str_replace(
- array( ':', 'T', 'Z', '-' ),
- '',
-
$unserializedResults['query']['users'][0]['registration']
- );
- # Bogus time? Missing dates default to the current
timestamp; fall back to first edit
- if ( substr( $results, 0, 8 ) == gmdate( 'Ymd', time()
) ) {
- $res = $dbr->select(
- 'revision',
- array( 'rev_timestamp' ),
- array( 'rev_user' => $this->old_user_id
),
- __METHOD__,
- array( 'ORDER BY' => 'rev_timestamp
ASC', 'LIMIT' => 1 )
- );
- if( $res->numRows() ) {
- $results = $dbr->fetchObject( $res
)->rev_timestamp;
- }
- }
- if( is_numeric( $results ) ) {
- $dbw->update(
- 'user',
- array( 'user_registration' => $results
),
- array( 'user_id' => $this->old_user_id
),
- __METHOD__
- );
- }
-
- # Get watchlist
- # FIXME Bad things may happen with large watchlists.
Also need option to not try.
- $watchlist_vars = array(
- 'action' => 'query',
- 'list' => 'watchlistraw',
- 'wrlimit' => '500',
- 'format' => 'php'
- );
- $more = true;
- $wrcontinue = null;
- do {
- if ( $wrcontinue === null ) {
- unset( $watchlist_vars['wrcontinue'] );
- } else {
- $watchlist_vars['wrcontinue'] =
$wrcontinue;
- }
- $this->snoopy->submit( $wgMediaWikiAuthAPIURL,
$watchlist_vars );
- $results = unserialize( $this->snoopy->results
);
-
- if ( empty( $results['watchlistraw'] ) ) {
- break;
- }
- foreach ( $results['watchlistraw'] as $wrEntry
) {
- # Insert the damn thing if it's not a
talkpage
- # For some reason the query returns
talkpages too.
- if ( $wrEntry['ns'] % 2 == 0 ) {
- $watchTitle =
Title::newFromText( $wrEntry['title'] );
- if( $watchTitle instanceOf
Title ) {
- $user->addWatch(
$watchTitle );
- } else {
- wfDebugLog(
'MediaWikiAuth', 'Could not form Title object for ' . $wrEntry['title'] );
- }
- }
- if ( isset( $results['query-continue']
) ) {
- $wrcontinue =
$results['query-continue']['watchlistraw']['wrcontinue'];
- } else {
- $wrcontinue = null;
- }
- $more = !( $wrcontinue === null );
- }
- } while ( $more );
-
- # Get user preferences
- $prefs_vars = array(
- 'action' => 'query',
- 'meta' => 'userinfo',
- 'uiprop' => 'options|email|realname',
- 'format' => 'php'
- );
-
- $this->snoopy->submit( $wgMediaWikiAuthAPIURL,
$prefs_vars );
- $results = unserialize( $this->snoopy->results );
- if ( isset( $results['query'] ) && isset(
$results['query']['userinfo'] ) ) {
- if ( isset(
$results['query']['userinfo']['options'] ) ) {
- $options =
$results['query']['userinfo']['options'];
- # Don't need some options
- $ignoredOptions = array(
- 'widgets', 'showAds', 'theme',
- 'disableeditingtips',
'edit-similar',
- 'skinoverwrite', 'htmlemails',
'marketing',
- 'notifyhonorifics',
'notifychallenge',
- 'notifygift',
'notifyfriendsrequest',
- 'blackbirdenroll',
'marketingallowed',
- 'disablecategorysuggest',
'myhomedisableredirect',
- 'avatar',
'widescreeneditingtips',
- 'disablelinksuggest',
'watchlistdigestclear',
- 'hidefollowedpages',
'enotiffollowedpages',
- 'enotiffollowedminoredits',
'myhomedefaultview',
- 'disablecategoryselect'
- );
- foreach ( $ignoredOptions as $optName )
{
- if ( isset( $options[$optName]
) ) {
- unset(
$options[$optName] );
- }
- }
- $user->mOptions = array_merge(
$user->mOptions, $options );
- }
- // Older wikis might not expose this in the API
(1.15+)
- if ( isset(
$results['query']['userinfo']['email'] ) ) {
- $user->mEmail =
$results['query']['userinfo']['email'];
- wfRunHooks( 'UserSetEmail', array(
$this, &$this->mEmail ) );
- if ( isset(
$results['query']['userinfo']['emailauthenticated'] ) ) {
- $user->confirmEmail();
- } else {
- $user->sendConfirmationMail();
- }
- }
-
- // This is 1.18+
- if ( isset(
$results['query']['userinfo']['realname'] ) ) {
- $user->mRealName =
$results['query']['userinfo']['realname'];
- }
-
- }
-
- if ( !$user->mRealName || !$user->mEmail ) {
- # Backwards-compat screenscraping...
- # Older versions had the user append
?uselang=en; remove that since we'll do that ourselves here.
- $wgMediaWikiAuthPrefsURL = str_replace( array(
'?uselang=en', '&uselang=en' ), '', $wgMediaWikiAuthPrefsURL );
-
- if ( strpos( $wgMediaWikiAuthPrefsURL, '?' ) ) {
- $this->snoopy->fetch(
$wgMediaWikiAuthPrefsURL . '&uselang=qqx' );
- } else {
- $this->snoopy->fetch(
$wgMediaWikiAuthPrefsURL . '?uselang=qqx' );
- }
- $result = $this->snoopy->results;
-
- # wpRealName = 1.15 and older, wprealname =
1.16+
- if ( !$user->mRealName && preg_match(
'^.*wp(R|r)eal(N|n)ame.*value="(.*?)".*^', $result, $matches ) ) {
- $user->setRealName( stripslashes(
html_entity_decode( $matches[3], ENT_QUOTES, 'UTF-8' ) ) );
- }
- # wpUserEmail = 1.15 and older, wpemailaddress
= 1.16+
- if ( $user->mEmail == "" && preg_match(
'^.*(wpUserEmail|wpemailaddress).*value="(.*?)".*^', $result, $matches ) ) {
- $user->mEmail = stripslashes(
html_entity_decode( $matches[2], ENT_QUOTES, 'UTF-8' ) );
- wfRunHooks( 'UserSetEmail', array(
$this, &$this->mEmail ) );
- # We assume the target server knows
what it is doing.
- if (
- strpos( $result,
'(emailauthenticated: ' )
- || strpos( $result,
'(usersignup-user-pref-emailauthenticated)' ) # Wikia
- ) {
- $user->confirmEmail();
- } else {
- $user->sendConfirmationMail();
- }
- }
- }
-
- # Because updating the user object manually doesn't
seem to work
- $dbw->update(
- 'user',
- array(
- 'user_real_name' => $user->mRealName,
- 'user_email' => $user->mEmail,
- 'user_id' => $this->old_user_id
- ),
- array( 'user_id' => $user->mId ),
- __METHOD__
- );
- # May need to set last message date so they don't get
old messages
- }
-
- if ( isset( $this->snoopy ) ) {
- # Logout once we're finished
- $logout_vars = array( 'action' => 'logout' );
- $this->snoopy->submit( $wgMediaWikiAuthAPIURL,
$logout_vars );
- }
- return true;
- }
-}
-
+$wgAutoloadClasses['MediaWikiAuthPlugin'] = __DIR__ .
'/MediaWikiAuthPlugin.class.php';
\ No newline at end of file
diff --git a/MediaWikiAuthPlugin.class.php b/MediaWikiAuthPlugin.class.php
new file mode 100644
index 0000000..4bae5d8
--- /dev/null
+++ b/MediaWikiAuthPlugin.class.php
@@ -0,0 +1,407 @@
+<?php
+
+class MediaWikiAuthPlugin extends AuthPlugin {
+ private $snoopy;
+ private $old_user_id;
+ private $old_user_name;
+ #private $old_user_rev_cnt;
+ #private $old_user_singlegroup;
+
+ function userExists( $username ) {
+ # Check against a table of existing names to import
+ $dbr = wfGetDB( DB_SLAVE );
+
+ # If this table doesn't exist, we can't check this way
+ if ( $dbr->tableExists( 'user' ) ) {
+ $res = $dbr->select(
+ 'user',
+ array( 'user_id' ),
+ array( 'user_name' => $username ),
+ __METHOD__
+ );
+ $row = $dbr->fetchObject( $res );
+ if ( $row ) {
+ $this->old_user_id = $row->user_id;
+ return true;
+ }
+ }
+ # Just say they exist for now, the authenticate() check will
provide an appropriate
+ # error message if the user does not exist on the remote wiki
+ return true;
+ }
+
+ /**
+ * This will be called if the user did not exist locally and userExists
returned true
+ * Using &$errormsg requires a patch, otherwise it'll always be "bad
password"
+ * See Extension:MediaWikiAuth for this patch
+ *
+ * @param $username Mixed: username
+ * @param $password Mixed: password to the above username
+ * @param $errormsg Mixed: error message or null
+ */
+ function authenticate( $username, $password, &$errormsg = null ) {
+ $dbr = wfGetDB( DB_SLAVE );
+
+ # If the user exists locally, fall back to local auth
+ if ( $dbr->tableExists( 'user' ) ) {
+ $res = $dbr->select(
+ 'user',
+ array( 'user_id' ),
+ array( 'user_name' => $username ),
+ __METHOD__
+ );
+ $row = $dbr->fetchObject( $res );
+ if ( $row ) {
+ $this->old_user_id = $row->user_id;
+ return false;
+ }
+ }
+ global $wgMediaWikiAuthAPIURL;
+
+ # This is loaded here so it isn't loaded needlessly
+ if ( !class_exists( 'Snoopy', false ) ) {
+ require_once( dirname( __FILE__ ) . '/Snoopy.class.php'
);
+ }
+ $this->snoopy = new Snoopy();
+ $this->snoopy->agent = 'Mozilla/5.0 (compatible; MSIE 9.0;
Windows NT 6.1; Trident/5.0)';
+
+ # The user should exist remotely. Let's try to login.
+ $login_vars = array(
+ 'action' => 'login',
+ 'lgname' => $username,
+ 'lgpassword' => $password,
+ 'format' => 'php'
+ );
+ do {
+ $this->snoopy->submit( $wgMediaWikiAuthAPIURL,
$login_vars );
+
+ # Did we get in? Look for result: 'Success'
+ $results = unserialize( $this->snoopy->results );
+ wfDebugLog( 'MediaWikiAuth', 'Login result:' . print_r(
$results, true ) );
+ $errormsg = wfMsg( 'mwa-error-unknown' );
+ if ( isset( $results['login'] ) ) {
+ $login = $results['login'];
+ # This ignores the NoName option as it will be
filtered out before now
+ switch ( $login['result'] ) {
+ case 'Success':
+ # Set cookies from the
successful login
+ $this->snoopy->setcookies();
+
+ # Did we not have an ID from
earlier? Use the one we're given now
+ if ( !isset( $this->old_user_id
) ) {
+ $this->old_user_id =
$login['lguserid'];
+ # Check if ID already
exists and handle
+ $dbr = wfGetDB(
DB_SLAVE );
+ $localUser =
$dbr->select(
+ 'user',
+ 'user_name',
+ array(
'user_id' => $this->old_user_id ),
+ __METHOD__
+ );
+ if( $dbr->fetchObject(
$localUser ) ) {
+ $resid =
(int)$dbr->selectField(
+ 'user',
+
'user_id',
+ array(),
+
__METHOD__,
+ array(
'ORDER BY' => 'user_id desc' )
+ );
+
$this->old_user_id = $resid + 1;
+ }
+ }
+ $this->old_user_name =
$login['lgusername'];
+ return true;
+
+ case 'NotExists':
+ global $wgUser;
+ if( $wgUser->isAllowed(
'createaccount' ) ) {
+ $errormsg =
wfMsgWikiHtml( 'nosuchuser', htmlspecialchars( $username ) );
+ } else {
+ $errormsg = wfMsg(
'nosuchusershort', htmlspecialchars( $username ) );
+ }
+ break;
+
+ case 'NeedToken':
+ # Set cookies and break out to
resubmit
+ $this->snoopy->setcookies();
+ $login_vars['lgtoken'] =
$login['token'];
+ break;
+
+ case 'WrongToken':
+ $errormsg = wfMsg(
'mwa-error-wrong-token' );
+ break;
+
+ case 'EmptyPass':
+ $errormsg = wfMsg(
'wrongpasswordempty' );
+ break;
+
+ case 'WrongPass':
+ case 'WrongPluginPass':
+ $errormsg = wfMsg(
'wrongpassword' );
+ break;
+
+ case 'CreateBlocked':
+ $errormsg = wfMsg(
'mwa-autocreate-blocked' );
+ break;
+
+ case 'Throttled':
+ $errormsg = wfMsg(
'login-throttled' );
+ break;
+
+ case 'ResetPass':
+ $errormsg = wfMsg(
'mwa-resetpass' );
+ break;
+ }
+ if ( isset( $login['wait'] ) ) {
+ $errormsg .= ' ' . wfMsg( 'mwa-wait',
$login['wait'] );
+ }
+ }
+ } while ( isset( $results['login'] ) && $login['result'] ==
'NeedToken' );
+
+ # Login failed! Display a message
+ return false;
+ }
+
+ /**
+ * We do want to auto-create local accounts when a remote account
exists.
+ */
+ function autoCreate() {
+ return true;
+ }
+
+ function initUser( &$user, $autocreate = false ) {
+ global $wgMediaWikiAuthAPIURL, $wgMediaWikiAuthPrefsURL;
+
+ # If autocreate is true (if it isn't, something's very wrong),
+ # import preferences, and remove from our local table of names
to be imported
+ # $this->snoopy should still be active and logged in at this
point
+ if ( $autocreate && !$user->isAnon() && $this->old_user_id ) {
+ # Save user settings
+ # $user->saveSettings();
+
+ $dbw = wfGetDB( DB_MASTER );
+ # Set old revisions with the old username to the new
userID
+ # (might have been imported with 0, or a temp ID)
+ $dbw->update(
+ 'revision',
+ array( 'rev_user' => $this->old_user_id ),
+ array( 'rev_user_text' => $this->old_user_name
),
+ __METHOD__
+ );
+ $dbw->update(
+ 'logging',
+ array( 'log_user' => $this->old_user_id ),
+ array( 'log_user_text' => $this->old_user_name
),
+ __METHOD__
+ );
+
+ # Get correct edit count
+ $dbr = wfGetDB( DB_SLAVE );
+ $count = $dbr->selectField(
+ 'revision',
+ 'COUNT(rev_user)',
+ array( 'rev_user' => $this->old_user_id ),
+ __METHOD__
+ );
+
+ # Set real user editcount, email, and ID
+ $dbw->update(
+ 'user',
+ array(
+ 'user_editcount' => $count,
+ 'user_email' => $user->mEmail,
+ 'user_id' => $this->old_user_id
+ ),
+ array( 'user_name' => $user->mName ),
+ __METHOD__
+ );
+ $user->mId = $this->old_user_id;
+ $user->mFrom = 'id';
+
+ # Get account creation date
+ $account_vars = array(
+ 'action' => 'query',
+ 'list' => 'users',
+ 'ususers' => $user->mName,
+ 'usprop' => 'registration',
+ 'format' => 'php'
+ );
+ $this->snoopy->submit( $wgMediaWikiAuthAPIURL,
$account_vars );
+ $unserializedResults = unserialize(
$this->snoopy->results );
+ # Remove formatting from API timestamp; database
expects a plain number
+ $results = str_replace(
+ array( ':', 'T', 'Z', '-' ),
+ '',
+
$unserializedResults['query']['users'][0]['registration']
+ );
+ # Bogus time? Missing dates default to the current
timestamp; fall back to first edit
+ if ( substr( $results, 0, 8 ) == gmdate( 'Ymd', time()
) ) {
+ $res = $dbr->select(
+ 'revision',
+ array( 'rev_timestamp' ),
+ array( 'rev_user' => $this->old_user_id
),
+ __METHOD__,
+ array( 'ORDER BY' => 'rev_timestamp
ASC', 'LIMIT' => 1 )
+ );
+ if( $res->numRows() ) {
+ $results = $dbr->fetchObject( $res
)->rev_timestamp;
+ }
+ }
+ if( is_numeric( $results ) ) {
+ $dbw->update(
+ 'user',
+ array( 'user_registration' => $results
),
+ array( 'user_id' => $this->old_user_id
),
+ __METHOD__
+ );
+ }
+
+ # Get watchlist
+ # FIXME Bad things may happen with large watchlists.
Also need option to not try.
+ $watchlist_vars = array(
+ 'action' => 'query',
+ 'list' => 'watchlistraw',
+ 'wrlimit' => '500',
+ 'format' => 'php'
+ );
+ $more = true;
+ $wrcontinue = null;
+ do {
+ if ( $wrcontinue === null ) {
+ unset( $watchlist_vars['wrcontinue'] );
+ } else {
+ $watchlist_vars['wrcontinue'] =
$wrcontinue;
+ }
+ $this->snoopy->submit( $wgMediaWikiAuthAPIURL,
$watchlist_vars );
+ $results = unserialize( $this->snoopy->results
);
+
+ if ( empty( $results['watchlistraw'] ) ) {
+ break;
+ }
+ foreach ( $results['watchlistraw'] as $wrEntry
) {
+ # Insert the damn thing if it's not a
talkpage
+ # For some reason the query returns
talkpages too.
+ if ( $wrEntry['ns'] % 2 == 0 ) {
+ $watchTitle =
Title::newFromText( $wrEntry['title'] );
+ if( $watchTitle instanceOf
Title ) {
+ $user->addWatch(
$watchTitle );
+ } else {
+ wfDebugLog(
'MediaWikiAuth', 'Could not form Title object for ' . $wrEntry['title'] );
+ }
+ }
+ if ( isset( $results['query-continue']
) ) {
+ $wrcontinue =
$results['query-continue']['watchlistraw']['wrcontinue'];
+ } else {
+ $wrcontinue = null;
+ }
+ $more = !( $wrcontinue === null );
+ }
+ } while ( $more );
+
+ # Get user preferences
+ $prefs_vars = array(
+ 'action' => 'query',
+ 'meta' => 'userinfo',
+ 'uiprop' => 'options|email|realname',
+ 'format' => 'php'
+ );
+
+ $this->snoopy->submit( $wgMediaWikiAuthAPIURL,
$prefs_vars );
+ $results = unserialize( $this->snoopy->results );
+ if ( isset( $results['query'] ) && isset(
$results['query']['userinfo'] ) ) {
+ if ( isset(
$results['query']['userinfo']['options'] ) ) {
+ $options =
$results['query']['userinfo']['options'];
+ # Don't need some options
+ $ignoredOptions = array(
+ 'widgets', 'showAds', 'theme',
+ 'disableeditingtips',
'edit-similar',
+ 'skinoverwrite', 'htmlemails',
'marketing',
+ 'notifyhonorifics',
'notifychallenge',
+ 'notifygift',
'notifyfriendsrequest',
+ 'blackbirdenroll',
'marketingallowed',
+ 'disablecategorysuggest',
'myhomedisableredirect',
+ 'avatar',
'widescreeneditingtips',
+ 'disablelinksuggest',
'watchlistdigestclear',
+ 'hidefollowedpages',
'enotiffollowedpages',
+ 'enotiffollowedminoredits',
'myhomedefaultview',
+ 'disablecategoryselect'
+ );
+ foreach ( $ignoredOptions as $optName )
{
+ if ( isset( $options[$optName]
) ) {
+ unset(
$options[$optName] );
+ }
+ }
+ $user->mOptions = array_merge(
$user->mOptions, $options );
+ }
+ // Older wikis might not expose this in the API
(1.15+)
+ if ( isset(
$results['query']['userinfo']['email'] ) ) {
+ $user->mEmail =
$results['query']['userinfo']['email'];
+ wfRunHooks( 'UserSetEmail', array(
$this, &$this->mEmail ) );
+ if ( isset(
$results['query']['userinfo']['emailauthenticated'] ) ) {
+ $user->confirmEmail();
+ } else {
+ $user->sendConfirmationMail();
+ }
+ }
+
+ // This is 1.18+
+ if ( isset(
$results['query']['userinfo']['realname'] ) ) {
+ $user->mRealName =
$results['query']['userinfo']['realname'];
+ }
+
+ }
+
+ if ( !$user->mRealName || !$user->mEmail ) {
+ # Backwards-compat screenscraping...
+ # Older versions had the user append
?uselang=en; remove that since we'll do that ourselves here.
+ $wgMediaWikiAuthPrefsURL = str_replace( array(
'?uselang=en', '&uselang=en' ), '', $wgMediaWikiAuthPrefsURL );
+
+ if ( strpos( $wgMediaWikiAuthPrefsURL, '?' ) ) {
+ $this->snoopy->fetch(
$wgMediaWikiAuthPrefsURL . '&uselang=qqx' );
+ } else {
+ $this->snoopy->fetch(
$wgMediaWikiAuthPrefsURL . '?uselang=qqx' );
+ }
+ $result = $this->snoopy->results;
+
+ # wpRealName = 1.15 and older, wprealname =
1.16+
+ if ( !$user->mRealName && preg_match(
'^.*wp(R|r)eal(N|n)ame.*value="(.*?)".*^', $result, $matches ) ) {
+ $user->setRealName( stripslashes(
html_entity_decode( $matches[3], ENT_QUOTES, 'UTF-8' ) ) );
+ }
+ # wpUserEmail = 1.15 and older, wpemailaddress
= 1.16+
+ if ( $user->mEmail == "" && preg_match(
'^.*(wpUserEmail|wpemailaddress).*value="(.*?)".*^', $result, $matches ) ) {
+ $user->mEmail = stripslashes(
html_entity_decode( $matches[2], ENT_QUOTES, 'UTF-8' ) );
+ wfRunHooks( 'UserSetEmail', array(
$this, &$this->mEmail ) );
+ # We assume the target server knows
what it is doing.
+ if (
+ strpos( $result,
'(emailauthenticated: ' )
+ || strpos( $result,
'(usersignup-user-pref-emailauthenticated)' ) # Wikia
+ ) {
+ $user->confirmEmail();
+ } else {
+ $user->sendConfirmationMail();
+ }
+ }
+ }
+
+ # Because updating the user object manually doesn't
seem to work
+ $dbw->update(
+ 'user',
+ array(
+ 'user_real_name' => $user->mRealName,
+ 'user_email' => $user->mEmail,
+ 'user_id' => $this->old_user_id
+ ),
+ array( 'user_id' => $user->mId ),
+ __METHOD__
+ );
+ # May need to set last message date so they don't get
old messages
+ }
+
+ if ( isset( $this->snoopy ) ) {
+ # Logout once we're finished
+ $logout_vars = array( 'action' => 'logout' );
+ $this->snoopy->submit( $wgMediaWikiAuthAPIURL,
$logout_vars );
+ }
+ return true;
+ }
+}
\ No newline at end of file
diff --git a/SpecialUserlogin.php-1.17alpha.r67921.patch
b/patches/SpecialUserlogin.php-1.17alpha.r67921.patch
similarity index 100%
rename from SpecialUserlogin.php-1.17alpha.r67921.patch
rename to patches/SpecialUserlogin.php-1.17alpha.r67921.patch
diff --git a/SpecialUserlogin.php-1.20.0.patch
b/patches/SpecialUserlogin.php-1.20.0.patch
similarity index 100%
rename from SpecialUserlogin.php-1.20.0.patch
rename to patches/SpecialUserlogin.php-1.20.0.patch
diff --git a/SpecialUserlogin.php-1.21.2.patch
b/patches/SpecialUserlogin.php-1.21.2.patch
similarity index 100%
rename from SpecialUserlogin.php-1.21.2.patch
rename to patches/SpecialUserlogin.php-1.21.2.patch
diff --git a/SpecialUserlogin.php-1.23.3.patch
b/patches/SpecialUserlogin.php-1.23.3.patch
similarity index 100%
rename from SpecialUserlogin.php-1.23.3.patch
rename to patches/SpecialUserlogin.php-1.23.3.patch
--
To view, visit https://gerrit.wikimedia.org/r/184232
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: Ib5cc6ef78fabf00946bbed0c801d133777ece798
Gerrit-PatchSet: 3
Gerrit-Project: mediawiki/extensions/MediaWikiAuth
Gerrit-Branch: master
Gerrit-Owner: Jack Phoenix <[email protected]>
Gerrit-Reviewer: Bartosz DziewoĆski <[email protected]>
Gerrit-Reviewer: Daniel Friesen <[email protected]>
Gerrit-Reviewer: Legoktm <[email protected]>
Gerrit-Reviewer: jenkins-bot <>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits