2016-02-01 20:44:03 +00:00
|
|
|
<?php
|
|
|
|
|
|
2024-02-16 16:49:05 +00:00
|
|
|
namespace MediaWiki\Tests\Session;
|
2016-02-01 20:44:03 +00:00
|
|
|
|
2024-02-16 16:49:05 +00:00
|
|
|
use MediaWiki\Session\Token;
|
2019-07-13 20:50:28 +00:00
|
|
|
use MediaWikiUnitTestCase;
|
2017-04-19 19:37:35 +00:00
|
|
|
use Wikimedia\TestingAccessWrapper;
|
2016-02-01 20:44:03 +00:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @group Session
|
2021-06-02 22:13:53 +00:00
|
|
|
* @covers \MediaWiki\Session\Token
|
2016-02-01 20:44:03 +00:00
|
|
|
*/
|
2019-07-13 20:50:28 +00:00
|
|
|
class TokenTest extends MediaWikiUnitTestCase {
|
2016-02-01 20:44:03 +00:00
|
|
|
|
|
|
|
|
public function testBasics() {
|
2016-03-28 18:53:04 +00:00
|
|
|
$token = $this->getMockBuilder( Token::class )
|
2021-03-20 15:18:58 +00:00
|
|
|
->onlyMethods( [ 'toStringAtTimestamp' ] )
|
2016-02-17 09:09:32 +00:00
|
|
|
->setConstructorArgs( [ 'sekret', 'salty', true ] )
|
2016-02-01 20:44:03 +00:00
|
|
|
->getMock();
|
2021-04-22 08:28:11 +00:00
|
|
|
$token->method( 'toStringAtTimestamp' )
|
|
|
|
|
->willReturn( 'faketoken+\\' );
|
2016-02-01 20:44:03 +00:00
|
|
|
|
|
|
|
|
$this->assertSame( 'faketoken+\\', $token->toString() );
|
|
|
|
|
$this->assertSame( 'faketoken+\\', (string)$token );
|
|
|
|
|
$this->assertTrue( $token->wasNew() );
|
|
|
|
|
|
|
|
|
|
$token = new Token( 'sekret', 'salty', false );
|
|
|
|
|
$this->assertFalse( $token->wasNew() );
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function testToStringAtTimestamp() {
|
2017-04-19 19:37:35 +00:00
|
|
|
$token = TestingAccessWrapper::newFromObject( new Token( 'sekret', 'salty', false ) );
|
2016-02-01 20:44:03 +00:00
|
|
|
|
|
|
|
|
$this->assertSame(
|
|
|
|
|
'd9ade0c7d4349e9df9094e61c33a5a0d5644fde2+\\',
|
|
|
|
|
$token->toStringAtTimestamp( 1447362018 )
|
|
|
|
|
);
|
|
|
|
|
$this->assertSame(
|
|
|
|
|
'ee2f7a2488dea9176c224cfb400d43be5644fdea+\\',
|
|
|
|
|
$token->toStringAtTimestamp( 1447362026 )
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function testGetTimestamp() {
|
|
|
|
|
$this->assertSame(
|
|
|
|
|
1447362018, Token::getTimestamp( 'd9ade0c7d4349e9df9094e61c33a5a0d5644fde2+\\' )
|
|
|
|
|
);
|
|
|
|
|
$this->assertSame(
|
|
|
|
|
1447362026, Token::getTimestamp( 'ee2f7a2488dea9176c224cfb400d43be5644fdea+\\' )
|
|
|
|
|
);
|
|
|
|
|
$this->assertNull( Token::getTimestamp( 'ee2f7a2488dea9176c224cfb400d43be5644fdea-\\' ) );
|
|
|
|
|
$this->assertNull( Token::getTimestamp( 'ee2f7a2488dea9176c224cfb400d43be+\\' ) );
|
|
|
|
|
|
|
|
|
|
$this->assertNull( Token::getTimestamp( 'ee2f7a2488dea9x76c224cfb400d43be5644fdea+\\' ) );
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function testMatch() {
|
2017-04-19 19:37:35 +00:00
|
|
|
$token = TestingAccessWrapper::newFromObject( new Token( 'sekret', 'salty', false ) );
|
2016-02-01 20:44:03 +00:00
|
|
|
|
2021-06-02 22:13:53 +00:00
|
|
|
$this->assertFalse( $token->match( null ) );
|
|
|
|
|
|
2016-02-01 20:44:03 +00:00
|
|
|
$test = $token->toStringAtTimestamp( time() - 10 );
|
|
|
|
|
$this->assertTrue( $token->match( $test ) );
|
|
|
|
|
$this->assertTrue( $token->match( $test, 12 ) );
|
|
|
|
|
$this->assertFalse( $token->match( $test, 8 ) );
|
|
|
|
|
|
|
|
|
|
$this->assertFalse( $token->match( 'ee2f7a2488dea9176c224cfb400d43be5644fdea-\\' ) );
|
|
|
|
|
}
|
|
|
|
|
}
|