# coding: utf8 from os import PathLike from pykeepass import PyKeePass from .Sqlite3Helper import Sqlite3Worker, BlobType, Column def trim_str(value): if value is None: return "" if isinstance(value, str): return value.strip() return value def extract_otp(otp: str) -> str: if otp is None: return "" params = otp.split("?", 1)[1] secret = params.split("&")[0] return secret.split("=")[1] def blob_fy(value: str) -> BlobType: if value is None: return BlobType() return BlobType(value.encode("utf-8")) def read_kps_to_db(kps_file: str | PathLike[str], password: str, columns: list[Column], sqh: Sqlite3Worker) -> PyKeePass: kp = PyKeePass(kps_file, password=password) values = [] for group in kp.groups: for entry in group.entries: values.append([ blob_fy(trim_str(entry.title)), blob_fy(trim_str(entry.username)), blob_fy(entry.password), extract_otp(entry.otp), blob_fy(trim_str(entry.url)), blob_fy(entry.notes), blob_fy("::".join(entry.path[:-1])), ]) sqh.insert_into("entries", columns, values) return kp