Page MenuHomeWickedGov Phorge

ApiCentralAuthToken.php
No OneTemporary

Size
3 KB
Referenced Files
None
Subscribers
None

ApiCentralAuthToken.php

<?php
/**
* Created on Aug 09, 2014
*
* CentralAuth extension
*
* Copyright (C) 2014 Brad Jorsch bjorsch@wikimedia.org
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* http://www.gnu.org/copyleft/gpl.html
*/
namespace MediaWiki\Extension\CentralAuth\Api;
use CentralAuthSessionProvider;
use MediaWiki\Api\ApiBase;
use MediaWiki\Api\ApiMain;
use MediaWiki\Extension\CentralAuth\CentralAuthTokenManager;
use MediaWiki\Extension\CentralAuth\User\CentralAuthUser;
use MediaWiki\Session\SessionManager;
use MediaWiki\WikiMap\WikiMap;
use MWCryptRand;
/**
* Module to fetch the centralauthtoken for cross-wiki queries.
*
* @ingroup API
* @ingroup Extensions
* @see \MediaWiki\Extension\CentralAuth\Hooks\Handlers\ApiHookHandler::onAPIGetAllowedParams
* @see \CentralAuthApiSessionProvider
* @see \CentralAuthHeaderSessionProvider
*/
class ApiCentralAuthToken extends ApiBase {
private CentralAuthTokenManager $tokenManager;
public function __construct(
ApiMain $main,
string $moduleName,
CentralAuthTokenManager $tokenManager
) {
parent::__construct( $main, $moduleName );
$this->tokenManager = $tokenManager;
}
public function execute() {
$user = $this->getUser();
// If we're in JSON callback mode, no tokens can be obtained
if ( $this->lacksSameOriginSecurity() ) {
$this->dieWithError( 'apiwarn-tokens-origin', 'hascallback' );
}
if ( !$user->isRegistered() ) {
$this->dieWithError( 'apierror-centralauth-notloggedin', 'notloggedin' );
}
$session = SessionManager::getGlobalSession();
if ( !$session->getProvider() instanceof CentralAuthSessionProvider ) {
$this->dieWithError( 'apierror-centralauth-badsession', 'badsession' );
}
$id = $session->getId();
$centralUser = CentralAuthUser::getInstance( $user );
if ( !$centralUser->exists() || !$centralUser->isAttached() ) {
$this->dieWithError( 'apierror-centralauth-notattached', 'notattached' );
}
$data = [
'userName' => $user->getName(),
'token' => $centralUser->getAuthToken(),
'origin' => WikiMap::getCurrentWikiId(),
'originSessionId' => $id,
];
$loginToken = MWCryptRand::generateHex( 32 ) . dechex( $centralUser->getId() );
$this->tokenManager->tokenize( $data, 'api-token', [ 'token' => $loginToken ] );
$this->getResult()->addValue( null, $this->getModuleName(), [
'centralauthtoken' => $loginToken
] );
}
/** @inheritDoc */
public function getAllowedParams() {
return [];
}
/** @inheritDoc */
protected function getExamplesMessages() {
return [
'action=centralauthtoken'
=> 'apihelp-centralauthtoken-example-1',
];
}
}

File Metadata

Mime Type
text/x-php
Expires
Sat, Oct 3, 04:31 (3 w, 3 d ago)
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
0e/38/00247c47c4ae345757fda93cdc1f
Default Alt Text
ApiCentralAuthToken.php (3 KB)

Event Timeline