Kairo-Jinkendo/backend/routers/me.py

50 lines
1.7 KiB
Python
Raw Normal View History

"""Current user and tenant context endpoints."""
from __future__ import annotations
from auth import get_session, require_auth, set_session_active_tenant
from fastapi import APIRouter, Depends, HTTPException
from pydantic import BaseModel
from tenant_context import TenantContext, get_tenant_context, list_user_tenants, require_tenant_context, resolve_tenant_context
router = APIRouter(prefix="/api/me", tags=["me"])
class SwitchTenantRequest(BaseModel):
tenant_id: str
@router.get("")
def get_me(session: dict = Depends(require_auth)):
tenants = list_user_tenants(str(session["user_id"]))
return {
"id": str(session["user_id"]),
"email": session["email"],
"display_name": session["display_name"],
"portal_role": session["portal_role"],
"active_tenant_id": str(session["active_tenant_id"]) if session.get("active_tenant_id") else None,
"tenants": tenants,
}
@router.get("/context")
def get_my_context(ctx: TenantContext = Depends(get_tenant_context)):
return ctx.to_dict()
@router.get("/context/required")
def get_my_context_with_tenant(ctx: TenantContext = Depends(require_tenant_context)):
"""Example endpoint requiring an active tenant — for tests and AP0.3 prep."""
return ctx.to_dict()
@router.post("/tenant")
def switch_tenant(body: SwitchTenantRequest, session: dict = Depends(require_auth)):
ok = set_session_active_tenant(session["token"], body.tenant_id)
if not ok:
raise HTTPException(status_code=403, detail="Tenant nicht erlaubt")
fresh = get_session(session["token"])
if not fresh:
raise HTTPException(status_code=401, detail="Session ungültig")
return resolve_tenant_context(fresh).to_dict()