UNPKG

matrix-react-sdk

Version:
132 lines (129 loc) 16.6 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.legacyVerifyUser = legacyVerifyUser; exports.pendingVerificationRequestForUser = pendingVerificationRequestForUser; exports.verifyDevice = verifyDevice; exports.verifyUser = verifyUser; var _types = require("matrix-js-sdk/src/types"); var _cryptoApi = require("matrix-js-sdk/src/crypto-api"); var _dispatcher = _interopRequireDefault(require("./dispatcher/dispatcher")); var _Modal = _interopRequireDefault(require("./Modal")); var _RightPanelStorePhases = require("./stores/right-panel/RightPanelStorePhases"); var _SecurityManager = require("./SecurityManager"); var _UntrustedDeviceDialog = _interopRequireDefault(require("./components/views/dialogs/UntrustedDeviceDialog")); var _ManualDeviceKeyVerificationDialog = require("./components/views/dialogs/ManualDeviceKeyVerificationDialog"); var _RightPanelStore = _interopRequireDefault(require("./stores/right-panel/RightPanelStore")); var _findDMForUser = require("./utils/dm/findDMForUser"); /* Copyright 2024 New Vector Ltd. Copyright 2019, 2020 , 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. */ async function enable4SIfNeeded(matrixClient) { const crypto = matrixClient.getCrypto(); if (!crypto) return false; const usk = await crypto.getCrossSigningKeyId(_cryptoApi.CrossSigningKey.UserSigning); if (!usk) { await (0, _SecurityManager.accessSecretStorage)(); return false; } return true; } async function verifyDevice(matrixClient, user, device) { if (matrixClient.isGuest()) { _dispatcher.default.dispatch({ action: "require_registration" }); return; } // if cross-signing is not explicitly disabled, check if it should be enabled first. if (matrixClient.getCryptoTrustCrossSignedDevices()) { if (!(await enable4SIfNeeded(matrixClient))) { return; } } _Modal.default.createDialog(_UntrustedDeviceDialog.default, { user, device, onFinished: async action => { if (action === "sas") { const verificationRequestPromise = matrixClient.legacyDeviceVerification(user.userId, device.deviceId, _types.VerificationMethod.Sas); setRightPanel({ member: user, verificationRequestPromise }); } else if (action === "legacy") { _Modal.default.createDialog(_ManualDeviceKeyVerificationDialog.ManualDeviceKeyVerificationDialog, { userId: user.userId, device }); } } }); } async function legacyVerifyUser(matrixClient, user) { if (matrixClient.isGuest()) { _dispatcher.default.dispatch({ action: "require_registration" }); return; } // if cross-signing is not explicitly disabled, check if it should be enabled first. if (matrixClient.getCryptoTrustCrossSignedDevices()) { if (!(await enable4SIfNeeded(matrixClient))) { return; } } const verificationRequestPromise = matrixClient.requestVerification(user.userId); setRightPanel({ member: user, verificationRequestPromise }); } async function verifyUser(matrixClient, user) { if (matrixClient.isGuest()) { _dispatcher.default.dispatch({ action: "require_registration" }); return; } if (!(await enable4SIfNeeded(matrixClient))) { return; } const existingRequest = pendingVerificationRequestForUser(matrixClient, user); setRightPanel({ member: user, verificationRequest: existingRequest }); } function setRightPanel(state) { if (_RightPanelStore.default.instance.roomPhaseHistory.some(card => card.phase == _RightPanelStorePhases.RightPanelPhases.RoomSummary)) { _RightPanelStore.default.instance.pushCard({ phase: _RightPanelStorePhases.RightPanelPhases.EncryptionPanel, state }); } else { _RightPanelStore.default.instance.setCards([{ phase: _RightPanelStorePhases.RightPanelPhases.RoomSummary }, { phase: _RightPanelStorePhases.RightPanelPhases.RoomMemberInfo, state: { member: state.member } }, { phase: _RightPanelStorePhases.RightPanelPhases.EncryptionPanel, state }]); } } function pendingVerificationRequestForUser(matrixClient, user) { const dmRoom = (0, _findDMForUser.findDMForUser)(matrixClient, user.userId); if (dmRoom) { return matrixClient.getCrypto().findVerificationRequestDMInProgress(dmRoom.roomId, user.userId); } } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdHlwZXMiLCJyZXF1aXJlIiwiX2NyeXB0b0FwaSIsIl9kaXNwYXRjaGVyIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9Nb2RhbCIsIl9SaWdodFBhbmVsU3RvcmVQaGFzZXMiLCJfU2VjdXJpdHlNYW5hZ2VyIiwiX1VudHJ1c3RlZERldmljZURpYWxvZyIsIl9NYW51YWxEZXZpY2VLZXlWZXJpZmljYXRpb25EaWFsb2ciLCJfUmlnaHRQYW5lbFN0b3JlIiwiX2ZpbmRETUZvclVzZXIiLCJlbmFibGU0U0lmTmVlZGVkIiwibWF0cml4Q2xpZW50IiwiY3J5cHRvIiwiZ2V0Q3J5cHRvIiwidXNrIiwiZ2V0Q3Jvc3NTaWduaW5nS2V5SWQiLCJDcm9zc1NpZ25pbmdLZXkiLCJVc2VyU2lnbmluZyIsImFjY2Vzc1NlY3JldFN0b3JhZ2UiLCJ2ZXJpZnlEZXZpY2UiLCJ1c2VyIiwiZGV2aWNlIiwiaXNHdWVzdCIsImRpcyIsImRpc3BhdGNoIiwiYWN0aW9uIiwiZ2V0Q3J5cHRvVHJ1c3RDcm9zc1NpZ25lZERldmljZXMiLCJNb2RhbCIsImNyZWF0ZURpYWxvZyIsIlVudHJ1c3RlZERldmljZURpYWxvZyIsIm9uRmluaXNoZWQiLCJ2ZXJpZmljYXRpb25SZXF1ZXN0UHJvbWlzZSIsImxlZ2FjeURldmljZVZlcmlmaWNhdGlvbiIsInVzZXJJZCIsImRldmljZUlkIiwiVmVyaWZpY2F0aW9uTWV0aG9kIiwiU2FzIiwic2V0UmlnaHRQYW5lbCIsIm1lbWJlciIsIk1hbnVhbERldmljZUtleVZlcmlmaWNhdGlvbkRpYWxvZyIsImxlZ2FjeVZlcmlmeVVzZXIiLCJyZXF1ZXN0VmVyaWZpY2F0aW9uIiwidmVyaWZ5VXNlciIsImV4aXN0aW5nUmVxdWVzdCIsInBlbmRpbmdWZXJpZmljYXRpb25SZXF1ZXN0Rm9yVXNlciIsInZlcmlmaWNhdGlvblJlcXVlc3QiLCJzdGF0ZSIsIlJpZ2h0UGFuZWxTdG9yZSIsImluc3RhbmNlIiwicm9vbVBoYXNlSGlzdG9yeSIsInNvbWUiLCJjYXJkIiwicGhhc2UiLCJSaWdodFBhbmVsUGhhc2VzIiwiUm9vbVN1bW1hcnkiLCJwdXNoQ2FyZCIsIkVuY3J5cHRpb25QYW5lbCIsInNldENhcmRzIiwiUm9vbU1lbWJlckluZm8iLCJkbVJvb20iLCJmaW5kRE1Gb3JVc2VyIiwiZmluZFZlcmlmaWNhdGlvblJlcXVlc3RETUluUHJvZ3Jlc3MiLCJyb29tSWQiXSwic291cmNlcyI6WyIuLi9zcmMvdmVyaWZpY2F0aW9uLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgMjAyNCBOZXcgVmVjdG9yIEx0ZC5cbkNvcHlyaWdodCAyMDE5LCAyMDIwICwgMjAyMSBUaGUgTWF0cml4Lm9yZyBGb3VuZGF0aW9uIEMuSS5DLlxuXG5TUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjAtb25seSBPUiBHUEwtMy4wLW9ubHlcblBsZWFzZSBzZWUgTElDRU5TRSBmaWxlcyBpbiB0aGUgcmVwb3NpdG9yeSByb290IGZvciBmdWxsIGRldGFpbHMuXG4qL1xuXG5pbXBvcnQgeyBVc2VyLCBNYXRyaXhDbGllbnQsIFJvb21NZW1iZXIgfSBmcm9tIFwibWF0cml4LWpzLXNkay9zcmMvbWF0cml4XCI7XG5pbXBvcnQgeyBWZXJpZmljYXRpb25NZXRob2QgfSBmcm9tIFwibWF0cml4LWpzLXNkay9zcmMvdHlwZXNcIjtcbmltcG9ydCB7IENyb3NzU2lnbmluZ0tleSwgVmVyaWZpY2F0aW9uUmVxdWVzdCB9IGZyb20gXCJtYXRyaXgtanMtc2RrL3NyYy9jcnlwdG8tYXBpXCI7XG5cbmltcG9ydCBkaXMgZnJvbSBcIi4vZGlzcGF0Y2hlci9kaXNwYXRjaGVyXCI7XG5pbXBvcnQgTW9kYWwgZnJvbSBcIi4vTW9kYWxcIjtcbmltcG9ydCB7IFJpZ2h0UGFuZWxQaGFzZXMgfSBmcm9tIFwiLi9zdG9yZXMvcmlnaHQtcGFuZWwvUmlnaHRQYW5lbFN0b3JlUGhhc2VzXCI7XG5pbXBvcnQgeyBhY2Nlc3NTZWNyZXRTdG9yYWdlIH0gZnJvbSBcIi4vU2VjdXJpdHlNYW5hZ2VyXCI7XG5pbXBvcnQgVW50cnVzdGVkRGV2aWNlRGlhbG9nIGZyb20gXCIuL2NvbXBvbmVudHMvdmlld3MvZGlhbG9ncy9VbnRydXN0ZWREZXZpY2VEaWFsb2dcIjtcbmltcG9ydCB7IElEZXZpY2UgfSBmcm9tIFwiLi9jb21wb25lbnRzL3ZpZXdzL3JpZ2h0X3BhbmVsL1VzZXJJbmZvXCI7XG5pbXBvcnQgeyBNYW51YWxEZXZpY2VLZXlWZXJpZmljYXRpb25EaWFsb2cgfSBmcm9tIFwiLi9jb21wb25lbnRzL3ZpZXdzL2RpYWxvZ3MvTWFudWFsRGV2aWNlS2V5VmVyaWZpY2F0aW9uRGlhbG9nXCI7XG5pbXBvcnQgUmlnaHRQYW5lbFN0b3JlIGZyb20gXCIuL3N0b3Jlcy9yaWdodC1wYW5lbC9SaWdodFBhbmVsU3RvcmVcIjtcbmltcG9ydCB7IElSaWdodFBhbmVsQ2FyZFN0YXRlIH0gZnJvbSBcIi4vc3RvcmVzL3JpZ2h0LXBhbmVsL1JpZ2h0UGFuZWxTdG9yZUlQYW5lbFN0YXRlXCI7XG5pbXBvcnQgeyBmaW5kRE1Gb3JVc2VyIH0gZnJvbSBcIi4vdXRpbHMvZG0vZmluZERNRm9yVXNlclwiO1xuXG5hc3luYyBmdW5jdGlvbiBlbmFibGU0U0lmTmVlZGVkKG1hdHJpeENsaWVudDogTWF0cml4Q2xpZW50KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgY3J5cHRvID0gbWF0cml4Q2xpZW50LmdldENyeXB0bygpO1xuICAgIGlmICghY3J5cHRvKSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgdXNrID0gYXdhaXQgY3J5cHRvLmdldENyb3NzU2lnbmluZ0tleUlkKENyb3NzU2lnbmluZ0tleS5Vc2VyU2lnbmluZyk7XG4gICAgaWYgKCF1c2spIHtcbiAgICAgICAgYXdhaXQgYWNjZXNzU2VjcmV0U3RvcmFnZSgpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB2ZXJpZnlEZXZpY2UobWF0cml4Q2xpZW50OiBNYXRyaXhDbGllbnQsIHVzZXI6IFVzZXIsIGRldmljZTogSURldmljZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmIChtYXRyaXhDbGllbnQuaXNHdWVzdCgpKSB7XG4gICAgICAgIGRpcy5kaXNwYXRjaCh7IGFjdGlvbjogXCJyZXF1aXJlX3JlZ2lzdHJhdGlvblwiIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIGlmIGNyb3NzLXNpZ25pbmcgaXMgbm90IGV4cGxpY2l0bHkgZGlzYWJsZWQsIGNoZWNrIGlmIGl0IHNob3VsZCBiZSBlbmFibGVkIGZpcnN0LlxuICAgIGlmIChtYXRyaXhDbGllbnQuZ2V0Q3J5cHRvVHJ1c3RDcm9zc1NpZ25lZERldmljZXMoKSkge1xuICAgICAgICBpZiAoIShhd2FpdCBlbmFibGU0U0lmTmVlZGVkKG1hdHJpeENsaWVudCkpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBNb2RhbC5jcmVhdGVEaWFsb2coVW50cnVzdGVkRGV2aWNlRGlhbG9nLCB7XG4gICAgICAgIHVzZXIsXG4gICAgICAgIGRldmljZSxcbiAgICAgICAgb25GaW5pc2hlZDogYXN5bmMgKGFjdGlvbik6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgICAgICAgaWYgKGFjdGlvbiA9PT0gXCJzYXNcIikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZlcmlmaWNhdGlvblJlcXVlc3RQcm9taXNlID0gbWF0cml4Q2xpZW50LmxlZ2FjeURldmljZVZlcmlmaWNhdGlvbihcbiAgICAgICAgICAgICAgICAgICAgdXNlci51c2VySWQsXG4gICAgICAgICAgICAgICAgICAgIGRldmljZS5kZXZpY2VJZCxcbiAgICAgICAgICAgICAgICAgICAgVmVyaWZpY2F0aW9uTWV0aG9kLlNhcyxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHNldFJpZ2h0UGFuZWwoeyBtZW1iZXI6IHVzZXIsIHZlcmlmaWNhdGlvblJlcXVlc3RQcm9taXNlIH0pO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChhY3Rpb24gPT09IFwibGVnYWN5XCIpIHtcbiAgICAgICAgICAgICAgICBNb2RhbC5jcmVhdGVEaWFsb2coTWFudWFsRGV2aWNlS2V5VmVyaWZpY2F0aW9uRGlhbG9nLCB7XG4gICAgICAgICAgICAgICAgICAgIHVzZXJJZDogdXNlci51c2VySWQsXG4gICAgICAgICAgICAgICAgICAgIGRldmljZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxlZ2FjeVZlcmlmeVVzZXIobWF0cml4Q2xpZW50OiBNYXRyaXhDbGllbnQsIHVzZXI6IFVzZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAobWF0cml4Q2xpZW50LmlzR3Vlc3QoKSkge1xuICAgICAgICBkaXMuZGlzcGF0Y2goeyBhY3Rpb246IFwicmVxdWlyZV9yZWdpc3RyYXRpb25cIiB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBpZiBjcm9zcy1zaWduaW5nIGlzIG5vdCBleHBsaWNpdGx5IGRpc2FibGVkLCBjaGVjayBpZiBpdCBzaG91bGQgYmUgZW5hYmxlZCBmaXJzdC5cbiAgICBpZiAobWF0cml4Q2xpZW50LmdldENyeXB0b1RydXN0Q3Jvc3NTaWduZWREZXZpY2VzKCkpIHtcbiAgICAgICAgaWYgKCEoYXdhaXQgZW5hYmxlNFNJZk5lZWRlZChtYXRyaXhDbGllbnQpKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHZlcmlmaWNhdGlvblJlcXVlc3RQcm9taXNlID0gbWF0cml4Q2xpZW50LnJlcXVlc3RWZXJpZmljYXRpb24odXNlci51c2VySWQpO1xuICAgIHNldFJpZ2h0UGFuZWwoeyBtZW1iZXI6IHVzZXIsIHZlcmlmaWNhdGlvblJlcXVlc3RQcm9taXNlIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdmVyaWZ5VXNlcihtYXRyaXhDbGllbnQ6IE1hdHJpeENsaWVudCwgdXNlcjogVXNlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmIChtYXRyaXhDbGllbnQuaXNHdWVzdCgpKSB7XG4gICAgICAgIGRpcy5kaXNwYXRjaCh7IGFjdGlvbjogXCJyZXF1aXJlX3JlZ2lzdHJhdGlvblwiIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghKGF3YWl0IGVuYWJsZTRTSWZOZWVkZWQobWF0cml4Q2xpZW50KSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBleGlzdGluZ1JlcXVlc3QgPSBwZW5kaW5nVmVyaWZpY2F0aW9uUmVxdWVzdEZvclVzZXIobWF0cml4Q2xpZW50LCB1c2VyKTtcbiAgICBzZXRSaWdodFBhbmVsKHsgbWVtYmVyOiB1c2VyLCB2ZXJpZmljYXRpb25SZXF1ZXN0OiBleGlzdGluZ1JlcXVlc3QgfSk7XG59XG5cbmZ1bmN0aW9uIHNldFJpZ2h0UGFuZWwoc3RhdGU6IElSaWdodFBhbmVsQ2FyZFN0YXRlKTogdm9pZCB7XG4gICAgaWYgKFJpZ2h0UGFuZWxTdG9yZS5pbnN0YW5jZS5yb29tUGhhc2VIaXN0b3J5LnNvbWUoKGNhcmQpID0+IGNhcmQucGhhc2UgPT0gUmlnaHRQYW5lbFBoYXNlcy5Sb29tU3VtbWFyeSkpIHtcbiAgICAgICAgUmlnaHRQYW5lbFN0b3JlLmluc3RhbmNlLnB1c2hDYXJkKHsgcGhhc2U6IFJpZ2h0UGFuZWxQaGFzZXMuRW5jcnlwdGlvblBhbmVsLCBzdGF0ZSB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBSaWdodFBhbmVsU3RvcmUuaW5zdGFuY2Uuc2V0Q2FyZHMoW1xuICAgICAgICAgICAgeyBwaGFzZTogUmlnaHRQYW5lbFBoYXNlcy5Sb29tU3VtbWFyeSB9LFxuICAgICAgICAgICAgeyBwaGFzZTogUmlnaHRQYW5lbFBoYXNlcy5Sb29tTWVtYmVySW5mbywgc3RhdGU6IHsgbWVtYmVyOiBzdGF0ZS5tZW1iZXIgfSB9LFxuICAgICAgICAgICAgeyBwaGFzZTogUmlnaHRQYW5lbFBoYXNlcy5FbmNyeXB0aW9uUGFuZWwsIHN0YXRlIH0sXG4gICAgICAgIF0pO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBlbmRpbmdWZXJpZmljYXRpb25SZXF1ZXN0Rm9yVXNlcihcbiAgICBtYXRyaXhDbGllbnQ6IE1hdHJpeENsaWVudCxcbiAgICB1c2VyOiBVc2VyIHwgUm9vbU1lbWJlcixcbik6IFZlcmlmaWNhdGlvblJlcXVlc3QgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGRtUm9vbSA9IGZpbmRETUZvclVzZXIobWF0cml4Q2xpZW50LCB1c2VyLnVzZXJJZCk7XG4gICAgaWYgKGRtUm9vbSkge1xuICAgICAgICByZXR1cm4gbWF0cml4Q2xpZW50LmdldENyeXB0bygpIS5maW5kVmVyaWZpY2F0aW9uUmVxdWVzdERNSW5Qcm9ncmVzcyhkbVJvb20ucm9vbUlkLCB1c2VyLnVzZXJJZCk7XG4gICAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBU0EsSUFBQUEsTUFBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsVUFBQSxHQUFBRCxPQUFBO0FBRUEsSUFBQUUsV0FBQSxHQUFBQyxzQkFBQSxDQUFBSCxPQUFBO0FBQ0EsSUFBQUksTUFBQSxHQUFBRCxzQkFBQSxDQUFBSCxPQUFBO0FBQ0EsSUFBQUssc0JBQUEsR0FBQUwsT0FBQTtBQUNBLElBQUFNLGdCQUFBLEdBQUFOLE9BQUE7QUFDQSxJQUFBTyxzQkFBQSxHQUFBSixzQkFBQSxDQUFBSCxPQUFBO0FBRUEsSUFBQVEsa0NBQUEsR0FBQVIsT0FBQTtBQUNBLElBQUFTLGdCQUFBLEdBQUFOLHNCQUFBLENBQUFILE9BQUE7QUFFQSxJQUFBVSxjQUFBLEdBQUFWLE9BQUE7QUFyQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBaUJBLGVBQWVXLGdCQUFnQkEsQ0FBQ0MsWUFBMEIsRUFBb0I7RUFDMUUsTUFB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