send session request if we get a message we cannot decode

This handle the case where we delete a contact from A, lets call him B
All message after that delete from B to A will be not decoded correctly.

The issue is that the record is existing, but there is no session in it.
The fix is that if we get a message and a record is found, but has not
session in it, we trigger a session request with that user
This commit is contained in:
Audric Ackermann 2020-11-23 13:24:57 +11:00
parent a1d4dea845
commit 380d296bb2
No known key found for this signature in database
GPG Key ID: 999F434D76324AD4
2 changed files with 11 additions and 1 deletions

View File

@ -36182,6 +36182,9 @@ SessionCipher.prototype = {
if (!record) {
throw new Error("No record for device " + address);
}
if (!record.getSessions() || record.getSessions().length === 0) {
throw new Error("No sessions for device " + address);
}
var errors = [];
return this.decryptWithSessionList(buffer, record.getSessions(), errors).then(function(result) {
return this.getRecord(address).then(function(record) {

View File

@ -166,7 +166,6 @@ async function decryptUnidentifiedSender(
const { sender: source } = error || {};
if (source) {
// tslint:disable-next-line: no-shadowed-variable
const blocked = await isBlocked(source.getName());
if (blocked) {
window.log.info(
@ -176,6 +175,14 @@ async function decryptUnidentifiedSender(
return null;
}
if (error.message.startsWith('No sessions for device ')) {
// Receives a message from a specific device but we did not have a session with him.
// We trigger a session request.
await SessionProtocol.sendSessionRequestIfNeeded(
PubKey.cast(source.getName())
);
}
// eslint-disable no-param-reassign
envelope.source = source.getName();
envelope.sourceDevice = source.getDeviceId();