]> scripts.mit.edu Git - autoinstallsdev/mediawiki.git/blob - includes/api/ApiAMCreateAccount.php
MediaWiki 1.30.2
[autoinstallsdev/mediawiki.git] / includes / api / ApiAMCreateAccount.php
1 <?php
2 /**
3  * Copyright © 2016 Wikimedia Foundation and contributors
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 2 of the License, or
8  * (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License along
16  * with this program; if not, write to the Free Software Foundation, Inc.,
17  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
18  * http://www.gnu.org/copyleft/gpl.html
19  *
20  * @file
21  */
22
23 use MediaWiki\Auth\AuthManager;
24 use MediaWiki\Auth\AuthenticationResponse;
25
26 /**
27  * Create an account with AuthManager
28  *
29  * @ingroup API
30  */
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 }