mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-10-26 16:46:12 +01:00
refactor: async/await socket.io/posts
This commit is contained in:
@@ -1,46 +1,30 @@
|
||||
'use strict';
|
||||
|
||||
var async = require('async');
|
||||
var posts = require('../../posts');
|
||||
var privileges = require('../../privileges');
|
||||
const posts = require('../../posts');
|
||||
const privileges = require('../../privileges');
|
||||
|
||||
module.exports = function (SocketPosts) {
|
||||
SocketPosts.getDiffs = function (socket, data, callback) {
|
||||
async.waterfall([
|
||||
async.apply(privilegeCheck, data.pid, socket.uid),
|
||||
function (next) {
|
||||
posts.diffs.list(data.pid, next);
|
||||
},
|
||||
function (timestamps, next) {
|
||||
timestamps.unshift(Date.now());
|
||||
next(null, timestamps);
|
||||
},
|
||||
], callback);
|
||||
SocketPosts.getDiffs = async function (socket, data) {
|
||||
await privilegeCheck(data.pid, socket.uid);
|
||||
const timestamps = await posts.diffs.list(data.pid);
|
||||
timestamps.unshift(Date.now());
|
||||
return timestamps;
|
||||
};
|
||||
|
||||
SocketPosts.showPostAt = function (socket, data, callback) {
|
||||
privilegeCheck(data.pid, socket.uid, function (err) {
|
||||
if (err) {
|
||||
return callback(err);
|
||||
}
|
||||
|
||||
posts.diffs.load(data.pid, data.since, socket.uid, callback);
|
||||
});
|
||||
SocketPosts.showPostAt = async function (socket, data) {
|
||||
await privilegeCheck(data.pid, socket.uid);
|
||||
return await posts.diffs.load(data.pid, data.since, socket.uid);
|
||||
};
|
||||
|
||||
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);
|
||||
}
|
||||
async function privilegeCheck(pid, uid) {
|
||||
const [deleted, privilegesData] = await Promise.all([
|
||||
posts.getPostField(pid, 'deleted'),
|
||||
privileges.posts.get([pid], uid),
|
||||
]);
|
||||
|
||||
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);
|
||||
});
|
||||
const allowed = privilegesData[0]['posts:history'] && (deleted ? privilegesData[0]['posts:view_deleted'] : true);
|
||||
if (!allowed) {
|
||||
throw new Error('[[error:no-privileges]]');
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user