KP opened on request, changed delimiter
This commit is contained in:
parent
324938133f
commit
8a6a8c0edf
5 changed files with 17 additions and 23 deletions
|
|
@ -13,7 +13,7 @@ class SimpleValueTemplate(Template):
|
|||
|
||||
|
||||
class ComplexValueTemplate(SimpleValueTemplate):
|
||||
delimiter = '@'
|
||||
delimiter = '%'
|
||||
|
||||
|
||||
@injectable
|
||||
|
|
|
|||
|
|
@ -1,6 +1,8 @@
|
|||
import os.path
|
||||
import shutil
|
||||
from contextlib import contextmanager
|
||||
from typing import Any, Generator
|
||||
|
||||
import keyring
|
||||
from injectable import injectable
|
||||
from pykeepass import PyKeePass, create_database
|
||||
|
||||
|
|
@ -12,22 +14,16 @@ class Passwords:
|
|||
settings = get_settings()
|
||||
|
||||
with open(settings.kp.secret, "r") as fh:
|
||||
secret = fh.read().splitlines()[0]
|
||||
keyring.set_password("karl", "kp", 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)
|
||||
@contextmanager
|
||||
def open(self, mode: str = "r") -> Generator[PyKeePass | Any, Any, None]:
|
||||
kp = PyKeePass(self._path, password=keyring.get_password("karl", "kp")) \
|
||||
if os.path.exists(self._path) else create_database(self._path, password=keyring.get_password("karl", "kp"))
|
||||
yield kp
|
||||
if mode == "rw":
|
||||
kp.save()
|
||||
|
||||
def get_values(self, keys: list[str]) -> dict[str, str]:
|
||||
output = {}
|
||||
|
|
@ -36,7 +32,8 @@ class Passwords:
|
|||
path = key_parts[:-1] if len(key_parts) > 2 else None
|
||||
entry_name = key_parts[-2]
|
||||
field_name = key_parts[-1]
|
||||
kp_entry = self._kp_org.find_entries(path=path, first=True, title=entry_name)
|
||||
with self.open() as kp:
|
||||
kp_entry = kp.find_entries(path=path, first=True, title=entry_name)
|
||||
output[k] = self._get_field_value(kp_entry, field_name)
|
||||
return output
|
||||
|
||||
|
|
@ -53,8 +50,3 @@ class Passwords:
|
|||
return kp_entry.url
|
||||
case _:
|
||||
return kp_entry.get_custom_property(field_name)
|
||||
|
||||
def save(self):
|
||||
# nadpisz plik źródłowy zmianami z lock
|
||||
self._kp.save()
|
||||
shutil.copyfile(self._path + ".lock", self._path)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue