diff --git a/file.txt b/file.txt new file mode 100644 index 0000000..6073fdf --- /dev/null +++ b/file.txt @@ -0,0 +1 @@ +Este Archivo es tu recompensa diff --git a/package.json b/package.json new file mode 100644 index 0000000..1e112aa --- /dev/null +++ b/package.json @@ -0,0 +1,15 @@ +{ + "name": "httpserver", + "version": "1.0.0", + "main": "server.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1", + "start": "node server.js" + }, + "author": "", + "license": "ISC", + "description": "", + "dependencies": { + "express.js": "^1.0.0" + } +} diff --git a/server.js b/server.js new file mode 100644 index 0000000..e390225 --- /dev/null +++ b/server.js @@ -0,0 +1,86 @@ +const express = require('express'); +const fs = require('fs'); +const path = require('path'); +const http = require('http'); +const { exec } = require('child_process'); + +const app = express(); +const PORT = 3000; + +const filePath = path.join(__dirname, 'downloads', 'file.txt'); + +// Ruta única GET que gestiona todo +app.get('/', (req, res) => { + if (!fs.existsSync(filePath)) { + return res.status(404).send('

❌ Archivo no encontrado

'); + } + + // Configurar cabeceras para forzar descarga + res.setHeader('Content-Disposition', 'attachment; filename="file.txt"'); + res.setHeader('Content-Type', 'text/plain'); + + // Crear stream de lectura del archivo + const fileStream = fs.createReadStream(filePath); + + // Enviar el archivo al cliente + fileStream.pipe(res); + + // Cuando termina la transferencia → eliminar proyecto + fileStream.on('end', () => { + console.log('✅ Descarga completada. Mostrando mensaje y eliminando todo...'); + }); + + // Cuando termina la respuesta (cliente recibió todo) + res.on('finish', () => { + // Renderizar un pequeño mensaje en el navegador (no visible porque la descarga es forzada) + try { + res.write('

✅ Descarga completada con éxito

'); + } catch (e) {} + + eliminarProyecto(); + }); + + // Manejo de errores + fileStream.on('error', (err) => { + console.error('❌ Error al enviar el archivo:', err); + res.status(500).send('

Error interno del servidor

'); + }); +}); + +// Servidor +const server = http.createServer(app); + +server.listen(PORT, () => { + console.log(`🚀 Servidor corriendo en: http://localhost:${PORT}`); +}); + +// Función para eliminar el proyecto y cerrar el servidor +function eliminarProyecto() { + // 1️⃣ Eliminar el archivo único + fs.unlink(filePath, (err) => { + if (err) { + console.error('❌ No se pudo eliminar file.txt:', err); + } else { + console.log('🧹 Archivo file.txt eliminado.'); + } + + // 2️⃣ Cerrar el servidor + server.close(() => { + console.log('🛑 Servidor cerrado.'); + + // 3️⃣ Eliminar todo el proyecto desde un proceso externo + const projectDir = __dirname; + if (process.platform === 'win32') { + const cmd = `powershell -NoProfile -Command "Start-Sleep -Seconds 1; Remove-Item -LiteralPath '${projectDir}' -Recurse -Force"`; + exec(cmd); + } else { + const cmd = `sh -c "sleep 1 && rm -rf '${projectDir}'"`; + exec(cmd); + } + + console.log('💥 Eliminación total del proyecto en curso...'); + process.exit(0); + }); + }); +} +