diff options
author | Minteck <contact@minteck.org> | 2022-08-10 10:38:44 +0200 |
---|---|---|
committer | Minteck <contact@minteck.org> | 2022-08-10 10:38:44 +0200 |
commit | c6dbf0450566c40efc4a26f4f0717452b6ef95cd (patch) | |
tree | b4be2d508223820d0a77d5a3e35e82684da3b6ec /server/hornchat.conversation.connect.js | |
download | hornchat-c6dbf0450566c40efc4a26f4f0717452b6ef95cd.tar.gz hornchat-c6dbf0450566c40efc4a26f4f0717452b6ef95cd.tar.bz2 hornchat-c6dbf0450566c40efc4a26f4f0717452b6ef95cd.zip |
Diffstat (limited to 'server/hornchat.conversation.connect.js')
-rw-r--r-- | server/hornchat.conversation.connect.js | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/server/hornchat.conversation.connect.js b/server/hornchat.conversation.connect.js new file mode 100644 index 0000000..f608ff1 --- /dev/null +++ b/server/hornchat.conversation.connect.js @@ -0,0 +1,55 @@ +const fs = require("fs"); + +module.exports = (socket) => { + let messagesJSON = JSON.parse(fs.readFileSync(dataPath + "/conversations/" + data[socket.id].conversation + "/messages.json").toString()); + + let validKeys = []; + let validDevices = userCredentials.filter((i) => { + return i.id === data[socket.id].peer; + })[0].devices.map((i) => { return i.id; }); + for (let keyId of Object.keys(keys[data[socket.id].peer])) { + if (validDevices.includes(keyId)) validKeys.push(keyId); + } + + let otherPeerSockets = Object.keys(data).filter((i) => { + let user = data[i]; + return !!(user && user.conversation === data[socket.id].conversation && user.peer === socket.authenticated.user); + }).map((i) => { + return data[i].socket; + }) + + for (let id of Object.keys(messagesJSON)) { + let message = messagesJSON[id]; + + if (message.data.recipients.includes(socket.authenticated.device)) { + message.data.status = 1; + message._callback = false; + message.data.recipients = message.data.recipients.filter((i) => { + return i !== socket.authenticated.device; + }) + socket.send(JSON.stringify(message)); + + let update = { + type: "status_update", + data: { + status: message.data.status, + recipients: validKeys, + message: message.data.uuid + } + } + + for (let s of otherPeerSockets) { + s.send(JSON.stringify(update)) + update.data.recipients = update.data.recipients.filter((i) => { + return i !== s.authenticated.device; + }) + } + + messagesJSON[require('uuid-v4')()] = update; + } + + messagesJSON[id] = message; + } + + fs.writeFileSync(dataPath + "/conversations/" + data[socket.id].conversation + "/messages.json", JSON.stringify(messagesJSON)); +}
\ No newline at end of file |