1
0
mirror of https://github.com/bitwarden/server.git synced 2024-11-24 12:35:25 +01:00
bitwarden-server/util/SqliteMigrations/HelperScripts/2024-09-05_00_SyncDuoVersionFourMetadataToVersionTwo.sql
Ike 02fee8c1e9
[PM-8108] Add Duo SDK v4 metadata to Duo Two Factor Provider (#4774)
* Migrate Duo Two Factor Configuration to support both v2 and v4

* Postgres Migrations

* SQLite migrations

* comment updates for SQLite; Query changes for consistency;

* comment clean up; formatting
2024-09-23 15:51:04 -07:00

35 lines
1.4 KiB
SQL

/*
I spent some time looking into how to batch process these queries, but SQLite does not have
a good interface for batch processing. So to improve readability and maintain veloicty I've opted
for a single update query for each table: "User" and "Organization".
Part of the Reasoning is that SQLite, while not a "toy database", is not usually used in larger
deployments. Scalability is difficult in SQLite, so the assumption is the database is small for
installations using SQLite. So not running these in a batch should not impact on users who do
use SQLite.
*/
-- Update User accounts
UPDATE "User"
SET TwoFactorProviders = json_set(
json_set("User".TwoFactorProviders,
'$."2".MetaData.ClientSecret',
json_extract("User".TwoFactorProviders, '$."2".MetaData.SKey')),
'$."2".MetaData.ClientId',
json_extract("User".TwoFactorProviders, '$."2".MetaData.IKey')
)
WHERE TwoFactorProviders LIKE '%"2":%'
AND JSON_VALID(TwoFactorProviders) = 1;
-- Update Organizations
UPDATE "Organization"
SET TwoFactorProviders = json_set(
json_set("Organization".TwoFactorProviders,
'$."6".MetaData.ClientSecret',
json_extract("Organization".TwoFactorProviders, '$."6".MetaData.SKey')),
'$."6".MetaData.ClientId',
json_extract("Organization".TwoFactorProviders, '$."6".MetaData.IKey')
)
WHERE TwoFactorProviders LIKE '%"6":%'
AND JSON_VALID(TwoFactorProviders) = 1;