Librería con listas, recomendaciones, descarga anticipada, app instalable con lectura offline y seguridad para exponerlo a internet

- Historial pasa a Librería: pestañas Leyendo, Siguiendo, Terminados, En el dispositivo y listas propias (Favoritos, Pendientes, Abandonados por defecto)
- Recomendaciones en el inicio según tus géneros más leídos (populares de MangaDex)
- Descarga anticipada de los N capítulos siguientes (opcionalmente en HD) al pasar la mitad de uno
- PWA: manifest, iconos y service worker; capítulos guardados en el dispositivo para leer sin conexión, progreso offline sincronizado después
- Seguridad: baneo de IP tras 6 intentos fallidos (configurable), IP real detrás de proxies de confianza, CSP y cabeceras, cookie Secure/HSTS en HTTPS, login sin diferencias de tiempo, registro cerrado por defecto, contraseñas de 8+, protección SSRF en el proxy de imágenes, errores 500 genéricos
- Ajustes: sección Seguridad con IPs bloqueadas, intentos recientes y la IP vista por el servidor
- LeerCapitulo: reintentos ante caídas (522/5xx), copia anterior si sigue caído y mensaje claro

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-11-01 07:52:13 -06:00
co-authored by Claude Opus 5.5
parent 9086896a89
commit d3e196a2f3
16 changed files with 931 additions and 59 deletions
+8
View File
@@ -19,6 +19,14 @@ services:
- PUBLIC_URL=${PUBLIC_URL:-http://localhost:3352}
# Registro de cuentas nuevas. Con la base vacía el primer usuario siempre puede registrarse.
- ALLOW_SIGNUP=${ALLOW_SIGNUP:-false}
# Baneo de IP: tras BAN_MAX_FAILS intentos fallidos en BAN_WINDOW_MIN minutos, BAN_HOURS horas.
- BAN_MAX_FAILS=${BAN_MAX_FAILS:-6}
- BAN_WINDOW_MIN=${BAN_WINDOW_MIN:-60}
- BAN_HOURS=${BAN_HOURS:-24}
- BAN_IGNORE=${BAN_IGNORE:-}
# Detrás de un proxy inverso (Caddy, Nginx, Cloudflare Tunnel…): cabecera con la IP real del
# cliente, p. ej. x-forwarded-for o cf-connecting-ip. Vacío = conexión directa.
- REAL_IP_HEADER=${REAL_IP_HEADER:-}
volumes:
# SQLite con usuarios, sesiones, historial, estadísticas y clave del proxy de imágenes.
- ./data:/app/data