mirror of
https://github.com/NodeBB/NodeBB.git
synced 2026-01-10 01:23:04 +01:00
style(remountable-routes): abstract removable routes code to a separate local fn
This commit is contained in:
@@ -54,20 +54,20 @@ _mounts.globalMod = (app, middleware, controllers) => {
|
||||
setupPageRoute(app, '/registration-queue', middleware, [], controllers.globalMods.registrationQueue);
|
||||
};
|
||||
|
||||
_mounts.topic = (app, mount, middleware, controllers) => {
|
||||
setupPageRoute(app, `/${mount}/:topic_id/:slug/:post_index?`, middleware, [], controllers.topics.get);
|
||||
setupPageRoute(app, `/${mount}/:topic_id/:slug?`, middleware, [], controllers.topics.get);
|
||||
_mounts.topic = (app, name, middleware, controllers) => {
|
||||
setupPageRoute(app, `/${name}/:topic_id/:slug/:post_index?`, middleware, [], controllers.topics.get);
|
||||
setupPageRoute(app, `/${name}/:topic_id/:slug?`, middleware, [], controllers.topics.get);
|
||||
};
|
||||
|
||||
_mounts.post = (app, mount, middleware, controllers) => {
|
||||
_mounts.post = (app, name, middleware, controllers) => {
|
||||
const middlewares = [middleware.maintenanceMode, middleware.registrationComplete, middleware.pluginHooks];
|
||||
app.get(`/${mount}/:pid`, middleware.busyCheck, middlewares, controllers.posts.redirectToPost);
|
||||
app.get(`/api/${mount}/:pid`, middlewares, controllers.posts.redirectToPost);
|
||||
app.get(`/${name}/:pid`, middleware.busyCheck, middlewares, controllers.posts.redirectToPost);
|
||||
app.get(`/api/${name}/:pid`, middlewares, controllers.posts.redirectToPost);
|
||||
};
|
||||
|
||||
_mounts.tag = (app, middleware, controllers) => {
|
||||
setupPageRoute(app, '/tags/:tag', middleware, [middleware.privateTagListing], controllers.tags.getTag);
|
||||
setupPageRoute(app, '/tags', middleware, [middleware.privateTagListing], controllers.tags.getTags);
|
||||
_mounts.tags = (app, name, middleware, controllers) => {
|
||||
setupPageRoute(app, `/${name}/:tag`, middleware, [middleware.privateTagListing], controllers.tags.getTag);
|
||||
setupPageRoute(app, `/${name}`, middleware, [middleware.privateTagListing], controllers.tags.getTags);
|
||||
};
|
||||
|
||||
_mounts.category = (app, name, middleware, controllers) => {
|
||||
@@ -87,12 +87,12 @@ _mounts.users = (app, name, middleware, controllers) => {
|
||||
setupPageRoute(app, `/${name}`, middleware, middlewares, controllers.users.index);
|
||||
};
|
||||
|
||||
_mounts.group = (app, middleware, controllers) => {
|
||||
_mounts.groups = (app, name, middleware, controllers) => {
|
||||
const middlewares = [middleware.canViewGroups];
|
||||
|
||||
setupPageRoute(app, '/groups', middleware, middlewares, controllers.groups.list);
|
||||
setupPageRoute(app, '/groups/:slug', middleware, middlewares, controllers.groups.details);
|
||||
setupPageRoute(app, '/groups/:slug/members', middleware, middlewares, controllers.groups.members);
|
||||
setupPageRoute(app, `/${name}`, middleware, middlewares, controllers.groups.list);
|
||||
setupPageRoute(app, `/${name}/:slug`, middleware, middlewares, controllers.groups.details);
|
||||
setupPageRoute(app, `/${name}/:slug/members`, middleware, middlewares, controllers.groups.members);
|
||||
};
|
||||
|
||||
module.exports = async function (app, middleware) {
|
||||
@@ -130,34 +130,8 @@ async function addCoreRoutes(app, router, middleware) {
|
||||
_mounts.main(router, middleware, controllers);
|
||||
_mounts.mod(router, middleware, controllers);
|
||||
_mounts.globalMod(router, middleware, controllers);
|
||||
_mounts.tag(router, middleware, controllers);
|
||||
_mounts.group(router, middleware, controllers);
|
||||
|
||||
// Allow plugins/themes to mount some routes elsewhere
|
||||
const remountable = ['admin', 'category', 'topic', 'post', 'users', 'user'];
|
||||
const mountHash = {}; // if a mount is named differently for organizational purposes, add the change here
|
||||
|
||||
await Promise.all(remountable.map(async (mount) => {
|
||||
const method = mount;
|
||||
const original = mountHash[mount] || mount;
|
||||
mount = original;
|
||||
|
||||
({ 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}`);
|
||||
});
|
||||
}
|
||||
|
||||
_mounts[method](router, mount, middleware, controllers);
|
||||
}));
|
||||
await addRemountableRoutes(app, router, middleware);
|
||||
|
||||
const relativePath = nconf.get('relative_path');
|
||||
app.use(relativePath || '/', router);
|
||||
@@ -197,3 +171,28 @@ async function addCoreRoutes(app, router, middleware) {
|
||||
app.use(controllers.errors.handleURIErrors);
|
||||
app.use(controllers.errors.handleErrors);
|
||||
}
|
||||
|
||||
async function addRemountableRoutes(app, router, middleware) {
|
||||
// Allow plugins/themes to mount some routes elsewhere
|
||||
const remountable = ['admin', 'category', 'topic', 'post', 'users', 'user', 'groups', 'tags'];
|
||||
|
||||
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}`);
|
||||
});
|
||||
}
|
||||
|
||||
_mounts[original](router, mount, middleware, controllers);
|
||||
}));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user