File size: 1,426 Bytes
824d0dd
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#!/usr/bin/env python
"""Issue a one-time D2 operator invitation. Prints the code exactly once.

Usage:
  python scripts/d2_issue_operator_invite.py --db-path /tmp/amanpay-d2/amanpay.db \
      --tenant event-alpha [--ttl 86400]
"""

from __future__ import annotations

import argparse

from amanpay.identity.cli import emit, open_storage, resolve_tenant_id, snapshot_best_effort
from amanpay.identity.service import IdentityService


def main(argv=None) -> int:
    ap = argparse.ArgumentParser(description="Issue a D2 operator invitation")
    ap.add_argument("--db-path", required=True)
    ap.add_argument("--tenant", required=True, help="tenant id or slug")
    ap.add_argument("--ttl", type=int, default=86400)
    args = ap.parse_args(argv)

    storage = open_storage(args.db_path)
    try:
        ident = IdentityService.from_storage(storage)
        tenant_id = resolve_tenant_id(ident.repo, args.tenant)
        inv, code = ident.invites.create(tenant_id=tenant_id, role="operator",
                                         ttl_seconds=args.ttl)
        gen = snapshot_best_effort(storage)
        emit({"invitation_id": inv.id, "role": "operator", "code": code,
              "expires_at": inv.expires_at, "snapshot_generation": gen,
              "note": "Code shown once — only its hash is stored."})
    finally:
        storage.close()
    return 0


if __name__ == "__main__":
    raise SystemExit(main())