add secret api for machines/users/secrets

This commit is contained in:
Jörg Thalheim
2023-08-09 14:10:04 +02:00
parent 2483e29819
commit c535cf78a1
4 changed files with 35 additions and 12 deletions

View File

@@ -24,12 +24,14 @@ sops_machines_folder = gen_sops_subfolder("machines")
sops_groups_folder = gen_sops_subfolder("groups") sops_groups_folder = gen_sops_subfolder("groups")
def list_objects(path: Path, is_valid: Callable[[str], bool]) -> None: def list_objects(path: Path, is_valid: Callable[[str], bool]) -> list[str]:
objs: list[str] = []
if not path.exists(): if not path.exists():
return return objs
for f in os.listdir(path): for f in os.listdir(path):
if is_valid(f): if is_valid(f):
print(f) objs.append(f)
return objs
def remove_object(path: Path, name: str) -> None: def remove_object(path: Path, name: str) -> None:

View File

@@ -11,12 +11,24 @@ from .types import (
) )
def add_machine(name: str, key: str, force: bool) -> None:
write_key(sops_machines_folder() / name, key, force)
def remove_machine(name: str) -> None:
remove_object(sops_machines_folder(), name)
def list_machines() -> list[str]:
return list_objects(sops_machines_folder(), lambda x: validate_hostname(x))
def list_command(args: argparse.Namespace) -> None: def list_command(args: argparse.Namespace) -> None:
list_objects(sops_machines_folder(), lambda x: validate_hostname(x)) print("\n".join(list_machines()))
def add_command(args: argparse.Namespace) -> None: def add_command(args: argparse.Namespace) -> None:
write_key(sops_machines_folder() / args.machine, args.key, args.force) add_machine(args.machine, args.key, args.force)
def remove_command(args: argparse.Namespace) -> None: def remove_command(args: argparse.Namespace) -> None:

View File

@@ -84,14 +84,17 @@ def encrypt_secret(
encrypt_file(secret / "secret", value, list(sorted(keys))) encrypt_file(secret / "secret", value, list(sorted(keys)))
def remove_command(args: argparse.Namespace) -> None: def remove_secret(secret: str) -> None:
secret: str = args.secret
path = sops_secrets_folder() / secret path = sops_secrets_folder() / secret
if not path.exists(): if not path.exists():
raise ClanError(f"Secret '{secret}' does not exist") raise ClanError(f"Secret '{secret}' does not exist")
shutil.rmtree(path) shutil.rmtree(path)
def remove_command(args: argparse.Namespace) -> None:
remove_secret(args.secret)
def add_secret_argument(parser: argparse.ArgumentParser) -> None: def add_secret_argument(parser: argparse.ArgumentParser) -> None:
parser.add_argument("secret", help="the name of the secret", type=secret_name_type) parser.add_argument("secret", help="the name of the secret", type=secret_name_type)
@@ -168,12 +171,16 @@ def disallow_member(group_folder: Path, name: str) -> None:
) )
def list_command(args: argparse.Namespace) -> None: def list_secrets() -> list[str]:
list_objects( return list_objects(
sops_secrets_folder(), lambda n: VALID_SECRET_NAME.match(n) is not None sops_secrets_folder(), lambda n: VALID_SECRET_NAME.match(n) is not None
) )
def list_command(args: argparse.Namespace) -> None:
print("\n".join(list_secrets()))
def get_command(args: argparse.Namespace) -> None: def get_command(args: argparse.Namespace) -> None:
secret: str = args.secret secret: str = args.secret
ensure_sops_key() ensure_sops_key()

View File

@@ -19,12 +19,14 @@ def remove_user(name: str) -> None:
remove_object(sops_users_folder(), name) remove_object(sops_users_folder(), name)
def list_users() -> None: def list_users() -> list[str]:
list_objects(sops_users_folder(), lambda n: VALID_SECRET_NAME.match(n) is not None) return list_objects(
sops_users_folder(), lambda n: VALID_SECRET_NAME.match(n) is not None
)
def list_command(args: argparse.Namespace) -> None: def list_command(args: argparse.Namespace) -> None:
list_users() print("\n".join(list_users()))
def add_command(args: argparse.Namespace) -> None: def add_command(args: argparse.Namespace) -> None: