diff options
author | Marvin Borner | 2019-02-23 15:57:42 +0100 |
---|---|---|
committer | Marvin Borner | 2019-02-23 15:57:42 +0100 |
commit | c50bbafc8d41b86def89dc10df4fc830a9432314 (patch) | |
tree | 5d5d2afb1f6da42c2dd2a81eb655c3ab8bf70db7 | |
parent | f817a64349fdf822718d47f155b00e9017f90bbf (diff) |
Added storing of own messages
-rw-r--r-- | public/scripts/chat.js | 19 | ||||
-rw-r--r-- | public/scripts/encryption.js | 38 |
2 files changed, 43 insertions, 14 deletions
diff --git a/public/scripts/chat.js b/public/scripts/chat.js index ef3eaef..8176102 100644 --- a/public/scripts/chat.js +++ b/public/scripts/chat.js @@ -165,7 +165,9 @@ function chat() { connectedPeer.peer, await encryption.getPeerPublicKey(connectedPeer.peer), ) - .then(messages => messages.forEach(async messageData => receivedMessage(`${messageData.message} - ${messageData.time}`, true))); + .then(messages => messages.forEach(async (messageData) => { + await receivedMessage(messageData); + })); transferKey(await encryption.getPublicKey()); } else if (data.type !== 'state') { console.log('[LOG] Received new message!'); @@ -207,7 +209,9 @@ function chat() { connectedPeer.peer, await encryption.getPeerPublicKey(connectedPeer.peer), ) - .then(messages => messages.forEach(async messageData => receivedMessage(`${messageData.message} - ${messageData.time}`, true))); + .then(messages => messages.forEach(async (messageData) => { + await receivedMessage(messageData); + })); connectedPeer.on('close', () => { swal('Disconnected!', `The connection to "${connectedPeer.peer}" has been closed!`, 'error'); }); @@ -264,6 +268,7 @@ function chat() { if (self) { $('#messages') .append(`<span style="color: green">${message}</span><br>`); + await encryption.storeMessage(connectedPeer.peer, message, true); } else if (message.type === 'text') { await encryption.storeMessage(connectedPeer.peer, message.data); await encryption.decrypt( @@ -272,10 +277,20 @@ function chat() { ) .then(plaintext => $('#messages') .append(`<span>${plaintext}</span><br>`)); + } else if (message.type === 'decrypted') { + if (message.self) { + $('#messages') + .append(`<span style="color: green">${message.message} - ${message.time}</span><br>`); + } else { + $('#messages') + .append(`<span>${message.message} - ${message.time}</span><br>`); + } } else if (message.type === 'file') { processFile(message); } else if (message.type === 'key') { await encryption.storePeerPublicKey(connectedPeer.peer, message.data); + } else { + console.error('Received unsupported message!'); } } diff --git a/public/scripts/encryption.js b/public/scripts/encryption.js index 415a355..88dd604 100644 --- a/public/scripts/encryption.js +++ b/public/scripts/encryption.js @@ -31,7 +31,7 @@ const self = module.exports = { .stores({ own_keys: '&key_type, key_data', peer_keys: 'peer_id, key_data', - messages: '++id, peer_id, message, time', + messages: '++id, peer_id, message, time, self', contacts: 'peer_id, fingerprint', }); @@ -105,7 +105,7 @@ const self = module.exports = { * @returns {Promise<String>} */ encrypt: async (data, publicKey) => { - const privateKeyObj = await self.decryptPrivateKey(await self.getPrivateKey()); + const privateKeyObj = await self.decryptPrivateKey(); const options = { message: openpgp.message.fromText(data), @@ -170,9 +170,9 @@ const self = module.exports = { */ encryptMessage: (message) => { const cipher = crypto.createCipher('aes-256-ctr', self.fingerprint); - const plaintext = cipher.update(message, 'utf8', 'hex'); + const encrypted = cipher.update(message, 'utf8', 'hex'); console.log('[LOG] Encrypted message successfully!'); - return plaintext + cipher.final('hex'); + return encrypted; }, /** @@ -184,25 +184,27 @@ const self = module.exports = { const cipher = crypto.createCipher('aes-256-ctr', self.fingerprint); const plaintext = cipher.update(message, 'hex', 'utf8'); console.log('[LOG] Decrypted message successfully!'); - return plaintext + cipher.final('utf8'); + return plaintext; }, /** - * Stores a message // TODO: Store and get own messages too + * Stores a message * @param peerId * @param message + * @param isSelf */ - storeMessage: async (peerId, message) => { + storeMessage: async (peerId, message, isSelf = false) => { db.messages.put({ peer_id: peerId, message: self.encryptMessage(message), time: new Date(), + self: isSelf, }) .then(() => console.log(`[LOG] Stored message of ${peerId}`)); }, /** - * Gets the messages + * Gets the messages with a peer * @param peerId * @param publicKey * @returns {Promise<Array>} @@ -213,18 +215,30 @@ const self = module.exports = { const messages = await db.messages.where('peer_id') .equals(peerId) .sortBy('id'); + console.log(messages); + console.log(self.decryptMessage(messages[0].message)); const messageArray = []; for (let i = messages.length; i--;) { - await messageArray.push({ - message: await self.decrypt( - decryptMessage(messages[i].message), publicKey, await self.getPrivateKey(), - ), + let plainTextMessage; + if (messages[i].self) { + plainTextMessage = self.decryptMessage(messages[i].message); + } else { + plainTextMessage = await self.decrypt( + self.decryptMessage(messages[i].message), + publicKey, + ); + } + messageArray.push({ + type: 'decrypted', + self: messages[i].self, + message: plainTextMessage, time: moment(messages[i].time) .fromNow(), }); } return messageArray; } catch (err) { + console.error(err); console.log('[LOG] No messages found!'); return []; } |