feat: URLs publiques de l'écosystème par configuration — dev/prod sans noms en dur #223
This commit is contained in:
@@ -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"]
|
||||
|
||||
Reference in New Issue
Block a user