Skip to content

Commit 0b736d7

Browse files
committed
usermanager: generate-api-token more obvious, but leaving login as well
Signed-off-by: Denys Fedoryshchenko <denys.f@collabora.com>
1 parent bcf09d2 commit 0b736d7

1 file changed

Lines changed: 29 additions & 0 deletions

File tree

scripts/usermanager.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -332,6 +332,12 @@ def main():
332332
login.add_argument("--username", required=True)
333333
login.add_argument("--password")
334334

335+
generate_token = subparsers.add_parser(
336+
"generate-api-token", help="Print just the access token for a user"
337+
)
338+
generate_token.add_argument("--username", required=True)
339+
generate_token.add_argument("--password")
340+
335341
whoami = subparsers.add_parser("whoami", help="Show current user")
336342

337343
list_users = subparsers.add_parser("list-users", help="List users")
@@ -530,6 +536,29 @@ def main():
530536
payload,
531537
form=True,
532538
)
539+
elif args.command == "generate-api-token":
540+
password = _prompt_if_missing(
541+
args.password,
542+
"Password: ",
543+
secret=True,
544+
)
545+
payload = {"username": args.username, "password": password}
546+
status, body = _request_json(
547+
"POST",
548+
f"{api_url}/user/login",
549+
payload,
550+
form=True,
551+
)
552+
if status < 400:
553+
try:
554+
payload = json.loads(body) if body else {}
555+
except json.JSONDecodeError as exc:
556+
raise SystemExit("Failed to parse login response") from exc
557+
token = payload.get("access_token")
558+
if not token:
559+
raise SystemExit("Login response missing access_token")
560+
print(token)
561+
return
533562
elif args.command == "whoami":
534563
status, body = _request_json("GET", f"{api_url}/whoami", token=token)
535564
elif args.command == "list-users":

0 commit comments

Comments
 (0)