2016-12-01 11:42:06 -05:00
|
|
|
'use strict';
|
|
|
|
|
|
2019-09-13 23:34:52 -04:00
|
|
|
const user = require('../user');
|
|
|
|
|
const flags = require('../flags');
|
2016-12-01 11:42:06 -05:00
|
|
|
|
2019-09-13 23:34:52 -04:00
|
|
|
const SocketFlags = module.exports;
|
2016-12-01 11:42:06 -05:00
|
|
|
|
2019-09-13 23:34:52 -04:00
|
|
|
SocketFlags.create = async function (socket, data) {
|
2016-12-01 11:42:06 -05:00
|
|
|
if (!socket.uid) {
|
2019-09-13 23:34:52 -04:00
|
|
|
throw new Error('[[error:not-logged-in]]');
|
2016-12-01 11:42:06 -05:00
|
|
|
}
|
|
|
|
|
|
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]]');
|
2016-12-01 11:42:06 -05:00
|
|
|
}
|
2019-09-13 23:34:52 -04:00
|
|
|
await flags.validate({
|
|
|
|
|
uid: socket.uid,
|
|
|
|
|
type: data.type,
|
|
|
|
|
id: data.id,
|
|
|
|
|
});
|
2016-12-01 11:42:06 -05:00
|
|
|
|
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;
|
2016-12-01 11:42:06 -05:00
|
|
|
};
|
|
|
|
|
|
2019-09-13 23:34:52 -04:00
|
|
|
SocketFlags.update = async function (socket, data) {
|
2016-12-01 11:42:06 -05:00
|
|
|
if (!data || !(data.flagId && data.data)) {
|
2019-09-13 23:34:52 -04:00
|
|
|
throw new Error('[[error:invalid-data]]');
|
2016-12-01 11:42:06 -05:00
|
|
|
}
|
|
|
|
|
|
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);
|
2016-12-01 11:42:06 -05:00
|
|
|
|
2019-09-13 23:34:52 -04:00
|
|
|
await flags.update(data.flagId, socket.uid, payload);
|
|
|
|
|
return await flags.getHistory(data.flagId);
|
2016-12-01 11:42:06 -05:00
|
|
|
};
|
|
|
|
|
|
2019-09-13 23:34:52 -04:00
|
|
|
SocketFlags.appendNote = async function (socket, data) {
|
2016-12-01 11:42:06 -05:00
|
|
|
if (!data || !(data.flagId && data.note)) {
|
2019-09-13 23:34:52 -04:00
|
|
|
throw new Error('[[error:invalid-data]]');
|
2016-12-01 11:42:06 -05:00
|
|
|
}
|
|
|
|
|
|
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);
|
2016-12-01 11:42:06 -05:00
|
|
|
|
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 };
|
2016-12-01 11:42:06 -05:00
|
|
|
};
|
2019-09-13 23:34:52 -04:00
|
|
|
|
|
|
|
|
require('../promisify')(SocketFlags);
|