diff --git a/VERSION b/VERSION index 04393d6..44385c1 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -7.84.11 +7.84.12 diff --git a/app/middleware/security.py b/app/middleware/security.py index 0541cf6..859bf50 100644 --- a/app/middleware/security.py +++ b/app/middleware/security.py @@ -178,10 +178,17 @@ class ContentSecurityPolicyMiddleware(BaseHTTPMiddleware): # notifications des applications soeurs depuis cet hôte ; # leurs origines rejoignent connect-src (même résolution # draco_urls que les liens de la barre et frame-src). + # Fusion #111 : la recherche fédérée appelle en plus + # l'API de ShaarIt depuis la page /recherche — sans son + # origine ici, le navigateur bloque l'appel et la section + # ShaarIt affichait « Injoignable depuis cet hôte (CORS ou + # réseau) » alors que le CORS de ShaarIt était correct + # (retour d'usage du 2026-11-04). _toutes69 = draco_urls.toutes() sisters = " ".join(sorted({ draco_urls.origine(_toutes69[k]) - for k in ("obsigate", "flowdeck", "tiktak", "kanbante") + for k in ("obsigate", "flowdeck", "tiktak", "kanbante", + "shaarit") } - {""})) response.headers[self.CSP_HEADER] = self.CSP_VALUE.format( nonce=nonce, host=host, agent=agent, sisters=sisters diff --git a/tests/test_recherche_federee.py b/tests/test_recherche_federee.py new file mode 100644 index 0000000..6deb6af --- /dev/null +++ b/tests/test_recherche_federee.py @@ -0,0 +1,17 @@ +"""Recherche fédérée « Rechercher partout » (fusion #111) — garde-fous +côté Flowdeck : l'API /api/search et les origines sœurs sont couvertes +par les suites Node et les tests CORS ; ici, la CSP des pages, qui +conditionne les appels cross-origin de la page /recherche.""" + + +def test_csp_connect_src_contient_shaarit(client): + """La CSP des pages doit autoriser l'origine de ShaarIt en + connect-src, sinon le navigateur bloque l'appel de la page + /recherche avant même le CORS et la section ShaarIt affiche + « Injoignable depuis cet hôte » (retour d'usage du 2026-11-04 : + la liste des sœurs du connect-src, écrite pour les Alertes + #69, n'avait pas été étendue à ShaarIt).""" + r = client.get("/") + csp = r.headers.get("content-security-policy", "") + assert "connect-src" in csp + assert "https://shaarit.dracodev.net" in csp, csp