From 8bba621223f18655b56498a13460ce5de5a5e667 Mon Sep 17 00:00:00 2001 From: Spark Date: Wed, 4 Nov 2026 18:42:26 +0000 Subject: [PATCH] =?UTF-8?q?Correctif=20:=20origine=20ShaarIt=20en=20connec?= =?UTF-8?q?t-src=20(CSP)=20=E2=80=94=20la=20recherche=20f=C3=A9d=C3=A9r?= =?UTF-8?q?=C3=A9e=20passe?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit La liste des sœurs du connect-src (Fusion #69, panneau Alertes) n'avait pas été étendue à ShaarIt lors du branchement de la recherche fédérée (#111) : le navigateur bloquait l'appel de la page /recherche vers l'API ShaarIt avant même le CORS, et la section affichait « Injoignable depuis cet hôte (CORS ou réseau) » alors que le CORS de ShaarIt était correct. Test CSP ajouté. --- VERSION | 2 +- app/middleware/security.py | 9 ++++++++- tests/test_recherche_federee.py | 17 +++++++++++++++++ 3 files changed, 26 insertions(+), 2 deletions(-) create mode 100644 tests/test_recherche_federee.py 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