mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/OATHAuth
synced 2024-11-27 17:50:15 +00:00
Drop DB updates from pre MW 1.35
updateDatabaseValueFormat and updateTOTPToMultipleKeys are from 1.34: Iaf9facb54cd9693f20ed2f48d22b076c4b626705 I71286534d21d95083436d64d79811943c1a1d032 updateTOTPScratchTokensToArray is from 1.36: Ie8de059888363bf1cea4f0b268a46faaa5671904 Change-Id: I6de64d95b2e4b132d321b6f8f0129c476ef00f7f
This commit is contained in:
parent
809576b671
commit
57505f1976
|
@ -1,55 +0,0 @@
|
||||||
<?php
|
|
||||||
/**
|
|
||||||
* Converts old, TOTP specific, column values to new structure
|
|
||||||
*
|
|
||||||
* Usage: php updateDatabaseValueFormat.php
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation; either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License along
|
|
||||||
* with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
||||||
* http://www.gnu.org/copyleft/gpl.html
|
|
||||||
*
|
|
||||||
* @file
|
|
||||||
* @author Dejan Savuljesku
|
|
||||||
* @ingroup Maintenance
|
|
||||||
*/
|
|
||||||
|
|
||||||
use MediaWiki\Extension\OATHAuth\Hook\UpdateTables;
|
|
||||||
|
|
||||||
if ( getenv( 'MW_INSTALL_PATH' ) ) {
|
|
||||||
$IP = getenv( 'MW_INSTALL_PATH' );
|
|
||||||
} else {
|
|
||||||
$IP = __DIR__ . '/../../..';
|
|
||||||
}
|
|
||||||
require_once "$IP/maintenance/Maintenance.php";
|
|
||||||
|
|
||||||
class UpdateDatabaseValueFormat extends Maintenance {
|
|
||||||
public function __construct() {
|
|
||||||
parent::__construct();
|
|
||||||
$this->addDescription( 'Script to convert old, TOTP specific, column values to a newer structure' );
|
|
||||||
$this->requireExtension( 'OATHAuth' );
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @throws ConfigException
|
|
||||||
*/
|
|
||||||
public function execute() {
|
|
||||||
if ( !UpdateTables::convertToGenericFields() ) {
|
|
||||||
$this->fatalError( "Failed to update the data structure rows.\n" );
|
|
||||||
}
|
|
||||||
$this->output( "Done.\n" );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$maintClass = UpdateDatabaseValueFormat::class;
|
|
||||||
require_once RUN_MAINTENANCE_IF_MAIN;
|
|
|
@ -32,6 +32,9 @@ if ( getenv( 'MW_INSTALL_PATH' ) ) {
|
||||||
}
|
}
|
||||||
require_once "$IP/maintenance/Maintenance.php";
|
require_once "$IP/maintenance/Maintenance.php";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Merged December 2020; part of REL1_36
|
||||||
|
*/
|
||||||
class UpdateTOTPScratchTokensToArray extends Maintenance {
|
class UpdateTOTPScratchTokensToArray extends Maintenance {
|
||||||
public function __construct() {
|
public function __construct() {
|
||||||
parent::__construct();
|
parent::__construct();
|
||||||
|
|
|
@ -1,52 +0,0 @@
|
||||||
<?php
|
|
||||||
/**
|
|
||||||
* Update old single-key setup to multiple-keys
|
|
||||||
*
|
|
||||||
* Usage: php updateTOTPToMultipleKeys.php
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation; either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License along
|
|
||||||
* with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
||||||
* http://www.gnu.org/copyleft/gpl.html
|
|
||||||
*
|
|
||||||
* @file
|
|
||||||
* @author Dejan Savuljesku
|
|
||||||
* @ingroup Maintenance
|
|
||||||
*/
|
|
||||||
|
|
||||||
use MediaWiki\Extension\OATHAuth\Hook\UpdateTables;
|
|
||||||
|
|
||||||
if ( getenv( 'MW_INSTALL_PATH' ) ) {
|
|
||||||
$IP = getenv( 'MW_INSTALL_PATH' );
|
|
||||||
} else {
|
|
||||||
$IP = __DIR__ . '/../../..';
|
|
||||||
}
|
|
||||||
require_once "$IP/maintenance/Maintenance.php";
|
|
||||||
|
|
||||||
class UpdateTOTPToMultipleKeys extends Maintenance {
|
|
||||||
public function __construct() {
|
|
||||||
parent::__construct();
|
|
||||||
$this->addDescription( 'Script to update single TOTP keys to multi-key environment' );
|
|
||||||
$this->requireExtension( 'OATHAuth' );
|
|
||||||
}
|
|
||||||
|
|
||||||
public function execute() {
|
|
||||||
if ( !UpdateTables::switchTOTPToMultipleKeys() ) {
|
|
||||||
$this->fatalError( "Failed to update TOTP keys.\n" );
|
|
||||||
}
|
|
||||||
$this->output( "Done.\n" );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$maintClass = UpdateTOTPToMultipleKeys::class;
|
|
||||||
require_once RUN_MAINTENANCE_IF_MAIN;
|
|
|
@ -1,3 +0,0 @@
|
||||||
ALTER TABLE /*_*/oathauth_users
|
|
||||||
ADD module VARCHAR( 255 ) NOT NULL,
|
|
||||||
ADD data BLOB NULL;
|
|
|
@ -1,3 +0,0 @@
|
||||||
ALTER TABLE /*_*/oathauth_users
|
|
||||||
DROP COLUMN secret,
|
|
||||||
DROP COLUMN scratch_tokens;
|
|
|
@ -31,26 +31,7 @@ class UpdateTables implements LoadExtensionSchemaUpdatesHook {
|
||||||
switch ( $type ) {
|
switch ( $type ) {
|
||||||
case 'mysql':
|
case 'mysql':
|
||||||
case 'sqlite':
|
case 'sqlite':
|
||||||
// 1.34
|
// 1.36
|
||||||
$updater->addExtensionField(
|
|
||||||
'oathauth_users',
|
|
||||||
'module',
|
|
||||||
"$typePath/patch-add_generic_fields.sql"
|
|
||||||
);
|
|
||||||
|
|
||||||
$updater->addExtensionUpdate(
|
|
||||||
[ [ __CLASS__, 'schemaUpdateSubstituteForGenericFields' ] ]
|
|
||||||
);
|
|
||||||
$updater->dropExtensionField(
|
|
||||||
'oathauth_users',
|
|
||||||
'secret',
|
|
||||||
"$typePath/patch-remove_module_specific_fields.sql"
|
|
||||||
);
|
|
||||||
|
|
||||||
$updater->addExtensionUpdate(
|
|
||||||
[ [ __CLASS__, 'schemaUpdateTOTPToMultipleKeys' ] ]
|
|
||||||
);
|
|
||||||
|
|
||||||
$updater->addExtensionUpdate(
|
$updater->addExtensionUpdate(
|
||||||
[ [ __CLASS__, 'schemaUpdateTOTPScratchTokensToArray' ] ]
|
[ [ __CLASS__, 'schemaUpdateTOTPScratchTokensToArray' ] ]
|
||||||
);
|
);
|
||||||
|
@ -89,26 +70,6 @@ class UpdateTables implements LoadExtensionSchemaUpdatesHook {
|
||||||
return $db;
|
return $db;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Helper function for converting old, TOTP specific, column values to new structure
|
|
||||||
* @param DatabaseUpdater $updater
|
|
||||||
* @return bool
|
|
||||||
* @throws ConfigException
|
|
||||||
*/
|
|
||||||
public static function schemaUpdateSubstituteForGenericFields( DatabaseUpdater $updater ) {
|
|
||||||
return self::convertToGenericFields();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Helper function for converting single TOTP keys to the multi-key system
|
|
||||||
* @param DatabaseUpdater $updater
|
|
||||||
* @return bool
|
|
||||||
* @throws ConfigException
|
|
||||||
*/
|
|
||||||
public static function schemaUpdateTOTPToMultipleKeys( DatabaseUpdater $updater ) {
|
|
||||||
return self::switchTOTPToMultipleKeys();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Helper function for converting single TOTP keys to the multi-key system
|
* Helper function for converting single TOTP keys to the multi-key system
|
||||||
* @param DatabaseUpdater $updater
|
* @param DatabaseUpdater $updater
|
||||||
|
@ -119,103 +80,11 @@ class UpdateTables implements LoadExtensionSchemaUpdatesHook {
|
||||||
return self::switchTOTPScratchTokensToArray();
|
return self::switchTOTPScratchTokensToArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Converts old, TOTP specific, column values to a newer structure
|
|
||||||
* @return bool
|
|
||||||
* @throws ConfigException
|
|
||||||
*/
|
|
||||||
public static function convertToGenericFields() {
|
|
||||||
$db = self::getDatabase();
|
|
||||||
|
|
||||||
if ( !$db->fieldExists( 'oathauth_users', 'secret', __METHOD__ ) ) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
$services = MediaWikiServices::getInstance();
|
|
||||||
$batchSize = $services->getMainConfig()->get( 'UpdateRowsPerQuery' );
|
|
||||||
$lbFactory = $services->getDBLoadBalancerFactory();
|
|
||||||
while ( true ) {
|
|
||||||
$lbFactory->waitForReplication();
|
|
||||||
|
|
||||||
$res = $db->newSelectQueryBuilder()
|
|
||||||
->select( [ 'id', 'secret', 'scratch_tokens' ] )
|
|
||||||
->from( 'oathauth_users' )
|
|
||||||
->where( [
|
|
||||||
'module' => '',
|
|
||||||
'data IS NULL',
|
|
||||||
'secret IS NOT NULL'
|
|
||||||
] )
|
|
||||||
->limit( $batchSize )
|
|
||||||
->caller( __METHOD__ )
|
|
||||||
->fetchResultSet();
|
|
||||||
|
|
||||||
if ( $res->numRows() === 0 ) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach ( $res as $row ) {
|
|
||||||
$db->newUpdateQueryBuilder()
|
|
||||||
->update( 'oathauth_users' )
|
|
||||||
->set( [
|
|
||||||
'module' => 'totp',
|
|
||||||
'data' => FormatJson::encode( [
|
|
||||||
'keys' => [ [
|
|
||||||
'secret' => $row->secret,
|
|
||||||
'scratch_tokens' => $row->scratch_tokens
|
|
||||||
] ]
|
|
||||||
] )
|
|
||||||
] )
|
|
||||||
->where( [ 'id' => $row->id ] )
|
|
||||||
->caller( __METHOD__ )
|
|
||||||
->execute();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Switch from using single keys to multi-key support
|
|
||||||
*
|
|
||||||
* @return bool
|
|
||||||
* @throws ConfigException
|
|
||||||
*/
|
|
||||||
public static function switchTOTPToMultipleKeys() {
|
|
||||||
$db = self::getDatabase();
|
|
||||||
|
|
||||||
if ( !$db->fieldExists( 'oathauth_users', 'data', __METHOD__ ) ) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
$res = $db->newSelectQueryBuilder()
|
|
||||||
->select( [ 'id', 'data' ] )
|
|
||||||
->from( 'oathauth_users' )
|
|
||||||
->where( [ 'module' => 'totp' ] )
|
|
||||||
->caller( __METHOD__ )
|
|
||||||
->fetchResultSet();
|
|
||||||
|
|
||||||
foreach ( $res as $row ) {
|
|
||||||
$data = FormatJson::decode( $row->data, true );
|
|
||||||
if ( isset( $data['keys'] ) ) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
$db->newUpdateQueryBuilder()
|
|
||||||
->update( 'oathauth_users' )
|
|
||||||
->set( [
|
|
||||||
'data' => FormatJson::encode( [
|
|
||||||
'keys' => [ $data ]
|
|
||||||
] )
|
|
||||||
] )
|
|
||||||
->where( [ 'id' => $row->id ] )
|
|
||||||
->caller( __METHOD__ )
|
|
||||||
->execute();
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Switch scratch tokens from string to an array
|
* Switch scratch tokens from string to an array
|
||||||
*
|
*
|
||||||
|
* @since 1.36
|
||||||
|
*
|
||||||
* @return bool
|
* @return bool
|
||||||
* @throws ConfigException
|
* @throws ConfigException
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Reference in a new issue