From 54bd554166193714d1318cc00a7fed8a1cb986d7 Mon Sep 17 00:00:00 2001 From: gabriellsh <40830821+gabriellsh@users.noreply.github.com> Date: Wed, 28 Jan 2026 16:24:31 -0300 Subject: [PATCH] fix(e2ee): Subscription's `lastMessage` not properly decrypting (#38283) --- .changeset/cold-coats-cross.md | 5 +++++ .../client/lib/e2ee/rocketchat.e2e.room.ts | 22 +++++++++++++------ apps/meteor/client/lib/e2ee/rocketchat.e2e.ts | 17 +++++++++++++- 3 files changed, 36 insertions(+), 8 deletions(-) create mode 100644 .changeset/cold-coats-cross.md diff --git a/.changeset/cold-coats-cross.md b/.changeset/cold-coats-cross.md new file mode 100644 index 00000000000..12dbfd710ce --- /dev/null +++ b/.changeset/cold-coats-cross.md @@ -0,0 +1,5 @@ +--- +"@rocket.chat/meteor": patch +--- + +Fixes an issue with encrypted room's message previews on the sidebar not always being properly decrypted diff --git a/apps/meteor/client/lib/e2ee/rocketchat.e2e.room.ts b/apps/meteor/client/lib/e2ee/rocketchat.e2e.room.ts index f5350573839..9d611183e0a 100644 --- a/apps/meteor/client/lib/e2ee/rocketchat.e2e.room.ts +++ b/apps/meteor/client/lib/e2ee/rocketchat.e2e.room.ts @@ -666,18 +666,26 @@ export class E2ERoom extends Emitter { return message; } - // TODO(@cardoso): review backward compatibility - if (message.msg && !isEncryptedMessageContent(message)) { - const data = await this.decrypt(message.msg); - if (data.msg) { - message.msg = data.msg; - } + if (isEncryptedMessageContent(message)) { + return { + ...(await this.decryptContent({ ...message })), + e2e: 'done' as const, + }; } - message = isEncryptedMessageContent(message) ? await this.decryptContent(message) : message; + if (!message.msg) { + return { + ...message, + e2e: 'done' as const, + }; + } + + // TODO(@cardoso): review backward compatibility + const data = await this.decrypt(message.msg); return { ...message, + msg: typeof data.msg === 'string' ? data.msg : message.msg, e2e: 'done' as const, }; } diff --git a/apps/meteor/client/lib/e2ee/rocketchat.e2e.ts b/apps/meteor/client/lib/e2ee/rocketchat.e2e.ts index 2eaae8474cf..fa882495507 100644 --- a/apps/meteor/client/lib/e2ee/rocketchat.e2e.ts +++ b/apps/meteor/client/lib/e2ee/rocketchat.e2e.ts @@ -671,7 +671,22 @@ class E2E extends Emitter { const span = log.span('decryptSubscription'); const e2eRoom = await this.getInstanceByRoomId(subscription.rid); span.info(subscription._id); - await e2eRoom?.decryptSubscription(); + + if (!e2eRoom) { + span.warn('no e2eRoom found'); + return; + } + + if (e2eRoom.isReady()) { + span.info('e2e room ready'); + await e2eRoom.decryptSubscription(); + return; + } + + e2eRoom.once('READY', async () => { + span.info('e2e room ready'); + await e2eRoom.decryptSubscription(); + }); } async decryptSubscriptions(): Promise {