fix(draco): résolution dev/prod par l'hôte de la requête (7.82.4)
FlowDeck CI / test (push) Failing after 3h13m27s
FlowDeck CI / lint (push) Successful in 1m47s
FlowDeck CI / docker (push) Skipped

Le mode console du panneau restait une page morte sur flowdeck-dev :
CSP frame-src/connect-src et DRACO_PANNEAU_CONFIG.agent_url pointaient
l'agent prod (pas encore installée). Deux trous de la 7.82.3 :
agent_url() sans aucune dérivation, et aucune résolution lisant
l'hôte de la requête.

Pour tout ce qui est rendu à une requête (barre/DRACO_URLS, iframe
du panneau, CSP, boutons et redirections SSO) : explicite >
hôte public de la requête (motif fermé
^(og|flowdeck|tiktak|kanbante|agent)(SUFFIXE).dracodev.net$,
suffixe appliqué aux sœurs et à l'agent) > dérivation par les
adresses de l'agent connues en config (élargie : agent_url() se
dérive de l'URL d'événements explicite) > défaut officiel.
L'hôte est posé par le middleware CSP dans un ContextVar (patron
du nonce CSP) : iframe et CSP de la même réponse consomment la
même origine résolue. Contextes sans requête inchangés sinon.

Tests : +12 dans test_draco_urls_devprod.py (25/25) — Host dev
sans aucun env → tout en -dev ; Host prod → officiels ; Host LAN
→ repli config/défauts ; explicite gagne sur l'hôte ; motif fermé.
Suite complète : 4 failed / 26 errors identiques sur arbre propre
(familles préexistantes MCP/realtime/my_tasks/gallery/sync).
This commit is contained in:
Spark
2026-10-26 03:04:50 +00:00
parent 283e226adf
commit fd79a49d63
7 changed files with 403 additions and 18 deletions
+7 -5
View File
@@ -33,12 +33,14 @@ def get_redirect_uri(request: Request) -> str:
return f"{scheme}://{host}/auth/callback"
def _sso_login_url() -> str:
"""URL du bouton « Login with ObsiGate (SSO) », résolue par la config.
"""URL du bouton « Login with ObsiGate (SSO) ».
Émettrice = DRACO_SSO_URL (défaut : nom officiel) ; retour =
URL publique de cette instance (FLOWDECK_URL / OAUTH_REDIRECT_URI /
APP_BASE_URL, défaut : nom officiel) + ``/auth/draco``. Aucun nom
public figé : un dev déclare ses noms en ``-dev`` dans le .env.
Émettrice = ``obsigate_url()`` (DRACO_SSO_URL explicite, sinon
l'environnement de la requête — v7.82.4) ; retour = URL publique
de cette instance résolue de la même façon (FLOWDECK_URL /
OAUTH_REDIRECT_URI explicites, sinon hôte de la requête, le
callback = sa propre origine résolue) + ``/auth/draco``. Aucun
nom public figé.
"""
from urllib.parse import quote