feat(remountable-routes): allow /admin and /post to be remountable

v1.18.x
Julian Lam 4 years ago
parent 92758ec50d
commit f01af62b53

@ -2,78 +2,78 @@
const helpers = require('./helpers');
module.exports = function (app, middleware, controllers) {
module.exports = function (app, name, middleware, controllers) {
const middlewares = [middleware.pluginHooks];
helpers.setupAdminPageRoute(app, '/admin', middleware, middlewares, controllers.admin.routeIndex);
helpers.setupAdminPageRoute(app, `/${name}`, middleware, middlewares, controllers.admin.routeIndex);
helpers.setupAdminPageRoute(app, '/admin/dashboard', middleware, middlewares, controllers.admin.dashboard.get);
helpers.setupAdminPageRoute(app, `/${name}/dashboard`, middleware, middlewares, controllers.admin.dashboard.get);
helpers.setupAdminPageRoute(app, '/admin/manage/categories', middleware, middlewares, controllers.admin.categories.getAll);
helpers.setupAdminPageRoute(app, '/admin/manage/categories/:category_id', middleware, middlewares, controllers.admin.categories.get);
helpers.setupAdminPageRoute(app, '/admin/manage/categories/:category_id/analytics', middleware, middlewares, controllers.admin.categories.getAnalytics);
helpers.setupAdminPageRoute(app, `/${name}/manage/categories`, middleware, middlewares, controllers.admin.categories.getAll);
helpers.setupAdminPageRoute(app, `/${name}/manage/categories/:category_id`, middleware, middlewares, controllers.admin.categories.get);
helpers.setupAdminPageRoute(app, `/${name}/manage/categories/:category_id/analytics`, middleware, middlewares, controllers.admin.categories.getAnalytics);
helpers.setupAdminPageRoute(app, '/admin/manage/privileges/:cid?', middleware, middlewares, controllers.admin.privileges.get);
helpers.setupAdminPageRoute(app, '/admin/manage/tags', middleware, middlewares, controllers.admin.tags.get);
helpers.setupAdminPageRoute(app, `/${name}/manage/privileges/:cid?`, middleware, middlewares, controllers.admin.privileges.get);
helpers.setupAdminPageRoute(app, `/${name}/manage/tags`, middleware, middlewares, controllers.admin.tags.get);
helpers.setupAdminPageRoute(app, '/admin/manage/users', middleware, middlewares, controllers.admin.users.index);
helpers.setupAdminPageRoute(app, '/admin/manage/registration', middleware, middlewares, controllers.admin.users.registrationQueue);
helpers.setupAdminPageRoute(app, `/${name}/manage/users`, middleware, middlewares, controllers.admin.users.index);
helpers.setupAdminPageRoute(app, `/${name}/manage/registration`, middleware, middlewares, controllers.admin.users.registrationQueue);
helpers.setupAdminPageRoute(app, '/admin/manage/admins-mods', middleware, middlewares, controllers.admin.adminsMods.get);
helpers.setupAdminPageRoute(app, `/${name}/manage/admins-mods`, middleware, middlewares, controllers.admin.adminsMods.get);
helpers.setupAdminPageRoute(app, '/admin/manage/groups', middleware, middlewares, controllers.admin.groups.list);
helpers.setupAdminPageRoute(app, '/admin/manage/groups/:name', middleware, middlewares, controllers.admin.groups.get);
helpers.setupAdminPageRoute(app, `/${name}/manage/groups`, middleware, middlewares, controllers.admin.groups.list);
helpers.setupAdminPageRoute(app, `/${name}/manage/groups/:name`, middleware, middlewares, controllers.admin.groups.get);
helpers.setupAdminPageRoute(app, '/admin/manage/uploads', middleware, middlewares, controllers.admin.uploads.get);
helpers.setupAdminPageRoute(app, '/admin/manage/digest', middleware, middlewares, controllers.admin.digest.get);
helpers.setupAdminPageRoute(app, `/${name}/manage/uploads`, middleware, middlewares, controllers.admin.uploads.get);
helpers.setupAdminPageRoute(app, `/${name}/manage/digest`, middleware, middlewares, controllers.admin.digest.get);
helpers.setupAdminPageRoute(app, '/admin/settings/email', middleware, middlewares, controllers.admin.settings.email);
helpers.setupAdminPageRoute(app, '/admin/settings/user', middleware, middlewares, controllers.admin.settings.user);
helpers.setupAdminPageRoute(app, '/admin/settings/post', middleware, middlewares, controllers.admin.settings.post);
helpers.setupAdminPageRoute(app, '/admin/settings/languages', middleware, middlewares, controllers.admin.settings.languages);
helpers.setupAdminPageRoute(app, '/admin/settings/navigation', middleware, middlewares, controllers.admin.settings.navigation);
helpers.setupAdminPageRoute(app, '/admin/settings/homepage', middleware, middlewares, controllers.admin.settings.homepage);
helpers.setupAdminPageRoute(app, '/admin/settings/social', middleware, middlewares, controllers.admin.settings.social);
helpers.setupAdminPageRoute(app, '/admin/settings/:term?', middleware, middlewares, controllers.admin.settings.get);
helpers.setupAdminPageRoute(app, `/${name}/settings/email`, middleware, middlewares, controllers.admin.settings.email);
helpers.setupAdminPageRoute(app, `/${name}/settings/user`, middleware, middlewares, controllers.admin.settings.user);
helpers.setupAdminPageRoute(app, `/${name}/settings/post`, middleware, middlewares, controllers.admin.settings.post);
helpers.setupAdminPageRoute(app, `/${name}/settings/languages`, middleware, middlewares, controllers.admin.settings.languages);
helpers.setupAdminPageRoute(app, `/${name}/settings/navigation`, middleware, middlewares, controllers.admin.settings.navigation);
helpers.setupAdminPageRoute(app, `/${name}/settings/homepage`, middleware, middlewares, controllers.admin.settings.homepage);
helpers.setupAdminPageRoute(app, `/${name}/settings/social`, middleware, middlewares, controllers.admin.settings.social);
helpers.setupAdminPageRoute(app, `/${name}/settings/:term?`, middleware, middlewares, controllers.admin.settings.get);
helpers.setupAdminPageRoute(app, '/admin/appearance/:term?', middleware, middlewares, controllers.admin.appearance.get);
helpers.setupAdminPageRoute(app, `/${name}/appearance/:term?`, middleware, middlewares, controllers.admin.appearance.get);
helpers.setupAdminPageRoute(app, '/admin/extend/plugins', middleware, middlewares, controllers.admin.plugins.get);
helpers.setupAdminPageRoute(app, '/admin/extend/widgets', middleware, middlewares, controllers.admin.extend.widgets.get);
helpers.setupAdminPageRoute(app, '/admin/extend/rewards', middleware, middlewares, controllers.admin.extend.rewards.get);
helpers.setupAdminPageRoute(app, `/${name}/extend/plugins`, middleware, middlewares, controllers.admin.plugins.get);
helpers.setupAdminPageRoute(app, `/${name}/extend/widgets`, middleware, middlewares, controllers.admin.extend.widgets.get);
helpers.setupAdminPageRoute(app, `/${name}/extend/rewards`, middleware, middlewares, controllers.admin.extend.rewards.get);
helpers.setupAdminPageRoute(app, '/admin/advanced/database', middleware, middlewares, controllers.admin.database.get);
helpers.setupAdminPageRoute(app, '/admin/advanced/events', middleware, middlewares, controllers.admin.events.get);
helpers.setupAdminPageRoute(app, '/admin/advanced/hooks', middleware, middlewares, controllers.admin.hooks.get);
helpers.setupAdminPageRoute(app, '/admin/advanced/logs', middleware, middlewares, controllers.admin.logs.get);
helpers.setupAdminPageRoute(app, '/admin/advanced/errors', middleware, middlewares, controllers.admin.errors.get);
helpers.setupAdminPageRoute(app, '/admin/advanced/errors/export', middleware, middlewares, controllers.admin.errors.export);
helpers.setupAdminPageRoute(app, '/admin/advanced/cache', middleware, middlewares, controllers.admin.cache.get);
helpers.setupAdminPageRoute(app, `/${name}/advanced/database`, middleware, middlewares, controllers.admin.database.get);
helpers.setupAdminPageRoute(app, `/${name}/advanced/events`, middleware, middlewares, controllers.admin.events.get);
helpers.setupAdminPageRoute(app, `/${name}/advanced/hooks`, middleware, middlewares, controllers.admin.hooks.get);
helpers.setupAdminPageRoute(app, `/${name}/advanced/logs`, middleware, middlewares, controllers.admin.logs.get);
helpers.setupAdminPageRoute(app, `/${name}/advanced/errors`, middleware, middlewares, controllers.admin.errors.get);
helpers.setupAdminPageRoute(app, `/${name}/advanced/errors/export`, middleware, middlewares, controllers.admin.errors.export);
helpers.setupAdminPageRoute(app, `/${name}/advanced/cache`, middleware, middlewares, controllers.admin.cache.get);
helpers.setupAdminPageRoute(app, '/admin/development/logger', middleware, middlewares, controllers.admin.logger.get);
helpers.setupAdminPageRoute(app, '/admin/development/info', middleware, middlewares, controllers.admin.info.get);
helpers.setupAdminPageRoute(app, `/${name}/development/logger`, middleware, middlewares, controllers.admin.logger.get);
helpers.setupAdminPageRoute(app, `/${name}/development/info`, middleware, middlewares, controllers.admin.info.get);
apiRoutes(app, middleware, controllers);
apiRoutes(app, name, middleware, controllers);
};
function apiRoutes(router, middleware, controllers) {
router.get('/api/admin/users/csv', middleware.authenticate, helpers.tryRoute(controllers.admin.users.getCSV));
router.get('/api/admin/groups/:groupname/csv', middleware.authenticate, helpers.tryRoute(controllers.admin.groups.getCSV));
router.get('/api/admin/analytics', middleware.authenticate, helpers.tryRoute(controllers.admin.dashboard.getAnalytics));
router.get('/api/admin/advanced/cache/dump', middleware.authenticate, helpers.tryRoute(controllers.admin.cache.dump));
function apiRoutes(router, name, middleware, controllers) {
router.get(`/api/${name}/users/csv`, middleware.authenticate, helpers.tryRoute(controllers.admin.users.getCSV));
router.get(`/api/${name}/groups/:groupname/csv`, middleware.authenticate, helpers.tryRoute(controllers.admin.groups.getCSV));
router.get(`/api/${name}/analytics`, middleware.authenticate, helpers.tryRoute(controllers.admin.dashboard.getAnalytics));
router.get(`/api/${name}/advanced/cache/dump`, middleware.authenticate, helpers.tryRoute(controllers.admin.cache.dump));
const multipart = require('connect-multiparty');
const multipartMiddleware = multipart();
const middlewares = [multipartMiddleware, middleware.validateFiles, middleware.applyCSRF, middleware.authenticate];
router.post('/api/admin/category/uploadpicture', middlewares, helpers.tryRoute(controllers.admin.uploads.uploadCategoryPicture));
router.post('/api/admin/uploadfavicon', middlewares, helpers.tryRoute(controllers.admin.uploads.uploadFavicon));
router.post('/api/admin/uploadTouchIcon', middlewares, helpers.tryRoute(controllers.admin.uploads.uploadTouchIcon));
router.post('/api/admin/uploadMaskableIcon', middlewares, helpers.tryRoute(controllers.admin.uploads.uploadMaskableIcon));
router.post('/api/admin/uploadlogo', middlewares, helpers.tryRoute(controllers.admin.uploads.uploadLogo));
router.post('/api/admin/uploadOgImage', middlewares, helpers.tryRoute(controllers.admin.uploads.uploadOgImage));
router.post('/api/admin/upload/file', middlewares, helpers.tryRoute(controllers.admin.uploads.uploadFile));
router.post('/api/admin/uploadDefaultAvatar', middlewares, helpers.tryRoute(controllers.admin.uploads.uploadDefaultAvatar));
router.post(`/api/${name}/category/uploadpicture`, middlewares, helpers.tryRoute(controllers.admin.uploads.uploadCategoryPicture));
router.post(`/api/${name}/uploadfavicon`, middlewares, helpers.tryRoute(controllers.admin.uploads.uploadFavicon));
router.post(`/api/${name}/uploadTouchIcon`, middlewares, helpers.tryRoute(controllers.admin.uploads.uploadTouchIcon));
router.post(`/api/${name}/uploadMaskableIcon`, middlewares, helpers.tryRoute(controllers.admin.uploads.uploadMaskableIcon));
router.post(`/api/${name}/uploadlogo`, middlewares, helpers.tryRoute(controllers.admin.uploads.uploadLogo));
router.post(`/api/${name}/uploadOgImage`, middlewares, helpers.tryRoute(controllers.admin.uploads.uploadOgImage));
router.post(`/api/${name}/upload/file`, middlewares, helpers.tryRoute(controllers.admin.uploads.uploadFile));
router.post(`/api/${name}/uploadDefaultAvatar`, middlewares, helpers.tryRoute(controllers.admin.uploads.uploadDefaultAvatar));
}

@ -59,10 +59,10 @@ _mounts.topic = (app, mount, middleware, controllers) => {
setupPageRoute(app, `/${mount}/:topic_id/:slug?`, middleware, [], controllers.topics.get);
};
_mounts.post = (app, middleware, controllers) => {
_mounts.post = (app, mount, middleware, controllers) => {
const middlewares = [middleware.maintenanceMode, middleware.registrationComplete, middleware.pluginHooks];
app.get('/post/:pid', middleware.busyCheck, middlewares, controllers.posts.redirectToPost);
app.get('/api/post/:pid', middlewares, controllers.posts.redirectToPost);
app.get(`/${mount}/:pid`, middleware.busyCheck, middlewares, controllers.posts.redirectToPost);
app.get(`/api/${mount}/:pid`, middlewares, controllers.posts.redirectToPost);
};
_mounts.tag = (app, middleware, controllers) => {
@ -123,14 +123,11 @@ module.exports = async function (app, middleware) {
};
async function addCoreRoutes(app, router, middleware) {
_mounts.admin(router, middleware, controllers);
_mounts.meta(router, middleware, controllers);
_mounts.api(router, middleware, controllers);
_mounts.feed(router, middleware, controllers);
_mounts.main(router, middleware, controllers);
// _mounts.topic(router, middleware, controllers);
_mounts.post(router, middleware, controllers);
_mounts.mod(router, middleware, controllers);
_mounts.globalMod(router, middleware, controllers);
_mounts.tag(router, middleware, controllers);
@ -140,16 +137,18 @@ async function addCoreRoutes(app, router, middleware) {
_mounts.group(router, middleware, controllers);
// Allow plugins/themes to mount some routes elsewhere
const remountable = ['topic'];
const remountable = ['admin', 'topic', 'post'];
await Promise.all(remountable.map(async (mount) => {
const original = mount;
({ mount } = await plugins.hooks.fire('filter:router.add', { mount }));
if (mount === null) { // do not mount at all
winston.warn(`[router] Not mounting /${original}`);
return;
}
if (mount !== original) {
// Set up redirect for fallback handling (some js/tpls may still refer to the traditional mount point)
winston.info(`[router] /${original} prefix re-mounted to /${mount}. Requests to /${original}/* will now redirect to /${mount}`);
router.use(new RegExp(`/(api/)?${original}`), (req, res) => {
controllerHelpers.redirect(res, `${nconf.get('relative_path')}/${mount}${req.path}`);
});

Loading…
Cancel
Save