Merge "API: Allow anonymous CORS from anywhere, when specifically requested"
[lhc/web/wiklou.git] / maintenance / createAndPromote.php
index 9abc297..3591b9c 100644 (file)
@@ -56,6 +56,8 @@ class CreateAndPromote extends Maintenance {
        }
 
        public function execute() {
+               global $wgDisableAuthManager;
+
                $username = $this->getArg( 0 );
                $password = $this->getArg( 1 );
                $force = $this->hasOption( 'force' );
@@ -79,11 +81,16 @@ class CreateAndPromote extends Maintenance {
 
                $groups = array_filter( self::$permitRoles, [ $this, 'hasOption' ] );
                if ( $this->hasOption( 'custom-groups' ) ) {
+                       $allGroups = array_flip( User::getAllGroups() );
                        $customGroupsText = $this->getOption( 'custom-groups' );
                        if ( $customGroupsText !== '' ) {
                                $customGroups = explode( ',', $customGroupsText );
                                foreach ( $customGroups as $customGroup ) {
-                                       $groups[] = trim( $customGroup );
+                                       if ( isset( $allGroups[$customGroup] ) ) {
+                                               $groups[] = trim( $customGroup );
+                                       } else {
+                                               $this->output( "$customGroup is not a valid group, ignoring!\n" );
+                                       }
                                }
                        }
                }
@@ -115,7 +122,18 @@ class CreateAndPromote extends Maintenance {
                if ( $password ) {
                        # Try to set the password
                        try {
-                               $user->setPassword( $password );
+                               if ( $wgDisableAuthManager ) {
+                                       $user->setPassword( $password );
+                               } else {
+                                       $status = $user->changeAuthenticationData( [
+                                               'username' => $user->getName(),
+                                               'password' => $password,
+                                               'retype' => $password,
+                                       ] );
+                                       if ( !$status->isGood() ) {
+                                               throw new PasswordError( $status->getWikiText( null, null, 'en' ) );
+                                       }
+                               }
                                if ( $exists ) {
                                        $this->output( "Password set.\n" );
                                        $user->saveSettings();