X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2Fapi%2FApiLogout.php;h=6a26e2e3502b4830aaa4d6f8ce07ab903116ef74;hb=e3bd13db0c285f312e31bb1b7271af4628cca80c;hp=bf0ca9c68b847f99573e4da4c93211ec7d8da11a;hpb=44aec8a00a9f0f92a746ca575b58147fea1135e5;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/api/ApiLogout.php b/includes/api/ApiLogout.php index bf0ca9c68b..6a26e2e350 100644 --- a/includes/api/ApiLogout.php +++ b/includes/api/ApiLogout.php @@ -24,6 +24,8 @@ * @file */ +use MediaWiki\Session\BotPasswordSessionProvider; + /** * API module to allow users to log out of the wiki. API equivalent of * Special:Userlogout. @@ -33,13 +35,30 @@ class ApiLogout extends ApiBase { public function execute() { + $session = MediaWiki\Session\SessionManager::getGlobalSession(); + + // Handle bot password logout specially + if ( $session->getProvider() instanceof BotPasswordSessionProvider ) { + $session->unpersist(); + return; + } + + // Make sure it's possible to log out + if ( !$session->canSetUser() ) { + $this->dieUsage( + 'Cannot log out when using ' . + $session->getProvider()->describe( Language::factory( 'en' ) ), + 'cannotlogout' + ); + } + $user = $this->getUser(); $oldName = $user->getName(); $user->logout(); // Give extensions to do something after user logout $injected_html = ''; - Hooks::run( 'UserLogoutComplete', array( &$user, &$injected_html, $oldName ) ); + Hooks::run( 'UserLogoutComplete', [ &$user, &$injected_html, $oldName ] ); } public function isReadMode() { @@ -47,10 +66,10 @@ class ApiLogout extends ApiBase { } protected function getExamplesMessages() { - return array( + return [ 'action=logout' => 'apihelp-logout-example-logout', - ); + ]; } public function getHelpUrls() {