diff --git a/src/controllers/api.js b/src/controllers/api.js index 7c106431c7..9065bf4719 100644 --- a/src/controllers/api.js +++ b/src/controllers/api.js @@ -1,12 +1,18 @@ "use strict"; -var meta = require('./../meta'), - user = require('./../user'), - plugins = require('./../plugins'), - widgets = require('../widgets'), - +var async = require('async'), validator = require('validator'), - nconf = require('nconf'); + nconf = require('nconf'), + + meta = require('../meta'), + user = require('../user'), + posts = require('../posts'), + topics = require('../topics'), + categories = require('../categories'), + privileges = require('../privileges'), + plugins = require('../plugins'), + helpers = require('./helpers'), + widgets = require('../widgets'); var apiController = {}; @@ -130,4 +136,41 @@ apiController.renderWidgets = function(req, res, next) { }); }; +apiController.getObject = function(req, res, next) { + var methods = { + post: { + canRead: privileges.posts.can, + data: posts.getPostData + }, + topic: { + canRead: privileges.topics.can, + data: topics.getTopicData + }, + category: { + canRead: privileges.categories.can, + data: categories.getCategoryData + } + }; + + if (!methods[req.params.type]) { + return next(); + } + + async.parallel({ + canRead: async.apply(methods[req.params.type].canRead, 'read', req.params.id, req.uid), + data: async.apply(methods[req.params.type].data, req.params.id) + }, function(err, results) { + if (err || !results.data) { + return next(err); + } + + if (!results.canRead) { + return helpers.notAllowed(req, res); + } + + res.json(results.data); + }); +}; + + module.exports = apiController; diff --git a/src/controllers/categories.js b/src/controllers/categories.js index 41c6feecf0..89a10d16a2 100644 --- a/src/controllers/categories.js +++ b/src/controllers/categories.js @@ -266,21 +266,5 @@ categoriesController.get = function(req, res, callback) { }); }; -categoriesController.getCategory = function(req, res, next) { - async.parallel({ - canRead: async.apply(privileges.categories.can, 'read', req.params.cid, req.uid), - categoryData: async.apply(categories.getCategoryData, req.params.cid) - }, function(err, results) { - if (err || !results.categoryData) { - return next(err); - } - - if (!results.canRead) { - return helpers.notAllowed(req, res); - } - - res.json(results.categoryData); - }); -}; module.exports = categoriesController; diff --git a/src/controllers/posts.js b/src/controllers/posts.js deleted file mode 100644 index 33e314a191..0000000000 --- a/src/controllers/posts.js +++ /dev/null @@ -1,33 +0,0 @@ -"use strict"; - -var async = require('async'), - - posts = require('../posts'), - privileges = require('../privileges'), - helpers = require('./helpers'), - postsController = {}; - -postsController.getPost = function(req, res, next) { - async.parallel({ - canRead: function(next) { - privileges.posts.can('read', req.params.pid, req.uid, next); - }, - postData: function(next) { - posts.getPostData(req.params.pid, next); - } - }, function(err, results) { - if (err || !results.postData) { - return next(err); - } - - if (!results.canRead) { - return helpers.notAllowed(req, res); - } - - res.json(results.postData); - }); -}; - - - -module.exports = postsController; diff --git a/src/controllers/topics.js b/src/controllers/topics.js index bcd3dfb5fc..4688ce6723 100644 --- a/src/controllers/topics.js +++ b/src/controllers/topics.js @@ -313,21 +313,5 @@ topicsController.teaser = function(req, res, next) { }); }; -topicsController.getTopic = function(req, res, next) { - async.parallel({ - canRead: async.apply(privileges.topics.can, 'read', req.params.tid, req.uid), - topicData: async.apply(topics.getTopicData, req.params.tid) - }, function(err, results) { - if (err || !results.topicData) { - return next(err); - } - - if (!results.canRead) { - return helpers.notAllowed(req, res); - } - - res.json(results.topicData); - }); -}; module.exports = topicsController; diff --git a/src/routes/api.js b/src/routes/api.js index 338996f035..7528c7b917 100644 --- a/src/routes/api.js +++ b/src/routes/api.js @@ -15,9 +15,9 @@ module.exports = function(app, middleware, controllers) { router.get('/widgets/render', controllers.api.renderWidgets); router.get('/user/uid/:uid', middleware.checkGlobalPrivacySettings, controllers.accounts.getUserByUID); - router.get('/post/pid/:pid', controllers.posts.getPost); - router.get('/topic/tid/:tid', controllers.topics.getTopic); - router.get('/category/cid/:cid', controllers.categories.getCategory); + router.get('/:type/pid/:id', controllers.api.getObject); + router.get('/:type/tid/:id', controllers.api.getObject); + router.get('/:type/cid/:id', controllers.api.getObject); router.get('/categories/:cid/moderators', getModerators); router.get('/recent/posts/:term?', getRecentPosts);