Commit Graph
21 Commits
Author SHA1 Message Date
Lizandro GDandClaude Opus 5 c8e5afceb2 fix: seguridad de pagos y accesos, integración PayPal y Coolify ampliado
Seguridad (crítico):
- Los webhooks de Bold y dLocal solo validaban la firma si el atacante la
  enviaba: sin cabecera se aceptaba cualquier payload. Ahora es obligatoria.
- GET /pago-exitoso marcaba contratos como pagados leyendo un query param del
  navegador. Ahora solo muestra estado; la confirmación la hace la verificación
  contra la API de la pasarela o el webhook firmado.
- /uploads se servía como estático público: se descargaban RUTs, facturas y
  entregables sabiendo la ruta. Ahora exige sesión.
- Los secretos JWT no se podían sobreescribir por entorno (faltaba el tag env:)
  y su valor estaba en el repo, permitiendo firmarse una sesión de admin. Ahora
  son configurables y el arranque se detiene si siguen con el valor publicado.
- .env y session.db salen del control de versiones.
- Query Runner, gestión de usuarios/roles/módulos y seeds quedan restringidos a
  administradores; antes bastaba con tener sesión.

Pasarelas de pago:
- dLocal generaba enlaces que nunca se reconciliaban: mandaba el ID numérico en
  vez de "contrato-N", la URL de retorno apuntaba a la API de dLocal y nunca se
  enviaba notification_url, así que su webhook jamás se disparaba.
- PayPal solo tenía pantalla de configuración. Se implementa el servicio
  completo (OAuth, orden, captura, verificación de webhook) y queda
  seleccionable como pasarela.
- La moneda estaba fija en COP: un contrato en USD generaba un cobro por esa
  cifra en pesos.

Contratos:
- pago_confirmado nunca volvía a false, así que el segundo ciclo de renovación
  no se cobraba aunque el cliente pagara. Se reinicia al generar enlace nuevo.
- Los contratos vencidos nunca cambiaban de estado y recibían correo a diario
  de forma indefinida; ahora se cierran tras 30 días de gracia.

Otros:
- Coolify: coolifyCall ignoraba el status HTTP y reportaba errores como éxito.
  El agente pasa de 10 a cobertura completa (servicios, bases de datos,
  variables de entorno, proyectos, equipos y recursos de servidor).
- SeedBalanceData ya no corre en cada arranque (recreaba transacciones
  borradas); ahora se invoca con SEED_BALANCE=1.
- Los seeds dejan de devolver permisos revocados en cada despliegue.
- Timeouts en las llamadas HTTP a Telegram y dLocal que podían colgarse.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-03 03:20:00 +00:00
Lizandro GuarnizoandClaude Sonnet 4.6 2ee5e2ea83 fix: sesión sin vencimiento práctico (90 años JWT + cookie persistente)
- JWT exp: 1 año → 90 años
- Cookie Verify-Rest-Token: sin MaxAge (session cookie) → MaxAge 90 años
- Session store: 1 año → 90 años

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-09 20:20:33 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 e4bb986c6c fix: servir carpeta uploads/ como ruta estática
Los archivos adjuntos de tareas se guardaban en uploads/tareas/{id}/
pero Fiber solo servía la carpeta public/. Se agrega ruta estática
/uploads → ./uploads para que los archivos sean accesibles vía HTTP.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-09 19:17:16 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 1d152b6de0 remove: eliminar GeoIP completamente, no era necesario
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-20 10:25:05 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 d66fe95514 fix: GeoIP opcional, no paniquea si falta GeoLite2-City.mmdb
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-20 10:22:55 -05:00
Lizandro Guarnizo 7f309186d6 up 2026-05-18 23:50:50 -05:00
Lizandro Guarnizo bbe83c79ba up 2026-05-18 23:45:11 -05:00
Lizandro Guarnizo 7b64f33f72 Update mail.go 2026-05-13 22:50:12 -05:00
Lizandro Guarnizo 96fd0c6c0e Update mail.go 2026-05-13 22:11:45 -05:00
Lizandro Guarnizo 55c68b470b Update mail.go 2026-05-12 18:57:17 -05:00
Lizandro Guarnizo 338cd03e4f Update mail.go 2026-05-12 17:37:43 -05:00
Lizandro Guarnizo 53dcdcf88d Update session.go 2026-05-01 12:09:41 -05:00
Lizandro Guarnizo a7a09ac2e3 Update session.go 2026-05-01 12:08:21 -05:00
Lizandro Guarnizo 1c27cdfaf1 fix: layout CSS en Cloudflare/Hostinger + sesiones en PostgreSQL 1 año 2026-05-01 11:44:35 -05:00
Lizandro Guarnizo 4e564a7e28 feat: sesión 1 año + validación sintaxis plantilla en tiempo real 2026-04-30 22:53:10 -05:00
Lizandro Guarnizo 3bdf44d811 up 2026-03-11 16:41:14 -05:00
Lizandro Guarnizo 3174b3a434 Update server.go 2026-03-11 16:21:41 -05:00
Lizandro Guarnizo 5ba373b026 up 2026-03-11 16:17:31 -05:00
Lizandro Guarnizo def39bc53d up 2026-03-11 16:09:17 -05:00
root fd739f8675 Descripción de los cambios 2025-04-24 02:07:47 +00:00
Lizandro Guarnizo 6d8f1bcd6f Initial commit 2025-02-06 14:22:29 -05:00