54 lines
1.5 KiB
JavaScript
54 lines
1.5 KiB
JavaScript
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.");
|
|
}
|
|
});
|