MediaWiki  master
SpecialLinkAccounts.php
Go to the documentation of this file.
1 <?php
2 
6 
13  protected static $allowedActions = [
14  AuthManager::ACTION_LINK, AuthManager::ACTION_LINK_CONTINUE,
15  ];
16 
17  public function __construct() {
18  parent::__construct( 'LinkAccounts' );
19  }
20 
21  protected function getGroupName() {
22  return 'users';
23  }
24 
25  public function isListed() {
26  return AuthManager::singleton()->canLinkAccounts();
27  }
28 
29  protected function getRequestBlacklist() {
30  return $this->getConfig()->get( 'ChangeCredentialsBlacklist' );
31  }
32 
38  public function execute( $subPage ) {
39  $this->setHeaders();
40  $this->loadAuth( $subPage );
41 
42  if ( !$this->isActionAllowed( $this->authAction ) ) {
43  if ( $this->authAction === AuthManager::ACTION_LINK ) {
44  // looks like no linking provider is installed or willing to take this user
45  $titleMessage = $this->msg( 'cannotlink-no-provider-title' );
46  $errorMessage = $this->msg( 'cannotlink-no-provider' );
47  throw new ErrorPageError( $titleMessage, $errorMessage );
48  } else {
49  // user probably back-button-navigated into an auth session that no longer exists
50  // FIXME would be nice to show a message
51  $this->getOutput()->redirect( $this->getPageTitle()->getFullURL( '', false,
52  PROTO_HTTPS ) );
53  return;
54  }
55  }
56 
57  $this->outputHeader();
58 
59  $status = $this->trySubmit();
60 
61  if ( $status === false || !$status->isOK() ) {
62  $this->displayForm( $status );
63  return;
64  }
65 
66  $response = $status->getValue();
67 
68  switch ( $response->status ) {
69  case AuthenticationResponse::PASS:
70  $this->success();
71  break;
72  case AuthenticationResponse::FAIL:
73  $this->loadAuth( '', AuthManager::ACTION_LINK, true );
74  $this->displayForm( StatusValue::newFatal( $response->message ) );
75  break;
76  case AuthenticationResponse::REDIRECT:
77  $this->getOutput()->redirect( $response->redirectTarget );
78  break;
79  case AuthenticationResponse::UI:
80  $this->authAction = AuthManager::ACTION_LINK_CONTINUE;
81  $this->authRequests = $response->neededRequests;
82  $this->displayForm( StatusValue::newFatal( $response->message ) );
83  break;
84  default:
85  throw new LogicException( 'invalid AuthenticationResponse' );
86  }
87  }
88 
89  protected function getDefaultAction( $subPage ) {
90  return AuthManager::ACTION_LINK;
91  }
92 
98  protected function getAuthForm( array $requests, $action ) {
99  $form = parent::getAuthForm( $requests, $action );
100  $form->setSubmitTextMsg( 'linkaccounts-submit' );
101  return $form;
102  }
103 
107  protected function success() {
108  $this->loadAuth( '', AuthManager::ACTION_LINK, true );
109  $this->displayForm( StatusValue::newFatal( $this->msg( 'linkaccounts-success-text' ) ) );
110  }
111 }
SpecialPage\getPageTitle
getPageTitle( $subpage=false)
Get a self-referential title object.
Definition: SpecialPage.php:672
AuthManagerSpecialPage\displayForm
displayForm( $status)
Display the form.
Definition: AuthManagerSpecialPage.php:549
SpecialPage\msg
msg( $key,... $params)
Wrapper around wfMessage that sets the current context.
Definition: SpecialPage.php:792
StatusValue\newFatal
static newFatal( $message,... $parameters)
Factory function for fatal errors.
Definition: StatusValue.php:69
$response
$response
Definition: opensearch_desc.php:38
SpecialPage\getOutput
getOutput()
Get the OutputPage being used for this instance.
Definition: SpecialPage.php:719
SpecialLinkAccounts\isListed
isListed()
Whether this special page is listed in Special:SpecialPages.
Definition: SpecialLinkAccounts.php:25
SpecialLinkAccounts\getDefaultAction
getDefaultAction( $subPage)
Get the default action for this special page, if none is given via URL/POST data.
Definition: SpecialLinkAccounts.php:89
AuthManagerSpecialPage
A special page subclass for authentication-related special pages.
Definition: AuthManagerSpecialPage.php:14
AuthManagerSpecialPage\trySubmit
trySubmit()
Attempts to do an authentication step with the submitted data.
Definition: AuthManagerSpecialPage.php:398
AuthManagerSpecialPage\$subPage
string $subPage
Subpage of the special page.
Definition: AuthManagerSpecialPage.php:35
SpecialPage\getConfig
getConfig()
Shortcut to get main config object.
Definition: SpecialPage.php:758
MediaWiki\Auth\AuthenticationResponse
This is a value object to hold authentication response data.
Definition: AuthenticationResponse.php:37
AuthManagerSpecialPage\loadAuth
loadAuth( $subPage, $authAction=null, $reset=false)
Load or initialize $authAction, $authRequests and $subPage.
Definition: AuthManagerSpecialPage.php:232
SpecialPage\setHeaders
setHeaders()
Sets headers - this should be called from the execute() method of all derived classes!
Definition: SpecialPage.php:537
PROTO_HTTPS
const PROTO_HTTPS
Definition: Defines.php:200
SpecialLinkAccounts\$allowedActions
static $allowedActions
Definition: SpecialLinkAccounts.php:13
SpecialLinkAccounts\getGroupName
getGroupName()
Under which header this special page is listed in Special:SpecialPages See messages 'specialpages-gro...
Definition: SpecialLinkAccounts.php:21
SpecialLinkAccounts\getRequestBlacklist
getRequestBlacklist()
Allows blacklisting certain request types.
Definition: SpecialLinkAccounts.php:29
MediaWiki\Auth\AuthManager
This serves as the entry point to the authentication system.
Definition: AuthManager.php:85
SpecialLinkAccounts\success
success()
Show a success message.
Definition: SpecialLinkAccounts.php:107
SpecialLinkAccounts\execute
execute( $subPage)
Definition: SpecialLinkAccounts.php:38
AuthManagerSpecialPage\isActionAllowed
isActionAllowed( $action)
Checks whether AuthManager is ready to perform the action.
Definition: AuthManagerSpecialPage.php:303
SpecialLinkAccounts\__construct
__construct()
Definition: SpecialLinkAccounts.php:17
SpecialLinkAccounts
Links/unlinks external accounts to the current user.
Definition: SpecialLinkAccounts.php:12
ErrorPageError
An error page which can definitely be safely rendered using the OutputPage.
Definition: ErrorPageError.php:27
SpecialLinkAccounts\getAuthForm
getAuthForm(array $requests, $action)
Definition: SpecialLinkAccounts.php:98
SpecialPage\outputHeader
outputHeader( $summaryMessageKey='')
Outputs a summary message on top of special pages Per default the message key is the canonical name o...
Definition: SpecialPage.php:639
MediaWiki\Auth\AuthenticationRequest
This is a value object for authentication requests.
Definition: AuthenticationRequest.php:37