const cookieParser = require("cookie-parser"), underMaintenancePageDefault = require("./underMaintenancePageDefault"), error404pageDefault = require("./404pagedefault"); const mainRouter = require("./Routes/main"), dashboardRouter = require("./Routes/dashboard"), discordRouter = require("./Routes/discord"); module.exports = (app, config, themeConfig, modules) => { app.use(cookieParser()); app.use((req, res, next) => { req.bot = config.bot; next(); }); if (themeConfig.defaultLocales) { app.use((req, res, next) => { if (req.cookies?.lang) req.lang = req.cookies.lang; else req.lang = req.acceptsLanguages()[0].replace("-", ""); if (themeConfig.locales) { if (Object.keys(themeConfig.locales).includes(req.lang)) req.locales = themeConfig.locales[req.lang]; else req.locales = themeConfig.locales[Object.keys(themeConfig.locales)[0]]; } else req.locales = themeConfig.defaultLocales[Object.keys(themeConfig.defaultLocales).includes(req.lang) ? req.lang : "enUS"]; next(); }); } app.use("/discord", discordRouter(app, config, themeConfig, modules)); if (config.useUnderMaintenance) { app.get(config.underMaintenanceAccessPage || "/total-secret-get-access", (req, res) => { res.send(`
`); }); app.post(config.underMaintenanceAccessPage || "/total-secret-get-access", (req, res) => { if (!req.body) req.body = {}; const accessKey = req.body.accessKey; if (accessKey != config.underMaintenanceAccessKey) return res.send("Wrong key."); req.session.umaccess = true; res.redirect("/"); }); app.use((req, res, next) => { if (req.originalUrl.startsWith("/loading")) return next(); if (!req.session.umaccess && !req.session.user) { if (!config.useThemeMaintenance) return res.send(config.underMaintenanceCustomHtml || underMaintenancePageDefault(config.underMaintenance, false)); else res.render("maintenance", { req: req, bot: config.bot, themeConfig: req.themeConfig, loggedIn: false, defaultMaintenanceConfig: config.underMaintenance || {}, }); } else if (!req.session.umaccess && config.ownerIDs && !config.ownerIDs.includes(req.session.user.id)) { if (!config.useThemeMaintenance) return res.send(config.underMaintenanceCustomHtml || underMaintenancePageDefault(config.underMaintenance, true)); else res.render("maintenance", { req: req, bot: config.bot, themeConfig: req.themeConfig, loggedIn: true, defaultMaintenanceConfig: config.underMaintenance || {}, }); } else next(); }); } app.use("/", mainRouter(app, config, themeConfig, modules)); app.use("/", dashboardRouter(app, config, themeConfig, modules)); config.theme.init(app, config); const customPages = config.customPages || []; customPages.forEach(p => { if (p.type == "redirect") { app.get(p.endpoint, async (req, res) => { const endpoint = await p.getEndpoint({ user: req.session.user || {}, req, }); res.redirect(endpoint); }); } else if (p.type == "html") { app.get(p.endpoint, async (req, res) => { const html = await p.getHtml({ user: req.session.user || {}, req, }); res.send(html); }); } else if (p.type == "json") { app.get(p.endpoint, async (req, res) => { const json = await p.getJson({ user: req.session.user || {}, req, }); res.send(json); }); } }); modules.forEach(module => { module.app({ app: app, config: this.config, themeConfig: themeConfig, }); }); if (!config.useTheme404) { app.get("*", (req, res) => { const text = config.html404 || error404pageDefault(config.websiteTitle || themeConfig.websiteName); res.send(text.replace("{{websiteTitle}}", config.websiteTitle || themeConfig.websiteName)); }); } };