const express = require('express'); const cors = require('cors'); require('dotenv').config(); const path = require('path'); const bodyParser = require("body-parser"); const { engine } = require("express-handlebars"); const handlebars = require("handlebars"); const compression = require("compression"); const helmet = require("helmet"); if (process.env.NODE_ENV === "dev") { process.removeAllListeners("warning"); } // Routes const apiAuthRoutes = require('./routes/apiAuth'); const webAuthRoutes = require('./routes/webAuth'); const mailboxRoutes = require('./routes/mailboxRoutes'); const domainRoutes = require('./routes/domainRoutes'); const statsRoutes = require('./routes/statsRoutes'); const app = express(); const port = process.env.PORT || 3000; const ip = process.env.IP || '0.0.0.0'; // Middleware app.use(bodyParser.json()); app.use(cors()); app.disable("x-powered-by"); app.set("trust proxy", "loopback"); app.set("view engine", "hbs"); app.use(helmet()); const hbsEngine = engine({ layoutsDir: path.join(__dirname, "./views/layouts"), extname: "hbs", defaultLayout: "main", partialsDir: path.join(__dirname, "./views/partials"), helpers: { copyrightYear: () => new Date().getFullYear(), breadcrumb: function (options) { const url = options.data.root.currentUrl || "/"; const parts = url.split("/").filter(Boolean); let breadcrumb = '"; return new handlebars.SafeString(breadcrumb); }, section: function (name, options) { if (!this._sections) this._sections = {}; this._sections[name] = options.fn(this); return null; }, }, }); app.engine("hbs", hbsEngine); app.disable("view cache"); app.set("views", path.join(__dirname, "./views")); app.use(compression()); app.use("/public", express.static(path.join(__dirname, "./public"))); // Routes app.use('/api/auth', apiAuthRoutes); app.use('/auth', webAuthRoutes); app.use('/api/mailboxes', mailboxRoutes); app.use('/api/domains', domainRoutes); app.use('/api/stats', statsRoutes); app.get('/', (req, res) => { res.json({ message: 'API is running' }); }); // Error handling app.use((err, req, res, next) => { console.error(err.stack); res.status(500).json({ error: 'Something went wrong!' }); }); // Start server app.listen(port, ip, () => { console.log(`API server listening on port ${port}`); });