dashboard-core/router.js

137 lines
4 KiB
JavaScript
Raw Normal View History

2023-06-22 19:36:52 +05:00
const cookieParser = require("cookie-parser"),
underMaintenancePageDefault = require("./underMaintenancePageDefault"),
error404pageDefault = require("./404pagedefault");
const mainRouter = require("./Routes/main"),
dashboardRouter = require("./Routes/dashboard"),
discordRouter = require("./Routes/discord");
2023-06-19 12:35:11 +05:00
module.exports = (app, config, themeConfig, modules) => {
2023-06-22 19:36:52 +05:00
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(`
<form action="${config.domain}${config.underMaintenanceAccessPage || "/total-secret-get-access"}" method="POST" >
<input id="accessKey" name="accessKey"/>
<button role="submit">Submit</button>
</form>
`);
});
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));
});
}
};