You've already forked matrix-js-sdk
mirror of
https://github.com/matrix-org/matrix-js-sdk.git
synced 2025-08-12 08:42:46 +03:00
try to re-fetch devices before giving up on trying to heal a broken olm (#1224)
This commit is contained in:
@@ -598,6 +598,7 @@ describe("MegolmDecryption", function() {
|
|||||||
aliceClient.initCrypto(),
|
aliceClient.initCrypto(),
|
||||||
bobClient.initCrypto(),
|
bobClient.initCrypto(),
|
||||||
]);
|
]);
|
||||||
|
aliceClient._crypto.downloadKeys = async () => {};
|
||||||
const bobDevice = bobClient._crypto._olmDevice;
|
const bobDevice = bobClient._crypto._olmDevice;
|
||||||
|
|
||||||
const roomId = "!someroom";
|
const roomId = "!someroom";
|
||||||
@@ -649,6 +650,7 @@ describe("MegolmDecryption", function() {
|
|||||||
bobClient.initCrypto(),
|
bobClient.initCrypto(),
|
||||||
]);
|
]);
|
||||||
const bobDevice = bobClient._crypto._olmDevice;
|
const bobDevice = bobClient._crypto._olmDevice;
|
||||||
|
aliceClient._crypto.downloadKeys = async () => {};
|
||||||
|
|
||||||
const roomId = "!someroom";
|
const roomId = "!someroom";
|
||||||
|
|
||||||
|
@@ -1260,7 +1260,14 @@ MegolmDecryption.prototype.onRoomKeyWithheldEvent = async function(event) {
|
|||||||
this.retryDecryptionFromSender(senderKey);
|
this.retryDecryptionFromSender(senderKey);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const device = this._crypto._deviceList.getDeviceByIdentityKey(
|
let device = this._crypto._deviceList.getDeviceByIdentityKey(
|
||||||
|
content.algorithm, senderKey,
|
||||||
|
);
|
||||||
|
if (!device) {
|
||||||
|
// if we don't know about the device, fetch the user's devices again
|
||||||
|
// and retry before giving up
|
||||||
|
await this._crypto.downloadKeys([sender], false);
|
||||||
|
device = this._crypto._deviceList.getDeviceByIdentityKey(
|
||||||
content.algorithm, senderKey,
|
content.algorithm, senderKey,
|
||||||
);
|
);
|
||||||
if (!device) {
|
if (!device) {
|
||||||
@@ -1272,6 +1279,7 @@ MegolmDecryption.prototype.onRoomKeyWithheldEvent = async function(event) {
|
|||||||
this.retryDecryptionFromSender(senderKey);
|
this.retryDecryptionFromSender(senderKey);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
await olmlib.ensureOlmSessionsForDevices(
|
await olmlib.ensureOlmSessionsForDevices(
|
||||||
this._olmDevice, this._baseApis, {[sender]: [device]}, false,
|
this._olmDevice, this._baseApis, {[sender]: [device]}, false,
|
||||||
);
|
);
|
||||||
|
@@ -2723,7 +2723,12 @@ Crypto.prototype._onToDeviceBadEncrypted = async function(event) {
|
|||||||
// on a current session.
|
// on a current session.
|
||||||
// Note that an undecryptable message from another device could easily be spoofed -
|
// Note that an undecryptable message from another device could easily be spoofed -
|
||||||
// is there anything we can do to mitigate this?
|
// is there anything we can do to mitigate this?
|
||||||
const device = this._deviceList.getDeviceByIdentityKey(algorithm, deviceKey);
|
let device = this._deviceList.getDeviceByIdentityKey(algorithm, deviceKey);
|
||||||
|
if (!device) {
|
||||||
|
// if we don't know about the device, fetch the user's devices again
|
||||||
|
// and retry before giving up
|
||||||
|
await this.downloadKeys([sender], false);
|
||||||
|
device = this._deviceList.getDeviceByIdentityKey(algorithm, deviceKey);
|
||||||
if (!device) {
|
if (!device) {
|
||||||
logger.info(
|
logger.info(
|
||||||
"Couldn't find device for identity key " + deviceKey +
|
"Couldn't find device for identity key " + deviceKey +
|
||||||
@@ -2733,6 +2738,7 @@ Crypto.prototype._onToDeviceBadEncrypted = async function(event) {
|
|||||||
retryDecryption();
|
retryDecryption();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
const devicesByUser = {};
|
const devicesByUser = {};
|
||||||
devicesByUser[sender] = [device];
|
devicesByUser[sender] = [device];
|
||||||
await olmlib.ensureOlmSessionsForDevices(
|
await olmlib.ensureOlmSessionsForDevices(
|
||||||
|
Reference in New Issue
Block a user