dev: 初步支持加载kps

This commit is contained in:
Julian Freeman
2024-07-19 07:58:30 -04:00
parent 287f950d41
commit aca88dd952
6 changed files with 171 additions and 13 deletions

47
lib/kps_operations.py Normal file
View File

@@ -0,0 +1,47 @@
# 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