diff --git a/src/controllers/categories.js b/src/controllers/categories.js index 4dd9d0e8a5..9d0a1aae49 100644 --- a/src/controllers/categories.js +++ b/src/controllers/categories.js @@ -65,16 +65,6 @@ categoriesController.get = function(req, res, next) { page = req.query.page || 1, uid = req.user ? req.user.uid : 0; - if (!req.params.slug && !res.locals.isAPI) { - categories.getCategoryField(cid, 'slug', function(err, slug) { - if (err) { - return next(err); - } - res.redirect('/category/' + slug); - }); - return; - } - async.waterfall([ function(next) { categoryTools.privileges(cid, uid, function(err, categoryPrivileges) { diff --git a/src/controllers/topics.js b/src/controllers/topics.js index 50d3fefa37..15452aaf80 100644 --- a/src/controllers/topics.js +++ b/src/controllers/topics.js @@ -18,16 +18,6 @@ topicsController.get = function(req, res, next) { uid = req.user ? req.user.uid : 0, privileges; - if (!req.params.slug && !res.locals.isAPI) { - topics.getTopicField(tid, 'slug', function(err, slug) { - if (err) { - return next(err); - } - res.redirect('/topic/' + slug); - }); - return; - } - async.waterfall([ function(next) { threadTools.privileges(tid, ((req.user) ? req.user.uid || 0 : 0), function(err, userPrivileges) { diff --git a/src/middleware/middleware.js b/src/middleware/middleware.js index c33e4def7d..5807c8361c 100644 --- a/src/middleware/middleware.js +++ b/src/middleware/middleware.js @@ -14,6 +14,8 @@ var app, translator = require('./../../public/src/translator'), user = require('./../user'), db = require('./../database'), + categories = require('./../categories'), + topics = require('./../topics'), controllers = { api: require('./../controllers/api') @@ -49,9 +51,31 @@ middleware.redirectToAccountIfLoggedIn = function(req, res, next) { } else { next(); } - } +middleware.addSlug = function(req, res, next) { + function redirect(method, id, name) { + method(id, 'slug', function(err, slug) { + if (err || !slug) { + return next(err); + } + res.redirect(name + slug); + }); + } + + if (!req.params.slug) { + if (req.params.category_id) { + redirect(categories.getCategoryField, req.params.category_id, '/category/'); + } else if (req.params.topic_id) { + redirect(topics.getTopicField, req.params.topic_id, '/topic/'); + } else { + return next(); + } + return; + } + next(); +}; + middleware.prepareAPI = function(req, res, next) { res.locals.isAPI = true; next(); diff --git a/src/routes/index.js b/src/routes/index.js index 8dc5be4200..377a6d343a 100644 --- a/src/routes/index.js +++ b/src/routes/index.js @@ -48,7 +48,7 @@ function staticRoutes(app, middleware, controllers) { } function topicRoutes(app, middleware, controllers) { - app.get('/topic/:topic_id/:slug?', middleware.buildHeader, controllers.topics.get); + app.get('/topic/:topic_id/:slug?', middleware.buildHeader, middleware.addSlug, controllers.topics.get); app.get('/api/topic/:topic_id/:slug?', controllers.topics.get); } @@ -65,7 +65,7 @@ function categoryRoutes(app, middleware, controllers) { app.get('/unread/total', middleware.buildHeader, middleware.authenticate, controllers.categories.unreadTotal); app.get('/api/unread/total', middleware.authenticate, controllers.categories.unreadTotal); - app.get('/category/:category_id/:slug?', middleware.buildHeader, controllers.categories.get); + app.get('/category/:category_id/:slug?', middleware.buildHeader, middleware.addSlug, controllers.categories.get); app.get('/api/category/:category_id/:slug?', controllers.categories.get); }