Authenticator/tools/twofactorauth2sql.py
Bilal Elmoussaoui c93bdb675f bunch of fixes
2020-11-16 02:13:17 +01:00

73 lines
1.9 KiB
Python

#!/usr/bin/env python3
"""
YAML database to JSON converter.
"""
import json
import tempfile
from collections import OrderedDict
from glob import glob
from os import path, remove
from shutil import rmtree
from subprocess import call
import sys
try:
import yaml
except ImportError:
sys.exit("Please install pyaml first")
try:
from HTMLParser import HTMLParser
except ImportError:
from html.parser import HTMLParser
GIT_CLONE_URI = "https://github.com/2factorauth/twofactorauth"
TMP_FOLDER = path.join(tempfile.gettempdir(), "Authenticator")
DATA_DIR = path.join(TMP_FOLDER, "_data")
OUTPUT_DIR = path.join(path.dirname(
path.realpath(__file__)), "../data/data.json")
print("Cloning the repository...")
if path.exists(TMP_FOLDER):
rmtree(TMP_FOLDER)
call(["git", "clone", "--depth=1", GIT_CLONE_URI, TMP_FOLDER])
if path.exists(OUTPUT_DIR):
remove(OUTPUT_DIR)
def is_valid(provider):
return "totp" in provider.get("tfa", [])
output = {}
html_parser = HTMLParser()
down_query = ""
up_query = ""
for db_file in glob(DATA_DIR + "/*.yml"):
with open(db_file, 'r', encoding='utf8') as file_data:
try:
providers = yaml.load(file_data, Loader=yaml.SafeLoader)["websites"]
for provider in providers:
if is_valid(provider):
name = provider.get("name").replace("&", "&")
website = provider.get("url", "")
help_url = provider.get("doc", "")
up_query += f"INSERT INTO `providers` (`name`, `website`, `help_url`) VALUES (`{name}`, `{website}`, `{help_url}`);\n"
down_query += f"DELETE FROM `providers` WHERE `name`=`{name}`;\n"
except (yaml.YAMLError, TypeError, KeyError) as error:
pass
with open('./up.sql', 'w') as fo:
fo.write(up_query)
with open('./down.sql', 'w') as fo:
fo.write(down_query)
rmtree(TMP_FOLDER)