MediaWiki  master
ApiAMCreateAccount.php
Go to the documentation of this file.
1 <?php
25 
31 class ApiAMCreateAccount extends ApiBase {
32 
34  private $authManager;
35 
41  public function __construct(
42  ApiMain $main,
43  $action,
45  ) {
46  parent::__construct( $main, $action, 'create' );
47  $this->authManager = $authManager;
48  }
49 
50  public function getFinalDescription() {
51  // A bit of a hack to append 'api-help-authmanager-general-usage'
52  $msgs = parent::getFinalDescription();
53  $msgs[] = ApiBase::makeMessage( 'api-help-authmanager-general-usage', $this->getContext(), [
54  $this->getModulePrefix(),
55  $this->getModuleName(),
56  $this->getModulePath(),
57  AuthManager::ACTION_CREATE,
58  self::needsToken(),
59  ] );
60  return $msgs;
61  }
62 
63  public function execute() {
64  $params = $this->extractRequestParams();
65 
66  $this->requireAtLeastOneParameter( $params, 'continue', 'returnurl' );
67 
68  if ( $params['returnurl'] !== null ) {
69  $bits = wfParseUrl( $params['returnurl'] );
70  if ( !$bits || $bits['scheme'] === '' ) {
71  $encParamName = $this->encodeParamName( 'returnurl' );
72  $this->dieWithError(
73  [ 'apierror-badurl', $encParamName, wfEscapeWikiText( $params['returnurl'] ) ],
74  "badurl_{$encParamName}"
75  );
76  }
77  }
78 
79  $helper = new ApiAuthManagerHelper( $this, $this->authManager );
80 
81  // Make sure it's possible to create accounts
82  if ( !$this->authManager->canCreateAccounts() ) {
83  $this->getResult()->addValue( null, 'createaccount', $helper->formatAuthenticationResponse(
84  AuthenticationResponse::newFail(
85  $this->msg( 'userlogin-cannot-' . AuthManager::ACTION_CREATE )
86  )
87  ) );
88  $helper->logAuthenticationResult( 'accountcreation',
89  'userlogin-cannot-' . AuthManager::ACTION_CREATE );
90  return;
91  }
92 
93  // Perform the create step
94  if ( $params['continue'] ) {
95  $reqs = $helper->loadAuthenticationRequests( AuthManager::ACTION_CREATE_CONTINUE );
96  $res = $this->authManager->continueAccountCreation( $reqs );
97  } else {
98  $reqs = $helper->loadAuthenticationRequests( AuthManager::ACTION_CREATE );
99  if ( $params['preservestate'] ) {
100  $req = $helper->getPreservedRequest();
101  if ( $req ) {
102  $reqs[] = $req;
103  }
104  }
105  $res = $this->authManager->beginAccountCreation(
106  $this->getAuthority(),
107  $reqs,
108  $params['returnurl']
109  );
110  }
111 
112  $this->getResult()->addValue( null, 'createaccount',
113  $helper->formatAuthenticationResponse( $res ) );
114  $helper->logAuthenticationResult( 'accountcreation', $res );
115  }
116 
117  public function isReadMode() {
118  return false;
119  }
120 
121  public function isWriteMode() {
122  return true;
123  }
124 
125  public function needsToken() {
126  return 'createaccount';
127  }
128 
129  public function getAllowedParams() {
130  $ret = ApiAuthManagerHelper::getStandardParams( AuthManager::ACTION_CREATE,
131  'requests', 'messageformat', 'mergerequestfields', 'preservestate', 'returnurl', 'continue'
132  );
133  $ret['preservestate'][ApiBase::PARAM_HELP_MSG_APPEND][] =
134  'apihelp-createaccount-param-preservestate';
135  return $ret;
136  }
137 
138  public function dynamicParameterDocumentation() {
139  return [ 'api-help-authmanagerhelper-additional-params', AuthManager::ACTION_CREATE ];
140  }
141 
142  protected function getExamplesMessages() {
143  return [
144  'action=createaccount&username=Example&password=ExamplePassword&retype=ExamplePassword'
145  . '&createreturnurl=http://example.org/&createtoken=123ABC'
146  => 'apihelp-createaccount-example-create',
147  ];
148  }
149 
150  public function getHelpUrls() {
151  return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Account_creation';
152  }
153 }
ApiMain
This is the main API class, used for both external and internal processing.
Definition: ApiMain.php:49
ContextSource\getContext
getContext()
Get the base IContextSource object.
Definition: ContextSource.php:47
ApiAMCreateAccount\getAllowedParams
getAllowedParams()
Returns an array of allowed parameters (parameter name) => (default value) or (parameter name) => (ar...
Definition: ApiAMCreateAccount.php:129
ApiAMCreateAccount\getHelpUrls
getHelpUrls()
Return links to more detailed help pages about the module.
Definition: ApiAMCreateAccount.php:150
ApiBase\dieWithError
dieWithError( $msg, $code=null, $data=null, $httpCode=null)
Abort execution with an error.
Definition: ApiBase.php:1436
ApiBase\getResult
getResult()
Get the result object.
Definition: ApiBase.php:628
ApiAMCreateAccount\__construct
__construct(ApiMain $main, $action, AuthManager $authManager)
Definition: ApiAMCreateAccount.php:41
ApiBase\makeMessage
static makeMessage( $msg, IContextSource $context, array $params=null)
Create a Message from a string or array.
Definition: ApiBase.php:1216
ApiAuthManagerHelper\getStandardParams
static getStandardParams( $action,... $wantedParams)
Fetch the standard parameters this helper recognizes.
Definition: ApiAuthManagerHelper.php:363
$res
$res
Definition: testCompression.php:57
ApiBase\PARAM_HELP_MSG_APPEND
const PARAM_HELP_MSG_APPEND
((string|array|Message)[]) Specify additional i18n messages to append to the normal message for this ...
Definition: ApiBase.php:169
ApiBase
This abstract class implements many basic API functions, and is the base of all API classes.
Definition: ApiBase.php:55
wfParseUrl
wfParseUrl( $url)
parse_url() work-alike, but non-broken.
Definition: GlobalFunctions.php:776
ApiAMCreateAccount\isReadMode
isReadMode()
Indicates whether this module requires read rights.
Definition: ApiAMCreateAccount.php:117
ApiBase\getModulePath
getModulePath()
Get the path to this module.
Definition: ApiBase.php:572
MediaWiki\Auth\AuthenticationResponse
This is a value object to hold authentication response data.
Definition: AuthenticationResponse.php:37
ApiAMCreateAccount\isWriteMode
isWriteMode()
Indicates whether this module requires write mode.
Definition: ApiAMCreateAccount.php:121
ApiAuthManagerHelper
Helper class for AuthManager-using API modules.
Definition: ApiAuthManagerHelper.php:37
ApiBase\extractRequestParams
extractRequestParams( $options=[])
Using getAllowedParams(), this function makes an array of the values provided by the user,...
Definition: ApiBase.php:764
ApiBase\requireAtLeastOneParameter
requireAtLeastOneParameter( $params,... $required)
Die if none of a certain set of parameters is set and not false.
Definition: ApiBase.php:961
ApiBase\getModulePrefix
getModulePrefix()
Get parameter prefix (usually two letters or an empty string).
Definition: ApiBase.php:505
ContextSource\getAuthority
getAuthority()
Definition: ContextSource.php:144
ApiBase\encodeParamName
encodeParamName( $paramName)
This method mangles parameter name based on the prefix supplied to the constructor.
Definition: ApiBase.php:742
ApiAMCreateAccount\execute
execute()
Evaluates the parameters, performs the requested query, and sets up the result.
Definition: ApiAMCreateAccount.php:63
ApiAMCreateAccount\$authManager
AuthManager $authManager
Definition: ApiAMCreateAccount.php:34
wfEscapeWikiText
wfEscapeWikiText( $text)
Escapes the given text so that it may be output using addWikiText() without any linking,...
Definition: GlobalFunctions.php:1456
ApiAMCreateAccount\getExamplesMessages
getExamplesMessages()
Returns usage examples for this module.
Definition: ApiAMCreateAccount.php:142
MediaWiki\Auth\AuthManager
This serves as the entry point to the authentication system.
Definition: AuthManager.php:102
ApiAMCreateAccount\dynamicParameterDocumentation
dynamicParameterDocumentation()
Indicate if the module supports dynamically-determined parameters that cannot be included in self::ge...
Definition: ApiAMCreateAccount.php:138
ApiAMCreateAccount
Create an account with AuthManager.
Definition: ApiAMCreateAccount.php:31
ApiBase\getModuleName
getModuleName()
Get the name of the module being executed by this instance.
Definition: ApiBase.php:497
ApiAMCreateAccount\needsToken
needsToken()
Returns the token type this module requires in order to execute.
Definition: ApiAMCreateAccount.php:125
ApiAMCreateAccount\getFinalDescription
getFinalDescription()
Get final module description, after hooks have had a chance to tweak it as needed.
Definition: ApiAMCreateAccount.php:50