Implement sales tenant pipeline events
This commit is contained in:
@@ -64,6 +64,7 @@ def issue_app_token(
|
||||
provider: str | None = None,
|
||||
full_name: str | None = None,
|
||||
email: str | None = None,
|
||||
tenant_id: str | None = None,
|
||||
ttl_seconds: int | None = None,
|
||||
) -> str:
|
||||
now = datetime.now(timezone.utc)
|
||||
@@ -83,6 +84,8 @@ def issue_app_token(
|
||||
payload["full_name"] = full_name
|
||||
if email:
|
||||
payload["email"] = email
|
||||
if tenant_id:
|
||||
payload["tenant_id"] = tenant_id
|
||||
|
||||
encoded_header = _b64url_encode(json.dumps(header, separators=(",", ":")).encode("utf-8"))
|
||||
encoded_payload = _b64url_encode(json.dumps(payload, separators=(",", ":")).encode("utf-8"))
|
||||
@@ -119,12 +122,18 @@ def get_actor(
|
||||
authorization: str | None = Header(default=None, alias="Authorization"),
|
||||
x_user: str | None = Header(default=None, alias="X-User"),
|
||||
x_role: str | None = Header(default=None, alias="X-Role"),
|
||||
x_tenant_id: str | None = Header(default=None, alias="X-Tenant-ID"),
|
||||
) -> dict:
|
||||
if authorization:
|
||||
scheme, _, value = authorization.partition(" ")
|
||||
if scheme.lower() != "bearer" or not value.strip():
|
||||
raise HTTPException(status_code=401, detail="Invalid authorization header")
|
||||
payload = decode_app_token(value.strip())
|
||||
tenant_id = str(payload.get("tenant_id") or "").strip()
|
||||
tenant_source = "token" if tenant_id else None
|
||||
if not tenant_id and legacy_header_auth_allowed():
|
||||
tenant_id = str(x_tenant_id or "").strip()
|
||||
tenant_source = "header" if tenant_id else None
|
||||
return {
|
||||
"sub": payload.get("sub", ""),
|
||||
"user": payload.get("username", "anonymous"),
|
||||
@@ -133,13 +142,22 @@ def get_actor(
|
||||
"provider": payload.get("provider"),
|
||||
"full_name": payload.get("full_name"),
|
||||
"email": payload.get("email"),
|
||||
"tenant_id": tenant_id or None,
|
||||
"tenant_source": tenant_source,
|
||||
}
|
||||
|
||||
if legacy_header_auth_allowed():
|
||||
role = (x_role or "").strip().lower()
|
||||
return {"user": (x_user or "anonymous").strip(), "role": role or "anonymous", "auth_source": "legacy"}
|
||||
tenant_id = str(x_tenant_id or "").strip()
|
||||
return {
|
||||
"user": (x_user or "anonymous").strip(),
|
||||
"role": role or "anonymous",
|
||||
"auth_source": "legacy",
|
||||
"tenant_id": tenant_id or None,
|
||||
"tenant_source": "header" if tenant_id else None,
|
||||
}
|
||||
|
||||
return {"user": "anonymous", "role": "anonymous", "auth_source": "none"}
|
||||
return {"user": "anonymous", "role": "anonymous", "auth_source": "none", "tenant_id": None, "tenant_source": None}
|
||||
|
||||
|
||||
def require_roles(*allowed: Role) -> Callable:
|
||||
|
||||
Reference in New Issue
Block a user