89 lines
3.6 KiB
JavaScript
89 lines
3.6 KiB
JavaScript
|
const fs = require('fs')
|
||
|
const colors = require('colors')
|
||
|
const consolePrefix = `${'['.blue}${'dbd-soft-ui'.yellow}${']'.blue} `
|
||
|
const Nodeactyl = require('nodeactyl')
|
||
|
|
||
|
module.exports = {
|
||
|
init: async function (config, themeConfig, app, db) {
|
||
|
let info;
|
||
|
if (themeConfig?.customThemeOptions?.info) info = await themeConfig.customThemeOptions.info({ config: config });
|
||
|
if(themeConfig?.admin?.pterodactyl?.enabled) {
|
||
|
themeConfig.nodeactyl = new Nodeactyl.NodeactylClient(
|
||
|
themeConfig.admin?.pterodactyl?.panelLink,
|
||
|
themeConfig.admin?.pterodactyl?.apiKey
|
||
|
)
|
||
|
|
||
|
try {
|
||
|
await themeConfig.nodeactyl.getAccountDetails();
|
||
|
} catch (error) {
|
||
|
console.log(`${consolePrefix}${('Failed to connect to Pterodactyl panel!\nEnsure you\'ve used a CLIENT api key, (found at ' + themeConfig.admin.pterodactyl.panelLink + '/account/api)').red}`);
|
||
|
}
|
||
|
}
|
||
|
const eventFolders = fs.readdirSync(`${__dirname}/../pages`)
|
||
|
|
||
|
for (const folder of eventFolders) {
|
||
|
const eventFiles = fs
|
||
|
.readdirSync(`${__dirname}/../pages/${folder}`)
|
||
|
.filter((file) => file.endsWith('.js'));
|
||
|
for (const file of eventFiles) {
|
||
|
const e = require(`${__dirname}/../pages/${folder}/${file}`);
|
||
|
try {
|
||
|
if (folder === 'admin') {
|
||
|
await app.get(e.page, async function (req, res) {
|
||
|
if (!req.session.user) return res.sendStatus(401)
|
||
|
if (!config.ownerIDs?.includes(req.session.user.id)) return res.sendStatus(403);
|
||
|
e.execute(
|
||
|
req,
|
||
|
res,
|
||
|
app,
|
||
|
config,
|
||
|
themeConfig,
|
||
|
info,
|
||
|
db
|
||
|
)
|
||
|
})
|
||
|
} else if (folder === 'post') {
|
||
|
await app.post(e.page, function (req, res) {
|
||
|
e.execute(
|
||
|
req,
|
||
|
res,
|
||
|
app,
|
||
|
config,
|
||
|
themeConfig,
|
||
|
info,
|
||
|
db
|
||
|
)
|
||
|
})
|
||
|
} else if (folder === 'get') {
|
||
|
await app.use(e.page, async function (req, res) {
|
||
|
e.execute(
|
||
|
req,
|
||
|
res,
|
||
|
app,
|
||
|
config,
|
||
|
themeConfig,
|
||
|
info,
|
||
|
db
|
||
|
)
|
||
|
})
|
||
|
}
|
||
|
} catch (error) {
|
||
|
console.log(`${consolePrefix}${'Failed to load:'.cyan} ${colors.red(e.page)}`);
|
||
|
console.log(`Page handler ${file}: ${error}`);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
app.use('*', async function (req, res) {
|
||
|
res.status(404)
|
||
|
config.errorPage(req, res, undefined, 404)
|
||
|
})
|
||
|
|
||
|
app.use((err, req, res, next) => {
|
||
|
res.status(500)
|
||
|
config.errorPage(req, res, err, 500)
|
||
|
})
|
||
|
|
||
|
console.log(`${consolePrefix}${'Initialised all pages!'.cyan}`);
|
||
|
}
|
||
|
}
|