feat: implementar webapp app_compartir con visor universal, auth y purga 24h para guest
This commit is contained in:
@@ -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 |
|
||||
|
||||
Reference in New Issue
Block a user