Recherche partout (#68) : Recherche-partout-68-CSP
FlowDeck CI / lint (push) Failing after 1s
FlowDeck CI / test (push) Failing after 1s
FlowDeck CI / docker (push) Skipped

This commit is contained in:
2026-10-28 12:11:46 -04:00
parent 842204dadb
commit fc3e61f266
+22 -1
View File
@@ -174,9 +174,29 @@ class ContentSecurityPolicyMiddleware(BaseHTTPMiddleware):
request.headers.get("host", ""))
agent = re.sub(r"[^0-9A-Za-z.\-:/]", "",
draco_urls.origine(draco_urls.agent_url()))
response.headers[self.CSP_HEADER] = self.CSP_VALUE.format(
csp = self.CSP_VALUE.format(
nonce=nonce, host=host, agent=agent
)
# Recherche partout (#68) : la page /recherche appelle les
# API de recherche des sœurs depuis le navigateur — sa
# connect-src doit les nommer, sinon le navigateur bloque
# les appels avant même CORS. Les autres pages gardent la
# CSP inchangée. `draco_urls` est déjà importé dans ce
# dispatch (contexte d'hôte posé plus haut).
if request.url.path == "/recherche":
try:
soeurs = " ".join(sorted({
draco_urls.origine(draco_urls.toutes()[k])
for k in ("obsigate", "tiktak", "kanbante")
}))
csp = csp.replace(
"connect-src 'self' " + agent + " ",
"connect-src 'self' " + agent + " " + soeurs + " ",
1,
)
except Exception:
pass
response.headers[self.CSP_HEADER] = csp
return response
@@ -288,3 +308,4 @@ class RateLimitMiddleware(BaseHTTPMiddleware):
for k in expired:
del self._store[k]
self._last_prune = now