def create_settings(): try: open(appdata(Files.settings), 'x') except FileExistsError: pass with open(appdata(Files.settings), 'w') as f: dump(default_settings, f)
def check_alpha(password: bytes): with open(appdata(Files.beta_key), 'rb') as f: kdf = PBKDF2HMAC(algorithm=hashes.SHA256(), length=32, salt=f.read(), iterations=100000, backend=default_backend()) with open(appdata(Files.alpha_key), 'rb') as f: return urlsafe_b64encode(kdf.derive(password)) == f.read()
def generate_alpha(preset: bytes): """Generates Alpha.key file (master password).""" create_in_appdata(Files.alpha_key) with open(appdata(Files.beta_key), 'rb') as f: kdf = PBKDF2HMAC(algorithm=hashes.SHA256(), length=32, salt=f.read(), iterations=100000, backend=default_backend()) with open(appdata(Files.alpha_key), 'wb') as f: f.write(urlsafe_b64encode(kdf.derive(preset)))
def set_setting(name: str, value): try: open(appdata(Files.settings)) except FileNotFoundError: create_settings() finally: with open(appdata(Files.settings)) as f: settings = load(f) settings[name] = value with open(appdata(Files.settings), 'w') as f: dump(settings, f)
def get_setting(name: str, second_try=False): try: open(appdata(Files.settings)) except FileNotFoundError: create_settings() finally: with open(appdata(Files.settings)) as f: settings = load(f) try: result = settings[name] except KeyError: if not second_try: reset_settings() return get_setting(name, second_try=True) else: return KeyError('Missing setting') else: return result
def query(q_input: str, q_args=None): """ Executes query in SQLite database. :param q_input: SQL query. :param q_args: Query arguments (replaces ``?`` symbols in query). :return: All records or ``None`` if nothing is matching query. """ if q_args is None: q_args = [] create_in_appdata(Files.sqlite) with connect(appdata(Files.sqlite)) as conn: my_cursor = conn.cursor() my_cursor.execute(q_input, q_args) records = my_cursor.fetchall() conn.commit() return records
def generate_beta(preset: bytes): """Generates Beta.key file (salt).""" create_in_appdata(Files.beta_key) with open(appdata(Files.beta_key), 'wb') as f: f.write(preset)
def _key(): with open(appdata(Files.alpha_key), 'rb') as f: return Fernet(f.read())
def create_locales_directory(): try: mkdir(appdata('locales')) except FileExistsError: pass
def json_appdata(lang: str): return appdata(f'locales{sep}{lang}.json')