MediaWiki  master
ApiAMCreateAccount.php
Go to the documentation of this file.
1 <?php
25 
31 class ApiAMCreateAccount extends ApiBase {
32 
33  public function __construct( ApiMain $main, $action ) {
34  parent::__construct( $main, $action, 'create' );
35  }
36 
37  public function getFinalDescription() {
38  // A bit of a hack to append 'api-help-authmanager-general-usage'
39  $msgs = parent::getFinalDescription();
40  $msgs[] = ApiBase::makeMessage( 'api-help-authmanager-general-usage', $this->getContext(), [
41  $this->getModulePrefix(),
42  $this->getModuleName(),
43  $this->getModulePath(),
44  AuthManager::ACTION_CREATE,
45  self::needsToken(),
46  ] );
47  return $msgs;
48  }
49 
50  public function execute() {
51  $params = $this->extractRequestParams();
52 
53  $this->requireAtLeastOneParameter( $params, 'continue', 'returnurl' );
54 
55  if ( $params['returnurl'] !== null ) {
56  $bits = wfParseUrl( $params['returnurl'] );
57  if ( !$bits || $bits['scheme'] === '' ) {
58  $encParamName = $this->encodeParamName( 'returnurl' );
59  $this->dieWithError(
60  [ 'apierror-badurl', $encParamName, wfEscapeWikiText( $params['returnurl'] ) ],
61  "badurl_{$encParamName}"
62  );
63  }
64  }
65 
66  $helper = new ApiAuthManagerHelper( $this );
67  $manager = AuthManager::singleton();
68 
69  // Make sure it's possible to create accounts
70  if ( !$manager->canCreateAccounts() ) {
71  $this->getResult()->addValue( null, 'createaccount', $helper->formatAuthenticationResponse(
72  AuthenticationResponse::newFail(
73  $this->msg( 'userlogin-cannot-' . AuthManager::ACTION_CREATE )
74  )
75  ) );
76  $helper->logAuthenticationResult( 'accountcreation',
77  'userlogin-cannot-' . AuthManager::ACTION_CREATE );
78  return;
79  }
80 
81  // Perform the create step
82  if ( $params['continue'] ) {
83  $reqs = $helper->loadAuthenticationRequests( AuthManager::ACTION_CREATE_CONTINUE );
84  $res = $manager->continueAccountCreation( $reqs );
85  } else {
86  $reqs = $helper->loadAuthenticationRequests( AuthManager::ACTION_CREATE );
87  if ( $params['preservestate'] ) {
88  $req = $helper->getPreservedRequest();
89  if ( $req ) {
90  $reqs[] = $req;
91  }
92  }
93  $res = $manager->beginAccountCreation( $this->getUser(), $reqs, $params['returnurl'] );
94  }
95 
96  $this->getResult()->addValue( null, 'createaccount',
97  $helper->formatAuthenticationResponse( $res ) );
98  $helper->logAuthenticationResult( 'accountcreation', $res );
99  }
100 
101  public function isReadMode() {
102  return false;
103  }
104 
105  public function isWriteMode() {
106  return true;
107  }
108 
109  public function needsToken() {
110  return 'createaccount';
111  }
112 
113  public function getAllowedParams() {
114  $ret = ApiAuthManagerHelper::getStandardParams( AuthManager::ACTION_CREATE,
115  'requests', 'messageformat', 'mergerequestfields', 'preservestate', 'returnurl', 'continue'
116  );
117  $ret['preservestate'][ApiBase::PARAM_HELP_MSG_APPEND][] =
118  'apihelp-createaccount-param-preservestate';
119  return $ret;
120  }
121 
122  public function dynamicParameterDocumentation() {
123  return [ 'api-help-authmanagerhelper-additional-params', AuthManager::ACTION_CREATE ];
124  }
125 
126  protected function getExamplesMessages() {
127  return [
128  'action=createaccount&username=Example&password=ExamplePassword&retype=ExamplePassword'
129  . '&createreturnurl=http://example.org/&createtoken=123ABC'
130  => 'apihelp-createaccount-example-create',
131  ];
132  }
133 
134  public function getHelpUrls() {
135  return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Account_creation';
136  }
137 }
requireAtLeastOneParameter( $params,... $required)
Die if none of a certain set of parameters is set and not false.
Definition: ApiBase.php:953
wfEscapeWikiText( $text)
Escapes the given text so that it may be output using addWikiText() without any linking, formatting, etc.
getResult()
Get the result object.
Definition: ApiBase.php:640
wfParseUrl( $url)
parse_url() work-alike, but non-broken.
dieWithError( $msg, $code=null, $data=null, $httpCode=null)
Abort execution with an error.
Definition: ApiBase.php:2006
extractRequestParams( $options=[])
Using getAllowedParams(), this function makes an array of the values provided by the user...
Definition: ApiBase.php:761
static makeMessage( $msg, IContextSource $context, array $params=null)
Create a Message from a string or array.
Definition: ApiBase.php:1792
const PARAM_HELP_MSG_APPEND
((string|array|Message)[]) Specify additional i18n messages to append to the normal message for this ...
Definition: ApiBase.php:138
getModulePath()
Get the path to this module.
Definition: ApiBase.php:584
getContext()
Get the base IContextSource object.
This is the main API class, used for both external and internal processing.
Definition: ApiMain.php:42
getModuleName()
Get the name of the module being executed by this instance.
Definition: ApiBase.php:520
static getStandardParams( $action,... $wantedParams)
Fetch the standard parameters this helper recognizes.
encodeParamName( $paramName)
This method mangles parameter name based on the prefix supplied to the constructor.
Definition: ApiBase.php:739
Create an account with AuthManager.
getModulePrefix()
Get parameter prefix (usually two letters or an empty string).
Definition: ApiBase.php:528
This abstract class implements many basic API functions, and is the base of all API classes...
Definition: ApiBase.php:42
Helper class for AuthManager-using API modules.
__construct(ApiMain $main, $action)