UNPKG

matrix-react-sdk

Version:
188 lines (143 loc) 16.2 kB
"use strict"; var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard"); var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.verifyDevice = verifyDevice; exports.legacyVerifyUser = legacyVerifyUser; exports.verifyUser = verifyUser; exports.pendingVerificationRequestForUser = pendingVerificationRequestForUser; var _MatrixClientPeg = require("./MatrixClientPeg"); var _dispatcher = _interopRequireDefault(require("./dispatcher/dispatcher")); var _Modal = _interopRequireDefault(require("./Modal")); var sdk = _interopRequireWildcard(require("./index")); var _RightPanelStorePhases = require("./stores/RightPanelStorePhases"); var _createRoom = require("./createRoom"); var _SecurityManager = require("./SecurityManager"); var _crypto = require("matrix-js-sdk/src/crypto"); var _actions = require("./dispatcher/actions"); var _UntrustedDeviceDialog = _interopRequireDefault(require("./components/views/dialogs/UntrustedDeviceDialog")); /* Copyright 2019, 2020, 2021 The Matrix.org Foundation C.I.C. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ async function enable4SIfNeeded() { const cli = _MatrixClientPeg.MatrixClientPeg.get(); if (!cli.isCryptoEnabled()) { return false; } const usk = cli.getCrossSigningId("user_signing"); if (!usk) { await (0, _SecurityManager.accessSecretStorage)(); return false; } return true; } async function verifyDevice(user /*: User*/ , device /*: IDevice*/ ) { const cli = _MatrixClientPeg.MatrixClientPeg.get(); if (cli.isGuest()) { _dispatcher.default.dispatch({ action: 'require_registration' }); return; } // if cross-signing is not explicitly disabled, check if it should be enabled first. if (cli.getCryptoTrustCrossSignedDevices()) { if (!(await enable4SIfNeeded())) { return; } } _Modal.default.createTrackedDialog("Verification warning", "unverified session", _UntrustedDeviceDialog.default, { user, device, onFinished: async action => { if (action === "sas") { const verificationRequestPromise = cli.legacyDeviceVerification(user.userId, device.deviceId, _crypto.verificationMethods.SAS); _dispatcher.default.dispatch({ action: _actions.Action.SetRightPanelPhase, phase: _RightPanelStorePhases.RightPanelPhases.EncryptionPanel, refireParams: { member: user, verificationRequestPromise } }); } else if (action === "legacy") { const ManualDeviceKeyVerificationDialog = sdk.getComponent("dialogs.ManualDeviceKeyVerificationDialog"); _Modal.default.createTrackedDialog("Legacy verify session", "legacy verify session", ManualDeviceKeyVerificationDialog, { userId: user.userId, device }); } } }); } async function legacyVerifyUser(user /*: User*/ ) { const cli = _MatrixClientPeg.MatrixClientPeg.get(); if (cli.isGuest()) { _dispatcher.default.dispatch({ action: 'require_registration' }); return; } // if cross-signing is not explicitly disabled, check if it should be enabled first. if (cli.getCryptoTrustCrossSignedDevices()) { if (!(await enable4SIfNeeded())) { return; } } const verificationRequestPromise = cli.requestVerification(user.userId); _dispatcher.default.dispatch({ action: _actions.Action.SetRightPanelPhase, phase: _RightPanelStorePhases.RightPanelPhases.EncryptionPanel, refireParams: { member: user, verificationRequestPromise } }); } async function verifyUser(user /*: User*/ ) { const cli = _MatrixClientPeg.MatrixClientPeg.get(); if (cli.isGuest()) { _dispatcher.default.dispatch({ action: 'require_registration' }); return; } if (!(await enable4SIfNeeded())) { return; } const existingRequest = pendingVerificationRequestForUser(user); _dispatcher.default.dispatch({ action: _actions.Action.SetRightPanelPhase, phase: _RightPanelStorePhases.RightPanelPhases.EncryptionPanel, refireParams: { member: user, verificationRequest: existingRequest } }); } function pendingVerificationRequestForUser(user /*: User*/ ) { const cli = _MatrixClientPeg.MatrixClientPeg.get(); const dmRoom = (0, _createRoom.findDMForUser)(cli, user.userId); if (dmRoom) { return cli.findVerificationRequestDMInProgress(dmRoom.roomId); } } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy92ZXJpZmljYXRpb24udHMiXSwibmFtZXMiOlsiZW5hYmxlNFNJZk5lZWRlZCIsImNsaSIsIk1hdHJpeENsaWVudFBlZyIsImdldCIsImlzQ3J5cHRvRW5hYmxlZCIsInVzayIsImdldENyb3NzU2lnbmluZ0lkIiwidmVyaWZ5RGV2aWNlIiwidXNlciIsImRldmljZSIsImlzR3Vlc3QiLCJkaXMiLCJkaXNwYXRjaCIsImFjdGlvbiIsImdldENyeXB0b1RydXN0Q3Jvc3NTaWduZWREZXZpY2VzIiwiTW9kYWwiLCJjcmVhdGVUcmFja2VkRGlhbG9nIiwiVW50cnVzdGVkRGV2aWNlRGlhbG9nIiwib25GaW5pc2hlZCIsInZlcmlmaWNhdGlvblJlcXVlc3RQcm9taXNlIiwibGVnYWN5RGV2aWNlVmVyaWZpY2F0aW9uIiwidXNlcklkIiwiZGV2aWNlSWQiLCJ2ZXJpZmljYXRpb25NZXRob2RzIiwiU0FTIiwiQWN0aW9uIiwiU2V0UmlnaHRQYW5lbFBoYXNlIiwicGhhc2UiLCJSaWdodFBhbmVsUGhhc2VzIiwiRW5jcnlwdGlvblBhbmVsIiwicmVmaXJlUGFyYW1zIiwibWVtYmVyIiwiTWFudWFsRGV2aWNlS2V5VmVyaWZpY2F0aW9uRGlhbG9nIiwic2RrIiwiZ2V0Q29tcG9uZW50IiwibGVnYWN5VmVyaWZ5VXNlciIsInJlcXVlc3RWZXJpZmljYXRpb24iLCJ2ZXJpZnlVc2VyIiwiZXhpc3RpbmdSZXF1ZXN0IiwicGVuZGluZ1ZlcmlmaWNhdGlvblJlcXVlc3RGb3JVc2VyIiwidmVyaWZpY2F0aW9uUmVxdWVzdCIsImRtUm9vbSIsImZpbmRWZXJpZmljYXRpb25SZXF1ZXN0RE1JblByb2dyZXNzIiwicm9vbUlkIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztBQWtCQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUEzQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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YXRyaXgub3JnIEZvdW5kYXRpb24gQy5JLkMuXG5cbkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG55b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG5Zb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG5Vbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG5kaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG5XSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cblNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbmxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuKi9cblxuaW1wb3J0IHsgVXNlciB9IGZyb20gXCJtYXRyaXgtanMtc2RrL3NyYy9tb2RlbHMvdXNlclwiO1xuXG5pbXBvcnQgeyBNYXRyaXhDbGllbnRQZWcgfSBmcm9tICcuL01hdHJpeENsaWVudFBlZyc7XG5pbXBvcnQgZGlzIGZyb20gXCIuL2Rpc3BhdGNoZXIvZGlzcGF0Y2hlclwiO1xuaW1wb3J0IE1vZGFsIGZyb20gJy4vTW9kYWwnO1xuaW1wb3J0ICogYXMgc2RrIGZyb20gJy4vaW5kZXgnO1xuaW1wb3J0IHsgUmlnaHRQYW5lbFBoYXNlcyB9IGZyb20gXCIuL3N0b3Jlcy9SaWdodFBhbmVsU3RvcmVQaGFzZXNcIjtcbmltcG9ydCB7IGZpbmRETUZvclVzZXIgfSBmcm9tICcuL2NyZWF0ZVJvb20nO1xuaW1wb3J0IHsgYWNjZXNzU2VjcmV0U3RvcmFnZSB9IGZyb20gJy4vU2VjdXJpdHlNYW5hZ2VyJztcbmltcG9ydCB7IHZlcmlmaWNhdGlvbk1ldGhvZHMgfSBmcm9tICdtYXRyaXgtanMtc2RrL3NyYy9jcnlwdG8nO1xuaW1wb3J0IHsgQWN0aW9uIH0gZnJvbSAnLi9kaXNwYXRjaGVyL2FjdGlvbnMnO1xuaW1wb3J0IFVudHJ1c3RlZERldmljZURpYWxvZyBmcm9tIFwiLi9jb21wb25lbnRzL3ZpZXdzL2RpYWxvZ3MvVW50cnVzdGVkRGV2aWNlRGlhbG9nXCI7XG5pbXBvcnQge0lEZXZpY2V9IGZyb20gXCIuL2NvbXBvbmVudHMvdmlld3MvcmlnaHRfcGFuZWwvVXNlckluZm9cIjtcblxuYXN5bmMgZnVuY3Rpb24gZW5hYmxlNFNJZk5lZWRlZCgpIHtcbiAgICBjb25zdCBjbGkgPSBNYXRyaXhDbGllbnRQZWcuZ2V0KCk7XG4gICAgaWYgKCFjbGkuaXNDcnlwdG9FbmFibGVkKCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCB1c2sgPSBjbGkuZ2V0Q3Jvc3NTaWduaW5nSWQoXCJ1c2VyX3NpZ25pbmdcIik7XG4gICAgaWYgKCF1c2spIHtcbiAgICAgICAgYXdhaXQgYWNjZXNzU2VjcmV0U3RvcmFnZSgpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB2ZXJpZnlEZXZpY2UodXNlcjogVXNlciwgZGV2aWNlOiBJRGV2aWNlKSB7XG4gICAgY29uc3QgY2xpID0gTWF0cml4Q2xpZW50UGVnLmdldCgpO1xuICAgIGlmIChjbGkuaXNHdWVzdCgpKSB7XG4gICAgICAgIGRpcy5kaXNwYXRjaCh7YWN0aW9uOiAncmVxdWlyZV9yZWdpc3RyYXRpb24nfSk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gaWYgY3Jvc3Mtc2lnbmluZyBpcyBub3QgZXhwbGljaXRseSBkaXNhYmxlZCwgY2hlY2sgaWYgaXQgc2hvdWxkIGJlIGVuYWJsZWQgZmlyc3QuXG4gICAgaWYgKGNsaS5nZXRDcnlwdG9UcnVzdENyb3NzU2lnbmVkRGV2aWNlcygpKSB7XG4gICAgICAgIGlmICghYXdhaXQgZW5hYmxlNFNJZk5lZWRlZCgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBNb2RhbC5jcmVhdGVUcmFja2VkRGlhbG9nKFwiVmVyaWZpY2F0aW9uIHdhcm5pbmdcIiwgXCJ1bnZlcmlmaWVkIHNlc3Npb25cIiwgVW50cnVzdGVkRGV2aWNlRGlhbG9nLCB7XG4gICAgICAgIHVzZXIsXG4gICAgICAgIGRldmljZSxcbiAgICAgICAgb25GaW5pc2hlZDogYXN5bmMgKGFjdGlvbikgPT4ge1xuICAgICAgICAgICAgaWYgKGFjdGlvbiA9PT0gXCJzYXNcIikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZlcmlmaWNhdGlvblJlcXVlc3RQcm9taXNlID0gY2xpLmxlZ2FjeURldmljZVZlcmlmaWNhdGlvbihcbiAgICAgICAgICAgICAgICAgICAgdXNlci51c2VySWQsXG4gICAgICAgICAgICAgICAgICAgIGRldmljZS5kZXZpY2VJZCxcbiAgICAgICAgICAgICAgICAgICAgdmVyaWZpY2F0aW9uTWV0aG9kcy5TQVMsXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBkaXMuZGlzcGF0Y2goe1xuICAgICAgICAgICAgICAgICAgICBhY3Rpb246IEFjdGlvbi5TZXRSaWdodFBhbmVsUGhhc2UsXG4gICAgICAgICAgICAgICAgICAgIHBoYXNlOiBSaWdodFBhbmVsUGhhc2VzLkVuY3J5cHRpb25QYW5lbCxcbiAgICAgICAgICAgICAgICAgICAgcmVmaXJlUGFyYW1zOiB7bWVtYmVyOiB1c2VyLCB2ZXJpZmljYXRpb25SZXF1ZXN0UHJvbWlzZX0sXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGFjdGlvbiA9PT0gXCJsZWdhY3lcIikge1xuICAgICAgICAgICAgICAgIGNvbnN0IE1hbnVhbERldmljZUtleVZlcmlmaWNhdGlvbkRpYWxvZyA9XG4gICAgICAgICAgICAgICAgICAgIHNkay5nZXRDb21wb25lbnQoXCJkaWFsb2dzLk1hbnVhbERldmljZUtleVZlcmlmaWNhdGlvbkRpYWxvZ1wiKTtcbiAgICAgICAgICAgICAgICBNb2RhbC5jcmVhdGVUcmFja2VkRGlhbG9nKFwiTGVnYWN5IHZlcmlmeSBzZXNzaW9uXCIsIFwibGVnYWN5IHZlcmlmeSBzZXNzaW9uXCIsXG4gICAgICAgICAgICAgICAgICAgIE1hbnVhbERldmljZUtleVZlcmlmaWNhdGlvbkRpYWxvZyxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgdXNlcklkOiB1c2VyLnVzZXJJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbGVnYWN5VmVyaWZ5VXNlcih1c2VyOiBVc2VyKSB7XG4gICAgY29uc3QgY2xpID0gTWF0cml4Q2xpZW50UGVnLmdldCgpO1xuICAgIGlmIChjbGkuaXNHdWVzdCgpKSB7XG4gICAgICAgIGRpcy5kaXNwYXRjaCh7YWN0aW9uOiAncmVxdWlyZV9yZWdpc3RyYXRpb24nfSk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gaWYgY3Jvc3Mtc2lnbmluZyBpcyBub3QgZXhwbGljaXRseSBkaXNhYmxlZCwgY2hlY2sgaWYgaXQgc2hvdWxkIGJlIGVuYWJsZWQgZmlyc3QuXG4gICAgaWYgKGNsaS5nZXRDcnlwdG9UcnVzdENyb3NzU2lnbmVkRGV2aWNlcygpKSB7XG4gICAgICAgIGlmICghYXdhaXQgZW5hYmxlNFNJZk5lZWRlZCgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgdmVyaWZpY2F0aW9uUmVxdWVzdFByb21pc2UgPSBjbGkucmVxdWVzdFZlcmlmaWNhdGlvbih1c2VyLnVzZXJJZCk7XG4gICAgZGlzLmRpc3BhdGNoKHtcbiAgICAgICAgYWN0aW9uOiBBY3Rpb24uU2V0UmlnaHRQYW5lbFBoYXNlLFxuICAgICAgICBwaGFzZTogUmlnaHRQYW5lbFBoYXNlcy5FbmNyeXB0aW9uUGFuZWwsXG4gICAgICAgIHJlZmlyZVBhcmFtczoge21lbWJlcjogdXNlciwgdmVyaWZpY2F0aW9uUmVxdWVzdFByb21pc2V9LFxuICAgIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdmVyaWZ5VXNlcih1c2VyOiBVc2VyKSB7XG4gICAgY29uc3QgY2xpID0gTWF0cml4Q2xpZW50UGVnLmdldCgpO1xuICAgIGlmIChjbGkuaXNHdWVzdCgpKSB7XG4gICAgICAgIGRpcy5kaXNwYXRjaCh7YWN0aW9uOiAncmVxdWlyZV9yZWdpc3RyYXRpb24nfSk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCFhd2FpdCBlbmFibGU0U0lmTmVlZGVkKCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBleGlzdGluZ1JlcXVlc3QgPSBwZW5kaW5nVmVyaWZpY2F0aW9uUmVxdWVzdEZvclVzZXIodXNlcik7XG4gICAgZGlzLmRpc3BhdGNoKHtcbiAgICAgICAgYWN0aW9uOiBBY3Rpb24uU2V0UmlnaHRQYW5lbFBoYXNlLFxuICAgICAgICBwaGFzZTogUmlnaHRQYW5lbFBoYXNlcy5FbmNyeXB0aW9uUGFuZWwsXG4gICAgICAgIHJlZmlyZVBhcmFtczoge1xuICAgICAgICAgICAgbWVtYmVyOiB1c2VyLFxuICAgICAgICAgICAgdmVyaWZpY2F0aW9uUmVxdWVzdDogZXhpc3RpbmdSZXF1ZXN0LFxuICAgICAgICB9LFxuICAgIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGVuZGluZ1ZlcmlmaWNhdGlvblJlcXVlc3RGb3JVc2VyKHVzZXI6IFVzZXIpIHtcbiAgICBjb25zdCBjbGkgPSBNYXRyaXhDbGllbnRQZWcuZ2V0KCk7XG4gICAgY29uc3QgZG1Sb29tID0gZmluZERNRm9yVXNlcihjbGksIHVzZXIudXNlcklkKTtcbiAgICBpZiAoZG1Sb29tKSB7XG4gICAgICAgIHJldHVybiBjbGkuZmluZFZlcmlmaWNhdGlvblJlcXVlc3RETUluUHJvZ3Jlc3MoZG1Sb29tLnJvb21JZCk7XG4gICAgfVxufVxuIl19