Files
NodeBB/src/socket.io/flags.js

85 lines
2.1 KiB
JavaScript
Raw Normal View History

'use strict';
2019-09-13 23:34:52 -04:00
const user = require('../user');
const flags = require('../flags');
2019-09-13 23:34:52 -04:00
const SocketFlags = module.exports;
2019-09-13 23:34:52 -04:00
SocketFlags.create = async function (socket, data) {
if (!socket.uid) {
2019-09-13 23:34:52 -04:00
throw new Error('[[error:not-logged-in]]');
}
2016-12-06 16:11:56 -05:00
if (!data || !data.type || !data.id || !data.reason) {
2019-09-13 23:34:52 -04:00
throw new Error('[[error:invalid-data]]');
}
2019-09-13 23:34:52 -04:00
await flags.validate({
uid: socket.uid,
type: data.type,
id: data.id,
});
2019-09-13 23:34:52 -04:00
const flagObj = await flags.create(data.type, data.id, socket.uid, data.reason);
await flags.notify(flagObj, socket.uid);
2020-01-23 12:48:21 -05:00
return flagObj.flagId;
};
2019-09-13 23:34:52 -04:00
SocketFlags.update = async function (socket, data) {
if (!data || !(data.flagId && data.data)) {
2019-09-13 23:34:52 -04:00
throw new Error('[[error:invalid-data]]');
}
2019-09-13 23:34:52 -04:00
const allowed = await user.isPrivileged(socket.uid);
if (!allowed) {
throw new Error('[[no-privileges]]');
}
let payload = {};
// Translate form data into object
payload = data.data.reduce(function (memo, cur) {
memo[cur.name] = cur.value;
return memo;
}, payload);
2019-09-13 23:34:52 -04:00
await flags.update(data.flagId, socket.uid, payload);
return await flags.getHistory(data.flagId);
};
2019-09-13 23:34:52 -04:00
SocketFlags.appendNote = async function (socket, data) {
if (!data || !(data.flagId && data.note)) {
2019-09-13 23:34:52 -04:00
throw new Error('[[error:invalid-data]]');
}
2019-09-13 23:34:52 -04:00
const allowed = await user.isPrivileged(socket.uid);
if (!allowed) {
throw new Error('[[no-privileges]]');
}
await flags.appendNote(data.flagId, socket.uid, data.note, data.datetime);
2019-09-13 23:34:52 -04:00
const [notes, history] = await Promise.all([
flags.getNotes(data.flagId),
flags.getHistory(data.flagId),
]);
return { notes: notes, history: history };
};
2019-09-13 23:34:52 -04:00
SocketFlags.deleteNote = async function (socket, data) {
if (!data || !(data.flagId && data.datetime)) {
throw new Error('[[error:invalid-data]]');
}
const note = await flags.getNote(data.flagId, data.datetime);
if (note.uid !== socket.uid) {
throw new Error('[[error:no-privileges]]');
}
await flags.deleteNote(data.flagId, data.datetime);
const [notes, history] = await Promise.all([
flags.getNotes(data.flagId),
flags.getHistory(data.flagId),
]);
return { notes: notes, history: history };
};
2019-09-13 23:34:52 -04:00
require('../promisify')(SocketFlags);