Files
app_compartir/README.md
T

173 lines
7.2 KiB
Markdown

# 🚀 drop.sigmac.app
> **Pasa fotos, notas, PDFs y archivos entre tu teléfono y tu ordenador en segundos — sin necesidad de abrir WhatsApp ni mandar mensajes a tu propio chat.**
Una aplicación web ágil, moderna y ligera desarrollada en **Go**. Permite transferir cualquier tipo de archivo o texto con generación instantánea de enlace y código QR para escanearlo con la cámara del móvil.
---
## 🎯 ¿Qué problema resuelve?
Pasarse una foto de la PC al celular, un fragmento de código, una contraseña temporal o un PDF habitualmente obliga a abrir WhatsApp Web, buscar tu propio chat ("Chat contigo mismo"), enviar el archivo (que a menudo se recomprime) y luego borrarlo.
**drop.sigmac.app elimina toda esa fricción:**
1. Arrastras el archivo o pegas una captura con <kbd>Ctrl+V</kbd> en el navegador.
2. Apuntas con la cámara de tu móvil al código QR que aparece en pantalla.
3. ¡Listo! Se abre el visor en tu móvil de forma inmediata.
---
## ✨ Características Principales
### 📤 Subida sin complicaciones
- **Drag & Drop:** Arrastra cualquier archivo a la ventana.
- **Portapapeles directo:** Presiona <kbd>Ctrl+V</kbd> en cualquier parte de la página para subir capturas de pantalla o texto copiado al instante.
- **Pestaña Texto / Código:** Comparte fragmentos de código, notas de reuniones o enlaces sin crear archivos de texto manualmente.
### 📱 Escaneo QR y Enlaces Cortos
- Cada elemento compartido genera una URL corta (`/v/slug`) y un **código QR nativo en pantalla**.
- Puedes escanearlo directamente desde cualquier smartphone sin instalar ninguna app adicional.
### 👁️ Visor Universal Integrado (`/v/{id}`)
No requiere descargar el archivo a ciegas para ver qué es:
- 🖼️ **Imágenes:** Visor con zoom al 100%, pantalla completa y alta calidad (PNG, JPG, GIF, WebP, SVG).
- 🎥 **Video:** Reproductor HTML5 integrado para previsualizar grabaciones o clips (MP4, WebM).
- 🎵 **Audio:** Reproductor nativo para notas de voz o música (MP3, WAV, OGG).
- 📄 **PDFs:** Lector embebido interactivo en el navegador.
- 💻 **Texto / Código:** Formato legible con resaltado monospace y botón para **Copiar texto** al portapapeles con un clic.
- 📦 **Otros archivos:** Ficha técnica con tamaño exacto, tipo de archivo y botón directo de descarga.
---
## 🔒 Política de Retención: Invitado vs Cuenta Registrada
| Característica | 👤 Modo Invitado (Guest) | 🛡️ Cuenta Registrada (WebControl / Google) |
|---|---|---|
| **¿Requiere inicio de sesión?** | **No** (usar y compartir de inmediato) | Sí (login fácil con 1 clic) |
| **Tiempo de vida del archivo** | ⏰ **24 horas exactas** | ♾️ **Permanente** (no expira) |
| **Eliminación automática** | Sí, el worker purga archivo y registro tras 24h | **Nunca** (se conserva hasta que lo borres) |
| **Panel "Mis Archivos"** | No disponible | ✅ Sí (`/mis-archivos`) con historial y métricas |
| **Eliminación manual** | No requerida (se auto-destruye) | ✅ Sí, botón para eliminar cuando quieras |
---
## 🛠️ Stack Tecnológico
- **Lenguaje:** Go (Go 1.22+ / 1.27 con routing nativo `net/http`)
- **Base de Datos:** SQLite local en modo WAL (vía `modernc.org/sqlite`, 100% puro Go sin dependencias CGO)
- **Generador QR:** `github.com/skip2/go-qrcode` (generación ultrarrápida de QR PNG)
- **Frontend:** HTML5, Tailwind CSS y FontAwesome
- **Autenticación:**
- Telcotronics **WebControl** (`https://api.siax-system.net/api/auth/login`)
- **Google OAuth2**
---
## 🚀 Puesta en Marcha Rápida
### 1. Requisitos
- Go 1.22 o superior instalado en el sistema.
### 2. Configurar entorno
Copia la plantilla de variables de entorno:
```bash
cp .env.example .env
```
Parámetros disponibles en `.env`:
```env
PORT=8085
BASE_URL=http://localhost:8085
DATA_DIR=./data
SESSION_SECRET=clave_secreta_para_cookies
WEBCONTROL_API_URL=https://api.siax-system.net
GOOGLE_CLIENT_ID=
GOOGLE_CLIENT_SECRET=
```
### 3. Compilar y Arrancar
```bash
# Descargar dependencias
go mod tidy
# Compilar binario autónomo
go build -o app_compartir main.go
# Ejecutar el servidor
./app_compartir
```
Abre tu navegador en: **`http://localhost:8085`**
---
## 🧪 Pruebas Automatizadas
El proyecto cuenta con tests automatizados que comprueban la regla estricta de caducidad a las 24 horas para invitados y la permanencia de usuarios registrados:
```bash
go test -v ./...
```
---
## 🚢 Despliegue a Producción (`drop.sigmac.app`)
El proyecto sigue la convención estándar del ecosistema Telcotronics basada en dos scripts:
1. **Configurar destino:**
```bash
cp servers.conf.example servers.conf
# Ajustar HOST (192.168.10.160), SSH_USER y REMOTE_DIR si es necesario
```
2. **Lanzar despliegue desde tu máquina:**
```bash
./desplegar.sh
# O por parámetro directo: ./desplegar.sh todo
```
El script compila localmente el binario release para Linux amd64 (`CGO_ENABLED=0`), transfiere el binario y las plantillas a `server-webapps` CT 132 (`192.168.10.160`) y ejecuta `init.sh` para arrancar el servidor en el puerto `2006` en segundo plano.
3. **Ver logs en el servidor:**
```bash
./desplegar.sh estado
```
---
## 📂 Estructura del Código
```text
app_compartir/
├── internal/
│ ├── auth/ # Sesiones HTTP-only, WebControl y Google OAuth
│ ├── cleaner/ # Worker periódico de purga automática 24h para invitados
│ ├── config/ # Variables de entorno y rutas
│ ├── db/ # DAL de SQLite, esquema y consultas seguras
│ ├── handlers/ # Controladores HTTP: upload, visor, QR, auth, descarga
│ ├── models/ # Estructuras de datos (Share, User, Session)
│ └── storage/ # Generador de slugs seguros y almacenamiento en disco
├── web/
│ └── templates/ # Plantillas HTML (base, index, visor, login, mis archivos)
├── .agente/ # Documentación interna del agente y ecosistema Telcotronics
├── main.go # Servidor HTTP principal y ciclo de vida de la app
├── main_test.go # Tests de integración de retención y purga
└── README.md # Esta guía
```
---
## 🏢 Ecosistema Telcotronics e Infraestructura
Este proyecto forma parte oficial del **Ecosistema Telcotronics** y se encuentra integrado con las siguientes especificaciones:
| Entorno / Servicio | Detalle de Conexión |
|---|---|
| **Registro Central MCP** | Registrado en MariaDB como **Servicio ID 34** (Categoría: `application`) |
| **Centro de Agentes (sigma-robot)** | **Agente ID 86** (`Agente drop.sigmac.app`) activo y autorizado vía API REST |
| **Servidor de Producción** | `server-webapps` CT 132 (`192.168.10.160`), puerto interno `2008` |
| **Dominio y Proxy Apache** | `https://drop.sigmac.app` con terminación SSL/TLS Let's Encrypt |
| **Supervisión de Procesos** | Servicio `siax-app-DROP_SIGMAC_APP.service` en [SIAX Monitor](http://192.168.10.160:8080) |
| **Identidad y Normas** | Consultar [`id_agente.md`](id_agente.md), [`agents.md`](agents.md) y [`.agente/reglas.md`](.agente/reglas.md) |
| **Espejo de Infraestructura** | Sincronizado en [`.agente/infraestructura.md`](.agente/infraestructura.md) desde `/home/pablinux/Projects/infraestructura.md` |