MediaWiki 1.44.0
SpecialLinkAccounts.php
Go to the documentation of this file.
1<?php
2
3namespace MediaWiki\Specials;
4
5use LogicException;
13use StatusValue;
14
25 protected static $allowedActions = [
26 AuthManager::ACTION_LINK, AuthManager::ACTION_LINK_CONTINUE,
27 ];
28
29 public function __construct( AuthManager $authManager ) {
30 parent::__construct( 'LinkAccounts' );
31 $this->setAuthManager( $authManager );
32 }
33
34 protected function getGroupName() {
35 return 'login';
36 }
37
38 public function isListed() {
39 return $this->getAuthManager()->canLinkAccounts();
40 }
41
42 protected function getRequestBlacklist() {
44 }
45
50 public function execute( $subPage ) {
51 $this->setHeaders();
52 $this->loadAuth( $subPage );
53
54 if ( !$this->isActionAllowed( $this->authAction ) ) {
55 if ( $this->authAction === AuthManager::ACTION_LINK ) {
56 // looks like no linking provider is installed or willing to take this user
57 $titleMessage = $this->msg( 'cannotlink-no-provider-title' );
58 $errorMessage = $this->msg( 'cannotlink-no-provider' );
59 throw new ErrorPageError( $titleMessage, $errorMessage );
60 } else {
61 // user probably back-button-navigated into an auth session that no longer exists
62 // FIXME would be nice to show a message
63 $this->getOutput()->redirect( $this->getPageTitle()->getFullURL( '', false,
64 PROTO_HTTPS ) );
65 return;
66 }
67 }
68
69 $this->outputHeader();
70
71 $status = $this->trySubmit();
72
73 if ( $status === false || !$status->isOK() ) {
74 $this->displayForm( $status );
75 return;
76 }
77
78 $response = $status->getValue();
79
80 switch ( $response->status ) {
81 case AuthenticationResponse::PASS:
82 $this->success();
83 break;
84 case AuthenticationResponse::FAIL:
85 $this->loadAuth( '', AuthManager::ACTION_LINK, true );
86 $this->displayForm( StatusValue::newFatal( $response->message ) );
87 break;
88 case AuthenticationResponse::REDIRECT:
89 $this->getOutput()->redirect( $response->redirectTarget );
90 break;
91 case AuthenticationResponse::UI:
92 $this->authAction = AuthManager::ACTION_LINK_CONTINUE;
93 $this->authRequests = $response->neededRequests;
94 $this->displayForm( StatusValue::newFatal( $response->message ) );
95 break;
96 default:
97 throw new LogicException( 'invalid AuthenticationResponse' );
98 }
99 }
100
101 protected function getDefaultAction( $subPage ) {
102 return AuthManager::ACTION_LINK;
103 }
104
110 protected function getAuthForm( array $requests, $action ) {
111 $form = parent::getAuthForm( $requests, $action );
112 $form->setSubmitTextMsg( 'linkaccounts-submit' );
113 return $form;
114 }
115
119 protected function success() {
120 $this->loadAuth( '', AuthManager::ACTION_LINK, true );
121 $this->displayForm( StatusValue::newFatal( $this->msg( 'linkaccounts-success-text' ) ) );
122 }
123}
124
126class_alias( SpecialLinkAccounts::class, 'SpecialLinkAccounts' );
const PROTO_HTTPS
Definition Defines.php:232
This serves as the entry point to the authentication system.
This is a value object for authentication requests.
This is a value object to hold authentication response data.
An error page which can definitely be safely rendered using the OutputPage.
Object handling generic submission, CSRF protection, layout and other logic for UI forms in a reusabl...
Definition HTMLForm.php:209
A class containing constants representing the names of configuration variables.
const ChangeCredentialsBlacklist
Name constant for the ChangeCredentialsBlacklist setting, for use with Config::get()
A special page subclass for authentication-related special pages.
isActionAllowed( $action)
Checks whether AuthManager is ready to perform the action.
trySubmit()
Attempts to do an authentication step with the submitted data.
loadAuth( $subPage, $authAction=null, $reset=false)
Load or initialize $authAction, $authRequests and $subPage.
setHeaders()
Sets headers - this should be called from the execute() method of all derived classes!
setAuthManager(AuthManager $authManager)
Set the injected AuthManager from the special page constructor.
getPageTitle( $subpage=false)
Get a self-referential title object.
getConfig()
Shortcut to get main config object.
msg( $key,... $params)
Wrapper around wfMessage that sets the current context.
getOutput()
Get the OutputPage being used for this instance.
outputHeader( $summaryMessageKey='')
Outputs a summary message on top of special pages By default the message key is the canonical name of...
Link/unlink external accounts to the current user.
getDefaultAction( $subPage)
Get the default action for this special page if none is given via URL/POST data.
getGroupName()
Under which header this special page is listed in Special:SpecialPages See messages 'specialpages-gro...
isListed()
Whether this special page is listed in Special:SpecialPages.
getRequestBlacklist()
Allows blacklisting certain request types.
Generic operation result class Has warning/error list, boolean status and arbitrary value.