Seguridad: rate limiting, códigos de un solo uso, rotación de FERNET_KEY

- utils/rate_limiter.py: ventana deslizante 20 req/60s por chat_id,
  aplicado en todos los handlers de telegram_bot.py
- database.py: tabla invite_codes (un solo uso por código), funciones
  crear_invite_code() y verificar_y_consumir_invite_code()
- onboarding.py: verifica primero en DB (un solo uso), fallback al
  INVITE_CODE del .env (ilimitado, para uso interno)
- scripts/generar_codigo.py: genera 1 o N códigos de invitación
- scripts/rotar_fernet_key.py: re-cifra todos los tenants y el .env
  con nueva FERNET_KEY, backup automático de .env antes de escribir

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
markosbenitez
2026-05-25 22:33:50 -03:00
parent 6487a7857c
commit 7865008618
8 changed files with 457 additions and 4 deletions

View File

@@ -54,6 +54,9 @@ class Settings(BaseSettings):
data_dir: Path = Path("./data")
db_path: Path = Path("./data/pasante.db")
# Código de invitación para registro (vacío = registro abierto)
invite_code: str = ""
# Logging
log_level: str = "INFO"