diff --git a/src/routes/index.js b/src/routes/index.js index 98902835c2..ed76d01fe3 100644 --- a/src/routes/index.js +++ b/src/routes/index.js @@ -18,141 +18,91 @@ var nconf = require('nconf'), function mainRoutes(app, middleware, controllers) { - app.get('/', middleware.buildHeader, controllers.home); - app.get('/api', controllers.home); + setupPageRoute(app, '/', middleware, [], controllers.home); - app.get('/login', middleware.applyCSRF, middleware.redirectToAccountIfLoggedIn, middleware.buildHeader, controllers.login); - app.get('/api/login', middleware.applyCSRF, middleware.redirectToAccountIfLoggedIn, controllers.login); + var loginRegisterMiddleware = [middleware.applyCSRF, middleware.redirectToAccountIfLoggedIn]; - app.get('/register', middleware.applyCSRF, middleware.redirectToAccountIfLoggedIn, middleware.buildHeader, controllers.register); - app.get('/api/register', middleware.applyCSRF, middleware.redirectToAccountIfLoggedIn, controllers.register); - - app.get('/confirm/:code', middleware.buildHeader, controllers.confirmEmail); - app.get('/api/confirm/:code', controllers.confirmEmail); - - app.get('/outgoing', middleware.buildHeader, controllers.outgoing); - app.get('/api/outgoing', controllers.outgoing); - - app.get('/search/:term?', middleware.buildHeader, middleware.guestSearchingAllowed, controllers.search); - app.get('/api/search/:term?', middleware.guestSearchingAllowed, controllers.search); - - app.get('/reset/:code?', middleware.buildHeader, controllers.reset); - app.get('/api/reset/:code?', controllers.reset); + setupPageRoute(app, '/login', middleware, loginRegisterMiddleware, controllers.login); + setupPageRoute(app, '/register', middleware, loginRegisterMiddleware, controllers.register); + setupPageRoute(app, '/confirm/:code', middleware, [], controllers.confirmEmail); + setupPageRoute(app, '/outgoing', middleware, [], controllers.outgoing); + setupPageRoute(app, '/search/:term?', middleware, [middleware.guestSearchingAllowed], controllers.search); + setupPageRoute(app, '/reset/:code?', middleware, [], controllers.reset); } function staticRoutes(app, middleware, controllers) { - app.get('/404', middleware.buildHeader, controllers.static['404']); - app.get('/api/404', controllers.static['404']); - - app.get('/403', middleware.buildHeader, controllers.static['403']); - app.get('/api/403', controllers.static['403']); - - app.get('/500', middleware.buildHeader, controllers.static['500']); - app.get('/api/500', controllers.static['500']); + setupPageRoute(app, '/404', middleware, [], controllers.static['404']); + setupPageRoute(app, '/403', middleware, [], controllers.static['403']); + setupPageRoute(app, '/500', middleware, [], controllers.static['500']); } function topicRoutes(app, middleware, controllers) { app.get('/api/topic/teaser/:topic_id', controllers.topics.teaser); - app.get('/topic/:topic_id/:slug/:post_index?', middleware.applyCSRF, middleware.buildHeader, controllers.topics.get); - app.get('/api/topic/:topic_id/:slug/:post_index?', middleware.applyCSRF, controllers.topics.get); - - app.get('/topic/:topic_id/:slug?', middleware.applyCSRF, middleware.buildHeader, middleware.addSlug, controllers.topics.get); - app.get('/api/topic/:topic_id/:slug?', middleware.applyCSRF, middleware.addSlug, controllers.topics.get); + setupPageRoute(app, '/topic/:topic_id/:slug/:post_index?', middleware, [middleware.applyCSRF], controllers.topics.get); + setupPageRoute(app, '/topic/:topic_id/:slug?', middleware, [middleware.applyCSRF, middleware.addSlug], controllers.topics.get); } function tagRoutes(app, middleware, controllers) { - - app.get('/tags/:tag', middleware.buildHeader, controllers.tags.getTag); - app.get('/api/tags/:tag', controllers.tags.getTag); - - app.get('/tags', middleware.buildHeader, controllers.tags.getTags); - app.get('/api/tags', controllers.tags.getTags); + setupPageRoute(app, '/tags/:tag', middleware, [], controllers.tags.getTag); + setupPageRoute(app, '/tags', middleware, [], controllers.tags.getTags); } function categoryRoutes(app, middleware, controllers) { - app.get('/popular/:term?', middleware.buildHeader, controllers.categories.popular); - app.get('/api/popular/:term?', controllers.categories.popular); - - app.get('/recent/:term?', middleware.buildHeader, controllers.categories.recent); - app.get('/api/recent/:term?', controllers.categories.recent); - - app.get('/unread', middleware.buildHeader, middleware.authenticate, controllers.categories.unread); - app.get('/api/unread', middleware.authenticate, controllers.categories.unread); - + setupPageRoute(app, '/popular/:term?', middleware, [], controllers.categories.popular); + setupPageRoute(app, '/recent/:term?', middleware, [], controllers.categories.recent); + setupPageRoute(app, '/unread', middleware, [middleware.authenticate], controllers.categories.unread); app.get('/api/unread/total', middleware.authenticate, controllers.categories.unreadTotal); - app.get('/category/:category_id/:slug/:topic_index', middleware.applyCSRF, middleware.buildHeader, middleware.checkTopicIndex, controllers.categories.get); - app.get('/api/category/:category_id/:slug/:topic_index', middleware.applyCSRF, middleware.checkTopicIndex, controllers.categories.get); - - app.get('/category/:category_id/:slug?', middleware.applyCSRF, middleware.buildHeader, middleware.addSlug, controllers.categories.get); - app.get('/api/category/:category_id/:slug?', middleware.applyCSRF, controllers.categories.get); + setupPageRoute(app, '/category/:category_id/:slug/:topic_index', middleware, [middleware.applyCSRF, middleware.checkTopicIndex], controllers.categories.get); + setupPageRoute(app, '/category/:category_id/:slug?', middleware, [middleware.applyCSRF, middleware.addSlug], controllers.categories.get); } function accountRoutes(app, middleware, controllers) { - app.get('/user/:userslug', middleware.buildHeader, middleware.checkGlobalPrivacySettings, controllers.accounts.getAccount); - app.get('/api/user/:userslug', middleware.checkGlobalPrivacySettings, controllers.accounts.getAccount); - - app.get('/user/:userslug/following', middleware.buildHeader, middleware.checkGlobalPrivacySettings, controllers.accounts.getFollowing); - app.get('/api/user/:userslug/following', middleware.checkGlobalPrivacySettings, controllers.accounts.getFollowing); - - app.get('/user/:userslug/followers', middleware.buildHeader, middleware.checkGlobalPrivacySettings, controllers.accounts.getFollowers); - app.get('/api/user/:userslug/followers', middleware.checkGlobalPrivacySettings, controllers.accounts.getFollowers); - - app.get('/user/:userslug/favourites', middleware.buildHeader, middleware.checkGlobalPrivacySettings, middleware.checkAccountPermissions, controllers.accounts.getFavourites); - app.get('/api/user/:userslug/favourites', middleware.checkGlobalPrivacySettings, middleware.checkAccountPermissions, controllers.accounts.getFavourites); - - app.get('/user/:userslug/posts', middleware.buildHeader, middleware.checkGlobalPrivacySettings, controllers.accounts.getPosts); - app.get('/api/user/:userslug/posts', middleware.checkGlobalPrivacySettings, controllers.accounts.getPosts); + var middlewares = [middleware.checkGlobalPrivacySettings]; + var accountMiddlewares = [middleware.checkGlobalPrivacySettings, middleware.checkAccountPermissions]; - app.get('/user/:userslug/topics', middleware.buildHeader, middleware.checkGlobalPrivacySettings, controllers.accounts.getTopics); - app.get('/api/user/:userslug/topics', middleware.checkGlobalPrivacySettings, controllers.accounts.getTopics); + setupPageRoute(app, '/user/:userslug', middleware, middlewares, controllers.accounts.getAccount); + setupPageRoute(app, '/user/:userslug/following', middleware, middlewares, controllers.accounts.getFollowing); + setupPageRoute(app, '/user/:userslug/followers', middleware, middlewares, controllers.accounts.getFollowers); + setupPageRoute(app, '/user/:userslug/posts', middleware, middlewares, controllers.accounts.getPosts); + setupPageRoute(app, '/user/:userslug/topics', middleware, middlewares, controllers.accounts.getTopics); - app.get('/user/:userslug/edit', middleware.applyCSRF, middleware.buildHeader, middleware.checkGlobalPrivacySettings, middleware.checkAccountPermissions, controllers.accounts.accountEdit); - app.get('/api/user/:userslug/edit', middleware.applyCSRF, middleware.checkGlobalPrivacySettings, middleware.checkAccountPermissions, controllers.accounts.accountEdit); + setupPageRoute(app, '/user/:userslug/favourites', middleware, accountMiddlewares, controllers.accounts.getFavourites); + setupPageRoute(app, '/user/:userslug/edit', middleware, accountMiddlewares, controllers.accounts.accountEdit); + setupPageRoute(app, '/user/:userslug/settings', middleware, accountMiddlewares, controllers.accounts.accountSettings); - app.get('/user/:userslug/settings', middleware.buildHeader, middleware.checkGlobalPrivacySettings, middleware.checkAccountPermissions, controllers.accounts.accountSettings); - app.get('/api/user/:userslug/settings', middleware.checkGlobalPrivacySettings, middleware.checkAccountPermissions, controllers.accounts.accountSettings); - - app.get('/notifications', middleware.buildHeader, middleware.authenticate, controllers.accounts.getNotifications); - app.get('/api/notifications', middleware.authenticate, controllers.accounts.getNotifications); - - app.get('/chats/:userslug?', middleware.buildHeader, middleware.redirectToLoginIfGuest, controllers.accounts.getChats); - app.get('/api/chats/:userslug?', middleware.redirectToLoginIfGuest, controllers.accounts.getChats); + setupPageRoute(app, '/notifications', middleware, [middleware.authenticate], controllers.accounts.getNotifications); + setupPageRoute(app, '/chats/:userslug?', middleware, [middleware.redirectToLoginIfGuest], controllers.accounts.getChats); } function userRoutes(app, middleware, controllers) { - app.get('/user(s)?', middleware.buildHeader, middleware.checkGlobalPrivacySettings, controllers.users.getOnlineUsers); - app.get('/api/users', middleware.checkGlobalPrivacySettings, controllers.users.getOnlineUsers); - - app.get('/users/online', middleware.buildHeader, middleware.checkGlobalPrivacySettings, controllers.users.getOnlineUsers); - app.get('/api/users/online', middleware.checkGlobalPrivacySettings, controllers.users.getOnlineUsers); + var middlewares = [middleware.checkGlobalPrivacySettings]; - app.get('/users/sort-posts', middleware.buildHeader, middleware.checkGlobalPrivacySettings, controllers.users.getUsersSortedByPosts); - app.get('/api/users/sort-posts', middleware.checkGlobalPrivacySettings, controllers.users.getUsersSortedByPosts); + setupPageRoute(app, '/users', middleware, middlewares, controllers.users.getOnlineUsers); + setupPageRoute(app, '/users/online', middleware, middlewares, controllers.users.getOnlineUsers); + setupPageRoute(app, '/users/sort-posts', middleware, middlewares, controllers.users.getUsersSortedByPosts); + setupPageRoute(app, '/users/sort-reputation', middleware, middlewares, controllers.users.getUsersSortedByReputation); + setupPageRoute(app, '/users/latest', middleware, middlewares, controllers.users.getUsersSortedByJoinDate); + setupPageRoute(app, '/users/search', middleware, middlewares, controllers.users.getUsersForSearch); + } - app.get('/users/sort-reputation', middleware.buildHeader, middleware.checkGlobalPrivacySettings, controllers.users.getUsersSortedByReputation); - app.get('/api/users/sort-reputation', middleware.checkGlobalPrivacySettings, controllers.users.getUsersSortedByReputation); - - app.get('/users/latest', middleware.buildHeader, middleware.checkGlobalPrivacySettings, controllers.users.getUsersSortedByJoinDate); - app.get('/api/users/latest', middleware.checkGlobalPrivacySettings, controllers.users.getUsersSortedByJoinDate); +function groupRoutes(app, middleware, controllers) { + var middlewares = [middleware.checkGlobalPrivacySettings]; - app.get('/users/search', middleware.buildHeader, middleware.checkGlobalPrivacySettings, controllers.users.getUsersForSearch); - app.get('/api/users/search', middleware.checkGlobalPrivacySettings, controllers.users.getUsersForSearch); + setupPageRoute(app, '/groups', middleware, middlewares, controllers.groups.list); + setupPageRoute(app, '/groups/:name', middleware, middlewares, controllers.groups.details); } -function groupRoutes(app, middleware, controllers) { - app.get('/groups', middleware.buildHeader, controllers.groups.list); - app.get('/api/groups', controllers.groups.list); +function setupPageRoute(router, name, middleware, middlewares, controller) { + middlewares = middlewares.concat([middleware.incrementPageViews, middleware.updateLastOnlineTime]); - app.get('/groups/:name', middleware.buildHeader, controllers.groups.details); - app.get('/api/groups/:name', controllers.groups.details); + router.get(name, middleware.buildHeader, middlewares, controller); + router.get('/api' + name, middlewares, controller); } - module.exports = function(app, middleware) { var router = express.Router(), - pageRouter = express.Router(), pluginRouter = express.Router(), authRouter = express.Router(), relativePath = nconf.get('relative_path'); @@ -177,34 +127,32 @@ module.exports = function(app, middleware) { feedRoutes(router, middleware, controllers); pluginRoutes(router, middleware, controllers); - app.use(relativePath, express.static(path.join(__dirname, '../../', 'public'), { - maxAge: app.enabled('cache') ? 5184000000 : 0 - })); - /** * Every view has an associated API route. * */ - pageRouter.use(middleware.incrementPageViews); - pageRouter.use(middleware.updateLastOnlineTime); - - mainRoutes(pageRouter, middleware, controllers); - staticRoutes(pageRouter, middleware, controllers); - topicRoutes(pageRouter, middleware, controllers); - tagRoutes(pageRouter, middleware, controllers); - categoryRoutes(pageRouter, middleware, controllers); - accountRoutes(pageRouter, middleware, controllers); - userRoutes(pageRouter, middleware, controllers); - groupRoutes(pageRouter, middleware, controllers); + + mainRoutes(router, middleware, controllers); + staticRoutes(router, middleware, controllers); + topicRoutes(router, middleware, controllers); + tagRoutes(router, middleware, controllers); + categoryRoutes(router, middleware, controllers); + accountRoutes(router, middleware, controllers); + userRoutes(router, middleware, controllers); + groupRoutes(router, middleware, controllers); app.use(relativePath, router); app.use(relativePath, pluginRouter); - app.use(relativePath, pageRouter); app.use(relativePath, authRouter); if (process.env.NODE_ENV === 'development') { require('./debug')(app, middleware, controllers); } + + app.use(relativePath, express.static(path.join(__dirname, '../../', 'public'), { + maxAge: app.enabled('cache') ? 5184000000 : 0 + })); + app.use(catch404); app.use(handleErrors);