amanpay / scripts /d2_list_accounts.py
MHamdan's picture
CI deploy 7ec800a
824d0dd verified
Raw
History Blame Contribute Delete
1.53 kB
#!/usr/bin/env python
"""List pseudonymous D2 accounts for a tenant (no secrets, no credential material).
Usage:
python scripts/d2_list_accounts.py --db-path /tmp/amanpay-d2/amanpay.db --tenant event-alpha
"""
from __future__ import annotations
import argparse
from amanpay.identity.cli import emit, open_storage, resolve_tenant_id
from amanpay.identity.repository import D2Repository
def main(argv=None) -> int:
ap = argparse.ArgumentParser(description="List D2 accounts (safe projection)")
ap.add_argument("--db-path", required=True)
ap.add_argument("--tenant", required=True, help="tenant id or slug")
ap.add_argument("--include-deleted", action="store_true")
args = ap.parse_args(argv)
storage = open_storage(args.db_path)
try:
repo = D2Repository(storage.db)
tenant_id = resolve_tenant_id(repo, args.tenant)
accounts = []
for u in repo.list_users(tenant_id, include_deleted=args.include_deleted):
accounts.append({
"id": u.id, "public_handle": u.public_handle, "display_alias": u.display_alias,
"role": u.role, "status": u.status,
"passkey_count": repo.count_active_credentials(u.id),
"created_at": u.created_at,
}) # never public keys / handles-hash / session material
emit({"tenant_id": tenant_id, "count": len(accounts), "accounts": accounts})
finally:
storage.close()
return 0
if __name__ == "__main__":
raise SystemExit(main())