feat: implementar webapp app_compartir con visor universal, auth y purga 24h para guest
This commit is contained in:
@@ -11,7 +11,8 @@
|
||||
|
||||
| # | Objetivo | Origen | Prioridad |
|
||||
|---|----------|--------|-----------|
|
||||
| 1 | Definir funcionalidades clave de app_compartir | pablinux | Alta |
|
||||
| 1 | Soporte para compresión zip en descargas multi-archivo | pablinux | Media |
|
||||
| 2 | Notificación opcional por bot o webhook al compartir | pablinux | Baja |
|
||||
|
||||
---
|
||||
|
||||
@@ -28,3 +29,10 @@
|
||||
| Fecha | Objetivo | Notas |
|
||||
|---|---|---|
|
||||
| 2026-10-12 | Estructura base de agentes y documentación inicializada | Plantilla Telcotronics |
|
||||
| 2026-10-13 | Subida rápida de archivos (drag & drop, pegar con Ctrl+V, selector) | Soporte para multipart y streaming de hasta 500MB |
|
||||
| 2026-10-13 | Compartir texto/código o notas rápidas | Endpoint `/api/share-text` con extracción automática de título |
|
||||
| 2026-10-13 | Visor universal embebido (`/v/{id}`) para imágenes, videos, audios, PDFs, textos | Detección automática MIME y reproductores dedicados |
|
||||
| 2026-10-13 | Generador instantáneo de enlaces y código QR para móviles | Generación de QR nativa con `github.com/skip2/go-qrcode` |
|
||||
| 2026-10-13 | Sesión Guest con auto-eliminación obligatoria en 24h (física y BD) | Worker periódico de purga en segundo plano verificado con tests |
|
||||
| 2026-10-13 | Cuentas registradas (Google y WebControl) con almacenamiento permanente | Cuentas no-guest exentas de borrado a las 24h |
|
||||
| 2026-10-13 | Panel / lista de "Mis Archivos" para usuarios registrados con opción de borrado | Interfaz `/mis-archivos` con métricas de visitas y eliminación |
|
||||
|
||||
@@ -9,27 +9,71 @@
|
||||
|
||||
```
|
||||
app_compartir/
|
||||
├── .agente/
|
||||
│ ├── ideas.md
|
||||
│ ├── infraestructura.md
|
||||
│ ├── objetivos.md
|
||||
│ ├── proyecto_errores.md
|
||||
│ ├── proyecto_estructura.md
|
||||
│ └── proyecto_memoria.md
|
||||
├── internal/
|
||||
│ ├── auth/
|
||||
│ │ └── auth.go # Manejo de sesiones, WebControl y Google OAuth2
|
||||
│ ├── cleaner/
|
||||
│ │ └── cleaner.go # Worker periódico de purga (24h para guest)
|
||||
│ ├── config/
|
||||
│ │ └── config.go # Carga de configuración y .env
|
||||
│ ├── db/
|
||||
│ │ └── db.go # SQLite DAL, esquema y consultas
|
||||
│ ├── handlers/
|
||||
│ │ └── handlers.go # Rutas HTTP, endpoints API y renderizado HTML
|
||||
│ ├── models/
|
||||
│ │ └── models.go # Estructuras de datos (Share, User, Session)
|
||||
│ └── storage/
|
||||
│ └── storage.go # Slugs aleatorios, sniffing MIME y guardado en disco
|
||||
├── web/
|
||||
│ └── templates/
|
||||
│ ├── base.html # Layout común con Tailwind CSS y FontAwesome
|
||||
│ ├── expired.html # Mensaje informativo de archivo guest caducado (24h)
|
||||
│ ├── index.html # Drag & Drop, pegar portapapeles y compartir texto
|
||||
│ ├── login.html # Login con WebControl y Google OAuth
|
||||
│ ├── my_shares.html # Panel de usuario con sus archivos permanentes
|
||||
│ └── viewer.html # Visor universal (imágenes, video, audio, PDF, código)
|
||||
├── .env.example
|
||||
├── .gitignore
|
||||
├── go.mod
|
||||
├── go.sum
|
||||
├── main.go # Punto de entrada y servidor HTTP Go
|
||||
├── main_test.go # Tests unitarios/integración (purga 24h vs permanencia)
|
||||
├── README.md
|
||||
├── agents.md
|
||||
└── .agente/
|
||||
├── infraestructura.md
|
||||
├── proyecto_estructura.md
|
||||
├── proyecto_memoria.md
|
||||
├── proyecto_errores.md
|
||||
├── objetivos.md
|
||||
└── ideas.md
|
||||
└── agents.md # Punto de entrada del agente
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Rutas (HTTP / CLI / eventos)
|
||||
## Rutas HTTP / Endpoints
|
||||
|
||||
| Método | Ruta | Handler | Descripción |
|
||||
|---|---|---|---|
|
||||
| [COMPLETAR] | [COMPLETAR] | [COMPLETAR] | [COMPLETAR] |
|
||||
| `GET` | `/` | `h.Index` | Página principal de subida (drag & drop, portapapeles, texto) |
|
||||
| `POST` | `/api/upload` | `h.Upload` | Subida de archivos multipart |
|
||||
| `POST` | `/api/share-text` | `h.ShareText` | Subida rápida de notas, textos o código |
|
||||
| `GET` | `/v/{id}` | `h.View` | Visor universal de contenidos compartidos |
|
||||
| `GET` | `/d/{id}` | `h.Download` | Descarga directa forzada (`attachment`) |
|
||||
| `GET` | `/raw/{id}` | `h.Raw` | Visualización directa (`inline`) |
|
||||
| `GET` | `/qr/{id}` | `h.QR` | Generador dinámico de código QR en PNG |
|
||||
| `DELETE`| `/api/shares/{id}` | `h.DeleteShare` | Eliminación de archivo (usuario propietario) |
|
||||
| `GET` | `/login` | `h.LoginView` | Pantalla de inicio de sesión |
|
||||
| `POST` | `/login/webcontrol`| `h.WebControlLogin` | Autenticación con credenciales WebControl |
|
||||
| `GET` | `/auth/google` | `h.GoogleLogin` | Redirección OAuth a Google |
|
||||
| `GET` | `/auth/google/callback` | `h.GoogleCallback` | Retorno de autenticación OAuth Google |
|
||||
| `GET` | `/logout` | `h.Logout` | Cierre de sesión y limpieza de cookie |
|
||||
| `GET` | `/mis-archivos` | `h.MyShares` | Panel con archivos permanentes del usuario |
|
||||
|
||||
---
|
||||
|
||||
## Dependencias entre módulos
|
||||
|
||||
[COMPLETAR]
|
||||
- `main.go` orquesta `config`, `db`, `cleaner`, `auth` y `handlers`.
|
||||
- `handlers` utiliza `storage` para guardar archivos y `qrcode` para generar códigos de acceso móvil.
|
||||
- `cleaner` consulta periódicamente `db` y elimina archivos físicos de `data/uploads/` para shares `is_guest = true` con `expires_at <= NOW()`. Las cuentas registradas son ignoradas por el cleaner.
|
||||
|
||||
@@ -10,23 +10,30 @@
|
||||
| Fecha | Decisión | Razonamiento |
|
||||
|---|---|---|
|
||||
| 2026-10-12 | Inicialización de la estructura estándar de documentación de agentes | Estandarización bajo el ecosistema Telcotronics |
|
||||
| 2026-10-12 | Política de caducidad 24h exclusiva para usuarios Guest | El usuario solicitó explícitamente que los archivos subidos por invitados se eliminen a las 24 horas, mientras que los usuarios registrados (Google OAuth / WebControl) mantengan sus archivos de manera permanente. |
|
||||
| 2026-10-12 | Visor integrado universal para evitar depender de WhatsApp | Permite abrir imágenes, reproducir video/audio, leer PDFs y ver texto o código directamente desde el navegador sin apps externas. |
|
||||
| 2026-10-12 | Backend autónomo en Go con SQLite | Binario único de alto rendimiento, bajo consumo de memoria y concurrencia nativa con goroutine para la limpieza periódica. |
|
||||
|
||||
---
|
||||
|
||||
## Estado actual
|
||||
|
||||
Proyecto recién inicializado. Estructura de documentación base creada. Pendiente definir objetivos específicos, stack detallado y requerimientos.
|
||||
Estructura de documentación y requerimientos alineados. Desarrollando servidor en Go con base de datos SQLite, endpoints de subida, visor interactivo y worker de purga a 24 horas.
|
||||
|
||||
---
|
||||
|
||||
## Pendientes
|
||||
|
||||
- [ ] Definir alcance y objetivos del proyecto `app_compartir`
|
||||
- [ ] Inicializar módulo Go (`go mod init app_compartir`)
|
||||
- [ ] Definir arquitectura base
|
||||
- [ ] Implementar base de datos SQLite y esquema de tablas (`shares`, `users`, `sessions`)
|
||||
- [ ] Implementar endpoints HTTP de subida (`/api/upload`, `/api/share-text`)
|
||||
- [ ] Implementar visor `/v/{id}` (HTML + Tailwind + QR)
|
||||
- [ ] Implementar worker de purga de archivos guest vencidos
|
||||
- [ ] Implementar auth con WebControl (`api.siax-system.net`) y Google OAuth2
|
||||
- [ ] Implementar panel "Mis Archivos" para usuarios autenticados
|
||||
|
||||
---
|
||||
|
||||
## Notas y observaciones
|
||||
|
||||
[COMPLETAR]
|
||||
- Los archivos se almacenarán en `data/uploads/` y la base de datos en `data/compartir.db`.
|
||||
- Los enlaces cortos utilizarán slugs alfanuméricos seguros y compactos.
|
||||
|
||||
Reference in New Issue
Block a user