You've already forked matrix-js-sdk
mirror of
https://github.com/matrix-org/matrix-js-sdk.git
synced 2025-12-01 04:43:29 +03:00
Prune to_device messages to avoid sending empty messages
Fixes https://github.com/vector-im/riot-web/issues/13322
This commit is contained in:
@@ -521,6 +521,33 @@ MegolmEncryption.prototype._encryptAndSendKeysToDevices = function(
|
|||||||
}
|
}
|
||||||
|
|
||||||
return Promise.all(promises).then(() => {
|
return Promise.all(promises).then(() => {
|
||||||
|
// prune out any devices that encryptMessageForDevice could not encrypt for,
|
||||||
|
// in which case it will have just not added anything to the ciphertext object.
|
||||||
|
// There's no point sending messages to devices if we couldn't encrypt to them,
|
||||||
|
// since that's effectively a blank message.
|
||||||
|
for (const userId of Object.keys(contentMap)) {
|
||||||
|
for (const deviceId of Object.keys(contentMap[userId])) {
|
||||||
|
if (Object.keys(contentMap[userId][deviceId].ciphertext).length === 0) {
|
||||||
|
logger.log(
|
||||||
|
"No ciphertext for device " +
|
||||||
|
userId + ":" + deviceId + ": pruning",
|
||||||
|
);
|
||||||
|
delete contentMap[userId][deviceId];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// No devices left for that user? Strip that too.
|
||||||
|
if (Object.keys(contentMap[userId]).length === 0) {
|
||||||
|
logger.log("Pruned all devices for user " + userId);
|
||||||
|
delete contentMap[userId];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Is there anything left?
|
||||||
|
if (Object.keys(contentMap).length === 0) {
|
||||||
|
logger.log("No users left to send to: aborting");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
return this._baseApis.sendToDevice("m.room.encrypted", contentMap).then(() => {
|
return this._baseApis.sendToDevice("m.room.encrypted", contentMap).then(() => {
|
||||||
// store that we successfully uploaded the keys of the current slice
|
// store that we successfully uploaded the keys of the current slice
|
||||||
for (const userId of Object.keys(contentMap)) {
|
for (const userId of Object.keys(contentMap)) {
|
||||||
|
|||||||
Reference in New Issue
Block a user