From 14cc11d5de34d949613738c1473152b481b4f8d9 Mon Sep 17 00:00:00 2001 From: Scott Nonnenberg Date: Fri, 10 Jan 2020 08:10:43 -0800 Subject: [PATCH] OutgoingMessage: On OutgoingKeyError, archive all sessions * OutgoingMessage: On OutgoingKeyError, archive all sessions * Improve logging --- libtextsecure/outgoing_message.js | 30 +++++++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/libtextsecure/outgoing_message.js b/libtextsecure/outgoing_message.js index 882a9fa4d3..fe35626b2c 100644 --- a/libtextsecure/outgoing_message.js +++ b/libtextsecure/outgoing_message.js @@ -413,11 +413,35 @@ OutgoingMessage.prototype = { number, deviceIds ); - throw error; - } else { - this.registerError(number, 'Failed to create or send message', error); + + const address = new libsignal.SignalProtocolAddress(number, 1); + const identifier = address.toString(); + window.log.info('closing all sessions for', number); + + const sessionCipher = new libsignal.SessionCipher( + textsecure.storage.protocol, + address + ); + window.log.info('closing session for', address.toString()); + return Promise.all([ + // Primary device + sessionCipher.closeOpenSessionForDevice(), + // The rest of their devices + textsecure.storage.protocol.archiveSiblingSessions(identifier), + ]).then( + () => { + throw error; + }, + innerError => { + window.log.error( + `doSendMessage: Error closing sessions: ${innerError.stack}` + ); + throw error; + } + ); } + this.registerError(number, 'Failed to create or send message', error); return null; }); },