Integrate group in admin rest API

This commit is contained in:
2025-05-31 14:13:49 +02:00
parent 18f61631c9
commit 773a1e2976
8 changed files with 352 additions and 15 deletions

View File

@ -32,15 +32,29 @@ def create_password_db(location: Path, password: str) -> None:
def _kp_group_to_secret_group(
kp_group: pykeepass.group.Group, parent: SecretGroup | None = None
kp_group: pykeepass.group.Group, parent: SecretGroup | None = None, depth: int | None = None
) -> SecretGroup:
"""Convert keepass group to secret group dataclass."""
group_name = cast(str, kp_group.name)
group = SecretGroup(name=group_name, description=kp_group.notes)
path = "/".join(cast(list[str], kp_group.path))
group = SecretGroup(name=group_name, path=path, description=kp_group.notes)
for entry in kp_group.entries:
group.entries.append(str(entry.title))
if parent:
group.parent_group = parent
current_depth = len(kp_group.path)
if not parent and current_depth > 1:
parent = _kp_group_to_secret_group(kp_group.parentgroup, depth=current_depth)
parent.children.append(group)
group.parent_group = parent
if depth and depth == current_depth:
return group
for subgroup in kp_group.subgroups:
group.children.append(_kp_group_to_secret_group(subgroup, group))
group.children.append(_kp_group_to_secret_group(subgroup, group, depth=depth))
return group
@ -120,7 +134,7 @@ class PasswordContext:
raise RuntimeError(f"Cannot get password for entry {entry_name}")
def get_secret_groups(self, pattern: str | None = None) -> list[SecretGroup]:
def get_secret_groups(self, pattern: str | None = None, regex: bool = True) -> list[SecretGroup]:
"""Get secret groups.
A regex pattern may be provided to filter groups.
@ -128,7 +142,7 @@ class PasswordContext:
if pattern:
groups = cast(
list[pykeepass.group.Group],
self.keepass.find_groups(name=pattern, regex=True),
self.keepass.find_groups(name=pattern, regex=regex),
)
else:
all_groups = cast(list[pykeepass.group.Group], self.keepass.groups)
@ -153,7 +167,7 @@ class PasswordContext:
f"Error: Cannot find a parent group named {parent_group}"
)
kp_parent_group = query
self.keepass.add_group(kp_parent_group, name, notes=description)
self.keepass.add_group(destination_group=kp_parent_group, group_name=name, notes=description)
self.keepass.save()
def set_group_description(self, name: str, description: str) -> None: