diff --git a/src/routes/accounts.js b/src/routes/accounts.js index 60ce207cf5..809aa9a83c 100644 --- a/src/routes/accounts.js +++ b/src/routes/accounts.js @@ -7,7 +7,7 @@ const helpers = require('./helpers'); const { setupPageRoute } = helpers; -module.exports = function (app, middleware, controllers) { +module.exports = function (app, name, middleware, controllers) { const middlewares = [middleware.exposeUid, middleware.canViewUsers]; const accountMiddlewares = [middleware.exposeUid, middleware.canViewUsers, middleware.checkAccountPermissions]; @@ -15,34 +15,34 @@ module.exports = function (app, middleware, controllers) { setupPageRoute(app, '/me/*', middleware, [], middleware.redirectMeToUserslug); setupPageRoute(app, '/uid/:uid*', middleware, [], middleware.redirectUidToUserslug); - setupPageRoute(app, '/user/:userslug', middleware, middlewares, controllers.accounts.profile.get); - setupPageRoute(app, '/user/:userslug/following', middleware, middlewares, controllers.accounts.follow.getFollowing); - setupPageRoute(app, '/user/:userslug/followers', middleware, middlewares, controllers.accounts.follow.getFollowers); - - setupPageRoute(app, '/user/:userslug/posts', middleware, middlewares, controllers.accounts.posts.getPosts); - setupPageRoute(app, '/user/:userslug/topics', middleware, middlewares, controllers.accounts.posts.getTopics); - setupPageRoute(app, '/user/:userslug/best', middleware, middlewares, controllers.accounts.posts.getBestPosts); - setupPageRoute(app, '/user/:userslug/groups', middleware, middlewares, controllers.accounts.groups.get); - - setupPageRoute(app, '/user/:userslug/categories', middleware, accountMiddlewares, controllers.accounts.categories.get); - setupPageRoute(app, '/user/:userslug/bookmarks', middleware, accountMiddlewares, controllers.accounts.posts.getBookmarks); - setupPageRoute(app, '/user/:userslug/watched', middleware, accountMiddlewares, controllers.accounts.posts.getWatchedTopics); - setupPageRoute(app, '/user/:userslug/ignored', middleware, accountMiddlewares, controllers.accounts.posts.getIgnoredTopics); - setupPageRoute(app, '/user/:userslug/upvoted', middleware, accountMiddlewares, controllers.accounts.posts.getUpVotedPosts); - setupPageRoute(app, '/user/:userslug/downvoted', middleware, accountMiddlewares, controllers.accounts.posts.getDownVotedPosts); - setupPageRoute(app, '/user/:userslug/edit', middleware, accountMiddlewares, controllers.accounts.edit.get); - setupPageRoute(app, '/user/:userslug/edit/username', middleware, accountMiddlewares, controllers.accounts.edit.username); - setupPageRoute(app, '/user/:userslug/edit/email', middleware, accountMiddlewares, controllers.accounts.edit.email); - setupPageRoute(app, '/user/:userslug/edit/password', middleware, accountMiddlewares, controllers.accounts.edit.password); + setupPageRoute(app, `/${name}/:userslug`, middleware, middlewares, controllers.accounts.profile.get); + setupPageRoute(app, `/${name}/:userslug/following`, middleware, middlewares, controllers.accounts.follow.getFollowing); + setupPageRoute(app, `/${name}/:userslug/followers`, middleware, middlewares, controllers.accounts.follow.getFollowers); + + setupPageRoute(app, `/${name}/:userslug/posts`, middleware, middlewares, controllers.accounts.posts.getPosts); + setupPageRoute(app, `/${name}/:userslug/topics`, middleware, middlewares, controllers.accounts.posts.getTopics); + setupPageRoute(app, `/${name}/:userslug/best`, middleware, middlewares, controllers.accounts.posts.getBestPosts); + setupPageRoute(app, `/${name}/:userslug/groups`, middleware, middlewares, controllers.accounts.groups.get); + + setupPageRoute(app, `/${name}/:userslug/categories`, middleware, accountMiddlewares, controllers.accounts.categories.get); + setupPageRoute(app, `/${name}/:userslug/bookmarks`, middleware, accountMiddlewares, controllers.accounts.posts.getBookmarks); + setupPageRoute(app, `/${name}/:userslug/watched`, middleware, accountMiddlewares, controllers.accounts.posts.getWatchedTopics); + setupPageRoute(app, `/${name}/:userslug/ignored`, middleware, accountMiddlewares, controllers.accounts.posts.getIgnoredTopics); + setupPageRoute(app, `/${name}/:userslug/upvoted`, middleware, accountMiddlewares, controllers.accounts.posts.getUpVotedPosts); + setupPageRoute(app, `/${name}/:userslug/downvoted`, middleware, accountMiddlewares, controllers.accounts.posts.getDownVotedPosts); + setupPageRoute(app, `/${name}/:userslug/edit`, middleware, accountMiddlewares, controllers.accounts.edit.get); + setupPageRoute(app, `/${name}/:userslug/edit/username`, middleware, accountMiddlewares, controllers.accounts.edit.username); + setupPageRoute(app, `/${name}/:userslug/edit/email`, middleware, accountMiddlewares, controllers.accounts.edit.email); + setupPageRoute(app, `/${name}/:userslug/edit/password`, middleware, accountMiddlewares, controllers.accounts.edit.password); app.use('/.well-known/change-password', (req, res) => { res.redirect('/me/edit/password'); }); - setupPageRoute(app, '/user/:userslug/info', middleware, accountMiddlewares, controllers.accounts.info.get); - setupPageRoute(app, '/user/:userslug/settings', middleware, accountMiddlewares, controllers.accounts.settings.get); - setupPageRoute(app, '/user/:userslug/uploads', middleware, accountMiddlewares, controllers.accounts.uploads.get); - setupPageRoute(app, '/user/:userslug/consent', middleware, accountMiddlewares, controllers.accounts.consent.get); - setupPageRoute(app, '/user/:userslug/blocks', middleware, accountMiddlewares, controllers.accounts.blocks.getBlocks); - setupPageRoute(app, '/user/:userslug/sessions', middleware, accountMiddlewares, controllers.accounts.sessions.get); + setupPageRoute(app, `/${name}/:userslug/info`, middleware, accountMiddlewares, controllers.accounts.info.get); + setupPageRoute(app, `/${name}/:userslug/settings`, middleware, accountMiddlewares, controllers.accounts.settings.get); + setupPageRoute(app, `/${name}/:userslug/uploads`, middleware, accountMiddlewares, controllers.accounts.uploads.get); + setupPageRoute(app, `/${name}/:userslug/consent`, middleware, accountMiddlewares, controllers.accounts.consent.get); + setupPageRoute(app, `/${name}/:userslug/blocks`, middleware, accountMiddlewares, controllers.accounts.blocks.getBlocks); + setupPageRoute(app, `/${name}/:userslug/sessions`, middleware, accountMiddlewares, controllers.accounts.sessions.get); app.delete('/api/user/:userslug/session/:uuid', [middleware.exposeUid], (req, res, next) => { // TODO: Remove this entire route in v1.16.0 winston.warn('[router] `/api/user/:userslug/session/:uuid` has been deprecated, use `DELETE /api/v3/users/:uid/sessions/:uuid` or `DELETE /api/v3/users/bySlug/:userslug/sessions/:uuid` instead'); @@ -53,6 +53,6 @@ module.exports = function (app, middleware, controllers) { }); setupPageRoute(app, '/notifications', middleware, [middleware.authenticate], controllers.accounts.notifications.get); - setupPageRoute(app, '/user/:userslug/chats/:roomid?', middleware, middlewares, controllers.accounts.chats.get); + setupPageRoute(app, `/${name}/:userslug/chats/:roomid?`, middleware, middlewares, controllers.accounts.chats.get); setupPageRoute(app, '/chats/:roomid?', middleware, [middleware.authenticate], controllers.accounts.chats.redirectToChat); }; diff --git a/src/routes/index.js b/src/routes/index.js index 9117c20efb..79fdccd3e3 100644 --- a/src/routes/index.js +++ b/src/routes/index.js @@ -70,15 +70,15 @@ _mounts.tag = (app, middleware, controllers) => { setupPageRoute(app, '/tags', middleware, [middleware.privateTagListing], controllers.tags.getTags); }; -_mounts.category = (app, middleware, controllers) => { +_mounts.category = (app, name, middleware, controllers) => { setupPageRoute(app, '/categories', middleware, [], controllers.categories.list); setupPageRoute(app, '/popular', middleware, [], controllers.popular.get); setupPageRoute(app, '/recent', middleware, [], controllers.recent.get); setupPageRoute(app, '/top', middleware, [], controllers.top.get); setupPageRoute(app, '/unread', middleware, [middleware.authenticate], controllers.unread.get); - setupPageRoute(app, '/category/:category_id/:slug/:topic_index', middleware, [], controllers.category.get); - setupPageRoute(app, '/category/:category_id/:slug?', middleware, [], controllers.category.get); + setupPageRoute(app, `/${name}/:category_id/:slug/:topic_index`, middleware, [], controllers.category.get); + setupPageRoute(app, `/${name}/:category_id/:slug?`, middleware, [], controllers.category.get); }; _mounts.user = (app, middleware, controllers) => { @@ -131,15 +131,18 @@ async function addCoreRoutes(app, router, middleware) { _mounts.mod(router, middleware, controllers); _mounts.globalMod(router, middleware, controllers); _mounts.tag(router, middleware, controllers); - _mounts.category(router, middleware, controllers); - _mounts.account(router, middleware, controllers); _mounts.user(router, middleware, controllers); _mounts.group(router, middleware, controllers); // Allow plugins/themes to mount some routes elsewhere - const remountable = ['admin', 'topic', 'post']; + const remountable = ['admin', 'category', 'topic', 'post', 'account']; + const mountHash = { // some mounts are named differently for organizational purposes + account: 'user', + }; await Promise.all(remountable.map(async (mount) => { const original = mount; + mount = mountHash[mount] || mount; + ({ mount } = await plugins.hooks.fire('filter:router.add', { mount })); if (mount === null) { // do not mount at all winston.warn(`[router] Not mounting /${original}`); @@ -149,7 +152,7 @@ async function addCoreRoutes(app, router, middleware) { 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) => { + router.use(new RegExp(`/(api/)?${mountHash[original] || original}`), (req, res) => { controllerHelpers.redirect(res, `${nconf.get('relative_path')}/${mount}${req.path}`); }); }