Recherche partout (#68) : Recherche-partout-68-CSP
This commit is contained in:
@@ -174,9 +174,29 @@ class ContentSecurityPolicyMiddleware(BaseHTTPMiddleware):
|
|||||||
request.headers.get("host", ""))
|
request.headers.get("host", ""))
|
||||||
agent = re.sub(r"[^0-9A-Za-z.\-:/]", "",
|
agent = re.sub(r"[^0-9A-Za-z.\-:/]", "",
|
||||||
draco_urls.origine(draco_urls.agent_url()))
|
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
|
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
|
return response
|
||||||
|
|
||||||
|
|
||||||
@@ -288,3 +308,4 @@ class RateLimitMiddleware(BaseHTTPMiddleware):
|
|||||||
for k in expired:
|
for k in expired:
|
||||||
del self._store[k]
|
del self._store[k]
|
||||||
self._last_prune = now
|
self._last_prune = now
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user