fix: CSP — frame-src autorise la console du service d'agents (mode console du panneau Spark) BUG-119
This commit is contained in:
@@ -72,3 +72,30 @@ def test_security_headers_present(client):
|
||||
csp = resp.headers.get("content-security-policy", "")
|
||||
assert "object-src 'none'" in csp
|
||||
assert "frame-ancestors 'self'" in csp
|
||||
|
||||
|
||||
def _csp_directives(csp: str) -> dict[str, list[str]]:
|
||||
"""Découpe une politique CSP en ``{directive: [sources]}``."""
|
||||
directives: dict[str, list[str]] = {}
|
||||
for part in csp.split(";"):
|
||||
tokens = part.split()
|
||||
if tokens:
|
||||
directives[tokens[0]] = tokens[1:]
|
||||
return directives
|
||||
|
||||
|
||||
def test_csp_frame_src_allows_agent_console(client):
|
||||
"""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."""
|
||||
resp = client.get("/api/health")
|
||||
csp = resp.headers.get("content-security-policy", "")
|
||||
directives = _csp_directives(csp)
|
||||
assert directives.get("frame-src") == [
|
||||
"'self'",
|
||||
"blob:",
|
||||
"https://agent.dracodev.net",
|
||||
]
|
||||
|
||||
Reference in New Issue
Block a user