Skip to content

Commit

Permalink
Merge pull request #1075 from vector-im/fix-broken-key-share
Browse files Browse the repository at this point in the history
Update code in RoomEncryption to use device_id and user_id
  • Loading branch information
bwindels authored Apr 14, 2023
2 parents a8d4928 + b52489c commit 7a726ff
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 7 deletions.
10 changes: 10 additions & 0 deletions src/matrix/calls/group/Member.ts
Original file line number Diff line number Diff line change
Expand Up @@ -183,6 +183,16 @@ export class Member {
return this.callDeviceMembership.device_id;
}

/** @internal, to emulate deviceKey properties when calling formatToDeviceMessagesPayload */
get user_id(): string {
return this.userId;
}

/** @internal, to emulate deviceKey properties when calling formatToDeviceMessagesPayload */
get device_id(): string {
return this.deviceId;
}

/** session id of the member */
get sessionId(): string {
return this.callDeviceMembership.session_id;
Expand Down
4 changes: 2 additions & 2 deletions src/matrix/common.js
Original file line number Diff line number Diff line change
Expand Up @@ -33,11 +33,11 @@ export function isTxnId(txnId) {
}

export function formatToDeviceMessagesPayload(messages) {
const messagesByUser = groupBy(messages, message => message.device.userId);
const messagesByUser = groupBy(messages, message => message.device.user_id);
const payload = {
messages: Array.from(messagesByUser.entries()).reduce((userMap, [userId, messages]) => {
userMap[userId] = messages.reduce((deviceMap, message) => {
deviceMap[message.device.deviceId] = message.content;
deviceMap[message.device.device_id] = message.content;
return deviceMap;
}, {});
return userMap;
Expand Down
10 changes: 5 additions & 5 deletions src/matrix/e2ee/RoomEncryption.js
Original file line number Diff line number Diff line change
Expand Up @@ -353,7 +353,7 @@ export class RoomEncryption {
this._historyVisibility = await this._loadHistoryVisibilityIfNeeded(this._historyVisibility);
await this._deviceTracker.trackRoom(this._room, this._historyVisibility, log);
const devices = await this._deviceTracker.devicesForTrackedRoom(this._room.id, hsApi, log);
const userIds = Array.from(devices.reduce((set, device) => set.add(device.userId), new Set()));
const userIds = Array.from(devices.reduce((set, device) => set.add(device.user_id), new Set()));

let writeOpTxn = await this._storage.readWriteTxn([this._storage.storeNames.operations]);
let operation;
Expand Down Expand Up @@ -431,8 +431,8 @@ export class RoomEncryption {
await log.wrap("send", log => this._sendMessagesToDevices(ENCRYPTED_TYPE, messages, hsApi, log));
if (missingDevices.length) {
await log.wrap("missingDevices", async log => {
log.set("devices", missingDevices.map(d => d.deviceId));
const unsentUserIds = operation.userIds.filter(userId => missingDevices.some(d => d.userId === userId));
log.set("devices", missingDevices.map(d => d.device_id));
const unsentUserIds = operation.userIds.filter(userId => missingDevices.some(d => d.user_id === userId));
log.set("unsentUserIds", unsentUserIds);
operation.userIds = unsentUserIds;
// first remove the users that we've sent the keys already from the operation,
Expand All @@ -459,11 +459,11 @@ export class RoomEncryption {

// TODO: make this use _sendMessagesToDevices
async _sendSharedMessageToDevices(type, message, devices, hsApi, log) {
const devicesByUser = groupBy(devices, device => device.userId);
const devicesByUser = groupBy(devices, device => device.user_id);
const payload = {
messages: Array.from(devicesByUser.entries()).reduce((userMap, [userId, devices]) => {
userMap[userId] = devices.reduce((deviceMap, device) => {
deviceMap[device.deviceId] = message;
deviceMap[device.device_id] = message;
return deviceMap;
}, {});
return userMap;
Expand Down

0 comments on commit 7a726ff

Please sign in to comment.