clan-cli: secrets users add: make sure only one key argument was passed

This is slightly better input validation FWIW.
This commit is contained in:
Louis Opter
2025-02-01 22:39:22 +00:00
committed by Mic92
parent 23d759219f
commit 509a1bcb94

View File

@@ -131,15 +131,19 @@ def add_command(args: argparse.Namespace) -> None:
if args.flake is None: if args.flake is None:
msg = "Could not find clan flake toplevel directory" msg = "Could not find clan flake toplevel directory"
raise ClanError(msg) raise ClanError(msg)
keys_args = (args.age_key, args.agekey, args.pgp_key)
keys_count = sum(1 if key else 0 for key in keys_args)
if keys_count != 1:
err_msg = (
f"Please provide one key (got {keys_count}) through `--pgp-key`, "
f"`--age-key`, or as a positional (age key) argument."
)
raise ClanError(err_msg)
if args.age_key or args.agekey: if args.age_key or args.agekey:
key_type = sops.KeyType.AGE key_type = sops.KeyType.AGE
elif args.pgp_key:
key_type = sops.KeyType.PGP
else: else:
msg = "BUG!: key type not set" key_type = sops.KeyType.PGP
raise ValueError(msg)
key = args.agekey or args.age_key or args.pgp_key key = args.agekey or args.age_key or args.pgp_key
assert key is not None, "key is None"
add_user(args.flake.path, args.user, key, key_type, args.force) add_user(args.flake.path, args.user, key, key_type, args.force)