Commit Graph
169 Commits
Author SHA1 Message Date
Lizandro Guarnizo 18c30e928e fix: crear usuario desde admin ahora setea email_verified=true y estado=true para permitir login 2026-07-06 22:29:05 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 e937676160 fix(auth): flujo de recuperación de contraseña usa email en vez de usuario
- login.html: corregir link roto /password/reset → /request-password-reset
- request-password-reset.html: reescribir — pide email, AJAX, diseño de la app
- RequestPasswordResetPost: buscar por email (GetUserByEmail), no revela si
  el correo existe o no (misma respuesta siempre — seguridad)
- password-reset.html: reescribir — eliminar campo nombre_usuario redundante,
  validación de contraseñas en cliente, diseño consistente con el resto del app
- PasswordResetPost: usar c.Locals("email") del token (ya validado por
  middleware) en vez de nombre_usuario del form
- password_reset.go middleware: ampliar expiración de token de 5 min a 1 hora

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-06 22:17:38 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 107178aa97 feat(users): reemplazar confirmación por envío de credenciales con link de reset
- Eliminar envío automático de confirmación al crear usuario
- Nuevo botón en cada fila: enviar credenciales (usuario + link establecer contraseña)
- POST /app/users/:id/credenciales → SendUserCredencialesEmail
- Email incluye username, link al login y link para establecer contraseña

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-06 21:57:36 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 bc79553b7e feat(tareas): módulo de tablero kanban con drag & drop, comentarios y Telegram
- Modelos Tarea y TareaComentario con GORM, migración automática
- Estados: por_hacer → en_progreso → revisión → hecho; prioridades: baja/media/alta/urgente
- Drag & drop entre columnas via SortableJS (PUT /tarea/:id/estado)
- CRUD completo: crear, editar, eliminar; asignación a usuario + fecha límite
- Panel lateral de detalle: historial de comentarios, adjuntar archivos (uploads/tareas/:id)
- Telegram: notifica asignación, cambio de estado y comentarios nuevos via sendTelegramAdmin
- Seed automático bajo módulo "Administración", solo rol Administrador

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-06 20:18:26 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 5f92934fba feat(url-monitor): agregar monitoreo de disponibilidad de URLs desde servidor
- Modelos UrlMonitor y UrlMonitorLog con purga automática a 7 días
- Cron cada minuto ejecuta chequeos HEAD→GET con fallback, alerta Telegram en cambio de estado
- CRUD completo + chequeo manual + historial de logs
- Migración automática de tablas

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-06 09:33:48 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 569d8b0f28 feat(ai-config): agregar botón Probar para verificar conectividad del provider
- Endpoint GET /ai-config/:id/test que llama /api/tags (Ollama) o /v1/models (OpenAI-compat/Anthropic)
- Botón "Probar" en cada fila de la tabla con modal de resultado JSON

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-06 09:33:29 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 6062f31c70 feat(ai): integrar Ollama en AiConfig para ia_controller, query_runner y landing
- Agrega provider 'ollama' al panel de AiConfig con badge azul y hint de URL
- ia_controller: reemplaza webhook n8n hardcodeado por llamada directa a Ollama vía AiConfig (módulo 'ia')
- query_runner: agrega soporte explícito de ollama (model fallback gemma3:1b, Basic Auth para URL pública)
- HTML: agrega módulo 'IA / vCard' en el selector de módulos

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-06 09:33:22 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 66088ce691 feat(agent): auto-renice top CPU process after 2 consecutive high-CPU reports
- Agent tracks consecutive reports above cpu_threshold (default 90%)
- After renice_consecutive reports (default 2 = 60s sustained), runs
  renice -n 19 on the top CPU process
