David Vuong
2015-09-23 16:35:36 +10:00
parent 6e7a817fa4
commit 5705012bcd
4 changed files with 49 additions and 43 deletions

View File

@@ -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 = {};
@@ -126,4 +132,37 @@ 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;

View File

@@ -15,7 +15,6 @@ var async = require('async'),
helpers = require('./helpers');
var Controllers = {
posts: require('./posts'),
topics: require('./topics'),
categories: require('./categories'),
unread: require('./unread'),

View File

@@ -1,35 +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) {
return next(err);
}
if (!results.postData) {
return helpers.notFound(req, res);
}
if (!results.canRead) {
return helpers.notAllowed(req, res);
}
res.json(results.postData);
});
};
module.exports = postsController;

View File

@@ -15,7 +15,10 @@ 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', controllers.posts.getPost);
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);
router.get('/unread/total', middleware.authenticate, controllers.unread.unreadTotal);