matrix-react-sdk
Version:
SDK for matrix.org using React
117 lines (114 loc) • 17.2 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _react = _interopRequireDefault(require("react"));
var _languageHandler = require("../../../languageHandler");
var _SetupEncryptionStore = require("../../../stores/SetupEncryptionStore");
var _SetupEncryptionBody = _interopRequireDefault(require("./SetupEncryptionBody"));
var _AccessibleButton = _interopRequireDefault(require("../../views/elements/AccessibleButton"));
var _CompleteSecurityBody = _interopRequireDefault(require("../../views/auth/CompleteSecurityBody"));
var _AuthPage = _interopRequireDefault(require("../../views/auth/AuthPage"));
var _SdkConfig = _interopRequireDefault(require("../../../SdkConfig"));
/*
Copyright 2024 New Vector Ltd.
Copyright 2020 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.
*/
class CompleteSecurity extends _react.default.Component {
constructor(props) {
super(props);
(0, _defineProperty2.default)(this, "onStoreUpdate", () => {
const store = _SetupEncryptionStore.SetupEncryptionStore.sharedInstance();
this.setState({
phase: store.phase,
lostKeys: store.lostKeys()
});
});
(0, _defineProperty2.default)(this, "onSkipClick", () => {
const store = _SetupEncryptionStore.SetupEncryptionStore.sharedInstance();
store.skip();
});
const _store = _SetupEncryptionStore.SetupEncryptionStore.sharedInstance();
_store.on("update", this.onStoreUpdate);
_store.start();
this.state = {
phase: _store.phase,
lostKeys: _store.lostKeys()
};
}
componentWillUnmount() {
const store = _SetupEncryptionStore.SetupEncryptionStore.sharedInstance();
store.off("update", this.onStoreUpdate);
store.stop();
}
render() {
const {
phase,
lostKeys
} = this.state;
let icon;
let title;
if (phase === _SetupEncryptionStore.Phase.Loading) {
return null;
} else if (phase === _SetupEncryptionStore.Phase.Intro) {
if (lostKeys) {
icon = /*#__PURE__*/_react.default.createElement("span", {
className: "mx_CompleteSecurity_headerIcon mx_E2EIcon_warning"
});
title = (0, _languageHandler._t)("encryption|verification|after_new_login|unable_to_verify");
} else {
icon = /*#__PURE__*/_react.default.createElement("span", {
className: "mx_CompleteSecurity_headerIcon mx_E2EIcon_warning"
});
title = (0, _languageHandler._t)("encryption|verification|after_new_login|verify_this_device");
}
} else if (phase === _SetupEncryptionStore.Phase.Done) {
icon = /*#__PURE__*/_react.default.createElement("span", {
className: "mx_CompleteSecurity_headerIcon mx_E2EIcon_verified"
});
title = (0, _languageHandler._t)("encryption|verification|after_new_login|device_verified");
} else if (phase === _SetupEncryptionStore.Phase.ConfirmSkip) {
icon = /*#__PURE__*/_react.default.createElement("span", {
className: "mx_CompleteSecurity_headerIcon mx_E2EIcon_warning"
});
title = (0, _languageHandler._t)("common|are_you_sure");
} else if (phase === _SetupEncryptionStore.Phase.Busy) {
icon = /*#__PURE__*/_react.default.createElement("span", {
className: "mx_CompleteSecurity_headerIcon mx_E2EIcon_warning"
});
title = (0, _languageHandler._t)("encryption|verification|after_new_login|verify_this_device");
} else if (phase === _SetupEncryptionStore.Phase.ConfirmReset) {
icon = /*#__PURE__*/_react.default.createElement("span", {
className: "mx_CompleteSecurity_headerIcon mx_E2EIcon_warning"
});
title = (0, _languageHandler._t)("encryption|verification|after_new_login|reset_confirmation");
} else if (phase === _SetupEncryptionStore.Phase.Finished) {
// SetupEncryptionBody will take care of calling onFinished, we don't need to do anything
} else {
throw new Error(`Unknown phase ${phase}`);
}
const forceVerification = _SdkConfig.default.get("force_verification");
let skipButton;
if (!forceVerification && (phase === _SetupEncryptionStore.Phase.Intro || phase === _SetupEncryptionStore.Phase.ConfirmReset)) {
skipButton = /*#__PURE__*/_react.default.createElement(_AccessibleButton.default, {
onClick: this.onSkipClick,
className: "mx_CompleteSecurity_skip",
"aria-label": (0, _languageHandler._t)("encryption|verification|after_new_login|skip_verification")
});
}
return /*#__PURE__*/_react.default.createElement(_AuthPage.default, null, /*#__PURE__*/_react.default.createElement(_CompleteSecurityBody.default, null, /*#__PURE__*/_react.default.createElement("h1", {
className: "mx_CompleteSecurity_header"
}, icon, title, skipButton), /*#__PURE__*/_react.default.createElement("div", {
className: "mx_CompleteSecurity_body"
}, /*#__PURE__*/_react.default.createElement(_SetupEncryptionBody.default, {
onFinished: this.props.onFinished
}))));
}
}
exports.default = CompleteSecurity;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9sYW5ndWFnZUhhbmRsZXIiLCJfU2V0dXBFbmNyeXB0aW9uU3RvcmUiLCJfU2V0dXBFbmNyeXB0aW9uQm9keSIsIl9BY2Nlc3NpYmxlQnV0dG9uIiwiX0NvbXBsZXRlU2VjdXJpdHlCb2R5IiwiX0F1dGhQYWdlIiwiX1Nka0NvbmZpZyIsIkNvbXBsZXRlU2VjdXJpdHkiLCJSZWFjdCIsIkNvbXBvbmVudCIsImNvbnN0cnVjdG9yIiwicHJvcHMiLCJfZGVmaW5lUHJvcGVydHkyIiwiZGVmYXVsdCIsInN0b3JlIiwiU2V0dXBFbmNyeXB0aW9uU3RvcmUiLCJzaGFyZWRJbnN0YW5jZSIsInNldFN0YXRlIiwicGhhc2UiLCJsb3N0S2V5cyIsInNraXAiLCJvbiIsIm9uU3RvcmVVcGRhdGUiLCJzdGFydCIsInN0YXRlIiwiY29tcG9uZW50V2lsbFVubW91bnQiLCJvZmYiLCJzdG9wIiwicmVuZGVyIiwiaWNvbiIsInRpdGxlIiwiUGhhc2UiLCJMb2FkaW5nIiwiSW50cm8iLCJjcmVhdGVFbGVtZW50IiwiY2xhc3NOYW1lIiwiX3QiLCJEb25lIiwiQ29uZmlybVNraXAiLCJCdXN5IiwiQ29uZmlybVJlc2V0IiwiRmluaXNoZWQiLCJFcnJvciIsImZvcmNlVmVyaWZpY2F0aW9uIiwiU2RrQ29uZmlnIiwiZ2V0Iiwic2tpcEJ1dHRvbiIsIm9uQ2xpY2siLCJvblNraXBDbGljayIsIm9uRmluaXNoZWQiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvc3RydWN0dXJlcy9hdXRoL0NvbXBsZXRlU2VjdXJpdHkudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgMjAyNCBOZXcgVmVjdG9yIEx0ZC5cbkNvcHlyaWdodCAyMDIwIFRoZSBNYXRyaXgub3JnIEZvdW5kYXRpb24gQy5JLkMuXG5cblNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMC1vbmx5IE9SIEdQTC0zLjAtb25seVxuUGxlYXNlIHNlZSBMSUNFTlNFIGZpbGVzIGluIHRoZSByZXBvc2l0b3J5IHJvb3QgZm9yIGZ1bGwgZGV0YWlscy5cbiovXG5cbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHsgX3QgfSBmcm9tIFwiLi4vLi4vLi4vbGFuZ3VhZ2VIYW5kbGVyXCI7XG5pbXBvcnQgeyBTZXR1cEVuY3J5cHRpb25TdG9yZSwgUGhhc2UgfSBmcm9tIFwiLi4vLi4vLi4vc3RvcmVzL1NldHVwRW5jcnlwdGlvblN0b3JlXCI7XG5pbXBvcnQgU2V0dXBFbmNyeXB0aW9uQm9keSBmcm9tIFwiLi9TZXR1cEVuY3J5cHRpb25Cb2R5XCI7XG5pbXBvcnQgQWNjZXNzaWJsZUJ1dHRvbiBmcm9tIFwiLi4vLi4vdmlld3MvZWxlbWVudHMvQWNjZXNzaWJsZUJ1dHRvblwiO1xuaW1wb3J0IENvbXBsZXRlU2VjdXJpdHlCb2R5IGZyb20gXCIuLi8uLi92aWV3cy9hdXRoL0NvbXBsZXRlU2VjdXJpdHlCb2R5XCI7XG5pbXBvcnQgQXV0aFBhZ2UgZnJvbSBcIi4uLy4uL3ZpZXdzL2F1dGgvQXV0aFBhZ2VcIjtcbmltcG9ydCBTZGtDb25maWcgZnJvbSBcIi4uLy4uLy4uL1Nka0NvbmZpZ1wiO1xuXG5pbnRlcmZhY2UgSVByb3BzIHtcbiAgICBvbkZpbmlzaGVkOiAoKSA9PiB2b2lkO1xufVxuXG5pbnRlcmZhY2UgSVN0YXRlIHtcbiAgICBwaGFzZT86IFBoYXNlO1xuICAgIGxvc3RLZXlzOiBib29sZWFuO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb21wbGV0ZVNlY3VyaXR5IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PElQcm9wcywgSVN0YXRlPiB7XG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHByb3BzOiBJUHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuICAgICAgICBjb25zdCBzdG9yZSA9IFNldHVwRW5jcnlwdGlvblN0b3JlLnNoYXJlZEluc3RhbmNlKCk7XG4gICAgICAgIHN0b3JlLm9uKFwidXBkYXRlXCIsIHRoaXMub25TdG9yZVVwZGF0ZSk7XG4gICAgICAgIHN0b3JlLnN0YXJ0KCk7XG4gICAgICAgIHRoaXMuc3RhdGUgPSB7IHBoYXNlOiBzdG9yZS5waGFzZSwgbG9zdEtleXM6IHN0b3JlLmxvc3RLZXlzKCkgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uU3RvcmVVcGRhdGUgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgIGNvbnN0IHN0b3JlID0gU2V0dXBFbmNyeXB0aW9uU3RvcmUuc2hhcmVkSW5zdGFuY2UoKTtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IHBoYXNlOiBzdG9yZS5waGFzZSwgbG9zdEtleXM6IHN0b3JlLmxvc3RLZXlzKCkgfSk7XG4gICAgfTtcblxuICAgIHByaXZhdGUgb25Ta2lwQ2xpY2sgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgIGNvbnN0IHN0b3JlID0gU2V0dXBFbmNyeXB0aW9uU3RvcmUuc2hhcmVkSW5zdGFuY2UoKTtcbiAgICAgICAgc3RvcmUuc2tpcCgpO1xuICAgIH07XG5cbiAgICBwdWJsaWMgY29tcG9uZW50V2lsbFVubW91bnQoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHN0b3JlID0gU2V0dXBFbmNyeXB0aW9uU3RvcmUuc2hhcmVkSW5zdGFuY2UoKTtcbiAgICAgICAgc3RvcmUub2ZmKFwidXBkYXRlXCIsIHRoaXMub25TdG9yZVVwZGF0ZSk7XG4gICAgICAgIHN0b3JlLnN0b3AoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVuZGVyKCk6IFJlYWN0LlJlYWN0Tm9kZSB7XG4gICAgICAgIGNvbnN0IHsgcGhhc2UsIGxvc3RLZXlzIH0gPSB0aGlzLnN0YXRlO1xuICAgICAgICBsZXQgaWNvbjtcbiAgICAgICAgbGV0IHRpdGxlO1xuXG4gICAgICAgIGlmIChwaGFzZSA9PT0gUGhhc2UuTG9hZGluZykge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH0gZWxzZSBpZiAocGhhc2UgPT09IFBoYXNlLkludHJvKSB7XG4gICAgICAgICAgICBpZiAobG9zdEtleXMpIHtcbiAgICAgICAgICAgICAgICBpY29uID0gPHNwYW4gY2xhc3NOYW1lPVwibXhfQ29tcGxldGVTZWN1cml0eV9oZWFkZXJJY29uIG14X0UyRUljb25fd2FybmluZ1wiIC8+O1xuICAgICAgICAgICAgICAgIHRpdGxlID0gX3QoXCJlbmNyeXB0aW9ufHZlcmlmaWNhdGlvbnxhZnRlcl9uZXdfbG9naW58dW5hYmxlX3RvX3ZlcmlmeVwiKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWNvbiA9IDxzcGFuIGNsYXNzTmFtZT1cIm14X0NvbXBsZXRlU2VjdXJpdHlfaGVhZGVySWNvbiBteF9FMkVJY29uX3dhcm5pbmdcIiAvPjtcbiAgICAgICAgICAgICAgICB0aXRsZSA9IF90KFwiZW5jcnlwdGlvbnx2ZXJpZmljYXRpb258YWZ0ZXJfbmV3X2xvZ2lufHZlcmlmeV90aGlzX2RldmljZVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChwaGFzZSA9PT0gUGhhc2UuRG9uZSkge1xuICAgICAgICAgICAgaWNvbiA9IDxzcGFuIGNsYXNzTmFtZT1cIm14X0NvbXBsZXRlU2VjdXJpdHlfaGVhZGVySWNvbiBteF9FMkVJY29uX3ZlcmlmaWVkXCIgLz47XG4gICAgICAgICAgICB0aXRsZSA9IF90KFwiZW5jcnlwdGlvbnx2ZXJpZmljYXRpb258YWZ0ZXJfbmV3X2xvZ2lufGRldmljZV92ZXJpZmllZFwiKTtcbiAgICAgICAgfSBlbHNlIGlmIChwaGFzZSA9PT0gUGhhc2UuQ29uZmlybVNraXApIHtcbiAgICAgICAgICAgIGljb24gPSA8c3BhbiBjbGFzc05hbWU9XCJteF9Db21wbGV0ZVNlY3VyaXR5X2hlYWRlckljb24gbXhfRTJFSWNvbl93YXJuaW5nXCIgLz47XG4gICAgICAgICAgICB0aXRsZSA9IF90KFwiY29tbW9ufGFyZV95b3Vfc3VyZVwiKTtcbiAgICAgICAgfSBlbHNlIGlmIChwaGFzZSA9PT0gUGhhc2UuQnVzeSkge1xuICAgICAgICAgICAgaWNvbiA9IDxzcGFuIGNsYXNzTmFtZT1cIm14X0NvbXBsZXRlU2VjdXJpdHlfaGVhZGVySWNvbiBteF9FMkVJY29uX3dhcm5pbmdcIiAvPjtcbiAgICAgICAgICAgIHRpdGxlID0gX3QoXCJlbmNyeXB0aW9ufHZlcmlmaWNhdGlvbnxhZnRlcl9uZXdfbG9naW58dmVyaWZ5X3RoaXNfZGV2aWNlXCIpO1xuICAgICAgICB9IGVsc2UgaWYgKHBoYXNlID09PSBQaGFzZS5Db25maXJtUmVzZXQpIHtcbiAgICAgICAgICAgIGljb24gPSA8c3BhbiBjbGFzc05hbWU9XCJteF9Db21wbGV0ZVNlY3VyaXR5X2hlYWRlckljb24gbXhfRTJFSWNvbl93YXJuaW5nXCIgLz47XG4gICAgICAgICAgICB0aXRsZSA9IF90KFwiZW5jcnlwdGlvbnx2ZXJpZmljYXRpb258YWZ0ZXJfbmV3X2xvZ2lufHJlc2V0X2NvbmZpcm1hdGlvblwiKTtcbiAgICAgICAgfSBlbHNlIGlmIChwaGFzZSA9PT0gUGhhc2UuRmluaXNoZWQpIHtcbiAgICAgICAgICAgIC8vIFNldHVwRW5jcnlwdGlvbkJvZHkgd2lsbCB0YWtlIGNhcmUgb2YgY2FsbGluZyBvbkZpbmlzaGVkLCB3ZSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gcGhhc2UgJHtwaGFzZX1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZvcmNlVmVyaWZpY2F0aW9uID0gU2RrQ29uZmlnLmdldChcImZvcmNlX3ZlcmlmaWNhdGlvblwiKTtcblxuICAgICAgICBsZXQgc2tpcEJ1dHRvbjtcbiAgICAgICAgaWYgKCFmb3JjZVZlcmlmaWNhdGlvbiAmJiAocGhhc2UgPT09IFBoYXNlLkludHJvIHx8IHBoYXNlID09PSBQaGFzZS5Db25maXJtUmVzZXQpKSB7XG4gICAgICAgICAgICBza2lwQnV0dG9uID0gKFxuICAgICAgICAgICAgICAgIDxBY2Nlc3NpYmxlQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e3RoaXMub25Ta2lwQ2xpY2t9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm14X0NvbXBsZXRlU2VjdXJpdHlfc2tpcFwiXG4gICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9e190KFwiZW5jcnlwdGlvbnx2ZXJpZmljYXRpb258YWZ0ZXJfbmV3X2xvZ2lufHNraXBfdmVyaWZpY2F0aW9uXCIpfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxBdXRoUGFnZT5cbiAgICAgICAgICAgICAgICA8Q29tcGxldGVTZWN1cml0eUJvZHk+XG4gICAgICAgICAgICAgICAgICAgIDxoMSBjbGFzc05hbWU9XCJteF9Db21wbGV0ZVNlY3VyaXR5X2hlYWRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge2ljb259XG4gICAgICAgICAgICAgICAgICAgICAgICB7dGl0bGV9XG4gICAgICAgICAgICAgICAgICAgICAgICB7c2tpcEJ1dHRvbn1cbiAgICAgICAgICAgICAgICAgICAgPC9oMT5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJteF9Db21wbGV0ZVNlY3VyaXR5X2JvZHlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxTZXR1cEVuY3J5cHRpb25Cb2R5IG9uRmluaXNoZWQ9e3RoaXMucHJvcHMub25GaW5pc2hlZH0gLz5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9Db21wbGV0ZVNlY3VyaXR5Qm9keT5cbiAgICAgICAgICAgIDwvQXV0aFBhZ2U+XG4gICAgICAgICk7XG4gICAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQVFBLElBQUFBLE1BQUEsR0FB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