Files
hechakuaa_bot/.env.example
markosbenitez 7865008618 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>
2026-05-25 22:33:50 -03:00

41 lines
2.1 KiB
Plaintext

# ─── Cifrado ───────────────────────────────────────────────────────────────────
# Generar con: python -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())"
FERNET_KEY=
# ─── Credenciales del PJ (cifradas con Fernet) ─────────────────────────────────
# Completar corriendo: uv run python scripts/cifrar_credenciales.py
PJ_USUARIO_ENC=
PJ_PASSWORD_ENC=
# ─── Código de invitación ──────────────────────────────────────────────────────
# Si está configurado, el bot lo pide antes de permitir el registro.
# Vacío = cualquiera puede registrarse (no recomendado en producción).
# Ejemplo: INVITE_CODE=estudio2026
INVITE_CODE=
# ─── Telegram ──────────────────────────────────────────────────────────────────
# Token del bot: hablarle a @BotFather en Telegram → /newbot
TELEGRAM_BOT_TOKEN=
# Tu chat_id personal: hablarle a @userinfobot en Telegram
TELEGRAM_CHAT_ID=
# (Opcional) Chat IDs adicionales habilitados, separados por coma
# Cada persona tiene que hablarle a @userinfobot para obtener su ID
# Ejemplo: TELEGRAM_EXTRA_IDS=111222333,444555666
TELEGRAM_EXTRA_IDS=
# ─── Configuración del polling (opcional — defaults razonables) ─────────────────
# Intervalo de chequeo en minutos (default: 60)
# POLL_INTERVAL_MINUTES=60
# Horario de polling, hora de inicio y fin (0-23, zona Asunción UTC-4)
# POLL_HORA_INICIO=7
# POLL_HORA_FIN=18
# ─── Otros (no tocar salvo que sepas lo que hacés) ──────────────────────────────
# LOG_LEVEL=INFO
# DATA_DIR=./data
# PJ_BASE_URL=https://apps.csj.gov.py
# PJ_ROL_ID=16