From: Max Semenik Date: Mon, 23 Nov 2015 23:32:33 +0000 (-0800) Subject: Add script to reset user emails X-Git-Tag: 1.31.0-rc.0~8140 X-Git-Url: http://git.cyclocoop.org/%22.%24h.%22?a=commitdiff_plain;h=362403ccd5c18a499a4ad138418a1148bc3b6cf1;p=lhc%2Fweb%2Fwiklou.git Add script to reset user emails Current way to do it, via eval.php, is slightly scary. Change-Id: I2b875326a0eb1e6d1f4bc758b8ac97b8f9324c4e --- diff --git a/RELEASE-NOTES-1.27 b/RELEASE-NOTES-1.27 index c5356c151c..a79a7b280e 100644 --- a/RELEASE-NOTES-1.27 +++ b/RELEASE-NOTES-1.27 @@ -305,6 +305,8 @@ changes to languages because of Phabricator reports. together but instead pick the final one, similar to image syntax. * XML-like parser tags (such as ), when unclosed, will be left unparsed rather than consume everything until the end of the page. +* New maintenance script resetUserEmail.php allows sysadmins to reset user emails in case + a user forgot password/account was stolen. == Compatibility == diff --git a/maintenance/resetUserEmail.php b/maintenance/resetUserEmail.php new file mode 100644 index 0000000000..50f096503a --- /dev/null +++ b/maintenance/resetUserEmail.php @@ -0,0 +1,66 @@ +mDescription = "Resets a user's email"; + $this->addArg( 'user', 'Username or user ID, if starts with #', true ); + $this->addArg( 'email', 'Email to assign' ); + parent::__construct(); + } + + public function execute() { + $userName = $this->getArg( 0 ); + if ( preg_match( '/^#\d+$/', $userName ) ) { + $user = User::newFromId( substr( $userName, 1 ) ); + } else { + $user = User::newFromName( $userName ); + } + if ( !$user || !$user->getId() || !$user->loadFromId() ) { + $this->error( "Error: user '$userName' does not exist\n", 1 ); + } + + $email = $this->getArg( 1 ); + if ( !Sanitizer::validateEmail( $email ) ) { + $this->error( "Error: email '$email' is not valid\n", 1 ); + } + + // Code from https://wikitech.wikimedia.org/wiki/Password_reset + $user->setEmail( $email ); + $user->setEmailAuthenticationTimestamp( wfTimestampNow() ); + $user->saveSettings(); + // Kick whomever is currently controlling the account off + $user->setPassword( PasswordFactory::generateRandomPasswordString( 128 ) ); + } +} + +$maintClass = 'ResetUserEmail'; +require_once RUN_MAINTENANCE_IF_MAIN;