dashboard-core/index.js
Jonny_Bro (Nikita) 849a93887a
2023-06-22 19:36:52 +05:00

119 lines
No EOL
3.3 KiB
JavaScript

const EventEmitter = require("events"),
express = require("express"),
app = express(),
session = require("express-session"),
bodyParser = require("body-parser"),
partials = require("express-partials"),
router = require("./router"),
initServer = require("./InitFunctions/initServer");
const version = require("./package.json").version;
const DBDEvents = new EventEmitter();
class Dashboard {
constructor(config) {
const notSetYetAndRequired = [];
if (!config.port) notSetYetAndRequired.push("port");
if (!config.theme) notSetYetAndRequired.push("theme");
if (!config.client) notSetYetAndRequired.push("client");
if (!config.redirectUri) notSetYetAndRequired.push("redirectUri");
if (!config.bot) notSetYetAndRequired.push("bot");
if (!config.settings) notSetYetAndRequired.push("settings");
if (!config.domain) notSetYetAndRequired.push("domain");
if (notSetYetAndRequired[0]) throw new Error(`You need to define some more things: ${notSetYetAndRequired.join(", ")}.`);
this.config = config;
this.modules = [];
}
async init() {
const config = this.config,
modules = this.modules;
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
app.use(partials());
app.use(express.static(config.theme.staticPath));
app.use("/", express.static(config.theme.staticPath));
app.use("/:a/", express.static(config.theme.staticPath));
app.use("/:a/:b/", express.static(config.theme.staticPath));
app.use("/:a/:b/:c/", express.static(config.theme.staticPath));
app.use("/:a/:b/:c/:d/", express.static(config.theme.staticPath));
app.set("views", config.theme.viewsPath);
app.set("view engine", "ejs");
const sessionData = {
secret: config.cookiesSecret || "total_secret_cookie_secret",
resave: true,
saveUninitialized: true,
cookie: {
expires: new Date(253402300799999),
maxAge: 253402300799999,
},
};
config.sessionSaveSession ? sessionData.store = config.sessionSaveSession : null;
app.use(session(sessionData));
const themeConfig = config.theme.themeConfig;
app.get("*", (req, res, next) => {
DBDEvents.emit("websiteView", req.session.user ? req.session.user : { loggedIn: false });
next();
});
app.use((req, res, next) => {
req.DBDEvents = DBDEvents;
if (req.session.loggedInLastTime == true) {
req.displayLoggedInInfo = true;
req.session.loggedInLastTime = false;
}
if (!req.body) req.body = {};
req.client = config.client;
req.redirectUri = config.redirectUri;
req.themeConfig = themeConfig;
req.botToken = config.bot.token;
req.guildAfterAuthorization = config.guildAfterAuthorization || {};
req.websiteTitle = config.websiteTitle || "Discord Bot Dashboard";
req.iconUrl = config.iconUrl || "https://www.nomadfoods.com/wp-content/uploads/2018/08/placeholder-1-e1533569576673.png";
req.app = app;
req.config = config;
next();
});
router(app, config, themeConfig, modules);
this.app = app;
const sio = initServer(app, config, themeConfig, modules);
this.server = sio.server;
this.io = sio.io;
}
getApp() {
return this.app;
}
useThirdPartyModule(module) {
this.modules.push(module);
}
}
module.exports = {
Dashboard,
formTypes: require("./ModuleExportsFunctions/formTypes"),
customPagesTypes: require("./ModuleExportsFunctions/customPagesTypes"),
DBDEvents,
version,
};