feat: URLs publiques de l'écosystème par configuration — dev/prod sans noms en dur #223
CI / lint (push) Successful in 3m11s
CI / security (push) Failing after 1m55s
CI / test (push) Successful in 5m23s
CI / build (push) Successful in 2m35s
CI / e2e (push) Successful in 18m24s

This commit is contained in:
Spark
2026-10-25 18:10:59 +00:00
parent 287afa1537
commit f29a22886a
21 changed files with 608 additions and 33 deletions
+31 -2
View File
@@ -84,13 +84,19 @@ def _csp_directives(csp: str) -> dict[str, list[str]]:
return directives
def test_csp_frame_src_allows_agent_console(client):
def test_csp_frame_src_allows_agent_console(client, monkeypatch):
"""BUG-119 : le « mode console » du panneau Spark charge la console du
service d'agents (``https://agent.dracodev.net``) dans une iframe —
``frame-src`` doit autoriser cette origine, sinon le navigateur bloque
le chargement (« This content is blocked »). Les sources historiques
(``'self'`` et ``blob:``, visualiseur PDF) restent en place et aucune
autre origine n'est admise."""
autre origine n'est admise.
#223 : la configuration est neutralisée ici (défaut officiel) —
l'origine n'est plus figée dans le code, voir le test via config
ci-dessous."""
monkeypatch.delenv("DRACO_AGENT_URL", raising=False)
monkeypatch.delenv("AGENT_EVENEMENTS_URL", raising=False)
resp = client.get("/api/health")
csp = resp.headers.get("content-security-policy", "")
directives = _csp_directives(csp)
@@ -99,3 +105,26 @@ def test_csp_frame_src_allows_agent_console(client):
"blob:",
"https://agent.dracodev.net",
]
assert "https://agent.dracodev.net" in directives.get("connect-src", [])
def test_csp_agent_origine_via_config(client, monkeypatch):
"""#223 : ``frame-src``/``connect-src`` suivent l'origine de l'agent
**configurée** — dérivée d'``AGENT_EVENEMENTS_URL`` (config réelle
du poste, noms en ``-dev`` en dev), ou de ``DRACO_AGENT_URL`` qui
prime. Aucun nom d'environnement n'est codé en dur."""
monkeypatch.delenv("DRACO_AGENT_URL", raising=False)
monkeypatch.setenv(
"AGENT_EVENEMENTS_URL", "https://agent-dev.dracodev.net/api/v1/evenements")
resp = client.get("/api/health")
directives = _csp_directives(resp.headers.get("content-security-policy", ""))
assert directives.get("frame-src") == [
"'self'", "blob:", "https://agent-dev.dracodev.net"]
assert "https://agent-dev.dracodev.net" in directives.get("connect-src", [])
assert "https://agent.dracodev.net" not in directives.get("connect-src", [])
monkeypatch.setenv("DRACO_AGENT_URL", "https://agent.example.net")
resp = client.get("/api/health")
directives = _csp_directives(resp.headers.get("content-security-policy", ""))
assert directives.get("frame-src") == [
"'self'", "blob:", "https://agent.example.net"]