aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorMarvin Borner2019-02-23 15:57:42 +0100
committerMarvin Borner2019-02-23 15:57:42 +0100
commitc50bbafc8d41b86def89dc10df4fc830a9432314 (patch)
tree5d5d2afb1f6da42c2dd2a81eb655c3ab8bf70db7
parentf817a64349fdf822718d47f155b00e9017f90bbf (diff)
Added storing of own messages
-rw-r--r--public/scripts/chat.js19
-rw-r--r--public/scripts/encryption.js38
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 [];
}