39 lines
1 KiB
Python
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().splitlines()[0]
|
|
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)
|