UNPKG

matrix-react-sdk

Version:
88 lines (83 loc) 12.2 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.E2EStatus = void 0; exports.shieldStatusForRoom = shieldStatusForRoom; var _matrix = require("matrix-js-sdk/src/matrix"); var _logger = require("matrix-js-sdk/src/logger"); var _DMRoomMap = _interopRequireDefault(require("./DMRoomMap")); var _arrays = require("./arrays"); /* Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only Please see LICENSE files in the repository root for full details. */ let E2EStatus = exports.E2EStatus = /*#__PURE__*/function (E2EStatus) { E2EStatus["Warning"] = "warning"; E2EStatus["Verified"] = "verified"; E2EStatus["Normal"] = "normal"; return E2EStatus; }({}); async function shieldStatusForRoom(client, room) { const crypto = client.getCrypto(); if (!crypto) { return E2EStatus.Warning; } try { const members = (await room.getEncryptionTargetMembers()).map(({ userId }) => userId); const inDMMap = !!_DMRoomMap.default.shared().getUserIdForRoomId(room.roomId); const verified = []; const unverified = []; for (const userId of members) { if (userId === client.getUserId()) continue; const userTrust = await crypto.getUserVerificationStatus(userId); /* Alarm if any unverified users were verified before. */ if (userTrust.wasCrossSigningVerified() && !userTrust.isCrossSigningVerified()) { return E2EStatus.Warning; } (userTrust.isCrossSigningVerified() ? verified : unverified).push(userId); } /* Check all verified user devices. */ /* Don't alarm if no other users are verified */ const includeUser = verified.length > 0 && // Don't alarm for self in rooms where nobody else is verified !inDMMap && // Don't alarm for self in DMs with other users members.length !== 2 || // Don't alarm for self in 1:1 chats with other users members.length === 1; // Do alarm for self if we're alone in a room const targets = includeUser ? [...verified, client.getUserId()] : verified; const devicesByUser = await crypto.getUserDeviceInfo(targets); for (const userId of targets) { const devices = devicesByUser.get(userId); if (!devices) { // getUserDeviceInfo returned nothing about this user, which means we know nothing about their device list. // That seems odd, so treat it as a warning. _logger.logger.warn(`No device info for user ${userId}`); return E2EStatus.Warning; } const anyDeviceNotVerified = await (0, _arrays.asyncSome)(devices.keys(), async deviceId => { const verificationStatus = await crypto.getDeviceVerificationStatus(userId, deviceId); return !verificationStatus?.isVerified(); }); if (anyDeviceNotVerified) { return E2EStatus.Warning; } } return unverified.length === 0 ? E2EStatus.Verified : E2EStatus.Normal; } catch (e) { if (!(e instanceof _matrix.ClientStoppedError)) { throw e; } // The client has been stopped while we were figuring out what to do. Catch the exception to stop it being // logged. It probably doesn't really matter what we return. _logger.logger.warn("shieldStatusForRoom: client stopped"); return E2EStatus.Normal; } } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbWF0cml4IiwicmVxdWlyZSIsIl9sb2dnZXIiLCJfRE1Sb29tTWFwIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9hcnJheXMiLCJFMkVTdGF0dXMiLCJleHBvcnRzIiwic2hpZWxkU3RhdHVzRm9yUm9vbSIsImNsaWVudCIsInJvb20iLCJjcnlwdG8iLCJnZXRDcnlwdG8iLCJXYXJuaW5nIiwibWVtYmVycyIsImdldEVuY3J5cHRpb25UYXJnZXRNZW1iZXJzIiwibWFwIiwidXNlcklkIiwiaW5ETU1hcCIsIkRNUm9vbU1hcCIsInNoYXJlZCIsImdldFVzZXJJZEZvclJvb21JZCIsInJvb21JZCIsInZlcmlmaWVkIiwidW52ZXJpZmllZCIsImdldFVzZXJJZCIsInVzZXJUcnVzdCIsImdldFVzZXJWZXJpZmljYXRpb25TdGF0dXMiLCJ3YXNDcm9zc1NpZ25pbmdWZXJpZmllZCIsImlzQ3Jvc3NTaWduaW5nVmVyaWZpZWQiLCJwdXNoIiwiaW5jbHVkZVVzZXIiLCJsZW5ndGgiLCJ0YXJnZXRzIiwiZGV2aWNlc0J5VXNlciIsImdldFVzZXJEZXZpY2VJbmZvIiwiZGV2aWNlcyIsImdldCIsImxvZ2dlciIsIndhcm4iLCJhbnlEZXZpY2VOb3RWZXJpZmllZCIsImFzeW5jU29tZSIsImtleXMiLCJkZXZpY2VJZCIsInZlcmlmaWNhdGlvblN0YXR1cyIsImdldERldmljZVZlcmlmaWNhdGlvblN0YXR1cyIsImlzVmVyaWZpZWQiLCJWZXJpZmllZCIsIk5vcm1hbCIsImUiLCJDbGllbnRTdG9wcGVkRXJyb3IiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvU2hpZWxkVXRpbHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAyMDI0IE5ldyBWZWN0b3IgTHRkLlxuQ29weXJpZ2h0IDIwMjEgVGhlIE1hdHJpeC5vcmcgRm91bmRhdGlvbiBDLkkuQy5cblxuU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wLW9ubHkgT1IgR1BMLTMuMC1vbmx5XG5QbGVhc2Ugc2VlIExJQ0VOU0UgZmlsZXMgaW4gdGhlIHJlcG9zaXRvcnkgcm9vdCBmb3IgZnVsbCBkZXRhaWxzLlxuKi9cblxuaW1wb3J0IHsgQ2xpZW50U3RvcHBlZEVycm9yLCBNYXRyaXhDbGllbnQsIFJvb20gfSBmcm9tIFwibWF0cml4LWpzLXNkay9zcmMvbWF0cml4XCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwibWF0cml4LWpzLXNkay9zcmMvbG9nZ2VyXCI7XG5cbmltcG9ydCBETVJvb21NYXAgZnJvbSBcIi4vRE1Sb29tTWFwXCI7XG5pbXBvcnQgeyBhc3luY1NvbWUgfSBmcm9tIFwiLi9hcnJheXNcIjtcblxuZXhwb3J0IGVudW0gRTJFU3RhdHVzIHtcbiAgICBXYXJuaW5nID0gXCJ3YXJuaW5nXCIsXG4gICAgVmVyaWZpZWQgPSBcInZlcmlmaWVkXCIsXG4gICAgTm9ybWFsID0gXCJub3JtYWxcIixcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNoaWVsZFN0YXR1c0ZvclJvb20oY2xpZW50OiBNYXRyaXhDbGllbnQsIHJvb206IFJvb20pOiBQcm9taXNlPEUyRVN0YXR1cz4ge1xuICAgIGNvbnN0IGNyeXB0byA9IGNsaWVudC5nZXRDcnlwdG8oKTtcbiAgICBpZiAoIWNyeXB0bykge1xuICAgICAgICByZXR1cm4gRTJFU3RhdHVzLldhcm5pbmc7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgbWVtYmVycyA9IChhd2FpdCByb29tLmdldEVuY3J5cHRpb25UYXJnZXRNZW1iZXJzKCkpLm1hcCgoeyB1c2VySWQgfSkgPT4gdXNlcklkKTtcbiAgICAgICAgY29uc3QgaW5ETU1hcCA9ICEhRE1Sb29tTWFwLnNoYXJlZCgpLmdldFVzZXJJZEZvclJvb21JZChyb29tLnJvb21JZCk7XG5cbiAgICAgICAgY29uc3QgdmVyaWZpZWQ6IHN0cmluZ1tdID0gW107XG4gICAgICAgIGNvbnN0IHVudmVyaWZpZWQ6IHN0cmluZ1tdID0gW107XG4gICAgICAgIGZvciAoY29uc3QgdXNlcklkIG9mIG1lbWJlcnMpIHtcbiAgICAgICAgICAgIGlmICh1c2VySWQgPT09IGNsaWVudC5nZXRVc2VySWQoKSkgY29udGludWU7XG4gICAgICAgICAgICBjb25zdCB1c2VyVHJ1c3QgPSBhd2FpdCBjcnlwdG8uZ2V0VXNlclZlcmlmaWNhdGlvblN0YXR1cyh1c2VySWQpO1xuXG4gICAgICAgICAgICAvKiBBbGFybSBpZiBhbnkgdW52ZXJpZmllZCB1c2VycyB3ZXJlIHZlcmlmaWVkIGJlZm9yZS4gKi9cbiAgICAgICAgICAgIGlmICh1c2VyVHJ1c3Qud2FzQ3Jvc3NTaWduaW5nVmVyaWZpZWQoKSAmJiAhdXNlclRydXN0LmlzQ3Jvc3NTaWduaW5nVmVyaWZpZWQoKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBFMkVTdGF0dXMuV2FybmluZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICh1c2VyVHJ1c3QuaXNDcm9zc1NpZ25pbmdWZXJpZmllZCgpID8gdmVyaWZpZWQgOiB1bnZlcmlmaWVkKS5wdXNoKHVzZXJJZCk7XG4gICAgICAgIH1cblxuICAgICAgICAvKiBDaGVjayBhbGwgdmVyaWZpZWQgdXNlciBkZXZpY2VzLiAqL1xuICAgICAgICAvKiBEb24ndCBhbGFybSBpZiBubyBvdGhlciB1c2VycyBhcmUgdmVyaWZpZWQgICovXG4gICAgICAgIGNvbnN0IGluY2x1ZGVVc2VyID1cbiAgICAgICAgICAgICh2ZXJpZmllZC5sZW5ndGggPiAwICYmIC8vIERvbid0IGFsYXJtIGZvciBzZWxmIGluIHJvb21zIHdoZXJlIG5vYm9keSBlbHNlIGlzIHZlcmlmaWVkXG4gICAgICAgICAgICAgICAgIWluRE1NYXAgJiYgLy8gRG9uJ3QgYWxhcm0gZm9yIHNlbGYgaW4gRE1zIHdpdGggb3RoZXIgdXNlcnNcbiAgICAgICAgICAgICAgICBtZW1iZXJzLmxlbmd0aCAhPT0gMikgfHwgLy8gRG9uJ3QgYWxhcm0gZm9yIHNlbGYgaW4gMToxIGNoYXRzIHdpdGggb3RoZXIgdXNlcnNcbiAgICAgICAgICAgIG1lbWJlcnMubGVuZ3RoID09PSAxOyAvLyBEbyBhbGFybSBmb3Igc2VsZiBpZiB3ZSdyZSBhbG9uZSBpbiBhIHJvb21cbiAgICAgICAgY29uc3QgdGFyZ2V0cyA9IGluY2x1ZGVVc2VyID8gWy4uLnZlcmlmaWVkLCBjbGllbnQuZ2V0VXNlcklkKCkhXSA6IHZlcmlmaWVkO1xuICAgICAgICBjb25zdCBkZXZpY2VzQnlVc2VyID0gYXdhaXQgY3J5cHRvLmdldFVzZXJEZXZpY2VJbmZvKHRhcmdldHMpO1xuICAgICAgICBmb3IgKGNvbnN0IHVzZXJJZCBvZiB0YXJnZXRzKSB7XG4gICAgICAgICAgICBjb25zdCBkZXZpY2VzID0gZGV2aWNlc0J5VXNlci5nZXQodXNlcklkKTtcbiAgICAgICAgICAgIGlmICghZGV2aWNlcykge1xuICAgICAgICAgICAgICAgIC8vIGdldFVzZXJEZXZpY2VJbmZvIHJldHVybmVkIG5vdGhpbmcgYWJvdXQgdGhpcyB1c2VyLCB3aGljaCBtZWFucyB3ZSBrbm93IG5vdGhpbmcgYWJvdXQgdGhlaXIgZGV2aWNlIGxpc3QuXG4gICAgICAgICAgICAgICAgLy8gVGhhdCBzZWVtcyBvZGQsIHNvIHRyZWF0IGl0IGFzIGEgd2FybmluZy5cbiAgICAgICAgICAgICAgICBsb2dnZXIud2FybihgTm8gZGV2aWNlIGluZm8gZm9yIHVzZXIgJHt1c2VySWR9YCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIEUyRVN0YXR1cy5XYXJuaW5nO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBhbnlEZXZpY2VOb3RWZXJpZmllZCA9IGF3YWl0IGFzeW5jU29tZShkZXZpY2VzLmtleXMoKSwgYXN5bmMgKGRldmljZUlkKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmVyaWZpY2F0aW9uU3RhdHVzID0gYXdhaXQgY3J5cHRvLmdldERldmljZVZlcmlmaWNhdGlvblN0YXR1cyh1c2VySWQsIGRldmljZUlkKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gIXZlcmlmaWNhdGlvblN0YXR1cz8uaXNWZXJpZmllZCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoYW55RGV2aWNlTm90VmVyaWZpZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gRTJFU3RhdHVzLldhcm5pbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdW52ZXJpZmllZC5sZW5ndGggPT09IDAgPyBFMkVTdGF0dXMuVmVyaWZpZWQgOiBFMkVTdGF0dXMuTm9ybWFsO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKCEoZSBpbnN0YW5jZW9mIENsaWVudFN0b3BwZWRFcnJvcikpIHtcbiAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGUgY2xpZW50IGhhcyBiZWVuIHN0b3BwZWQgd2hpbGUgd2Ugd2VyZSBmaWd1cmluZyBvdXQgd2hhdCB0byBkby4gQ2F0Y2ggdGhlIGV4Y2VwdGlvbiB0byBzdG9wIGl0IGJlaW5nXG4gICAgICAgIC8vIGxvZ2dlZC4gSXQgcHJvYmFibHkgZG9lc24ndCByZWFsbHkgbWF0dGVyIHdoYXQgd2UgcmV0dXJuLlxuICAgICAgICBsb2dnZXIud2FybihcInNoaWVsZFN0YXR1c0ZvclJvb206IGNsaWVudCBzdG9wcGVkXCIpO1xuICAgICAgICByZXR1cm4gRTJFU3RhdHVzLk5vcm1hbDtcbiAgICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBUUEsSUFBQUEsT0FBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsT0FBQSxHQUFBRCxPQUFBO0FBRUEsSUFBQUUsVUFBQSxHQUFBQyxzQkFBQSxDQUFBSCxPQUFBO0FBQ0EsSUFBQUksT0FBQSxHQUFBSixPQUFBO0FBWkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFOQSxJQWNZSyxTQUFTLEdBQUFDLE9BQUEsQ0FBQUQsU0FBQSwwQkFBVEEsU0FBUztFQUFUQSxTQUFTO0VBQVRBLFNBQVM7RUFBVEEsU0FBUztFQUFBLE9BQVRBLFNBQVM7QUFBQTtBQU1kLGVBQWVFLG1CQUFtQkEsQ0FBQ0MsTUFBb0IsRUFBRUMsSUFBVSxFQUFzQjtFQUM1RixNQUFNQyxNQUFNLEdBQUdGLE1BQU0sQ0FBQ0csU0FBUyxDQUFDLENBQUM7RUFDakMsSUFBSSxDQUFDRCxNQUFNLEVBQUU7SUFDVCxPQUFPTCxTQUFTLENBQUNPLE9BQU87RUFDNUI7RUFFQSxJQUFJO0lBQ0EsTUFBTUMsT0FBTyxHQUFHLENBQUMsTUFBTUosSUFBSSxDQUFDSywwQkFBMEIsQ0FBQyxDQUFDLEVBQUVDLEdBQUcsQ0FBQyxDQUFDO01BQUVDO0lBQU8sQ0FBQyxLQUFLQSxNQUFNLENBQUM7SUFDckYsTUFBTUMsT0FBTyxHQUFHLENBQUMsQ0FBQ0Msa0JBQVMsQ0FBQ0MsTUFBTSxDQUFDLENBQUMsQ0FBQ0Msa0JBQWtCLENBQUNYLElBQUksQ0FBQ1ksTUFBTSxDQUFDO0lBRXBFLE1BQU1DLFFBQWtCLEdBQUcsRUFBRTtJQUM3QixNQUFNQyxVQUFvQixHQUFHLEVBQUU7SUFDL0IsS0FBSyxNQUFNUCxNQUFNLElBQUlILE9BQU8sRUFBRTtNQUMxQixJQUFJRyxNQUFNLEtBQUtSLE1BQU0sQ0FBQ2dCLFNBQVMsQ0FBQyxDQUFDLEVBQUU7TUFDbkMsTUFBTUMsU0FBUyxHQUFHLE1BQU1mLE1BQU0sQ0FBQ2dCLHlCQUF5QixDQUFDVixNQUFNLENBQUM7O01BRWhFO01BQ0EsSUFBSVMsU0FBUyxDQUFDRSx1QkFBdUIsQ0FBQyxDQUFDLElBQUksQ0FBQ0YsU0FBUyxDQUFDRyxzQkFBc0IsQ0FBQyxDQUFDLEVBQUU7UUFDNUUsT0FBT3ZCLFNBQVMsQ0FBQ08sT0FBTztNQUM1QjtNQUNBLENBQUNhLFNBQVMsQ0FBQ0csc0JBQXNCLENBQUMsQ0FBQyxHQUFHTixRQUFRLEdBQUdDLFVBQVUsRUFBRU0sSUFBSSxDQUFDYixNQUFNLENBQUM7SUFDN0U7O0lBRUE7SUFDQTtJQUNBLE1BQU1jLFdBQVcsR0FDWlIsUUFBUSxDQUFDUyxNQUFNLEdBQUcsQ0FBQztJQUFJO0lBQ3BCLENBQUNkLE9BQU87SUFBSTtJQUNaSixPQUFPLENBQUNrQixNQUFNLEtBQUssQ0FBQztJQUFLO0lBQzdCbEIsT0FBTyxDQUFDa0IsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzFCLE1BQU1DLE9BQU8sR0FBR0YsV0FBVyxHQUFHLENBQUMsR0FBR1IsUUFBUSxFQUFFZCxNQUFNLENBQUNnQixTQUFTLENBQUMsQ0FBQyxDQUFFLEdBQUdGLFFBQVE7SUFDM0UsTUFBTVcsYUFBYSxHQUFHLE1BQU12QixNQUFNLENBQUN3QixpQkFBaUIsQ0FBQ0YsT0FBTyxDQUFDO0lBQzdELEtBQUssTUFBTWhCLE1BQU0sSUFBSWdCLE9BQU8sRUFBRTtNQUMxQixNQUFNRyxPQUFPLEdBQUdGLGFBQWEsQ0FBQ0csR0FBRyxDQUFDcEIsTUFBTSxDQUFDO01BQ3pDLElBQUksQ0FBQ21CLE9BQU8sRUFBRTtRQUNWO1FBQ0E7UUFDQUUsY0FBTSxDQUFDQyxJQUFJLENBQUMsMkJBQTJCdEIsTUFBTSxFQUFFLENBQUM7UUFDaEQsT0FBT1gsU0FBUyxDQUFDTyxPQUFPO01BQzVCO01BRUEsTUFBTTJCLG9CQUFvQixHQUFHLE1BQU0sSUFBQUMsaUJBQVMsRUFBQ0wsT0FBTyxDQUFDTSxJQUFJLENBQUMsQ0FBQyxFQUFFLE1BQU9DLFFBQVEsSUFBSztRQUM3RSxNQUFNQyxrQkFBa0IsR0FBRyxNQUFNakMsTUFBTSxDQUFDa0MsMkJBQTJCLENBQUM1QixNQUFNLEVBQUUwQixRQUFRLENBQUM7UUFDckYsT0FBTyxDQUFDQyxrQkFBa0IsRUFBRUUsVUFBVSxDQUFDLENBQUM7TUFDNUMsQ0FBQyxDQUFDO01BQ0YsSUFBSU4sb0JBQW9CLEVBQUU7UUFDdEIsT0FBT2xDLFNBQVMsQ0FBQ08sT0FBTztNQUM1QjtJQUNKO0lBRUEsT0FBT1csVUFBVSxDQUFDUSxNQUFNLEtBQUssQ0FBQyxHQUFHMUIsU0FBUyxDQUFDeUMsUUFBUSxHQUFHekMsU0FBUyxDQUFDMEMsTUFBTTtFQUMxRSxDQUFDLENBQUMsT0FBT0MsQ0FBQyxFQUFFO0lBQ1IsSUFBSSxFQUFFQSxDQUFDLFlBQVlDLDBCQUFrQixDQUFDLEVBQUU7TUFDcEMsTUFBTUQsQ0FBQztJQUNYOztJQUVBO0lBQ0E7SUFDQVgsY0FBTSxDQUFDQyxJQUFJLENBQUMscUNBQXFDLENBQUM7SUFDbEQsT0FBT2pDLFNBQVMsQ0FBQzBDLE1BQU07RUFDM0I7QUFDSiIsImlnbm9yZUxpc3QiOltdfQ==