matrix-react-sdk
Version:
SDK for matrix.org using React
188 lines (143 loc) • 16.2 kB
JavaScript
"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