mirror of
https://github.com/NodeBB/NodeBB.git
synced 2026-03-07 04:51:26 +01:00
Add API endpoints for topics, categories, and posts
ref: f3b6a5fbb9
discussion: https://community.nodebb.org/topic/6535/how-can-i-read-a-resource-only-by-their-id-cid-uid-tid-etc-rather-than-the-name-or-name-id/8
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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'),
|
||||
|
||||
@@ -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;
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user