From baa7a86e3ea5d9e79481b9d037a29f7df4af1928 Mon Sep 17 00:00:00 2001 From: Will Hunt Date: Fri, 8 May 2020 16:33:50 +0100 Subject: [PATCH] Assume room should be unencrypted if homeserver does not implement keys/query Dendrite (and others) do not support key fetching (or indeed, E2E at all). Rather than failing to create a room at all, leave it unencrypted. Fixes #13598 --- src/createRoom.js | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/createRoom.js b/src/createRoom.js index a39d2c2216..4d59b11656 100644 --- a/src/createRoom.js +++ b/src/createRoom.js @@ -212,7 +212,17 @@ export async function _waitForMember(client, roomId, userId, opts = { timeout: 1 * can encrypt to. */ export async function canEncryptToAllUsers(client, userIds) { - const usersDeviceMap = await client.downloadKeys(userIds); + let usersDeviceMap; + try { + usersDeviceMap = await client.downloadKeys(userIds); + } catch (ex) { + if (ex.httpStatus === 404) { + // The endpoint to fetch keys doesn't exist: force unencrypted. + // See: https://github.com/vector-im/riot-web/issues/13598 + return false; + } + throw ex; + } // { "@user:host": { "DEVICE": {...}, ... }, ... } return Object.values(usersDeviceMap).every((userDevices) => // { "DEVICE": {...}, ... }