From 52481d1d13073cc0afcbbea7cf51921823c95b22 Mon Sep 17 00:00:00 2001 From: lilia Date: Thu, 15 Jun 2017 15:00:04 -0700 Subject: [PATCH] Support for sending and receiving verification sync messages This adds a new method to message sender for sending verification sync messages and a new event to message receiver representing incoming verification sync messages. Currently the event handler just logs the message. // FREEBIE --- js/background.js | 25 +++++++++++++++++++++++- js/libtextsecure.js | 32 +++++++++++++++++++++++++++++++ libtextsecure/message_receiver.js | 13 +++++++++++++ libtextsecure/sendmessage.js | 19 ++++++++++++++++++ 4 files changed, 88 insertions(+), 1 deletion(-) diff --git a/js/background.js b/js/background.js index 1c32e77be..979fd8252 100644 --- a/js/background.js +++ b/js/background.js @@ -119,7 +119,7 @@ messageReceiver.addEventListener('group', onGroupReceived); messageReceiver.addEventListener('sent', onSentMessage); messageReceiver.addEventListener('read', onReadReceipt); - // messageReceiver.addEventListener('verify', onVerify); + messageReceiver.addEventListener('verification', onVerify); messageReceiver.addEventListener('error', onError); @@ -326,6 +326,29 @@ }); } + function onVerification(ev) { + var state; + switch(ev.state) { + case textsecure.protobuf.Verification.State.DEFAULT: + state = 'DEFAULT'; + break; + case textsecure.protobuf.Verification.State.VERIFIED: + state = 'VERIFIED'; + break; + case textsecure.protobuf.Verification.State.NO_LONGER_VERIFIED: + state = 'UNVERIFIED'; + break; + } + console.log('got verification sync for', ev.destination, state); + /* TODO + processVerifiedMessage( + textsecure.storage.protocol.VerifiedStatus[state], + ev.destination, + ev.identityKey + ); + */ + } + window.owsDesktopApp = { getAppView: function(destWindow) { diff --git a/js/libtextsecure.js b/js/libtextsecure.js index f456c6a77..7767ea6df 100644 --- a/js/libtextsecure.js +++ b/js/libtextsecure.js @@ -38481,10 +38481,23 @@ MessageReceiver.prototype.extend({ console.log('read messages', 'from', envelope.source + '.' + envelope.sourceDevice); this.handleRead(syncMessage.read, envelope.timestamp); + } else if (syncMessage.verification) { + this.handleVerification(syncMessage.verification); } else { throw new Error('Got empty SyncMessage'); } }, + handleVerification: function(verification) { + for (var i = 0; i < verification.length; ++i) { + var ev = new Event('verification'); + ev.verification = { + state: verification[i].state, + destination: verification[i].destination, + identityKey: verification[i].identityKey.toArrayBuffer() + }; + this.dispatchEvent(ev); + } + }, handleRead: function(read, timestamp) { for (var i = 0; i < read.length; ++i) { var ev = new Event('read'); @@ -39250,6 +39263,24 @@ MessageSender.prototype = { return this.sendIndividualProto(myNumber, contentMessage, Date.now()); } }, + syncVerification: function(state, destination, identityKey) { + var myNumber = textsecure.storage.user.getNumber(); + var myDevice = textsecure.storage.user.getDeviceId(); + if (myDevice != 1) { + var verification = new textsecure.protobuf.SyncMessage.Verification(); + verification.state = state; + verification.destination = destination; + verification.identityKey = identityKey; + + var syncMessage = new textsecure.protobuf.SyncMessage(); + syncMessage.verification = verification; + + var contentMessage = new textsecure.protobuf.Content(); + contentMessage.syncMessage = syncMessage; + + return this.sendIndividualProto(myNumber, contentMessage, Date.now()); + } + }, sendGroupProto: function(numbers, proto, timestamp) { timestamp = timestamp || Date.now(); @@ -39495,6 +39526,7 @@ textsecure.MessageSender = function(url, ports, username, password) { this.sendSyncMessage = sender.sendSyncMessage .bind(sender); this.getProfile = sender.getProfile .bind(sender); this.syncReadMessages = sender.syncReadMessages .bind(sender); + this.syncVerification = sender.syncReadMessages .bind(sender); }; textsecure.MessageSender.prototype = { diff --git a/libtextsecure/message_receiver.js b/libtextsecure/message_receiver.js index 7134f1e34..e96f06e4b 100644 --- a/libtextsecure/message_receiver.js +++ b/libtextsecure/message_receiver.js @@ -272,10 +272,23 @@ MessageReceiver.prototype.extend({ console.log('read messages', 'from', envelope.source + '.' + envelope.sourceDevice); this.handleRead(syncMessage.read, envelope.timestamp); + } else if (syncMessage.verification) { + this.handleVerification(syncMessage.verification); } else { throw new Error('Got empty SyncMessage'); } }, + handleVerification: function(verification) { + for (var i = 0; i < verification.length; ++i) { + var ev = new Event('verification'); + ev.verification = { + state: verification[i].state, + destination: verification[i].destination, + identityKey: verification[i].identityKey.toArrayBuffer() + }; + this.dispatchEvent(ev); + } + }, handleRead: function(read, timestamp) { for (var i = 0; i < read.length; ++i) { var ev = new Event('read'); diff --git a/libtextsecure/sendmessage.js b/libtextsecure/sendmessage.js index 77a657335..5b32ffc7c 100644 --- a/libtextsecure/sendmessage.js +++ b/libtextsecure/sendmessage.js @@ -305,6 +305,24 @@ MessageSender.prototype = { return this.sendIndividualProto(myNumber, contentMessage, Date.now()); } }, + syncVerification: function(state, destination, identityKey) { + var myNumber = textsecure.storage.user.getNumber(); + var myDevice = textsecure.storage.user.getDeviceId(); + if (myDevice != 1) { + var verification = new textsecure.protobuf.SyncMessage.Verification(); + verification.state = state; + verification.destination = destination; + verification.identityKey = identityKey; + + var syncMessage = new textsecure.protobuf.SyncMessage(); + syncMessage.verification = verification; + + var contentMessage = new textsecure.protobuf.Content(); + contentMessage.syncMessage = syncMessage; + + return this.sendIndividualProto(myNumber, contentMessage, Date.now()); + } + }, sendGroupProto: function(numbers, proto, timestamp) { timestamp = timestamp || Date.now(); @@ -550,6 +568,7 @@ textsecure.MessageSender = function(url, ports, username, password) { this.sendSyncMessage = sender.sendSyncMessage .bind(sender); this.getProfile = sender.getProfile .bind(sender); this.syncReadMessages = sender.syncReadMessages .bind(sender); + this.syncVerification = sender.syncReadMessages .bind(sender); }; textsecure.MessageSender.prototype = {