Files
KpsUnifier/lib/kps_operations.py
2024-07-20 16:58:31 -04:00

51 lines
1.4 KiB
Python

# coding: utf8
from os import PathLike
from pykeepass import PyKeePass
from lib.db_columns_def import insert_columns
from .Sqlite3Helper import Sqlite3Worker, BlobType
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,
table_name: str, 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),
blob_fy(extract_otp(entry.otp)),
blob_fy(trim_str(entry.url)),
blob_fy(entry.notes),
str(entry.uuid),
blob_fy(kps_file),
blob_fy("::".join(entry.path[:-1])),
])
sqh.insert_into(table_name, insert_columns, values)
return kp