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 }
loadAuth( $subPage, $authAction=null, $reset=false)
Load or initialize $authAction, $authRequests and $subPage.
success()
Show a success message.
static newFatal( $message,... $parameters)
Factory function for fatal errors.
Definition: StatusValue.php:69
$response
A special page subclass for authentication-related special pages.
getOutput()
Get the OutputPage being used for this instance.
msg( $key,... $params)
Wrapper around wfMessage that sets the current context.
const PROTO_HTTPS
Definition: Defines.php:200
isActionAllowed( $action)
Checks whether AuthManager is ready to perform the action.
An error page which can definitely be safely rendered using the OutputPage.
setHeaders()
Sets headers - this should be called from the execute() method of all derived classes! ...
displayForm( $status)
Display the form.
getConfig()
Shortcut to get main config object.
getAuthForm(array $requests, $action)
Links/unlinks external accounts to the current user.
string $subPage
Subpage of the special page.
outputHeader( $summaryMessageKey='')
Outputs a summary message on top of special pages Per default the message key is the canonical name o...
getPageTitle( $subpage=false)
Get a self-referential title object.
trySubmit()
Attempts to do an authentication step with the submitted data.