]> scripts.mit.edu Git - autoinstallsdev/mediawiki.git/blob - includes/api/ApiCheckToken.php
MediaWiki 1.30.2
[autoinstallsdev/mediawiki.git] / includes / api / ApiCheckToken.php
1 <?php
2 /**
3  * Created on Jan 29, 2015
4  *
5  * Copyright © 2015 Wikimedia Foundation and contributors
6  *
7  * This program is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; either version 2 of the License, or
10  * (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License along
18  * with this program; if not, write to the Free Software Foundation, Inc.,
19  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
20  * http://www.gnu.org/copyleft/gpl.html
21  *
22  * @file
23  */
24
25 use MediaWiki\Session\Token;
26
27 /**
28  * @since 1.25
29  * @ingroup API
30  */
31 class ApiCheckToken extends ApiBase {
32
33         public function execute() {
34                 $params = $this->extractRequestParams();
35                 $token = $params['token'];
36                 $maxage = $params['maxtokenage'];
37                 $salts = ApiQueryTokens::getTokenTypeSalts();
38
39                 $res = [];
40
41                 $tokenObj = ApiQueryTokens::getToken(
42                         $this->getUser(), $this->getRequest()->getSession(), $salts[$params['type']]
43                 );
44
45                 if ( substr( $token, -strlen( urldecode( Token::SUFFIX ) ) ) === urldecode( Token::SUFFIX ) ) {
46                         $this->addWarning( 'apiwarn-checktoken-percentencoding' );
47                 }
48
49                 if ( $tokenObj->match( $token, $maxage ) ) {
50                         $res['result'] = 'valid';
51                 } elseif ( $maxage !== null && $tokenObj->match( $token ) ) {
52                         $res['result'] = 'expired';
53                 } else {
54                         $res['result'] = 'invalid';
55                 }
56
57                 $ts = Token::getTimestamp( $token );
58                 if ( $ts !== null ) {
59                         $mwts = new MWTimestamp();
60                         $mwts->timestamp->setTimestamp( $ts );
61                         $res['generated'] = $mwts->getTimestamp( TS_ISO_8601 );
62                 }
63
64                 $this->getResult()->addValue( null, $this->getModuleName(), $res );
65         }
66
67         public function getAllowedParams() {
68                 return [
69                         'type' => [
70                                 ApiBase::PARAM_TYPE => array_keys( ApiQueryTokens::getTokenTypeSalts() ),
71                                 ApiBase::PARAM_REQUIRED => true,
72                         ],
73                         'token' => [
74                                 ApiBase::PARAM_TYPE => 'string',
75                                 ApiBase::PARAM_REQUIRED => true,
76                                 ApiBase::PARAM_SENSITIVE => true,
77                         ],
78                         'maxtokenage' => [
79                                 ApiBase::PARAM_TYPE => 'integer',
80                         ],
81                 ];
82         }
83
84         protected function getExamplesMessages() {
85                 return [
86                         'action=checktoken&type=csrf&token=123ABC'
87                                 => 'apihelp-checktoken-example-simple',
88                 ];
89         }
90 }