|
|
|
@ -7,11 +7,7 @@ var privileges = require('../../privileges');
|
|
|
|
|
module.exports = function (SocketPosts) {
|
|
|
|
|
SocketPosts.getDiffs = function (socket, data, callback) {
|
|
|
|
|
async.waterfall([
|
|
|
|
|
function (next) {
|
|
|
|
|
privileges.posts.can('posts:history', data.pid, socket.uid, function (err, allowed) {
|
|
|
|
|
next(err || allowed ? null : new Error('[[error:no-privileges]]'));
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
async.apply(privilegeCheck, data.pid, socket.uid),
|
|
|
|
|
function (next) {
|
|
|
|
|
posts.diffs.list(data.pid, next);
|
|
|
|
|
},
|
|
|
|
@ -23,12 +19,29 @@ module.exports = function (SocketPosts) {
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
SocketPosts.showPostAt = function (socket, data, callback) {
|
|
|
|
|
privileges.posts.can('posts:history', data.pid, socket.uid, function (err, allowed) {
|
|
|
|
|
if (err || !allowed) {
|
|
|
|
|
return callback(err || new Error('[[error:no-privileges]]'));
|
|
|
|
|
privilegeCheck(data.pid, socket.uid, function (err) {
|
|
|
|
|
if (err) {
|
|
|
|
|
return callback(err);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
posts.diffs.load(data.pid, data.since, socket.uid, callback);
|
|
|
|
|
});
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
function privilegeCheck(pid, uid, callback) {
|
|
|
|
|
async.parallel({
|
|
|
|
|
deleted: async.apply(posts.getPostField, pid, 'deleted'),
|
|
|
|
|
privileges: async.apply(privileges.posts.get, [pid], uid),
|
|
|
|
|
}, function (err, payload) {
|
|
|
|
|
if (err) {
|
|
|
|
|
return callback(err);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
payload.deleted = parseInt(payload.deleted, 10);
|
|
|
|
|
payload.privileges = payload.privileges[0];
|
|
|
|
|
|
|
|
|
|
const allowed = payload.privileges['posts:history'] && (payload.deleted ? payload.privileges['posts:view_deleted'] : true);
|
|
|
|
|
callback(!allowed ? new Error('[[error:no-privileges]]') : null);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|