X-Git-Url: https://scripts.mit.edu/gitweb/autoinstallsdev/mediawiki.git/blobdiff_plain/19e297c21b10b1b8a3acad5e73fc71dcb35db44a..6932310fd58ebef145fa01eb76edf7150284d8ea:/maintenance/resetUserEmail.php diff --git a/maintenance/resetUserEmail.php b/maintenance/resetUserEmail.php new file mode 100644 index 00000000..8d0873f1 --- /dev/null +++ b/maintenance/resetUserEmail.php @@ -0,0 +1,72 @@ +addDescription( "Resets a user's email" ); + $this->addArg( 'user', 'Username or user ID, if starts with #', true ); + $this->addArg( 'email', 'Email to assign' ); + + $this->addOption( 'no-reset-password', 'Don\'t reset the user\'s password', false, false ); + + 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(); + + if ( !$this->hasOption( 'no-reset-password' ) ) { + // Kick whomever is currently controlling the account off + $user->setPassword( PasswordFactory::generateRandomPasswordString( 128 ) ); + } + } +} + +$maintClass = 'ResetUserEmail'; +require_once RUN_MAINTENANCE_IF_MAIN;