mirror of
https://gitlab.gnome.org/World/Authenticator.git
synced 2025-03-04 16:54:45 +01:00
Migrations: handle the difference between the old and new database scheme
This commit is contained in:
parent
95db21aec0
commit
e068d6af11
2 changed files with 26 additions and 10 deletions
|
@ -13,9 +13,14 @@ def do_step(conn):
|
|||
content = str(g_file.load_contents(None)[1].decode("utf-8"))
|
||||
data = json.loads(content)
|
||||
providers = []
|
||||
|
||||
providers_db = conn.execute("SELECT name FROM providers").fetchall()
|
||||
providers_db = [provider[0].lower() for provider in providers_db]
|
||||
|
||||
for provider_name, provider_info in data.items():
|
||||
providers.append((provider_name, provider_info['url'],
|
||||
provider_info['doc'], provider_info['img'],))
|
||||
if not provider_name.lower() in providers_db:
|
||||
providers.append((provider_name, provider_info['url'],
|
||||
provider_info['doc'], provider_info['img'],))
|
||||
query = "INSERT INTO providers (name, website, doc_url, image) VALUES (?, ?, ?, ?)"
|
||||
conn.executemany(query, providers)
|
||||
conn.commit()
|
||||
|
|
|
@ -3,25 +3,36 @@ Restore old accounts
|
|||
"""
|
||||
|
||||
from yoyo import step
|
||||
from collections import OrderedDict
|
||||
|
||||
__depends__ = {'authenticator_20190525_03_R7miN-add-default-providers'}
|
||||
|
||||
|
||||
def do_step(conn):
|
||||
accounts = conn.execute("SELECT * FROM accounts").fetchall()
|
||||
# atler columns from secret id to token_id before
|
||||
# to fix the issue on older db
|
||||
try:
|
||||
accounts = conn.execute("SELECT id, username, token_id, provider FROM accounts").fetchall()
|
||||
except Exception:
|
||||
accounts = conn.execute("SELECT id, username, secret_id, provider FROM accounts").fetchall()
|
||||
_accounts = []
|
||||
|
||||
providers_db = conn.execute("SELECT id, name FROM providers").fetchall()
|
||||
providers = {}
|
||||
providers = OrderedDict()
|
||||
for provider_id, provider_name in providers_db:
|
||||
providers[provider_name.lower()] = provider_id
|
||||
providers[provider_id] = provider_name.lower()
|
||||
cursor = conn.cursor()
|
||||
for account_id, username, provider_name, secret_id in accounts:
|
||||
if provider_name.lower() not in providers.keys():
|
||||
cursor.execute("INSERT INTO providers (name) VALUES (?)", (provider_name, ))
|
||||
provider_id = cursor.lastrowid
|
||||
|
||||
for account_id, username, secret_id, provider in accounts:
|
||||
if isinstance(provider, str):
|
||||
if provider.lower() not in providers.values():
|
||||
cursor.execute("INSERT INTO providers (name) VALUES (?)", (provider, ))
|
||||
provider_id = cursor.lastrowid
|
||||
else:
|
||||
provider_index = list(providers.values()).index(provider.lower())
|
||||
provider_id = list(providers.keys())[provider_index]
|
||||
else:
|
||||
provider_id = providers[provider_name.lower()]
|
||||
provider_id = provider
|
||||
_accounts.append((account_id, username, provider_id, secret_id))
|
||||
|
||||
cursor.execute(" ALTER TABLE accounts RENAME TO tmp;")
|
||||
|
|
Loading…
Add table
Reference in a new issue