uralkal: zitadel-action — при 403 на admin API берёт организацию токена через /management/v1/orgs/me

This commit is contained in:
ivan 2026-11-05 16:26:29 +05:00
parent 59a02bc7dc
commit 297f4b0adf

View File

@ -77,20 +77,34 @@ data:
client = httpx.Client(base_url=ZITADEL, headers=HEADERS, timeout=30)
def call(method, path, body=None, org_id=None):
def call(method, path, body=None, org_id=None, allow=()):
headers = {"x-zitadel-orgid": org_id} if org_id else {}
r = client.request(method, path, json=body, headers=headers)
if r.status_code in allow:
return None
if r.status_code >= 300:
print(f"{method} {path} -> {r.status_code}: {r.text}")
sys.exit(1)
return r.json() if r.content else {}
orgs = call("POST", "/admin/v1/orgs/_search", {"queries": []}).get("result", [])
org = next((o for o in orgs if o.get("name", "").lower() == ORG_NAME.lower()), None)
if org is None:
print(f"org '{ORG_NAME}' not found, available: {[o.get('name') for o in orgs]}")
sys.exit(1)
me = call("GET", "/auth/v1/users/me")["user"]
print(f"token user {me.get('userName')} id={me.get('id')}")
org = None
found_orgs = call("POST", "/admin/v1/orgs/_search", {"queries": []}, allow=(403,))
if found_orgs is not None:
orgs = found_orgs.get("result", [])
org = next((o for o in orgs if o.get("name", "").lower() == ORG_NAME.lower()), None)
if org is None:
print(f"org '{ORG_NAME}' not found, available: {[o.get('name') for o in orgs]}")
sys.exit(1)
else:
org = call("GET", "/management/v1/orgs/me")["org"]
print(f"no instance permissions, using token org '{org.get('name')}'")
if org.get("name", "").lower() != ORG_NAME.lower():
print(f"token org is '{org.get('name')}', not '{ORG_NAME}'")
sys.exit(1)
org_id = org["id"]
print(f"org {org['name']} id={org_id}")