feat: enhance error handling and configuration in backend

- Added ORCID_REDIRECT_URI to docker-compose for OAuth callback.
- Refactored CORS and trusted hosts settings in configuration for better clarity.
- Introduced a new function to validate publication IDs and provide explicit error messages for researcher IDs.
- Updated rate limiting strategy to simplify configuration.
- Improved security headers middleware to safely remove sensitive headers.
This commit is contained in:
Mireya Cueto Garrido
2026-05-08 12:13:05 +02:00
parent af1b8e9956
commit 1dd1096744
7 changed files with 54 additions and 51 deletions
+5 -18
View File
@@ -1,19 +1,3 @@
"""
Middleware de cabeceras de seguridad HTTP.
Aplica un perfil seguro por defecto:
- Strict-Transport-Security (HSTS) — fuerza HTTPS en navegadores compatibles.
- X-Content-Type-Options: nosniff
- X-Frame-Options: DENY (clickjacking)
- Referrer-Policy: strict-origin-when-cross-origin
- Permissions-Policy: bloquea APIs sensibles por defecto
- Cross-Origin-Opener-Policy / Resource-Policy: aislamiento del navegador
- Content-Security-Policy laxa para Swagger/OpenAPI (CDN), restrictiva para el resto.
NOTA: El frontend SPA tiene su propia CSP en su servidor. Aquí
endurecemos lo que sirve el backend (JSON, XML, ZIP, /docs, /redoc, etc.).
"""
from __future__ import annotations
from starlette.middleware.base import BaseHTTPMiddleware
@@ -82,7 +66,10 @@ class SecurityHeadersMiddleware(BaseHTTPMiddleware):
hsts += "; preload"
response.headers.setdefault("Strict-Transport-Security", hsts)
response.headers.pop("Server", None)
response.headers.pop("X-Powered-By", None)
# `MutableHeaders` no implementa `.pop()`. Eliminamos de forma segura.
if "server" in response.headers:
del response.headers["server"]
if "x-powered-by" in response.headers:
del response.headers["x-powered-by"]
return response