dachdigitalwerksorg/kanvaflow
KanvaFlow — Remixable team task board with RBAC, drag-and-drop Kanban, dependencies, Dodil Models AI, and MCP tools.
A remix template · 0 remixes · Remix dachdigitalwerksorg/kanvaflow
app/boards/doors/identity.py
"""Authenticated caller resolution via Dodil Gateway (`X-Dodil-User`).
The Dodil gateway signs end-users in through the app's `appid` user pool, strips any
client-forged identity headers, and injects `X-Dodil-User` (JSON with `sub`, `email`, `app_roles`).
For local development without the gateway, set `DEV_USER=you@example.com`.
"""
import json
import os
from typing import Optional
from boards.domain.model import Person
DEV_USER = os.environ.get("DEV_USER", "").strip().lower()
def person_from(headers) -> Optional[Person]:
raw = headers.get("x-dodil-user")
if raw:
try:
user = json.loads(raw)
except ValueError:
return None
email = (user.get("email") or user.get("sub") or "").strip().lower()
return Person(email=email) if email else None
return Person(email=DEV_USER) if DEV_USER else None