135 lines
6.0 KiB
TypeScript
135 lines
6.0 KiB
TypeScript
import { txDevEnv } from '@core/globalData';
|
|
import Router from '@koa/router';
|
|
import KoaRateLimit from 'koa-ratelimit';
|
|
|
|
import * as routes from '@routes/index';
|
|
import { apiAuthMw, hostAuthMw, intercomAuthMw, webAuthMw } from './middlewares/authMws';
|
|
|
|
|
|
/**
|
|
* Router factory
|
|
*/
|
|
export default () => {
|
|
const router = new Router();
|
|
const authLimiter = KoaRateLimit({
|
|
driver: 'memory',
|
|
db: new Map(),
|
|
duration: txConfig.webServer.limiterMinutes * 60 * 1000, // 15 minutes
|
|
errorMessage: JSON.stringify({
|
|
//Duplicated to maintain compatibility with all auth api routes
|
|
error: `Too many attempts. Blocked for ${txConfig.webServer.limiterMinutes} minutes.`,
|
|
errorTitle: 'Too many attempts.',
|
|
errorMessage: `Blocked for ${txConfig.webServer.limiterMinutes} minutes.`,
|
|
}),
|
|
max: txConfig.webServer.limiterAttempts,
|
|
disableHeader: true,
|
|
id: (ctx: any) => ctx.txVars.realIP,
|
|
});
|
|
|
|
//Rendered Pages
|
|
router.get('/legacy/adminManager', webAuthMw, routes.adminManager_page);
|
|
router.get('/legacy/advanced', webAuthMw, routes.advanced_page);
|
|
router.get('/legacy/cfgEditor', webAuthMw, routes.cfgEditor_page);
|
|
router.get('/legacy/diagnostics', webAuthMw, routes.diagnostics_page);
|
|
router.get('/legacy/masterActions', webAuthMw, routes.masterActions_page);
|
|
router.get('/legacy/resources', webAuthMw, routes.resources);
|
|
router.get('/legacy/serverLog', webAuthMw, routes.serverLog);
|
|
router.get('/legacy/whitelist', webAuthMw, routes.whitelist_page);
|
|
router.get('/legacy/setup', webAuthMw, routes.setup_get);
|
|
router.get('/legacy/deployer', webAuthMw, routes.deployer_stepper);
|
|
|
|
//Authentication
|
|
router.get('/auth/self', apiAuthMw, routes.auth_self);
|
|
router.post('/auth/password', authLimiter, routes.auth_verifyPassword);
|
|
router.post('/auth/logout', authLimiter, routes.auth_logout);
|
|
router.post('/auth/addMaster/pin', authLimiter, routes.auth_addMasterPin);
|
|
router.post('/auth/addMaster/callback', authLimiter, routes.auth_addMasterCallback);
|
|
router.post('/auth/addMaster/save', authLimiter, routes.auth_addMasterSave);
|
|
router.get('/auth/cfxre/redirect', authLimiter, routes.auth_providerRedirect);
|
|
router.post('/auth/cfxre/callback', authLimiter, routes.auth_providerCallback);
|
|
router.post('/auth/changePassword', apiAuthMw, routes.auth_changePassword);
|
|
router.get('/auth/getIdentifiers', apiAuthMw, routes.auth_getIdentifiers);
|
|
router.post('/auth/changeIdentifiers', apiAuthMw, routes.auth_changeIdentifiers);
|
|
|
|
//Admin Manager
|
|
router.post('/adminManager/getModal/:modalType', webAuthMw, routes.adminManager_getModal);
|
|
router.post('/adminManager/:action', apiAuthMw, routes.adminManager_actions);
|
|
|
|
//Settings
|
|
router.post('/setup/:action', apiAuthMw, routes.setup_post);
|
|
router.get('/deployer/status', apiAuthMw, routes.deployer_status);
|
|
router.post('/deployer/recipe/:action', apiAuthMw, routes.deployer_actions);
|
|
router.get('/settings/configs', apiAuthMw, routes.settings_getConfigs);
|
|
router.post('/settings/configs/:card', apiAuthMw, routes.settings_saveConfigs);
|
|
router.get('/settings/banTemplates', apiAuthMw, routes.settings_getBanTemplates);
|
|
router.post('/settings/banTemplates', apiAuthMw, routes.settings_saveBanTemplates);
|
|
router.post('/settings/resetServerDataPath', apiAuthMw, routes.settings_resetServerDataPath);
|
|
|
|
//Master Actions
|
|
router.get('/masterActions/backupDatabase', webAuthMw, routes.masterActions_getBackup);
|
|
router.post('/masterActions/:action', apiAuthMw, routes.masterActions_actions);
|
|
|
|
//FXServer
|
|
router.post('/fxserver/controls', apiAuthMw, routes.fxserver_controls);
|
|
router.post('/fxserver/commands', apiAuthMw, routes.fxserver_commands);
|
|
router.get('/fxserver/downloadLog', webAuthMw, routes.fxserver_downloadLog);
|
|
router.post('/fxserver/schedule', apiAuthMw, routes.fxserver_schedule);
|
|
|
|
//CFG Editor
|
|
router.post('/cfgEditor/save', apiAuthMw, routes.cfgEditor_save);
|
|
|
|
//Control routes
|
|
router.post('/intercom/:scope', intercomAuthMw, routes.intercom);
|
|
|
|
//Diagnostic routes
|
|
router.post('/diagnostics/sendReport', apiAuthMw, routes.diagnostics_sendReport);
|
|
router.post('/advanced', apiAuthMw, routes.advanced_actions);
|
|
|
|
//Data routes
|
|
router.get('/serverLog/partial', apiAuthMw, routes.serverLogPartial);
|
|
router.get('/systemLog/:scope', apiAuthMw, routes.systemLogs);
|
|
router.get('/perfChartData/:thread', apiAuthMw, routes.perfChart);
|
|
router.get('/playerDropsData', apiAuthMw, routes.playerDrops);
|
|
|
|
/*
|
|
FIXME: reorganizar TODAS rotas de logs, incluindo listagem e download
|
|
/logs/:logpage - WEB
|
|
/logs/:log/list - API
|
|
/logs/:log/partial - API
|
|
/logs/:log/download - WEB
|
|
|
|
*/
|
|
|
|
//History routes
|
|
router.get('/history/stats', apiAuthMw, routes.history_stats);
|
|
router.get('/history/search', apiAuthMw, routes.history_search);
|
|
router.get('/history/action', apiAuthMw, routes.history_actionModal);
|
|
router.post('/history/:action', apiAuthMw, routes.history_actions);
|
|
|
|
//Player routes
|
|
router.get('/player', apiAuthMw, routes.player_modal);
|
|
router.get('/player/stats', apiAuthMw, routes.player_stats);
|
|
router.get('/player/search', apiAuthMw, routes.player_search);
|
|
router.post('/player/checkJoin', intercomAuthMw, routes.player_checkJoin);
|
|
router.post('/player/:action', apiAuthMw, routes.player_actions);
|
|
router.get('/whitelist/:table', apiAuthMw, routes.whitelist_list);
|
|
router.post('/whitelist/:table/:action', apiAuthMw, routes.whitelist_actions);
|
|
|
|
//Host routes
|
|
router.get('/host/status', hostAuthMw, routes.host_status);
|
|
|
|
//DevDebug routes - no auth
|
|
if (txDevEnv.ENABLED) {
|
|
router.get('/dev/:scope', routes.dev_get);
|
|
router.post('/dev/:scope', routes.dev_post);
|
|
};
|
|
|
|
//Insights page mock
|
|
// router.get('/insights', (ctx) => {
|
|
// return ctx.utils.render('main/insights', { headerTitle: 'Insights' });
|
|
// });
|
|
|
|
//Return router
|
|
return router;
|
|
};
|