MediaWiki  1.34.0
ApiRemoveAuthenticationData.php
Go to the documentation of this file.
1 <?php
24 
31 
32  private $authAction;
33  private $operation;
34 
35  public function __construct( ApiMain $main, $action ) {
36  parent::__construct( $main, $action );
37 
38  $this->authAction = $action === 'unlinkaccount'
39  ? AuthManager::ACTION_UNLINK
40  : AuthManager::ACTION_REMOVE;
41  $this->operation = $action === 'unlinkaccount'
42  ? 'UnlinkAccount'
43  : 'RemoveCredentials';
44  }
45 
46  public function execute() {
47  if ( !$this->getUser()->isLoggedIn() ) {
48  $this->dieWithError( 'apierror-mustbeloggedin-removeauth', 'notloggedin' );
49  }
50 
51  $params = $this->extractRequestParams();
52  $manager = AuthManager::singleton();
53 
54  // Check security-sensitive operation status
55  ApiAuthManagerHelper::newForModule( $this )->securitySensitiveOperation( $this->operation );
56 
57  // Fetch the request. No need to load from the request, so don't use
58  // ApiAuthManagerHelper's method.
59  $blacklist = $this->authAction === AuthManager::ACTION_REMOVE
60  ? array_flip( $this->getConfig()->get( 'RemoveCredentialsBlacklist' ) )
61  : [];
62  $reqs = array_filter(
63  $manager->getAuthenticationRequests( $this->authAction, $this->getUser() ),
64  function ( $req ) use ( $params, $blacklist ) {
65  return $req->getUniqueId() === $params['request'] &&
66  !isset( $blacklist[get_class( $req )] );
67  }
68  );
69  if ( count( $reqs ) !== 1 ) {
70  $this->dieWithError( 'apierror-changeauth-norequest', 'badrequest' );
71  }
72  $req = reset( $reqs );
73 
74  // Perform the removal
75  $status = $manager->allowsAuthenticationDataChange( $req, true );
76  Hooks::run( 'ChangeAuthenticationDataAudit', [ $req, $status ] );
77  if ( !$status->isGood() ) {
78  $this->dieStatus( $status );
79  }
80  $manager->changeAuthenticationData( $req );
81 
82  $this->getResult()->addValue( null, $this->getModuleName(), [ 'status' => 'success' ] );
83  }
84 
85  public function isWriteMode() {
86  return true;
87  }
88 
89  public function needsToken() {
90  return 'csrf';
91  }
92 
93  public function getAllowedParams() {
94  return ApiAuthManagerHelper::getStandardParams( $this->authAction,
95  'request'
96  );
97  }
98 
99  protected function getExamplesMessages() {
100  $path = $this->getModulePath();
101  $action = $this->getModuleName();
102  return [
103  "action={$action}&request=FooAuthenticationRequest&token=123ABC"
104  => "apihelp-{$path}-example-simple",
105  ];
106  }
107 
108  public function getHelpUrls() {
109  return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Manage_authentication_data';
110  }
111 }
ApiMain
This is the main API class, used for both external and internal processing.
Definition: ApiMain.php:41
ContextSource\getConfig
getConfig()
Definition: ContextSource.php:63
ApiRemoveAuthenticationData\needsToken
needsToken()
Returns the token type this module requires in order to execute.
Definition: ApiRemoveAuthenticationData.php:89
ApiRemoveAuthenticationData\isWriteMode
isWriteMode()
Indicates whether this module requires write mode.
Definition: ApiRemoveAuthenticationData.php:85
ApiBase\dieWithError
dieWithError( $msg, $code=null, $data=null, $httpCode=null)
Abort execution with an error.
Definition: ApiBase.php:2014
ApiRemoveAuthenticationData\$authAction
$authAction
Definition: ApiRemoveAuthenticationData.php:32
ApiBase\getResult
getResult()
Get the result object.
Definition: ApiBase.php:640
ApiRemoveAuthenticationData\__construct
__construct(ApiMain $main, $action)
Definition: ApiRemoveAuthenticationData.php:35
ApiAuthManagerHelper\getStandardParams
static getStandardParams( $action,... $wantedParams)
Fetch the standard parameters this helper recognizes.
Definition: ApiAuthManagerHelper.php:352
ContextSource\getUser
getUser()
Definition: ContextSource.php:120
ApiBase
This abstract class implements many basic API functions, and is the base of all API classes.
Definition: ApiBase.php:42
ApiRemoveAuthenticationData\getExamplesMessages
getExamplesMessages()
Returns usage examples for this module.
Definition: ApiRemoveAuthenticationData.php:99
ApiBase\getModulePath
getModulePath()
Get the path to this module.
Definition: ApiBase.php:584
ApiBase\extractRequestParams
extractRequestParams( $options=[])
Using getAllowedParams(), this function makes an array of the values provided by the user,...
Definition: ApiBase.php:761
ApiRemoveAuthenticationData\getHelpUrls
getHelpUrls()
Return links to more detailed help pages about the module.
Definition: ApiRemoveAuthenticationData.php:108
ApiRemoveAuthenticationData
Remove authentication data from AuthManager.
Definition: ApiRemoveAuthenticationData.php:30
MediaWiki\Auth\AuthManager
This serves as the entry point to the authentication system.
Definition: AuthManager.php:85
$status
return $status
Definition: SyntaxHighlight.php:347
ApiRemoveAuthenticationData\$operation
$operation
Definition: ApiRemoveAuthenticationData.php:33
$path
$path
Definition: NoLocalSettings.php:25
ApiRemoveAuthenticationData\getAllowedParams
getAllowedParams()
Returns an array of allowed parameters (parameter name) => (default value) or (parameter name) => (ar...
Definition: ApiRemoveAuthenticationData.php:93
ApiBase\dieStatus
dieStatus(StatusValue $status)
Throw an ApiUsageException based on the Status object.
Definition: ApiBase.php:2086
ApiBase\getModuleName
getModuleName()
Get the name of the module being executed by this instance.
Definition: ApiBase.php:520
ApiAuthManagerHelper\newForModule
static newForModule(ApiBase $module)
Static version of the constructor, for chaining.
Definition: ApiAuthManagerHelper.php:59
ApiRemoveAuthenticationData\execute
execute()
Evaluates the parameters, performs the requested query, and sets up the result.
Definition: ApiRemoveAuthenticationData.php:46
Hooks\run
static run( $event, array $args=[], $deprecatedVersion=null)
Call hook functions defined in Hooks::register and $wgHooks.
Definition: Hooks.php:200