From 8ccf62ed4e32a7cfa0dc371aeb716d3bd9cc5f46 Mon Sep 17 00:00:00 2001 From: Beaudan Brown Date: Wed, 30 Oct 2019 15:00:26 +1100 Subject: [PATCH 1/3] Trigger endSession code if we receive a friend request from a friend --- js/background.js | 4 ++++ js/models/messages.js | 4 +++- libtextsecure/message_receiver.js | 6 +----- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/js/background.js b/js/background.js index 0c691883d..5629d52b5 100644 --- a/js/background.js +++ b/js/background.js @@ -927,6 +927,10 @@ messageReceiver.addEventListener('configuration', onConfiguration); messageReceiver.addEventListener('typing', onTyping); + Whisper.events.on('endSession', (source) => { + messageReceiver.handleEndSession(source); + }); + window.Signal.AttachmentDownloads.start({ getMessageReceiver: () => messageReceiver, logger: window.log, diff --git a/js/models/messages.js b/js/models/messages.js index 37c900525..44caa6878 100644 --- a/js/models/messages.js +++ b/js/models/messages.js @@ -1983,11 +1983,13 @@ conversation.hasSentFriendRequest() || conversation.isFriend() ) { + if (conversation.isFriend()) { + window.Whisper.events.trigger('endSession', source); + } // Automatically accept incoming friend requests if we have send one already autoAccept = true; message.set({ friendStatus: 'accepted' }); await conversation.onFriendRequestAccepted(); - window.libloki.api.sendBackgroundMessage(message.get('source')); } else { await conversation.onFriendRequestReceived(); } diff --git a/libtextsecure/message_receiver.js b/libtextsecure/message_receiver.js index ea2539c8c..939810bbf 100644 --- a/libtextsecure/message_receiver.js +++ b/libtextsecure/message_receiver.js @@ -1480,11 +1480,6 @@ MessageReceiver.prototype.extend({ window.log.error('Error getting conversation: ', number); } - // Bail early if a session reset is already ongoing - if (conversation.isSessionResetOngoing()) { - return; - } - await Promise.all( deviceIds.map(async deviceId => { const address = new libsignal.SignalProtocolAddress(number, deviceId); @@ -1668,6 +1663,7 @@ textsecure.MessageReceiver = function MessageReceiverWrapper( messageReceiver ); this.getStatus = messageReceiver.getStatus.bind(messageReceiver); + this.handleEndSession = messageReceiver.handleEndSession.bind(messageReceiver); this.close = messageReceiver.close.bind(messageReceiver); this.savePreKeyBundleMessage = messageReceiver.savePreKeyBundleMessage.bind( messageReceiver From 653fd06451e1cbe2ab675526c950b7dc1ea9dceb Mon Sep 17 00:00:00 2001 From: Beaudan Brown Date: Wed, 30 Oct 2019 15:19:20 +1100 Subject: [PATCH 2/3] Don't await for some background messages --- js/models/conversations.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/js/models/conversations.js b/js/models/conversations.js index 8e471760b..470d19dc4 100644 --- a/js/models/conversations.js +++ b/js/models/conversations.js @@ -782,7 +782,7 @@ response: 'accepted', status: ['pending', 'expired'], }); - window.libloki.api.sendOnlineBroadcastMessage(this.id); + window.libloki.api.sendBackgroundMessage(this.id); return true; } return false; @@ -1822,7 +1822,7 @@ await this.setSessionResetStatus(SessionResetEnum.request_received); // send empty message, this will trigger the new session to propagate // to the reset initiator. - await window.libloki.api.sendBackgroundMessage(this.id); + window.libloki.api.sendBackgroundMessage(this.id); }, isSessionResetReceived() { @@ -1858,7 +1858,7 @@ async onNewSessionAdopted() { if (this.get('sessionResetStatus') === SessionResetEnum.initiated) { // send empty message to confirm that we have adopted the new session - await window.libloki.api.sendBackgroundMessage(this.id); + window.libloki.api.sendBackgroundMessage(this.id); } await this.createAndStoreEndSessionMessage({ type: 'incoming', From e9dc3b531e72c1f4274b45245b53bebf6197526f Mon Sep 17 00:00:00 2001 From: Beaudan Brown Date: Wed, 30 Oct 2019 16:18:56 +1100 Subject: [PATCH 3/3] Simplify auto accept check --- js/background.js | 2 +- js/models/messages.js | 19 ++++++++++--------- libtextsecure/message_receiver.js | 4 +++- 3 files changed, 14 insertions(+), 11 deletions(-) diff --git a/js/background.js b/js/background.js index 5629d52b5..4315d857c 100644 --- a/js/background.js +++ b/js/background.js @@ -927,7 +927,7 @@ messageReceiver.addEventListener('configuration', onConfiguration); messageReceiver.addEventListener('typing', onTyping); - Whisper.events.on('endSession', (source) => { + Whisper.events.on('endSession', source => { messageReceiver.handleEndSession(source); }); diff --git a/js/models/messages.js b/js/models/messages.js index 44caa6878..9898eeffa 100644 --- a/js/models/messages.js +++ b/js/models/messages.js @@ -1979,16 +1979,17 @@ - We sent the user a friend request and that user sent us a friend request. - We are friends with the user, and that user just sent us a friend request. */ - if ( - conversation.hasSentFriendRequest() || - conversation.isFriend() - ) { - if (conversation.isFriend()) { - window.Whisper.events.trigger('endSession', source); - } - // Automatically accept incoming friend requests if we have send one already - autoAccept = true; + const isFriend = conversation.isFriend(); + const hasSentFriendRequest = conversation.hasSentFriendRequest(); + autoAccept = isFriend || hasSentFriendRequest; + + if (autoAccept) { message.set({ friendStatus: 'accepted' }); + } + + if (isFriend) { + window.Whisper.events.trigger('endSession', source); + } else if (hasSentFriendRequest) { await conversation.onFriendRequestAccepted(); } else { await conversation.onFriendRequestReceived(); diff --git a/libtextsecure/message_receiver.js b/libtextsecure/message_receiver.js index 939810bbf..0b78b0c46 100644 --- a/libtextsecure/message_receiver.js +++ b/libtextsecure/message_receiver.js @@ -1663,7 +1663,9 @@ textsecure.MessageReceiver = function MessageReceiverWrapper( messageReceiver ); this.getStatus = messageReceiver.getStatus.bind(messageReceiver); - this.handleEndSession = messageReceiver.handleEndSession.bind(messageReceiver); + this.handleEndSession = messageReceiver.handleEndSession.bind( + messageReceiver + ); this.close = messageReceiver.close.bind(messageReceiver); this.savePreKeyBundleMessage = messageReceiver.savePreKeyBundleMessage.bind( messageReceiver