- Reports the action back in the heartbeat payload
- Backend sends Telegram alert when renice is applied
- All params configurable in agent.yml and install.sh flags

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-25 11:17:07 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 ae74d0ef90 feat(agent): persist 7-day metrics history per server heartbeat
- New table servidor_metricas_history (cpu%, ram%, swap%, disco%, tcp, load1)
- Each heartbeat inserts a compact row (~60 bytes)
- GET /app/servidor/:id/metricas-history?horas=24 returns the data
- Daily cron at 3AM purges rows older than 7 days
- ~1.2 MB per server per 7 days at 30s interval

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-25 11:03:16 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 42dc7020fc fix(websms): return subid from LabsMobile response in ApiSendSms
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-25 10:18:20 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 cb9d984ee8 fix: capturar subid de LabsMobile como MsgID en logs de SMS
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-24 18:36:14 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 704664afe7 feat: API pública para envío de SMS vía WebSMS
Agrega POST /api/sms/send autenticado con Bearer token (secret_key
auto-generado en WebSmsConfig). Recibe numero y mensaje, llama a
LabsMobile y registra el resultado en websms_log.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-23 23:13:57 -05:00
Lizandro Guarnizo 39f56372c3 fix: tickets filtrados por proyecto, vistas contabilidad/websms en resources/view 2026-06-22 10:23:28 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 e28e2823dc fix: compilar agent/dist en builder stage y agregar módulos contabilidad/websms
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-20 10:13:17 -05:00
Lizandro Guarnizo ca6a44f64e up 2026-06-18 16:48:49 -05:00
Lizandro Guarnizo 89021f2e77 modificaciones de mejora 2026-06-11 18:06:21 -05:00
Lizandro Guarnizo 478c2bde00 up 2026-06-10 00:18:20 -05:00
Lizandro Guarnizo 7329bac898 up 2026-06-04 22:49:16 -05:00
Lizandro Guarnizo a9703300ab Update oss_api_controller.go 2026-06-03 22:48:24 -05:00
Lizandro Guarnizo ff72bd0269 up 2026-06-03 22:39:58 -05:00
Lizandro Guarnizo c05a2a8137 up 2026-06-03 21:32:50 -05:00
Lizandro Guarnizo f087fd46f1 up 2026-06-03 20:10:22 -05:00
Lizandro Guarnizo 1e1ba682b0 up 2026-06-02 15:41:20 -05:00
Lizandro Guarnizo c5603c51f8 up 2026-06-02 13:27:45 -05:00
Lizandro Guarnizo 28d0eae715 up 2026-06-02 13:13:29 -05:00
Lizandro Guarnizo ba76754331 up 2026-06-02 10:35:37 -05:00
Lizandro Guarnizo f8b352eb03 add logo_url to landing questions; add color/foto_perfil extraction to vcard 2026-05-28 22:44:42 -05:00
Lizandro Guarnizo 52ce8638a8 replace cta with social_media question; add SocialMedia field to landing_session 2026-05-28 20:49:35 -05:00
Lizandro Guarnizo 06d85dc0bf up 2026-05-27 10:16:28 -05:00
Lizandro Guarnizo 498e1d5743 up 2026-05-27 09:34:21 -05:00
Lizandro Guarnizo 36c9e0a6d5 up 2026-05-26 21:55:48 -05:00
Lizandro Guarnizo d8f38a6669 up 2026-05-26 21:28:35 -05:00
Lizandro Guarnizo 7a374340c1 up 2026-05-26 20:54:10 -05:00
Lizandro Guarnizo 553252508f up 2026-05-26 14:06:38 -05:00
Lizandro Guarnizo e9548e13ae up 2026-05-26 11:42:41 -05:00
Lizandro Guarnizo a489844c73 up 2026-05-26 10:05:01 -05:00
Lizandro Guarnizo 6bcbe58a9a Merge branch 'copilot/vcard-api-integraciones-anlisis' 2026-05-25 22:04:25 -05:00
Lizandro GuarnizoandCopilot 0f386ad456 fix: botones start/stop/restart usan POST; agrega webhook Coolify
- CoolifyApplicationStart/Stop/Restart cambian GET → POST (Coolify API requiere POST)
- Nuevo endpoint público POST /webhooks/coolify para recibir notificaciones
  de deployment/restart desde Coolify Settings → Notifications → Webhook
- UI: muestra URL del webhook en modal de config para fácil copia

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-05-25 22:04:25 -05:00
Lizandro Guarnizo cf4064b072 Merge branch 'copilot/vcard-api-integraciones-anlisis' 2026-05-25 21:40:09 -05:00
Lizandro GuarnizoandCopilot 7bfe7cba5c fix: coolify proxy no retorna 502 para evitar intercepción de Cloudflare
Cambia StatusBadGateway (502) → StatusBadRequest (400) en todos los
errores del proxy Coolify. Cloudflare intercepta respuestas 502 del
origen y muestra su propia pantalla, ocultando el error al frontend.
Con 400, el JSON de error llega al cliente y Alpine.js puede mostrarlo.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-05-25 21:40:09 -05:00
Lizandro Guarnizo 10be0443c9 Merge branch 'copilot/vcard-api-integraciones-anlisis' 2026-05-25 21:28:49 -05:00
Lizandro GuarnizoandCopilot e1aba741a7 fix: revert health endpoint to /api/health (not /v1, per Coolify docs)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-05-25 21:28:49 -05:00
Lizandro Guarnizo 1048792b34 Merge branch 'copilot/vcard-api-integraciones-anlisis' 2026-05-25 21:22:03 -05:00
Lizandro GuarnizoandCopilot 86d56d0447 fix: use correct Coolify health endpoint /api/v1/healthcheck
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-05-25 21:22:03 -05:00
Lizandro Guarnizo 49d1c9d86d Merge branch 'copilot/vcard-api-integraciones-anlisis'
# Conflicts:
#	rest/controllers/coolify_controller.go
2026-05-25 21:02:31 -05:00
Lizandro GuarnizoandCopilot ce2ffff3e8 feat: add missing Coolify controller, view and routes
- rest/controllers/coolify_controller.go: proxy completo hacia API Coolify
- resources/views/coolify.html: interfaz Alpine.js con tabs apps/servers/services/dbs/projects/deployments/team
- rest/routes/user.go: registra todas las rutas /app/coolify/*

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-05-25 21:01:58 -05:00
Lizandro Guarnizo c82831702e up 2026-05-25 15:14:04 -05:00
Lizandro Guarnizo 58d98f23aa Revert "telegram"
This reverts commit 46daf3d4aa.
2026-05-25 12:50:53 -05:00
Lizandro Guarnizo 46daf3d4aa telegram 2026-05-25 10:08:40 -05:00
Lizandro Guarnizo 1a96caeb83 ip 2026-05-21 23:49:37 -05:00