Spaces:
Paused
Paused
| const express = require("express"); | |
| const { exec } = require("child_process"); | |
| const os = require("os"); | |
| const path = require("path"); | |
| const multer = require("multer"); | |
| const fs = require("fs"); | |
| const axios = require("axios"); | |
| const app = express(); | |
| app.use(express.json()); | |
| app.use(express.static(path.join(__dirname))); | |
| const MAX_MEM = 90; | |
| const TIMEOUT = 60000; | |
| const BLOCKED_COMMANDS = [ | |
| "ollama", "docker build", "docker run", "python train", | |
| "cloudflared tunnel", "cloudflared tunnel --url", | |
| "cloudflared --url", "pip install torch", "yes", ":(){ :|:& }:" | |
| ]; | |
| let commandHistory = []; | |
| // ===== MEMORY CHECK ===== | |
| function getMemoryUsage() { | |
| const total = os.totalmem(); | |
| const free = os.freemem(); | |
| return Math.round(((total - free) / total) * 100); | |
| } | |
| // ===== HOME PAGE ===== | |
| app.get("/", (req, res) => { | |
| res.sendFile(path.join(__dirname, "index.html")); | |
| }); | |
| // ===== COMMAND EXECUTION ===== | |
| app.post("/run", (req, res) => { | |
| const cmd = req.body?.cmd || req.body?.command; | |
| if (!cmd) return res.json({ error: "command not provided" }); | |
| console.log(`[RECEIVED]: ${cmd}`); | |
| if (cmd.trim().toLowerCase() === "log") { | |
| const historyText = commandHistory.length > 0 | |
| ? commandHistory.map((item, i) => `${i + 1}. [${item.time}] ${item.command}`).join(" | ") | |
| : "History is empty."; | |
| return res.json({ output: historyText.replace(/\n/g, " "), error: "" }); | |
| } | |
| if (cmd.trim().toLowerCase() === "clear") { | |
| commandHistory = []; | |
| return res.json({ output: "History cleared.", error: "" }); | |
| } | |
| commandHistory.push({ time: new Date().toLocaleTimeString(), command: cmd }); | |
| for (const blocked of BLOCKED_COMMANDS) { | |
| if (cmd.includes(blocked)) { | |
| return res.json({ error: "❌ Extremely heavy task blocked." }); | |
| } | |
| } | |
| let finalCmd = cmd; | |
| if (cmd.startsWith("apt") && cmd.includes("install") && !cmd.includes("-y")) { | |
| finalCmd += " -y"; | |
| } | |
| const memUsage = getMemoryUsage(); | |
| if (memUsage > MAX_MEM) console.log(`⚠ High memory usage: ${memUsage}%`); | |
| exec(`timeout ${TIMEOUT / 1000} ${finalCmd}`, { maxBuffer: 5 * 1024 * 1024 }, (error, stdout, stderr) => { | |
| const cleanOutput = (stdout || "").replace(/\n/g, " ").trim(); | |
| const cleanError = (stderr || "").replace(/\n/g, " ").trim(); | |
| if (error && !stdout && !stderr) { | |
| return res.json({ error: error.message.replace(/\n/g, " ") }); | |
| } | |
| res.json({ output: cleanOutput, error: cleanError }); | |
| }); | |
| }); | |
| // ===== UPLOAD TO /app (ROOT) ===== | |
| // temp upload | |
| const upload = multer({ dest: "temp/" }); | |
| app.post("/upload", upload.single("file"), (req, res) => { | |
| if (!req.file) { | |
| return res.json({ error: "No file uploaded" }); | |
| } | |
| const targetPath = path.join(__dirname, req.file.originalname); | |
| fs.rename(req.file.path, targetPath, (err) => { | |
| if (err) { | |
| return res.json({ error: "Upload failed: " + err.message }); | |
| } | |
| res.json({ output: `✅ File saved in /app as ${req.file.originalname}` }); | |
| }); | |
| }); | |
| // ===== DOWNLOAD FROM /app ===== | |
| app.get("/download", (req, res) => { | |
| const filename = req.query.file; | |
| if (!filename) { | |
| return res.status(400).send("File name required"); | |
| } | |
| const filePath = path.join(__dirname, filename); | |
| if (!fs.existsSync(filePath)) { | |
| return res.status(404).send("❌ File not found in /app"); | |
| } | |
| res.download(filePath, filename, (err) => { | |
| if (err) { | |
| res.status(500).send("Download failed"); | |
| } | |
| }); | |
| }); | |
| // ===== START SERVER ===== | |
| app.listen(7860, () => { | |
| console.log("Server running on port 7860"); | |
| }); | |
| // ===== AUTO LOG ===== | |
| const HF_URL = "http://localhost:7860/run"; | |
| setInterval(async () => { | |
| try { | |
| const res = await axios.post(HF_URL, { cmd: "log" }); | |
| console.log("🔥 Auto log:", res.data.output || res.data); | |
| } catch (err) { | |
| console.error("⚠ Auto log error:", err.message); | |
| } | |
| }, 120 * 60 * 1000); |