feat: implementar webapp app_compartir con visor universal, auth y purga 24h para guest

This commit is contained in:
2026-10-13 22:46:02 -05:00
parent 6ea00e4ec5
commit 8519590cc7
24 changed files with 2970 additions and 71 deletions
+54 -47
View File
@@ -1,4 +1,4 @@
# agents.md — Punto de entrada del proyecto
# agents.md — Punto de entrada del proyecto: app_compartir
> **Reglas:**
> - Este archivo es el eslabón más importante. Leerlo siempre antes de cualquier tarea.
@@ -11,16 +11,20 @@
## Antecedentes
[COMPLETAR — contexto del problema que resuelve este proyecto, por qué existe dentro del ecosistema Telcotronics]
Compartir archivos, fotos, PDFs, notas o fragmentos de código entre dispositivos (móvil y PC) suele terminar dependiendo de clientes de mensajería como WhatsApp, lo cual es invasivo, incómodo y comprime o altera contenidos. `app_compartir` resuelve esto proveyendo una webapp ligera y directa para transferir y visualizar contenido al instante con enlace directo y código QR.
---
## Objetivo general
[COMPLETAR — qué hace el sistema y cuáles son sus responsabilidades principales]
Proporcionar una aplicación web ágil en Go para transferir, compartir y previsualizar archivos y textos sin fricción, con soporte de sesiones invitadas efímeras y cuentas registradas con almacenamiento permanente.
1. [COMPLETAR — responsabilidad 1]
2. [COMPLETAR — responsabilidad 2]
1. **Compartición directa:** Subida mediante Drag & Drop, selección de archivos, pegado desde portapapeles (`Ctrl+V`) o editor rápido de texto/código.
2. **Generación de enlaces y QR:** Obtención inmediata de enlace para compartir y código QR para apertura instantánea en dispositivos móviles.
3. **Visor universal integrado (`/v/{id}`):** Vista previa nativa de imágenes, videos, audios, PDFs, textos y código, además de descarga directa para otros tipos de archivo.
4. **Política de retención diferenciada:**
- **Modo Guest (Invitado):** No requiere login. El contenido subido se **elimina automáticamente tras 24 horas** de su subida (limpieza de archivo físico y registro en base de datos).
- **Cuentas registradas (Google OAuth y WebControl):** Almacenamiento **permanente** (no se elimina automáticamente a las 24h). El usuario puede listar sus archivos compartidos y eliminarlos manualmente cuando desee.
---
@@ -28,19 +32,34 @@
| Componente | Tecnología |
|---|---|
| Lenguaje | Go |
| Framework | [COMPLETAR] |
| Base de datos | [COMPLETAR] |
| [Otros] | [COMPLETAR] |
| Lenguaje | Go 1.22+ / 1.27 |
| Router / HTTP | `net/http` estándar con enrutamiento nativo |
| Base de datos | SQLite (`modernc.org/sqlite` o `mattn/go-sqlite3`) |
| Frontend | HTML5 + Tailwind CSS + Vanilla JS / QR generator SVG |
| Autenticación | Sesiones cookies HTTP-only, WebControl (`api.siax-system.net`) y Google OAuth2 |
| Almacenamiento | Almacenamiento local en disco (`./uploads/`) con limpieza concurrente |
---
## Módulos del sistema
### 1. [Nombre del módulo]
### 1. Motor de Almacenamiento y Uploads (`storage`)
**Estado: ⏳ Pendiente**
Manejo de archivos multipart, validación de tamaños, generación de IDs únicos (slugs) y persistencia en `./uploads/`.
[Descripción del módulo]
### 2. Visor Universal (`viewer`)
**Estado: ⏳ Pendiente**
Interfaz de visualización responsive con detección de tipo MIME: imágenes con zoom, video/audio HTML5, visor PDF embebido, visualizador de texto/código con botón de copiar y QR de acceso rápido.
### 3. Autenticación y Sesiones (`auth`)
**Estado: ⏳ Pendiente**
- Sesión Guest por defecto (identificador anónimo/cookie).
- Integración WebControl (`https://api.siax-system.net/api/auth/login`).
- Integración Google OAuth2.
### 4. Worker de Limpieza 24h (`cleaner`)
**Estado: ⏳ Pendiente**
Goroutine periódica (ticker) que consulta items donde `is_guest = true AND expires_at <= NOW()`, borrando el archivo físico del disco y la fila de SQLite. Las cuentas registradas son ignoradas por el limpiador.
---
@@ -54,54 +73,36 @@
| Parámetro | Valor |
|---|---|
| Dominio público | [COMPLETAR] |
| Puerto interno | [COMPLETAR] |
| Servicio systemd | [COMPLETAR] |
| BD principal | [COMPLETAR] |
| Dominio público | Por definir (ej: `compartir.sigmac.app` / `compartir.telcotronics.net`) |
| Puerto interno | `8085` (o configurable vía `PORT`) |
| Servicio systemd | `app-compartir.service` |
| BD principal | SQLite local (`data/compartir.db`) |
| MCP ecosistema | `mcp.telcotronics.net` 🔧 en mantenimiento |
> **Correo del ecosistema:** usar `no-reply@sigmac.app` con contraseña `Sigma.2030@`
> vía `smtp.sigmac.app:587` (STARTTLS). Desde LAN interna usar `192.168.10.111:587`.
> Credenciales disponibles en `.agente/infraestructura.md` — sección servidor-email.
> Para el detalle completo y datos del ecosistema ver `.agente/infraestructura.md`.
## Documentos del ecosistema (referencia)
> Estos documentos viven en `/home/pablinux/Projects/` y son la fuente de verdad del ecosistema.
> **No duplicar su contenido aquí** — referenciarlos.
| Documento | Descripción |
|---|---|
| `~/Projects/design-system.md` | Sistema de diseño unificado — colores, tipografía, componentes para Flutter / Vue / Java / PHP |
| `~/Projects/roadmap.md` | Hoja de ruta estratégica — decisiones técnicas tomadas y pendientes de ejecutar |
| `~/Projects/infraestructura.md` | Arquitectura completa de servidores, red, CTs y servicios del ecosistema |
| `~/Projects/prompt_actualizacion.md` | Protocolo de actualización — registrar objetivos, documentar sesiones, sincronizar |
---
## Variables de entorno (`.env`)
| Variable | Descripción |
|---|---|
| [COMPLETAR] | [COMPLETAR] |
---
## Migraciones
Runner: `[COMPLETAR]`
| Archivo | Tabla principal | Estado |
| Variable | Descripción | Default |
|---|---|---|
| — | — | — |
| `PORT` | Puerto de escucha HTTP | `8085` |
| `BASE_URL` | URL base pública de la app | `http://localhost:8085` |
| `DATA_DIR` | Directorio para base de datos y uploads | `./data` |
| `SESSION_SECRET` | Clave secreta para cookies de sesión | `compartir-secret-key-change-me` |
| `GOOGLE_CLIENT_ID` | Client ID de Google OAuth | (opcional) |
| `GOOGLE_CLIENT_SECRET` | Client Secret de Google OAuth | (opcional) |
| `WEBCONTROL_API_URL` | URL de autenticación de WebControl | `https://api.siax-system.net/api/auth/login` |
---
## Para arrancar en local
```bash
# [COMPLETAR — pasos mínimos para correr el proyecto]
# Descargar dependencias
go mod tidy
# Ejecutar el servidor
go run main.go
```
---
@@ -112,6 +113,8 @@ Runner: `[COMPLETAR]`
app_compartir/
├── README.md
├── agents.md # ← LEER PRIMERO
├── go.mod
├── main.go
└── .agente/
├── infraestructura.md # Ecosistema — espejo del global
├── proyecto_estructura.md # Árbol de archivos y rutas
@@ -127,4 +130,8 @@ app_compartir/
| Módulo | Estado |
|---|---|
| [COMPLETAR] | ⏳ Pendiente |
| Módulo de subida y almacenamiento | ✅ Completo |
| Visor integrado (imágenes, video, audio, PDF, texto) | ✅ Completo |
| Purga automática 24h para cuentas Guest | ✅ Completo |
| Autenticación Guest / WebControl / Google | ✅ Completo |
| Panel de gestión para usuarios registrados | ✅ Completo |