27 parent::__construct(
'ChangeCredentials',
'editmyprivateinfo' );
45 return AuthManager::ACTION_CHANGE;
50 $params = parent::getPreservedParams( $withToken );
52 'returnto' => $request->getVal(
'returnto' ),
53 'returntoquery' => $request->getVal(
'returntoquery' ),
69 if ( !$this->authRequests ) {
76 $out->addModules(
'mediawiki.special.changecredentials' );
80 if ( $status ===
false || !$status->isOK() ) {
85 $response = $status->getValue();
87 switch ( $response->status ) {
88 case AuthenticationResponse::PASS:
91 case AuthenticationResponse::FAIL:
92 $this->
displayForm( Status::newFatal( $response->message ) );
95 throw new LogicException(
'invalid AuthenticationResponse' );
103 foreach ( $this->authRequests as $req ) {
104 if ( $req->getUniqueId() ===
$subPage ) {
108 if ( count( $foundReqs ) > 1 ) {
109 throw new LogicException(
'Multiple AuthenticationRequest objects with same ID!' );
111 $this->authRequests = $foundReqs;
117 array $requests, array $fieldInfo, array &$formDescriptor, $action
119 parent::onAuthChangeFormFields( $requests, $fieldInfo, $formDescriptor, $action );
122 if ( AuthenticationRequest::getRequestByClass( $this->authRequests,
123 PasswordAuthenticationRequest::class )
127 'autocomplete' =>
'new-password',
128 'placeholder-message' =>
'createacct-yourpassword-ph',
129 'help-message' =>
'createacct-useuniquepass',
132 'autocomplete' =>
'new-password',
133 'placeholder-message' =>
'createacct-yourpasswordagain-ph',
138 'baseField' =>
'password',
139 'autocomplete' =>
'username',
142 'cssclass' =>
'mw-htmlform-hidden-field',
143 'label-message' =>
'userlogin-yourname',
144 'placeholder-message' =>
'userlogin-yourname-ph',
151 if ( !static::$loadUserData ) {
154 $descriptor = parent::getAuthFormDescriptor( $requests, $action );
157 foreach ( $descriptor as &$field ) {
158 if ( $field[
'type'] ===
'password' && $field[
'name'] !==
'retype' ) {
160 if ( isset( $field[
'cssclass'] ) ) {
161 $field[
'cssclass'] .=
' mw-changecredentials-validate-password';
163 $field[
'cssclass'] =
'mw-changecredentials-validate-password';
169 $this->
getOutput()->addModules(
'mediawiki.misc-authed-ooui' );
177 $form = parent::getAuthForm( $requests, $action );
178 $req = reset( $requests );
179 $info = $req->describeCredentials();
182 Html::openElement(
'dl' )
183 . Html::element(
'dt', [], $this->
msg(
'credentialsform-provider' )->text() )
184 . Html::element(
'dd', [], $info[
'provider']->text() )
185 . Html::element(
'dt', [], $this->
msg(
'credentialsform-account' )->text() )
186 . Html::element(
'dd', [], $info[
'account']->text() )
187 . Html::closeElement(
'dl' )
191 $form->setSubmitTextMsg( static::$messagePrefix .
'-submit' );
192 $form->showCancel()->setCancelTarget( $this->
getReturnUrl() ?: Title::newMainPage() );
193 $form->setSubmitID(
'change_credentials_submit' );
206 if ( static::$loadUserData ) {
207 $requests = AuthenticationRequest::loadRequestsFromSubmission( $this->authRequests, $data );
213 return Status::newGood( $response );
223 $out->addHTML( $error->parse() );
226 $groupedRequests = [];
227 foreach ( $this->authRequests as $req ) {
228 $info = $req->describeCredentials();
229 $groupedRequests[$info[
'provider']->text()][] = $req;
233 $out->addHTML( Html::openElement(
'dl' ) );
234 foreach ( $groupedRequests as $group => $members ) {
235 $out->addHTML( Html::element(
'dt', [], $group ) );
236 foreach ( $members as $req ) {
238 $info = $req->describeCredentials();
239 $out->addHTML( Html::rawElement(
'dd', [],
240 $linkRenderer->makeLink(
241 $this->getPageTitle( $req->getUniqueId() ),
242 $info[
'account']->text()
247 $out->addHTML( Html::closeElement(
'dl' ) );
257 SessionManager::singleton()->invalidateSessionsForUser( $user );
258 $session->setUser( $user );
262 $out->redirect( $returnUrl );
267 $out->msg( static::$messagePrefix .
'-success' )->parse()
270 $out->returnToMain();
279 $returnTo = $request->getText(
'returnto' );
280 $returnToQuery = $request->getText(
'returntoquery',
'' );
286 $title = Title::newFromText( $returnTo );
287 return $title->getFullUrlForRedirect( $returnToQuery );
291 return $this->
getConfig()->get( MainConfigNames::ChangeCredentialsBlacklist );
A special page subclass for authentication-related special pages.
string $authAction
one of the AuthManager::ACTION_* constants.
performAuthenticationStep( $action, array $requests)
displayForm( $status)
Display the form.
AuthenticationRequest[] $authRequests
string $subPage
Subpage of the special page.
static mergeDefaultFormDescriptor(array $fieldInfo, array $formDescriptor, array $defaultFormDescriptor)
Apply defaults to a form descriptor, without creating non-existent fields.
getRequest()
Get the WebRequest being used for this instance.
trySubmit()
Attempts to do an authentication step with the submitted data.
A class containing constants representing the names of configuration variables.
Special change to change credentials (such as the password).
getGroupName()
Under which header this special page is listed in Special:SpecialPages See messages 'specialpages-gro...
showSubpageList( $error=null)
getAuthForm(array $requests, $action)
doesWrites()
Indicates whether this special page may perform database writes.
handleFormSubmit( $data)
Submit handler callback for HTMLForm.
getPreservedParams( $withToken=false)
Returns URL query parameters which can be used to reload the page (or leave and return) while preserv...
isListed()
Whether this special page is listed in Special:SpecialPages.
getRequestBlacklist()
Allows blacklisting certain request types.
getAuthFormDescriptor( $requests, $action)
Generates a HTMLForm descriptor array from a set of authentication requests.
loadAuth( $subPage, $authAction=null, $reset=false)
Load or initialize $authAction, $authRequests and $subPage.
getDefaultAction( $subPage)
Get the default action for this special page, if none is given via URL/POST data.
__construct(AuthManager $authManager)
needsSubmitButton(array $requests)
Returns true if the form built from the given AuthenticationRequests needs a submit button.
static $loadUserData
Change action needs user data; remove action does not.
execute( $subPage)
Default execute method Checks user permissions.
onAuthChangeFormFields(array $requests, array $fieldInfo, array &$formDescriptor, $action)
Change the form descriptor that determines how a field will look in the authentication form....
outputHeader( $summaryMessageKey='')
Outputs a summary message on top of special pages Per default the message key is the canonical name o...
setHeaders()
Sets headers - this should be called from the execute() method of all derived classes!
getOutput()
Get the OutputPage being used for this instance.
getUser()
Shortcut to get the User executing this instance.
msg( $key,... $params)
Wrapper around wfMessage that sets the current context.
getConfig()
Shortcut to get main config object.
setAuthManager(AuthManager $authManager)
Set the injected AuthManager from the special page constructor.
getPageTitle( $subpage=false)
Get a self-referential title object.