private function getProvider( $name = null, $prefix = null ) {
global $wgSessionProviders;
- $params = array(
+ $params = [
'priority' => 40,
'sessionCookieName' => $name,
- 'sessionCookieOptions' => array(),
- );
+ 'sessionCookieOptions' => [],
+ ];
if ( $prefix !== null ) {
$params['sessionCookieOptions']['prefix'] = $prefix;
}
if ( !$this->config ) {
- $this->config = new \HashConfig( array(
+ $this->config = new \HashConfig( [
'CookiePrefix' => 'wgCookiePrefix',
'EnableBotPasswords' => true,
'BotPasswordsDatabase' => false,
- 'SessionProviders' => $wgSessionProviders + array(
- 'MediaWiki\\Session\\BotPasswordSessionProvider' => array(
+ 'SessionProviders' => $wgSessionProviders + [
+ 'MediaWiki\\Session\\BotPasswordSessionProvider' => [
'class' => 'MediaWiki\\Session\\BotPasswordSessionProvider',
- 'args' => array( $params ),
- )
- ),
- ) );
+ 'args' => [ $params ],
+ ]
+ ],
+ ] );
}
- $manager = new SessionManager( array(
- 'config' => new \MultiConfig( array( $this->config, \RequestContext::getMain()->getConfig() ) ),
+ $manager = new SessionManager( [
+ 'config' => new \MultiConfig( [ $this->config, \RequestContext::getMain()->getConfig() ] ),
'logger' => new \Psr\Log\NullLogger,
'store' => new TestBagOStuff,
- ) );
+ ] );
return $manager->getProvider( 'MediaWiki\\Session\\BotPasswordSessionProvider' );
}
protected function setUp() {
parent::setUp();
- $this->setMwGlobals( array(
+ $this->setMwGlobals( [
'wgEnableBotPasswords' => true,
'wgBotPasswordsDatabase' => false,
'wgCentralIdLookupProvider' => 'local',
- 'wgGrantPermissions' => array(
- 'test' => array( 'read' => true ),
- ),
- ) );
+ 'wgGrantPermissions' => [
+ 'test' => [ 'read' => true ],
+ ],
+ ] );
}
- public function addDBData() {
+ public function addDBDataOnce() {
$passwordFactory = new \PasswordFactory();
$passwordFactory->init( \RequestContext::getMain()->getConfig() );
// A is unsalted MD5 (thus fast) ... we don't care about security here, this is test only
$dbw = wfGetDB( DB_MASTER );
$dbw->delete(
'bot_passwords',
- array( 'bp_user' => $userId, 'bp_app_id' => 'BotPasswordSessionProvider' ),
+ [ 'bp_user' => $userId, 'bp_app_id' => 'BotPasswordSessionProvider' ],
__METHOD__
);
$dbw->insert(
'bot_passwords',
- array(
+ [
'bp_user' => $userId,
'bp_app_id' => 'BotPasswordSessionProvider',
'bp_password' => $pwhash->toString(),
'bp_token' => 'token!',
'bp_restrictions' => '{"IPAddresses":["127.0.0.0/8"]}',
'bp_grants' => '["test"]',
- ),
+ ],
__METHOD__
);
}
}
try {
- $provider = new BotPasswordSessionProvider( array(
+ $provider = new BotPasswordSessionProvider( [
'priority' => SessionInfo::MIN_PRIORITY - 1
- ) );
+ ] );
$this->fail( 'Expected exception not thrown' );
} catch ( \InvalidArgumentException $ex ) {
$this->assertSame(
}
try {
- $provider = new BotPasswordSessionProvider( array(
+ $provider = new BotPasswordSessionProvider( [
'priority' => SessionInfo::MAX_PRIORITY + 1
- ) );
+ ] );
$this->fail( 'Expected exception not thrown' );
} catch ( \InvalidArgumentException $ex ) {
$this->assertSame(
);
}
- $provider = new BotPasswordSessionProvider( array(
+ $provider = new BotPasswordSessionProvider( [
'priority' => 40
- ) );
+ ] );
$priv = \TestingAccessWrapper::newFromObject( $provider );
$this->assertSame( 40, $priv->priority );
$this->assertSame( '_BPsession', $priv->sessionCookieName );
- $this->assertSame( array(), $priv->sessionCookieOptions );
+ $this->assertSame( [], $priv->sessionCookieOptions );
- $provider = new BotPasswordSessionProvider( array(
+ $provider = new BotPasswordSessionProvider( [
'priority' => 40,
'sessionCookieName' => null,
- ) );
+ ] );
$priv = \TestingAccessWrapper::newFromObject( $provider );
$this->assertSame( '_BPsession', $priv->sessionCookieName );
- $provider = new BotPasswordSessionProvider( array(
+ $provider = new BotPasswordSessionProvider( [
'priority' => 40,
'sessionCookieName' => 'Foo',
- 'sessionCookieOptions' => array( 'Bar' ),
- ) );
+ 'sessionCookieOptions' => [ 'Bar' ],
+ ] );
$priv = \TestingAccessWrapper::newFromObject( $provider );
$this->assertSame( 'Foo', $priv->sessionCookieName );
- $this->assertSame( array( 'Bar' ), $priv->sessionCookieOptions );
+ $this->assertSame( [ 'Bar' ], $priv->sessionCookieOptions );
}
public function testBasics() {
$provider = $this->getProvider();
- $this->assertTrue( $provider->persistsSessionID() );
+ $this->assertTrue( $provider->persistsSessionId() );
$this->assertFalse( $provider->canChangeUser() );
$this->assertNull( $provider->newSessionInfo() );
public function testNewSessionInfoForRequest() {
$provider = $this->getProvider();
$user = \User::newFromName( 'UTSysop' );
- $request = $this->getMock( 'FauxRequest', array( 'getIP' ) );
+ $request = $this->getMock( 'FauxRequest', [ 'getIP' ] );
$request->expects( $this->any() )->method( 'getIP' )
->will( $this->returnValue( '127.0.0.1' ) );
$bp = \BotPassword::newFromUser( $user, 'BotPasswordSessionProvider' );
$this->assertEquals( $session->getId(), $request->getSession()->getId() );
$this->assertEquals( $user->getName(), $session->getUser()->getName() );
- $this->assertEquals( array(
+ $this->assertEquals( [
'centralId' => $bp->getUserCentralId(),
'appId' => $bp->getAppId(),
'token' => $bp->getToken(),
- 'rights' => array( 'read' ),
- ), $session->getProviderMetadata() );
+ 'rights' => [ 'read' ],
+ ], $session->getProviderMetadata() );
- $this->assertEquals( array( 'read' ), $session->getAllowedUserRights() );
+ $this->assertEquals( [ 'read' ], $session->getAllowedUserRights() );
}
public function testCheckSessionInfo() {
$provider->setLogger( $logger );
$user = \User::newFromName( 'UTSysop' );
- $request = $this->getMock( 'FauxRequest', array( 'getIP' ) );
+ $request = $this->getMock( 'FauxRequest', [ 'getIP' ] );
$request->expects( $this->any() )->method( 'getIP' )
->will( $this->returnValue( '127.0.0.1' ) );
$bp = \BotPassword::newFromUser( $user, 'BotPasswordSessionProvider' );
- $data = array(
+ $data = [
'provider' => $provider,
'id' => 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',
'userInfo' => UserInfo::newFromUser( $user, true ),
'persisted' => false,
- 'metadata' => array(
+ 'metadata' => [
'centralId' => $bp->getUserCentralId(),
'appId' => $bp->getAppId(),
'token' => $bp->getToken(),
- ),
- );
+ ],
+ ];
$dataMD = $data['metadata'];
foreach ( array_keys( $data['metadata'] ) as $key ) {
$metadata = $info->getProviderMetadata();
$this->assertFalse( $provider->refreshSessionInfo( $info, $request, $metadata ) );
- $this->assertSame( array(
- array( LogLevel::INFO, 'Session "{session}": Missing metadata: {missing}' )
- ), $logger->getBuffer() );
+ $this->assertSame( [
+ [ LogLevel::INFO, 'Session "{session}": Missing metadata: {missing}' ]
+ ], $logger->getBuffer() );
$logger->clearBuffer();
}
$info = new SessionInfo( SessionInfo::MIN_PRIORITY, $data );
$metadata = $info->getProviderMetadata();
$this->assertFalse( $provider->refreshSessionInfo( $info, $request, $metadata ) );
- $this->assertSame( array(
- array( LogLevel::INFO, 'Session "{session}": No BotPassword for {centralId} {appId}' ),
- ), $logger->getBuffer() );
+ $this->assertSame( [
+ [ LogLevel::INFO, 'Session "{session}": No BotPassword for {centralId} {appId}' ],
+ ], $logger->getBuffer() );
$logger->clearBuffer();
$data['metadata'] = $dataMD;
$info = new SessionInfo( SessionInfo::MIN_PRIORITY, $data );
$metadata = $info->getProviderMetadata();
$this->assertFalse( $provider->refreshSessionInfo( $info, $request, $metadata ) );
- $this->assertSame( array(
- array( LogLevel::INFO, 'Session "{session}": BotPassword token check failed' ),
- ), $logger->getBuffer() );
+ $this->assertSame( [
+ [ LogLevel::INFO, 'Session "{session}": BotPassword token check failed' ],
+ ], $logger->getBuffer() );
$logger->clearBuffer();
- $request2 = $this->getMock( 'FauxRequest', array( 'getIP' ) );
+ $request2 = $this->getMock( 'FauxRequest', [ 'getIP' ] );
$request2->expects( $this->any() )->method( 'getIP' )
->will( $this->returnValue( '10.0.0.1' ) );
$data['metadata'] = $dataMD;
$info = new SessionInfo( SessionInfo::MIN_PRIORITY, $data );
$metadata = $info->getProviderMetadata();
$this->assertFalse( $provider->refreshSessionInfo( $info, $request2, $metadata ) );
- $this->assertSame( array(
- array( LogLevel::INFO, 'Session "{session}": Restrictions check failed' ),
- ), $logger->getBuffer() );
+ $this->assertSame( [
+ [ LogLevel::INFO, 'Session "{session}": Restrictions check failed' ],
+ ], $logger->getBuffer() );
$logger->clearBuffer();
$info = new SessionInfo( SessionInfo::MIN_PRIORITY, $data );
$metadata = $info->getProviderMetadata();
$this->assertTrue( $provider->refreshSessionInfo( $info, $request, $metadata ) );
- $this->assertSame( array(), $logger->getBuffer() );
- $this->assertEquals( $dataMD + array( 'rights' => array( 'read' ) ), $metadata );
+ $this->assertSame( [], $logger->getBuffer() );
+ $this->assertEquals( $dataMD + [ 'rights' => [ 'read' ] ], $metadata );
+ }
+
+ public function testGetAllowedUserRights() {
+ $logger = new \TestLogger( true );
+ $provider = $this->getProvider();
+ $provider->setLogger( $logger );
+
+ $backend = TestUtils::getDummySessionBackend();
+ $backendPriv = \TestingAccessWrapper::newFromObject( $backend );
+
+ try {
+ $provider->getAllowedUserRights( $backend );
+ $this->fail( 'Expected exception not thrown' );
+ } catch ( \InvalidArgumentException $ex ) {
+ $this->assertSame( 'Backend\'s provider isn\'t $this', $ex->getMessage() );
+ }
+
+ $backendPriv->provider = $provider;
+ $backendPriv->providerMetadata = [ 'rights' => [ 'foo', 'bar', 'baz' ] ];
+ $this->assertSame( [ 'foo', 'bar', 'baz' ], $provider->getAllowedUserRights( $backend ) );
+ $this->assertSame( [], $logger->getBuffer() );
+
+ $backendPriv->providerMetadata = [ 'foo' => 'bar' ];
+ $this->assertSame( [], $provider->getAllowedUserRights( $backend ) );
+ $this->assertSame( [
+ [
+ LogLevel::DEBUG,
+ 'MediaWiki\\Session\\BotPasswordSessionProvider::getAllowedUserRights: ' .
+ 'No provider metadata, returning no rights allowed'
+ ]
+ ], $logger->getBuffer() );
+ $logger->clearBuffer();
+
+ $backendPriv->providerMetadata = [ 'rights' => 'bar' ];
+ $this->assertSame( [], $provider->getAllowedUserRights( $backend ) );
+ $this->assertSame( [
+ [
+ LogLevel::DEBUG,
+ 'MediaWiki\\Session\\BotPasswordSessionProvider::getAllowedUserRights: ' .
+ 'No provider metadata, returning no rights allowed'
+ ]
+ ], $logger->getBuffer() );
+ $logger->clearBuffer();
+
+ $backendPriv->providerMetadata = null;
+ $this->assertSame( [], $provider->getAllowedUserRights( $backend ) );
+ $this->assertSame( [
+ [
+ LogLevel::DEBUG,
+ 'MediaWiki\\Session\\BotPasswordSessionProvider::getAllowedUserRights: ' .
+ 'No provider metadata, returning no rights allowed'
+ ]
+ ], $logger->getBuffer() );
+ $logger->clearBuffer();
}
}