Commit Graph
20 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 0218b93bb4 feat: marcar pago manual en contratos con enlace Bold pendiente
Agrega endpoint POST /api/contratos/:id/marcar-pagado y botón (✓)
en la tabla de contratos para confirmar el pago sin depender del
webhook de Bold. Llama a MarcarContratoPagado (pago_confirmado=true,
limpia enlace, renueva fecha vencimiento) y envía correo de confirmación.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-09 20:11:50 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 dfe8d9e4a9 fix: columna FK incorrecta en contrato_servidores y filtrado de BDs en modal
- syncContratoJoin derivaba "contrato_servidore_id" en vez de "servidor_id"
  al recortar el último carácter del nombre de tabla; ahora usa TrimPrefix+TrimSuffix
  para derivar correctamente servidor_id, conx_db_id, ai_config_id
- Modal contratos: filteredConxDbList filtra BDs por servidor(es) seleccionado(s)
  en vez de mostrar todas las BDs sin contexto

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-09 11:58:01 -05:00
Lizandro Guarnizo 478c2bde00 up 2026-06-10 00:18:20 -05:00
Lizandro Guarnizo 30dd4be9b2 Update contratos.html 2026-06-04 23:02:51 -05:00
Lizandro Guarnizo 7329bac898 up 2026-06-04 22:49:16 -05:00
Lizandro Guarnizo 61b3eca31d up 2026-05-14 22:30:31 -05:00
Lizandro Guarnizo e94f9ee1f4 up 2026-05-13 22:45:22 -05:00
Lizandro Guarnizo 9bcddcf1ea up 2026-05-13 22:05:20 -05:00
Lizandro Guarnizo d9d24c43d7 up 2026-05-12 19:50:12 -05:00
Lizandro Guarnizo 25e3cd6254 up 2026-05-12 19:41:17 -05:00
Lizandro Guarnizo 05141ce70e up 2026-05-12 18:53:09 -05:00
Lizandro Guarnizo 525d508982 Update reglas.html 2026-05-12 18:39:39 -05:00
Lizandro Guarnizo 387485e65b up 2026-05-12 18:34:20 -05:00
Lizandro Guarnizo ee31ac978f up 2026-05-12 18:08:30 -05:00
Lizandro Guarnizo 0da9331a5e feat: selector de pasarela (Bold/dLocal/ninguna) en regla + muestra {{.EnlacePago}} en editor de plantillas 2026-05-01 12:47:13 -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 e751a9f894 feat: contrato soporta múltiples servicios (many2many) con precio sugerido 2026-04-30 22:15:31 -05:00
Lizandro Guarnizo 7be96ad491 i` 2026-04-30 21:52:12 -05:00
Lizandro Guarnizo f787821444 up 2026-04-29 23:36:30 -05:00