- JavaScript 63.8%
- HTML 34.2%
- CSS 1.7%
- Dockerfile 0.3%
| data | ||
| docs | ||
| public | ||
| src | ||
| .env.example | ||
| .gitignore | ||
| docker-compose.yml | ||
| Dockerfile | ||
| package-lock.json | ||
| package.json | ||
| README.md | ||
| server.js | ||
🛡️ VanishDrop • Plataforma de Compartición Efímera & Suite de Seguridad Autohospedada
VanishDrop es una suite completa, privada y 100% autohospedada orientada a la privacidad, la transferencia segura de archivos multimedia efímeros, la auditoría transparente de enlaces y la creación de notas autodestructibles, complementada con un Área Privada con herramientas de diagnóstico de red y administración global.
📋 Tabla de Contenidos
- Características Principales
- Arquitectura Multi-Dominio
- Despliegue Rápido
- Variables de Entorno
- Integración con Telegram Bot
- Protección con Cloudflare Zero Trust
- Estructura del Proyecto
- Seguridad y Privacidad
✨ Características Principales
📸 1. Envíos Efímeros Multimedia (Fotos y Vídeos)
- Formatos aceptados: Imágenes (JPEG, PNG, GIF, WebP) y vídeos (MP4, WebM, MOV) con previsualización interactiva previa al envío.
- Control de caducidad multidimensional:
- Por número de visualizaciones: Tras alcanzar el límite configurado, el contenido se tritura del disco.
- Destrucción foto a foto (Modo Efímero Estricto): Al avanzar de foto, la foto anterior se destruye físicamente de forma inmediata del servidor sin posibilidad de retroceder.
- Por fecha y hora: Expiración temporal automática.
- Protección contra filtraciones y capturas:
- Marcas de agua forenses semitransparentes con ID de sesión único superpuestas sobre el visor.
- Desactivación del clic derecho, menús contextuales y descarga directa en navegadores compatibles.
- Geolocalización GPS exacta (Conforme a RGPD): Opción para solicitar la ubicación por sensor del dispositivo. Requiere consentimiento explícito del visitante mediante el diálogo nativo del navegador.
- Panel de Gestión Privado para el Emisor (
/manage/:id?key=...):- Supervisión de visitas restantes y ampliación de plazos.
- Borrado selectivo de fotos individuales o del envío completo.
- Historial con IP, país, ciudad, sistema operativo exacto (incluyendo detección de Windows 11 vía User-Agent Client Hints) y dispositivo.
- Exportación de registros en CSV y JSON.
🔗 2. Acortador Inteligente SMART
- Acortador con auditoría y telemetría: Genera enlaces cortos con alias personalizado o identificador aleatorio.
- Recopilación SMART avanzada: Resolución de pantalla, viewport del navegador, tipo de conexión de red (4G, WiFi, etc.) y orientación del dispositivo.
- Consentimiento informado y vista previa:
- Opción de mostrar advertencia previa para cumplimiento RGPD.
- Opción de mostrar vista previa del destino final a pantalla completa antes de redirigir.
- Configuración en tiempo real: Desde el panel de administración del enlace, el emisor puede activar o desactivar cualquiera de estas opciones y los cambios surten efecto de inmediato sin cambiar la URL corta.
- Pausado y reactivación: Posibilidad de desactivar temporalmente el enlace (mostrando aviso de desconexión) o restaurarlo cuando se desee.
- Traspaso de parámetros GET: Mantiene y propaga intactos parámetros UTM y cadenas de consulta a la web final.
🔐 3. Notas Privadas Autodestructibles
- Cifrado en cliente con AES-256-GCM: La nota se cifra localmente en el navegador antes de transmitirse.
- Enlace con clave en fragmento hash (
#key): La clave de descifrado viaja en el hash de la URL, por lo que el servidor nunca puede descifrar el mensaje por sí mismo. - Protección adicional con contraseña: Opción de solicitar una clave secundaria mediante derivación criptográfica (bcrypt).
- Autodestrucción garantizada:
- Al hacer clic en revelar, el contenido se descifra en memoria y se elimina físicamente de la base de datos SQLite en esa misma petición.
- Nadie podrá volver a leerla jamás.
- Panel de Auditoría del Emisor (
/note/manage/:id?key=...):- Permite saber si la nota sigue pendiente o si ya ha sido leída y destruida.
- Muestra la hora de lectura, la dirección IP del lector, su ubicación en mapa, sistema operativo y navegador.
- Botón para quemar la nota manualmente antes de que el destinatario la abra.
🎛️ 4. Área Privada & Herramientas Maestras (/admin)
Zona protegida mediante contraseña maestra (ADMIN_SECRET, clave inicial por defecto: admin1234) con doble nivel de navegación (botón Inicio en la esquina superior y acciones en la barra secundaria):
- Configuración de Telegram en Vivo: Prueba de conexión instantánea y sincronización automática de tokens en
.env. - Mi IP & Diagnóstico Forense: Detección de IP pública, cabeceras HTTP entrantes y versión de SO (diferenciando de forma fiable Windows 11 de Windows 10 mediante High Entropy Values).
- Rastreador de IP con Mapa Leaflet (OpenStreetMap): Localización geográfica con coordenadas, ciudad, ISP y mapa interactivo sin APIs de pago ni registros.
- Validador & Salto de Redirecciones HTTP: Traza saltos 301/302, inspecciona cadenas de acortadores y permite hacer clic directamente sobre cualquier paso intermedio para saltar publicidad.
- Limpiador de Parámetros de Rastreo: Despoja URLs de etiquetas intrusivas de afiliados y telemetría (
fbclid,gclid,sv1,awc, etc.), devolviendo el enlace limpio. - Fabricante MAC (IEEE OUI Live) / WHOIS: Identificación del fabricante oficial y tipo de dispositivo (tarjeta WiFi, router, smartphone, etc.) mediante consulta directa a la base IEEE.
- Generador de User-Agents: Cadenas de agentes de usuario actualizadas para pruebas.
- Gestor de Contadores SVG:
- Creación de insignias SVG dinámicas para GitHub o páginas web (
/c/:id). - Portal propio de analíticas con mapa OpenStreetMap en tiempo real, visitantes únicos y gráficos de evolución temporal.
- Creación de insignias SVG dinámicas para GitHub o páginas web (
- Gestor de Notas Privadas:
- Tabla compacta con supervisión de todas las notas creadas, estados (Pendiente, Destruida, Caducada) y datos del lector.
- Botón de purga con un solo clic para limpiar notas leídas o caducadas y liberar espacio en base de datos.
- Registradores & Envíos Activos:
- Supervisión global con filtros instantáneos en tiempo real: Todos, Fotos / Vídeos o Enlaces Cortos.
- Acceso directo al panel de control o a mover el registrador a la papelera.
- Papelera de Retención de 7 Días:
- Los elementos borrados permanecen en cuarentena durante 7 días.
- Filtros por tipo, botón de restauración y botón de triturado físico definitivo.
🌐 Arquitectura Multi-Dominio
VanishDrop es multi-dominio de forma nativa:
- La base de datos guarda únicamente identificadores y rutas relativas.
- Si configuras en Cloudflare Tunnel (o en tu proxy inverso) dos dominios diferentes apuntando al mismo puerto
3000de tu NAS:- Al entrar desde
https://fotos.midominio1.com, la aplicación generará todos los enlaces con ese dominio. - Al entrar desde
https://links.midominio2.com, los generará con el segundo dominio.
- Al entrar desde
- Ambos dominios comparten la misma base de datos, por lo que cualquier enlace creado funcionará indistintamente en ambos.
🚀 Despliegue Rápido
Opción A: Docker Compose (Recomendado)
- Clona el repositorio:
git clone https://forgejo.634562284.xyz/jona/VanishDrop.git cd VanishDrop - Copia la plantilla de configuración:
cp .env.example .env - Edita tu clave secreta de administración en
.env:ADMIN_SECRET=tu-clave-super-secreta - Levanta el contenedor:
docker compose up -d --build
Opción B: Synology NAS (Container Manager)
Dado que docker-compose.yml compila el contenedor a partir del Dockerfile, la carpeta del proyecto en tu NAS debe contener todos los archivos de la aplicación.
Método 1: Clonar vía SSH en el NAS (Recomendado y más rápido)
- Conéctate por SSH a tu Synology NAS como administrador.
- Clona el repositorio directamente en tu volumen de Docker:
cd /volume2/docker git clone https://forgejo.634562284.xyz/jona/VanishDrop.git vanishdrop cd vanishdrop cp .env.example .env - Edita tus claves en el archivo
.env(especialmenteADMIN_SECRET). - Abre Container Manager en DSM
\rightarrowProyecto\rightarrowCrear:- Nombre del proyecto:
vanishdrop - Ruta de acceso:
/volume2/docker/vanishdrop - Origen: Selecciona "Usar archivo docker-compose.yml existente".
- Nombre del proyecto:
- Pulsa en Siguiente y finaliza el asistente para compilar e iniciar el proyecto.
- Asocia tu túnel de Cloudflare hacia el puerto
3000de tu NAS en el panel de Cloudflare Zero Trust.
Método 2: Subir los archivos desde File Station
- Descarga el proyecto en formato ZIP.
- En DSM, abre File Station y accede a la carpeta compartida
/volume2/docker/. - Crea la carpeta
vanishdrop, sube el archivo ZIP y descomprímelo ahí dentro (deben quedar en la raíz devanishdroplos archivosDockerfile,docker-compose.yml,package.json,server.js, las carpetassrc/,public/, etc.). - Crea una copia de
.env.examplellamada.envy edita tuADMIN_SECRET. - Abre Container Manager
\rightarrowProyecto\rightarrowCrear:- Ruta de acceso:
/volume2/docker/vanishdrop - Origen: "Usar archivo docker-compose.yml existente".
- Ruta de acceso:
- Inicia el proyecto. La carpeta de persistencia
/volume2/docker/vanishdrop/datase creará y gestionará de forma automática.
Opción C: Node.js Nativo
Requisitos: Node.js 20+ o superior.
# Instalar dependencias
npm install
# Iniciar en producción
node server.js
El servidor escuchará en http://localhost:3000.
⚙️ Variables de Entorno
| Variable | Descripción | Valor por Defecto |
|---|---|---|
PORT |
Puerto HTTP interno de escucha | 3000 |
HOST |
Dirección IP de enlace | 0.0.0.0 |
BASE_URL |
Dominio de referencia / fallback | http://localhost:3000 |
ADMIN_SECRET |
Clave maestra para acceder a /admin |
admin1234 |
MAX_FILE_SIZE |
Tamaño máximo por foto/vídeo en bytes (10MB) | 10485760 |
MAX_FILES |
Número máximo de archivos por envío | 10 |
DATA_DIR |
Directorio de datos y base de datos | ./data |
UPLOAD_DIR |
Directorio donde se almacenan los archivos | ./data/uploads |
DB_PATH |
Ruta al archivo SQLite | ./data/vanishdrop.db |
TELEGRAM_BOT_TOKEN |
Token del bot de Telegram (opcional) | "" |
TELEGRAM_CHAT_ID |
Chat ID numérico para recibir alertas | "" |
🔐 Acceso al Área Privada: La clave inicial por defecto en el código es
admin1234. Por seguridad y privacidad, esta clave no se muestra ni se autocompleta en el formulario web y debe cambiarse mediante la variableADMIN_SECRETen tu.envo endocker-compose.ymlal desplegar en producción.
📲 Integración con Telegram Bot
VanishDrop envía notificaciones en tiempo real cada vez que:
- Alguien abre un envío multimedia efímero.
- Alguien hace clic en un enlace SMART (notificando si es visitante único o recurrente).
- Alguien descifra y destruye una nota privada.
Cómo configurarlo:
- Crea un bot con @BotFather en Telegram y copia el token (
123456:ABC-DEF...). - Obtén tu Chat ID hablando con @userinfobot.
- Entra en tu panel en
/admin\rightarrowpestaña Configuración Telegram, introduce los dos datos y pulsa "Probar Conexión con Bot". Se guardarán y sincronizarán automáticamente.
🔐 Protección con Cloudflare Zero Trust (Login Google + Bypass de Enlaces)
Si deseas exponer VanishDrop mediante Cloudflare y proteger la creación de envíos y el panel de administración con tu cuenta de Google, pero permitiendo que cualquier persona que reciba un enlace pueda verlo sin iniciar sesión, configura dos políticas en Cloudflare Access (Applications):
-
Política de Bypass (Prioridad 1 - Mayor):
- Action:
Bypass - Include:
Everyone - Require (Path starts with):
/v/(Visor seguro de imágenes y vídeos)/api/drops/(Descarga y verificación multimedia)/stats/(Estadísticas públicas de drops)/s/(Redirección de enlaces acortados)/api/shortener/track/(Telemetría SMART y consentimiento)/shortener/stats/(Estadísticas públicas de enlaces)/note/(Lectura y descifrado de notas privadas)/api/tools/notes/(API de autodestrucción en SQLite)/c/(Insignias SVG dinámicas para GitHub/webs)/counter/(Portal de analítica de contadores)/api/tools/counters/(Métricas de contadores)/css/(Hojas de estilo)/js/(Scripts del visor y modales)/assets/(Logotipo, iconos PWA y carátula OpenGraph)/manifest.json(Manifiesto para instalación como aplicación PWA)/sw.js(Service Worker PWA para caché y soporte móvil)
- Action:
-
Política de Administrador (Prioridad 2):
- Action:
Allow - Include:
Emails\rightarrowtu-cuenta@gmail.com
- Action:
Para la guía paso a paso completa, consulta la Guía de Conexión con Cloudflare Tunnel.
📂 Estructura del Proyecto
VanishDrop/
├── data/ # Datos persistentes (SQLite y uploads)
│ ├── uploads/ # Archivos temporales de imágenes/vídeos
│ └── vanishdrop.db # Base de datos SQLite
├── public/ # Frontend estático y vistas SPA
│ ├── assets/logo.svg # Logotipo oficial
│ ├── css/styles.css # Estilos glassmorphism y Tailwind CSS
│ ├── js/ # Lógica interactiva en cliente
│ │ ├── adminDrop.js # Panel de gestión de envíos multimedia
│ │ ├── app.js # Lógica de la página principal
│ │ ├── manageNote.js # Panel de gestión de notas privadas
│ │ ├── shortener.js # Panel de gestión de enlaces acortados
│ │ ├── tools.js # Lógica del Área Privada (/admin)
│ │ └── vanishModal.js # Modales nativos (reemplazo de alert/confirm)
│ ├── admin.html # Área Privada & Panel Maestro
│ ├── index.html # Página principal (Envío, Acortador, Nota)
│ ├── manage-drop.html # Panel privado de álbum multimedia
│ ├── manage-note.html # Panel privado de nota autodestructible
│ ├── manage-shortener.html # Panel privado de enlace SMART
│ ├── read-note.html # Pantalla para leer y destruir nota
│ ├── stats-counter.html # Portal de analíticas del contador SVG
│ ├── stats-drop.html # Vista pública de estadísticas de drop
│ ├── stats-shortener.html # Vista pública de estadísticas de enlace
│ └── viewer.html # Visor seguro protegido de fotos/vídeos
├── src/ # Código fuente del backend (Node.js/Express)
│ ├── routes/ # Controladores y endpoints REST
│ │ ├── adminRoutes.js # API del Área Privada
│ │ ├── dropRoutes.js # API de envíos multimedia efímeros
│ │ ├── shortenerRoutes.js # API de enlaces y redirección SMART
│ │ └── toolsRoutes.js # API de contadores, notas y diagnósticos
│ ├── services/ # Lógica de soporte
│ │ ├── cleanupService.js # Tarea periódica de purga automática
│ │ └── telegramService.js # Envío de alertas con Telegram Bot API
│ ├── config.js # Carga centralizada de configuración
│ └── database.js # Inicialización de esquema SQLite
├── .env.example # Plantilla de variables de entorno
├── docker-compose.yml # Manifiesto de despliegue con Docker
├── Dockerfile # Imagen optimizada Multi-Arch
├── package.json # Dependencias del proyecto
└── README.md # Documentación oficial
🔒 Seguridad y Privacidad
- Sin rastreadores de terceros: Los mapas utilizan baldosas libres de OpenStreetMap a través de Leaflet, sin Google Maps ni APIs propietarias.
- Triturado criptográfico: Las notas se borran inmediatamente de SQLite en la misma transacción tras descifrarse. Los archivos multimedia efímeros se eliminan del sistema de ficheros de forma irreversible al expirar.
- Aislamiento de la administración: Los enlaces generados para los usuarios finales o destinatarios no exponen ni contienen referencias hacia el panel de administración privado (
/admin). - Cumplimiento RGPD: La obtención de coordenadas GPS y datos técnicos en enlaces inteligentes requiere el consentimiento expreso del usuario antes de registrarse.
VanishDrop • Desarrollado con dedicación para una web más privada y segura.