$this->api->getApiUrl(), 'createtoken' => $this->api->getToken( 'createaccount' ), 'username' => $username, 'password' => $password, 'retype' => $password, ]; if ( !is_null( $email ) ) { $params['email'] = $email; } try { $result = $this->api->postRequest( new SimpleRequest( 'createaccount', $params ) ); return $result['createaccount']['status'] === 'PASS'; } catch ( UsageException $exception ) { // If the above request failed, try again in the old way. if ( $exception->getApiCode() === 'noname' ) { return $this->createPreOneTwentySeven( $params ); } throw $exception; } } /** * Create a user in the pre 1.27 manner. * @link https://www.mediawiki.org/wiki/API:Account_creation/pre-1.27 * @return bool */ protected function createPreOneTwentySeven( $params ) { $newParams = [ 'name' => $params['username'], 'password' => $params['password'], ]; if ( array_key_exists( 'email', $params ) ) { $newParams['email'] = $params['email']; } // First get the token. $tokenRequest = new SimpleRequest( 'createaccount', $newParams ); $result = $this->api->postRequest( $tokenRequest ); if ( $result['createaccount']['result'] == 'NeedToken' ) { // Then send the token to create the account. $newParams['token'] = $result['createaccount']['token']; $request = new SimpleRequest( 'createaccount', $newParams ); $result = $this->api->postRequest( $request ); } return ( $result['createaccount']['result'] === 'Success' ); } }