jenkins-bot has submitted this change and it was merged. Change subject: default entry point for extension + sqlite db update ......................................................................
default entry point for extension + sqlite db update Wikimedia CI system expect extension to have a default entry point named a like the extension. A symlink is good enough for it. The ExtensionSchemaUpdate hook was only acting for MySQL backend, added in the sqlite database backend as well. Change-Id: I53ec2c3d78c4110f5f6530c7c52120e70a01e667 --- M TwoFactorAuth.hooks.php A TwoFactorAuthentication.php M TwoFactorUser.php M tests/TwoFactorUserTest.php 4 files changed, 38 insertions(+), 33 deletions(-) Approvals: Parent5446: Looks good to me, approved Hashar: Looks good to me, but someone else must approve jenkins-bot: Verified diff --git a/TwoFactorAuth.hooks.php b/TwoFactorAuth.hooks.php index f37c9d3..99f8e15 100644 --- a/TwoFactorAuth.hooks.php +++ b/TwoFactorAuth.hooks.php @@ -137,6 +137,7 @@ $base = dirname( __FILE__ ); switch ( $updater->getDB()->getType() ) { case 'mysql': + case 'sqlite': $updater->addExtensionTable( 'twofactorauth', "$base/twofactorauth.sql" ); break; } diff --git a/TwoFactorAuthentication.php b/TwoFactorAuthentication.php new file mode 120000 index 0000000..61c9a06 --- /dev/null +++ b/TwoFactorAuthentication.php @@ -0,0 +1 @@ +TwoFactorAuth.php \ No newline at end of file diff --git a/TwoFactorUser.php b/TwoFactorUser.php index f5461d1..10bdd09 100644 --- a/TwoFactorUser.php +++ b/TwoFactorUser.php @@ -142,9 +142,11 @@ $memcKey = wfMemcKey( 'twofactorauth', 'lasttoken', $this->user->getId() ); $lastTokens = $wgMemc->get( $memcKey ); - if ( in_array( $token, $lastTokens ) ) { + if ( is_array( $lastTokens ) && in_array( $token, $lastTokens ) ) { // Token was already used recently. return false; + } elseif ( !is_array( $lastTokens ) ) { + $lastTokens = array(); } $results = HOTP::generateByTimeWindow( @@ -161,18 +163,22 @@ array_unshift( $lastTokens, $token ); // Keep the lastTokens array trimmed to the number of tokens accepted (due to leniency) array_splice( $lastTokens, $wgTwoFactorWindowLeniency * 2 ); - $wgMemc->set( $memcKey, $lastTokens, 2 * $wgTwoFactorLeniency * $wgTwoFactorWindowSize ); + $wgMemc->set( $memcKey, $lastTokens, 2 * $wgTwoFactorWindowLeniency * $wgTwoFactorWindowSize ); + return true; } } // See if the user is using a scratch token - for ( $i = 0; $i < count( $this->scratchTokens ); $i++ ) { + $numTokens = count( $this->scratchTokens ); + for ( $i = 0; $i < $numTokens; $i++ ) { if ( $token === $this->scratchTokens[$i] ) { // If there is a scratch token, remove it from the scratch token list unset( $this->scratchTokens[$i] ); - // Only return true if we removed it from the database - return $this->updateScratchTokens(); + $this->scratchTokens = array_values( $this->scratchTokens ); + $this->updateScratchTokens(); + + return true; } } @@ -199,7 +205,7 @@ if( $success ) { $this->enabled = true; } - return $success; + return (bool)$success; } /** @@ -218,18 +224,18 @@ if( $success ) { $this->enabled = false; } - return $success; + return (bool)$success; } /** * Update the list of scratch token to the database. This function is * used when a scratch token is spent and needs to be invalidated. * - * @return bool + * @return void */ public function updateScratchTokens() { $dbw = wfGetDB( DB_MASTER ); - return $dbw->update( + $dbw->update( 'twofactorauth', array( 'scratch_tokens' => serialize( $this->scratchTokens ) ), array( 'id' => $this->user->getId() ), diff --git a/tests/TwoFactorUserTest.php b/tests/TwoFactorUserTest.php index 52051d8..5e98682 100644 --- a/tests/TwoFactorUserTest.php +++ b/tests/TwoFactorUserTest.php @@ -5,8 +5,11 @@ * @group Database */ class TwoFactorUserTest extends MediaWikiTestCase { - public function __construct() { - parent::__construct(); + private $twofactoruser; + + protected function setUp() { + parent::setUp(); + $this->user = User::newFromName( 'UTTwoFactor' ); if( $this->user->getID() == 0 ) { $this->user->addToDatabase(); @@ -15,15 +18,10 @@ } $this->twofactoruser = new TwoFactorAuthUser( $this->user ); - $this->twofactoruser->loadFromRandom(); - } - - protected function setUp() { - parent::setUp(); - $this->twofactoruser->loadFromDatabase(); - if( $this->twofactoruser->enabled() ) { - $this->twofactoruser->disable(); + if ( !$this->twofactoruser->loadFromDatabase() ) { + $this->twofactoruser->loadFromRandom(); } + $this->twofactoruser->disable(); } /** @@ -61,29 +59,28 @@ $this->assertSame( $this->twofactoruser->getSecret(), $test->getSecret() ); } - /** - * @dataProvider provideValidTokens - */ - public function testValidTokens( $token, $type ) { - $this->assertTrue( $this->tokenuser->verifyToken( $token ), $type ); + public function testValidTokens() { + foreach ( $this->provideValidTokens( $this->twofactoruser ) as $info ) { + list( $token, $type ) = $info; + $this->assertTrue( $this->twofactoruser->verifyToken( $token ), $type ); + } } - /** - * @dataProvider provideInvalidTokens - */ - public function testInvalidTokens( $token ) { - $this->assertFalse( $this->tokenuser->verifyToken( $token ) ); + public function testInvalidTokens() { + foreach ( $this->provideInvalidTokens() as $token ) { + $this->assertFalse( $this->twofactoruser->verifyToken( $token ) ); + } } - public function provideValidTokens() { + private function provideValidTokens( TwoFactorAuthUser $twoFactorUser ) { $tokens = array(); - $secret = $this->twofactoruser->getSecret(); + $secret = $twoFactorUser->getSecret(); $res = HOTP::generateByTimeWindow( Base32::decode( $secret ), 30 ); foreach( $res as $token ) { $tokens[] = array( $token->toHOTP( 6 ), 'totp' ); } - $scratch = $this->twofactoruser->getScratchTokens(); + $scratch = $twoFactorUser->getScratchTokens(); foreach( $scratch as $token ) { $tokens[] = array( $token, 'scratch' ); } @@ -91,7 +88,7 @@ return $tokens; } - public function provideInvalidTokens() { + private function provideInvalidTokens() { $tokens = array( array( '' ), array( 'ThisIsWayTooLong' ), -- To view, visit https://gerrit.wikimedia.org/r/104508 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: merged Gerrit-Change-Id: I53ec2c3d78c4110f5f6530c7c52120e70a01e667 Gerrit-PatchSet: 8 Gerrit-Project: mediawiki/extensions/TwoFactorAuthentication Gerrit-Branch: master Gerrit-Owner: Hashar <has...@free.fr> Gerrit-Reviewer: Hashar <has...@free.fr> Gerrit-Reviewer: Parent5446 <tylerro...@gmail.com> Gerrit-Reviewer: jenkins-bot <> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits