]> scripts.mit.edu Git - autoinstalls/mediawiki.git/blob - includes/api/ApiLogout.php
MediaWiki 1.30.2
[autoinstalls/mediawiki.git] / includes / api / ApiLogout.php
1 <?php
2 /**
3  *
4  *
5  * Created on Jan 4, 2008
6  *
7  * Copyright © 2008 Yuri Astrakhan "<Firstname><Lastname>@gmail.com",
8  *
9  * This program is free software; you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License as published by
11  * the Free Software Foundation; either version 2 of the License, or
12  * (at your option) any later version.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License along
20  * with this program; if not, write to the Free Software Foundation, Inc.,
21  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
22  * http://www.gnu.org/copyleft/gpl.html
23  *
24  * @file
25  */
26
27 use MediaWiki\Session\BotPasswordSessionProvider;
28
29 /**
30  * API module to allow users to log out of the wiki. API equivalent of
31  * Special:Userlogout.
32  *
33  * @ingroup API
34  */
35 class ApiLogout extends ApiBase {
36
37         public function execute() {
38                 $session = MediaWiki\Session\SessionManager::getGlobalSession();
39
40                 // Handle bot password logout specially
41                 if ( $session->getProvider() instanceof BotPasswordSessionProvider ) {
42                         $session->unpersist();
43                         return;
44                 }
45
46                 // Make sure it's possible to log out
47                 if ( !$session->canSetUser() ) {
48                         $this->dieWithError(
49                                 [
50                                         'cannotlogoutnow-text',
51                                         $session->getProvider()->describe( $this->getErrorFormatter()->getLanguage() )
52                                 ],
53                                 'cannotlogout'
54                         );
55                 }
56
57                 $user = $this->getUser();
58                 $oldName = $user->getName();
59                 $user->logout();
60
61                 // Give extensions to do something after user logout
62                 $injected_html = '';
63                 Hooks::run( 'UserLogoutComplete', [ &$user, &$injected_html, $oldName ] );
64         }
65
66         public function mustBePosted() {
67                 return true;
68         }
69
70         public function needsToken() {
71                 return 'csrf';
72         }
73
74         protected function getWebUITokenSalt( array $params ) {
75                 return 'logoutToken';
76         }
77
78         public function isReadMode() {
79                 return false;
80         }
81
82         protected function getExamplesMessages() {
83                 return [
84                         'action=logout&token=123ABC'
85                                 => 'apihelp-logout-example-logout',
86                 ];
87         }
88
89         public function getHelpUrls() {
90                 return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Logout';
91         }
92 }