2023-05-05 19:33:05 -07:00
|
|
|
const db = require("../db");
|
2023-05-07 18:43:57 -07:00
|
|
|
const authwrap = require("./authwrap");
|
2024-03-18 23:07:48 -07:00
|
|
|
const check_permission = require("./helpers/check_permission");
|
2023-05-05 19:33:05 -07:00
|
|
|
|
2023-05-28 14:56:08 -07:00
|
|
|
const send_message = async (msg, respond, socket, io) => {
|
2024-03-18 23:07:48 -07:00
|
|
|
if (!msg.thread) {
|
|
|
|
return respond({
|
|
|
|
success: false,
|
|
|
|
message: "thread ID required",
|
|
|
|
});
|
|
|
|
}
|
|
|
|
if (!(await check_permission(msg.auth_user.id, msg.thread)).post) {
|
|
|
|
return respond({
|
|
|
|
success: false,
|
|
|
|
message: "you can't post to this thread",
|
|
|
|
});
|
|
|
|
}
|
|
|
|
// add message and send it to everyone
|
|
|
|
const id = await db.query(
|
|
|
|
"insert into post (user, thread, content, encrypted) values (?, ?, ?, ?) returning id",
|
|
|
|
[msg.auth_user.id, msg.thread, msg.message, msg.encrypted]
|
|
|
|
);
|
|
|
|
// get thread members
|
|
|
|
const members = (
|
|
|
|
await db.query(
|
|
|
|
"select name from user join member on member.user = user.id where member.thread = ?",
|
|
|
|
[msg.thread]
|
|
|
|
)
|
|
|
|
).rows.map((i) => i.name);
|
|
|
|
// get perms
|
|
|
|
const permissions = await db.query(
|
|
|
|
"select * from permission where thread = ? and type = 'everyone' and value = 'true' and permission = 'view'",
|
|
|
|
[msg.thread]
|
|
|
|
);
|
|
|
|
for (let username in io.cache) {
|
2024-04-15 14:27:21 -07:00
|
|
|
if (permissions.rows.length > 0 || members.includes(username)) {
|
2024-03-18 23:07:48 -07:00
|
|
|
const sockets = io.cache[username];
|
|
|
|
for (let s of sockets) {
|
|
|
|
io.to(s).emit("new_message", {
|
|
|
|
id: id.rows[0].id,
|
|
|
|
name: msg.auth_user.name,
|
|
|
|
message: msg.message,
|
|
|
|
thread: msg.thread,
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return respond({
|
|
|
|
success: true,
|
|
|
|
id: id.rows[0].id,
|
|
|
|
});
|
2023-05-05 19:33:05 -07:00
|
|
|
};
|
|
|
|
|
2023-05-07 18:43:57 -07:00
|
|
|
module.exports = authwrap(send_message);
|