const express = require("express"); const fs = require("fs"); const path = require("path"); const app = express(); const PORT = process.env.PORT || 3000; const BASE_FILE = path.join(__dirname, "data", "base.json"); // Auth credentials from environment const AUTH_LOGIN = process.env.SMS_LOGIN; const AUTH_PASSWORD = process.env.SMS_PASSWORD; // Middleware app.use(express.urlencoded({ extended: true })); app.use(express.json()); app.use(express.static("public")); // Ensure data directory and base.json exist function ensureBaseFile() { const dataDir = path.dirname(BASE_FILE); if (!fs.existsSync(dataDir)) { fs.mkdirSync(dataDir, { recursive: true }); } if (!fs.existsSync(BASE_FILE)) { fs.writeFileSync(BASE_FILE, JSON.stringify({ messages: [] }, null, 2)); } } // Read messages from base.json function readMessages() { ensureBaseFile(); const data = fs.readFileSync(BASE_FILE, "utf8"); return JSON.parse(data).messages; } // Write messages to base.json function writeMessages(messages) { ensureBaseFile(); fs.writeFileSync(BASE_FILE, JSON.stringify({ messages }, null, 2)); } // POST /send-msg - receive and log SMS app.post("/send-msg", (req, res) => { const { login, psw, phones, mes } = req.body; if (!login || !psw || !phones || !mes) { return res.status(400).json({ error: "Missing required parameters" }); } // Validate credentials if (login !== AUTH_LOGIN || psw !== AUTH_PASSWORD) { return res.status(401).json({ error: "Invalid credentials" }); } const message = { id: Date.now(), timestamp: new Date().toISOString(), login, phone: phones, message: mes, }; const messages = readMessages(); messages.push(message); writeMessages(messages); console.log(`[${message.timestamp}] SMS to ${phones}: ${mes}`); res.json({ status: "ok", id: message.id }); }); // GET /view-all-sms - view all logged messages app.get("/view-all-sms", (req, res) => { const messages = readMessages(); res.json({ messages }); }); // POST /clear-all-sms - clear all messages app.post("/clear-all-sms", (req, res) => { writeMessages([]); console.log("All messages cleared"); res.json({ status: "ok", message: "All messages cleared" }); }); // GET / - serve main page app.get("/", (req, res) => { res.sendFile(path.join(__dirname, "public", "index.html")); }); // Initialize and start server ensureBaseFile(); app.listen(PORT, () => { console.log(`SMS OTP Gateway running on port ${PORT}`); });