karl/app/services/passwords.py
2025-10-16 23:07:06 +02:00

39 lines
1 KiB
Python

import os.path
from injectable import injectable
from pykeepass import PyKeePass, create_database, Group
import shutil
@injectable(singleton=True)
class Passwords:
def __init__(self):
from app.config import get_settings
settings = get_settings()
with open(settings.kp.secret, "r") as fh:
secret = fh.read()
self._path = settings.kp.file
self._kp_org = self._open_or_create(self._path, secret)
self._kp = self._open_lock(self._path, secret)
@staticmethod
def _open_or_create(path, password) -> PyKeePass:
if os.path.exists(path):
return PyKeePass(path, password=password)
return create_database(path, password)
@staticmethod
def _open_lock(path, password) -> PyKeePass:
lock_path = path + ".lock"
shutil.copyfile(path, lock_path)
return Passwords._open_or_create(lock_path, password)
@property
def kp(self) -> PyKeePass:
return self._kp
def save(self):
# nadpisz plik źródłowy zmianami z lock
self._kp.save()
shutil.copyfile(self._path + ".lock", self._path)