🎓 Initial commit: Math2 Platform - Plataforma de Álgebra Lineal PRO
Some checks failed
Test Suite / test-backend (push) Has been cancelled
Test Suite / test-frontend (push) Has been cancelled
Test Suite / e2e-tests (push) Has been cancelled
Test Suite / coverage-check (push) Has been cancelled

 Características:
- 45 ejercicios universitarios (Basic → Advanced)
- Renderizado LaTeX profesional
- IA generativa (Z.ai/DashScope)
- Docker 9 servicios
- Tests 123/123 pasando
- Seguridad enterprise (JWT, XSS, Rate limiting)

🐳 Infraestructura:
- Next.js 14 + Node.js 20
- PostgreSQL 15 + Redis 7
- Docker Compose completo
- Nginx + SSL ready

📚 Documentación:
- 5 informes técnicos completos
- README profesional
- Scripts de deployment automatizados

Estado: Producción lista 
This commit is contained in:
Renato
2026-03-31 11:27:11 -03:00
commit bc43c9e772
309 changed files with 84845 additions and 0 deletions

186
docs/SECURITY_ROTATION.md Normal file
View File

@@ -0,0 +1,186 @@
# Rotación de Credenciales de Seguridad
## ⚠️ Incidente de Seguridad - Credenciales Expuestas
**Fecha**: 2026-03-30
**Estado**: En progreso - Requiere acción inmediata
---
## Credenciales Comprometidas
Las siguientes credenciales fueron expuestas en el repositorio git y **DEBEN ser rotadas inmediatamente**:
### 1. AI_API_KEY (DashScope - Aliyun)
- **Estado**: Expuesto en `.env` y `backend/.env`
- **Acción requerida**:
1. Acceder a https://console.aliyun.com
2. Navegar a DashScope Console
3. Revocar la API key actual
4. Generar nueva API key
5. Actualizar en `.env.local` o Docker secrets
### 2. TELEGRAM_BOT_TOKEN
- **Estado**: Expuesto en `.env` y `backend/.env`
- **Acción requerida**:
1. Contactar @BotFather en Telegram
2. Usar comando `/revoke` para el token actual
3. Usar comando `/token` para generar nuevo token
4. Actualizar en `.env.local` o Docker secrets
### 3. TELEGRAM_ADMIN_CHAT_ID
- **Estado**: Expuesto en `.env` y `backend/.env`
- **Acción requerida**:
1. Crear nuevo chat privado con el bot
2. Obtener nuevo chat_id (usar https://t.me/userinfobot)
3. Actualizar en configuración
---
## Pasos de Rotación
### Paso 1: Preparación
```bash
# 1. Backup de configuración actual
cp .env .env.backup.$(date +%Y%m%d)
cp backend/.env backend/.env.backup.$(date +%Y%m%d)
# 2. Verificar servicios en ejecución
docker-compose ps
```
### Paso 2: Rotación de Credenciales
#### AI_API_KEY (DashScope)
1. Iniciar sesión en https://console.aliyun.com
2. Buscar "DashScope" en servicios
3. Ir a "API Keys"
4. Eliminar la key comprometida
5. Crear nueva key
6. Copiar el nuevo valor
#### TELEGRAM_BOT_TOKEN
1. Abrir Telegram y buscar @BotFather
2. Enviar: `/revoke`
3. Seleccionar el bot comprometido
4. Enviar: `/token`
5. Seleccionar el mismo bot
6. Copiar el nuevo token
#### TELEGRAM_ADMIN_CHAT_ID
1. Crear nuevo grupo/chat privado con el bot
2. Agregar bot al chat
3. Visitar: https://t.me/userinfobot
4. Copiar el chat_id mostrado
### Paso 3: Actualización de Secrets
#### Opción A: Docker Secrets (Producción)
```bash
# Actualizar archivos de secrets
echo "nueva-ai-api-key" > secrets/ai_api_key.txt
echo "nuevo-telegram-token" > secrets/telegram_token.txt
echo "nuevo-chat-id" > secrets/telegram_chat_id.txt
# Redeploy
docker-compose -f docker-compose.secrets.yml down
docker-compose -f docker-compose.secrets.yml up -d
```
#### Opción B: Variables de Entorno (Desarrollo)
```bash
# Crear .env.local (no trackeado)
cp .env.example .env.local
# Editar con nuevos valores
nano .env.local
# Reiniciar servicios
docker-compose restart
```
### Paso 4: Verificación
```bash
# Verificar que servicios están healthy
docker-compose ps
# Verificar logs
docker-compose logs -f backend
# Verificar conectividad con Telegram
curl -X POST \
https://api.telegram.org/bot<NEW_TOKEN>/getMe
# Verificar AI API
curl -X POST \
https://coding-intl.dashscope.aliyuncs.com/v1/chat/completions \
-H "Authorization: Bearer <NEW_AI_KEY>" \
-H "Content-Type: application/json" \
-d '{"model": "MiniMax-M2.5", "messages": [{"role": "user", "content": "test"}]}'
```
---
## Verificación Post-Rotación
Después de completar la rotación, ejecutar:
```bash
# Buscar cualquier rastro de credenciales antiguas
grep -r "[REDACTED_AI_API_KEY]" . \
--include="*.env*" --include="*.md" \
--include="*.ts" --include="*.js" \
2>/dev/null || echo "✅ Limpio - AI_API_KEY"
grep -r "[REDACTED_TELEGRAM_TOKEN]" . \
--include="*.env*" --include="*.md" \
--include="*.ts" --include="*.js" \
2>/dev/null || echo "✅ Limpio - TELEGRAM_BOT_TOKEN"
grep -r "[REDACTED_CHAT_ID]" . \
--include="*.env*" --include="*.md" \
--include="*.ts" --include="*.js" \
2>/dev/null || echo "✅ Limpio - TELEGRAM_CHAT_ID"
```
---
## Checklist de Completitud
- [ ] AI_API_KEY rotada en DashScope Console
- [ ] TELEGRAM_BOT_TOKEN revocado y regenerado vía @BotFather
- [ ] TELEGRAM_ADMIN_CHAT_ID cambiado a nuevo chat seguro
- [ ] Nuevos valores actualizados en producción (Docker secrets)
- [ ] Nuevos valores actualizados en desarrollo (.env.local)
- [ ] Servicios reiniciados y funcionando correctamente
- [ ] Notificaciones de Telegram probadas
- [ ] Generación de AI probada
- [ ] Logs verificados sin errores de autenticación
- [ ] Backup de credenciales antiguas eliminado de forma segura
---
## Notas Importantes
1. **No usar credenciales antiguas**: Las credenciales expuestas están comprometidas y no deben reutilizarse nunca.
2. **Monitoreo**: Después de la rotación, monitorear logs por 24-48 horas para detectar accesos no autorizados.
3. **Revisión de accesos**: Verificar en los dashboards de DashScope y Telegram si hubo accesos no autorizados durante el período de exposición.
4. **Comunicación**: Notificar al equipo de desarrollo sobre la rotación y proporcionar nuevos valores seguros a través de canales seguros (NO por email o Slack).
---
## Recursos
- [DashScope Console](https://console.aliyun.com)
- [Telegram BotFather](https://t.me/BotFather)
- [Obtener Chat ID](https://t.me/userinfobot)
- [Documentación de Secrets](./SECRETS.md)
---
**Documento creado**: 2026-03-30
**Responsable**: Equipo de Seguridad
**Próxima revisión**: Después de completar rotación