import dotenv from "dotenv"; import express from "express"; import helmet from "helmet"; import cors from "cors"; import adminRoutes from "./src/routes/admin.js"; import publicRoutes from "./src/routes/public.js"; dotenv.config(); const app = express(); const PORT = process.env.PORT || 3000; // CORS configuration app.use(cors({ origin: ['https://mohamad.dev', 'https://www.mohamad.dev'], methods: ['GET', 'POST'], credentials: true })); // Middleware app.use(helmet({ crossOriginResourcePolicy: { policy: "cross-origin" } })); app.use(express.json()); app.use(express.urlencoded({ extended: true })); app.set("view engine", "ejs"); app.use(express.static('views', { setHeaders: (res, path) => { if (path.endsWith('.js')) { res.setHeader('Content-Type', 'application/javascript'); } } })); // Routes app.use("/admin", adminRoutes); app.use("/", publicRoutes); // Start server app.listen(80, () => { console.log(`Server running on http://0.0.0.0:${PORT}`); if (!process.env.ADMIN_USER || !process.env.ADMIN_PASSWORD) { console.warn("WARNING: Admin routes are UNPROTECTED. Set ADMIN_USER and ADMIN_PASSWORD in .env"); } if (process.env.ADMIN_USER && process.env.ADMIN_PASSWORD) { console.log(`Admin access: User: ${process.env.ADMIN_USER}, Pass: (hidden)`); } if (process.env.NTFY_ENABLED === "true" && process.env.NTFY_TOPIC_URL) { console.log(`Ntfy notifications enabled for topic: ${process.env.NTFY_TOPIC_URL}`); } else { console.log("Ntfy notifications disabled or topic not configured."); } });