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

Reply via email to