2019-04-16 22:09:43 +00:00
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @group API
|
|
|
|
|
* @group Database
|
|
|
|
|
* @group medium
|
|
|
|
|
*
|
|
|
|
|
* @covers ApiLogout
|
|
|
|
|
*/
|
|
|
|
|
class ApiLogoutTest extends ApiTestCase {
|
2019-04-25 13:49:01 +00:00
|
|
|
|
2019-10-20 18:11:08 +00:00
|
|
|
protected function setUp() : void {
|
2019-04-25 13:49:01 +00:00
|
|
|
global $wgRequest, $wgUser;
|
|
|
|
|
|
2019-04-16 22:09:43 +00:00
|
|
|
parent::setUp();
|
2019-04-25 13:49:01 +00:00
|
|
|
|
|
|
|
|
// Link the user to the Session properly so User::doLogout() doesn't complain.
|
|
|
|
|
$wgRequest->getSession()->setUser( $wgUser );
|
|
|
|
|
$wgUser = User::newFromSession( $wgRequest );
|
|
|
|
|
$this->apiContext->setUser( $wgUser );
|
2019-04-16 22:09:43 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function testUserLogoutBadToken() {
|
2019-04-25 13:49:01 +00:00
|
|
|
global $wgUser;
|
|
|
|
|
|
|
|
|
|
$this->setExpectedApiException( 'apierror-badtoken' );
|
|
|
|
|
|
2019-04-16 22:09:43 +00:00
|
|
|
try {
|
|
|
|
|
$token = 'invalid token';
|
2019-04-25 13:49:01 +00:00
|
|
|
$this->doUserLogout( $token );
|
|
|
|
|
} finally {
|
|
|
|
|
$this->assertTrue( $wgUser->isLoggedIn(), 'not logged out' );
|
2019-04-16 22:09:43 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function testUserLogout() {
|
|
|
|
|
global $wgUser;
|
|
|
|
|
|
2019-04-25 13:49:01 +00:00
|
|
|
$this->assertTrue( $wgUser->isLoggedIn(), 'sanity check' );
|
2019-04-16 22:09:43 +00:00
|
|
|
$token = $this->getUserCsrfTokenFromApi();
|
2019-04-25 13:49:01 +00:00
|
|
|
$this->doUserLogout( $token );
|
|
|
|
|
$this->assertFalse( $wgUser->isLoggedIn() );
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function testUserLogoutWithWebToken() {
|
|
|
|
|
global $wgUser, $wgRequest;
|
|
|
|
|
|
|
|
|
|
$this->assertTrue( $wgUser->isLoggedIn(), 'sanity check' );
|
|
|
|
|
|
|
|
|
|
// Logic copied from SkinTemplate.
|
|
|
|
|
$token = $wgUser->getEditToken( 'logoutToken', $wgRequest );
|
|
|
|
|
|
|
|
|
|
$this->doUserLogout( $token );
|
2019-04-16 22:09:43 +00:00
|
|
|
$this->assertFalse( $wgUser->isLoggedIn() );
|
|
|
|
|
}
|
|
|
|
|
|
2019-04-25 13:49:01 +00:00
|
|
|
private function getUserCsrfTokenFromApi() {
|
2019-04-16 22:09:43 +00:00
|
|
|
$retToken = $this->doApiRequest( [
|
|
|
|
|
'action' => 'query',
|
|
|
|
|
'meta' => 'tokens',
|
|
|
|
|
'type' => 'csrf'
|
|
|
|
|
] );
|
|
|
|
|
|
|
|
|
|
$this->assertArrayNotHasKey( 'warnings', $retToken );
|
|
|
|
|
|
|
|
|
|
return $retToken[0]['query']['tokens']['csrftoken'];
|
|
|
|
|
}
|
|
|
|
|
|
2019-04-25 13:49:01 +00:00
|
|
|
private function doUserLogout( $logoutToken ) {
|
2019-04-16 22:09:43 +00:00
|
|
|
return $this->doApiRequest( [
|
|
|
|
|
'action' => 'logout',
|
|
|
|
|
'token' => $logoutToken
|
|
|
|
|
] );
|
|
|
|
|
}
|
|
|
|
|
}
|