Kairo-Jinkendo/backend/routers/me.py
Lars 564008be13
Some checks failed
Deploy Development / deploy (push) Successful in 38s
Test Suite / pytest-backend (push) Failing after 7s
Test Suite / k6 /api/health Baseline (push) Has been skipped
Test Suite / playwright-smoke (push) Has been skipped
Test Suite / lint-backend (push) Successful in 2s
Test Suite / compose-smoke (push) Has been skipped
AP0.2: Auth, Tenant, Actor Foundation mit Sessions, TenantContext und Tests.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-04 20:09:54 +02:00

50 lines
1.7 KiB
Python

"""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()