Files
NodeBB/src/socket.io/posts/diffs.js

49 lines
1.6 KiB
JavaScript
Raw Normal View History

2018-02-16 16:41:06 -05:00
'use strict';
2019-09-09 19:19:56 -04:00
const posts = require('../../posts');
const privileges = require('../../privileges');
const websockets = require('..');
2018-02-16 16:41:06 -05:00
module.exports = function (SocketPosts) {
2019-09-09 19:19:56 -04:00
SocketPosts.getDiffs = async function (socket, data) {
await privilegeCheck(data.pid, socket.uid);
const timestamps = await posts.diffs.list(data.pid);
const cid = await posts.getCidByPid(data.pid);
const canEdit = await privileges.categories.can('edit', cid, socket.uid);
2020-06-15 15:43:24 -04:00
const postTime = await posts.getPostField(data.pid, 'timestamp');
timestamps.push(postTime);
return {
timestamps: timestamps,
editable: canEdit,
};
2018-02-16 16:41:06 -05:00
};
2019-09-09 19:19:56 -04:00
SocketPosts.showPostAt = async function (socket, data) {
await privilegeCheck(data.pid, socket.uid);
return await posts.diffs.load(data.pid, data.since, socket.uid);
2018-02-16 16:41:06 -05:00
};
2018-06-11 16:45:19 -04:00
2019-09-09 19:19:56 -04:00
async function privilegeCheck(pid, uid) {
const [deleted, privilegesData] = await Promise.all([
posts.getPostField(pid, 'deleted'),
privileges.posts.get([pid], uid),
]);
2018-06-11 16:45:19 -04:00
2019-09-09 19:19:56 -04:00
const allowed = privilegesData[0]['posts:history'] && (deleted ? privilegesData[0]['posts:view_deleted'] : true);
if (!allowed) {
throw new Error('[[error:no-privileges]]');
}
2018-06-11 16:45:19 -04:00
}
SocketPosts.restoreDiff = async function (socket, data) {
const cid = await posts.getCidByPid(data.pid);
const canEdit = await privileges.categories.can('edit', cid, socket.uid);
if (!canEdit) {
throw new Error('[[error:no-privileges]]');
}
const edit = await posts.diffs.restore(data.pid, data.since, socket.uid, websockets.reqFromSocket(socket));
websockets.in('topic_' + edit.topic.tid).emit('event:post_edited', edit);
};
2018-02-16 16:41:06 -05:00
};