matrix-react-sdk
Version:
SDK for matrix.org using React
66 lines (63 loc) • 12.9 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
exports.shouldShowQr = shouldShowQr;
var _react = _interopRequireDefault(require("react"));
var _matrix = require("matrix-js-sdk/src/matrix");
var _qrCode = _interopRequireDefault(require("@vector-im/compound-design-tokens/assets/web/icons/qr-code"));
var _compoundWeb = require("@vector-im/compound-web");
var _languageHandler = require("../../../../languageHandler");
var _AccessibleButton = _interopRequireDefault(require("../../elements/AccessibleButton"));
var _SettingsSubsection = _interopRequireDefault(require("../shared/SettingsSubsection"));
var _MatrixClientContext = require("../../../../contexts/MatrixClientContext");
/*
Copyright 2024 New Vector Ltd.
Copyright 2022 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.
*/
function shouldShowQrLegacy(versions, wellKnown, capabilities) {
// Needs server support for (get_login_token or OIDC Device Authorization Grant) and MSC3886:
// in r0 of MSC3882 it is exposed as a feature flag, but in stable and unstable r1 it is a capability
const loginTokenCapability = _matrix.GET_LOGIN_TOKEN_CAPABILITY.findIn(capabilities);
const getLoginTokenSupported = !!versions?.unstable_features?.["org.matrix.msc3882"] || !!loginTokenCapability?.enabled;
const msc3886Supported = !!versions?.unstable_features?.["org.matrix.msc3886"] || !!wellKnown?.["io.element.rendezvous"]?.server;
return getLoginTokenSupported && msc3886Supported;
}
function shouldShowQr(cli, isCrossSigningReady, oidcClientConfig, versions, wellKnown) {
const msc4108Supported = !!versions?.unstable_features?.["org.matrix.msc4108"] || !!wellKnown?.["io.element.rendezvous"]?.server;
const deviceAuthorizationGrantSupported = oidcClientConfig?.metadata?.grant_types_supported.includes(_matrix.DEVICE_CODE_SCOPE);
return !!deviceAuthorizationGrantSupported && msc4108Supported && !!cli.getCrypto()?.exportSecretsBundle && isCrossSigningReady;
}
const LoginWithQRSection = ({
onShowQr,
versions,
capabilities,
wellKnown,
oidcClientConfig,
isCrossSigningReady
}) => {
const cli = (0, _MatrixClientContext.useMatrixClientContext)();
const offerShowQr = oidcClientConfig ? shouldShowQr(cli, !!isCrossSigningReady, oidcClientConfig, versions, wellKnown) : shouldShowQrLegacy(versions, wellKnown, capabilities);
return /*#__PURE__*/_react.default.createElement(_SettingsSubsection.default, {
heading: (0, _languageHandler._t)("settings|sessions|sign_in_with_qr")
}, /*#__PURE__*/_react.default.createElement("div", {
className: "mx_LoginWithQRSection"
}, /*#__PURE__*/_react.default.createElement("p", {
className: "mx_SettingsTab_subsectionText"
}, (0, _languageHandler._t)("settings|sessions|sign_in_with_qr_description")), /*#__PURE__*/_react.default.createElement(_AccessibleButton.default, {
onClick: onShowQr,
kind: "primary",
disabled: !offerShowQr
}, /*#__PURE__*/_react.default.createElement(_qrCode.default, {
height: 20,
width: 20
}), (0, _languageHandler._t)("settings|sessions|sign_in_with_qr_button")), !offerShowQr && /*#__PURE__*/_react.default.createElement(_compoundWeb.Text, {
size: "sm"
}, (0, _languageHandler._t)("settings|sessions|sign_in_with_qr_unsupported"))));
};
var _default = exports.default = LoginWithQRSection;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9tYXRyaXgiLCJfcXJDb2RlIiwiX2NvbXBvdW5kV2ViIiwiX2xhbmd1YWdlSGFuZGxlciIsIl9BY2Nlc3NpYmxlQnV0dG9uIiwiX1NldHRpbmdzU3Vic2VjdGlvbiIsIl9NYXRyaXhDbGllbnRDb250ZXh0Iiwic2hvdWxkU2hvd1FyTGVnYWN5IiwidmVyc2lvbnMiLCJ3ZWxsS25vd24iLCJjYXBhYmlsaXRpZXMiLCJsb2dpblRva2VuQ2FwYWJpbGl0eSIsIkdFVF9MT0dJTl9UT0tFTl9DQVBBQklMSVRZIiwiZmluZEluIiwiZ2V0TG9naW5Ub2tlblN1cHBvcnRlZCIsInVuc3RhYmxlX2ZlYXR1cmVzIiwiZW5hYmxlZCIsIm1zYzM4ODZTdXBwb3J0ZWQiLCJzZXJ2ZXIiLCJzaG91bGRTaG93UXIiLCJjbGkiLCJpc0Nyb3NzU2lnbmluZ1JlYWR5Iiwib2lkY0NsaWVudENvbmZpZyIsIm1zYzQxMDhTdXBwb3J0ZWQiLCJkZXZpY2VBdXRob3JpemF0aW9uR3JhbnRTdXBwb3J0ZWQiLCJtZXRhZGF0YSIsImdyYW50X3R5cGVzX3N1cHBvcnRlZCIsImluY2x1ZGVzIiwiREVWSUNFX0NPREVfU0NPUEUiLCJnZXRDcnlwdG8iLCJleHBvcnRTZWNyZXRzQnVuZGxlIiwiTG9naW5XaXRoUVJTZWN0aW9uIiwib25TaG93UXIiLCJ1c2VNYXRyaXhDbGllbnRDb250ZXh0Iiwib2ZmZXJTaG93UXIiLCJkZWZhdWx0IiwiY3JlYXRlRWxlbWVudCIsImhlYWRpbmciLCJfdCIsImNsYXNzTmFtZSIsIm9uQ2xpY2siLCJraW5kIiwiZGlzYWJsZWQiLCJoZWlnaHQiLCJ3aWR0aCIsIlRleHQiLCJzaXplIiwiX2RlZmF1bHQiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvdmlld3Mvc2V0dGluZ3MvZGV2aWNlcy9Mb2dpbldpdGhRUlNlY3Rpb24udHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgMjAyNCBOZXcgVmVjdG9yIEx0ZC5cbkNvcHlyaWdodCAyMDIyIFRoZSBNYXRyaXgub3JnIEZvdW5kYXRpb24gQy5JLkMuXG5cblNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMC1vbmx5IE9SIEdQTC0zLjAtb25seVxuUGxlYXNlIHNlZSBMSUNFTlNFIGZpbGVzIGluIHRoZSByZXBvc2l0b3J5IHJvb3QgZm9yIGZ1bGwgZGV0YWlscy5cbiovXG5cbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7XG4gICAgSUdldExvZ2luVG9rZW5DYXBhYmlsaXR5LFxuICAgIElTZXJ2ZXJWZXJzaW9ucyxcbiAgICBHRVRfTE9HSU5fVE9LRU5fQ0FQQUJJTElUWSxcbiAgICBDYXBhYmlsaXRpZXMsXG4gICAgSUNsaWVudFdlbGxLbm93bixcbiAgICBPaWRjQ2xpZW50Q29uZmlnLFxuICAgIE1hdHJpeENsaWVudCxcbiAgICBERVZJQ0VfQ09ERV9TQ09QRSxcbn0gZnJvbSBcIm1hdHJpeC1qcy1zZGsvc3JjL21hdHJpeFwiO1xuaW1wb3J0IFFyQ29kZUljb24gZnJvbSBcIkB2ZWN0b3ItaW0vY29tcG91bmQtZGVzaWduLXRva2Vucy9hc3NldHMvd2ViL2ljb25zL3FyLWNvZGVcIjtcbmltcG9ydCB7IFRleHQgfSBmcm9tIFwiQHZlY3Rvci1pbS9jb21wb3VuZC13ZWJcIjtcblxuaW1wb3J0IHsgX3QgfSBmcm9tIFwiLi4vLi4vLi4vLi4vbGFuZ3VhZ2VIYW5kbGVyXCI7XG5pbXBvcnQgQWNjZXNzaWJsZUJ1dHRvbiBmcm9tIFwiLi4vLi4vZWxlbWVudHMvQWNjZXNzaWJsZUJ1dHRvblwiO1xuaW1wb3J0IFNldHRpbmdzU3Vic2VjdGlvbiBmcm9tIFwiLi4vc2hhcmVkL1NldHRpbmdzU3Vic2VjdGlvblwiO1xuaW1wb3J0IHsgdXNlTWF0cml4Q2xpZW50Q29udGV4dCB9IGZyb20gXCIuLi8uLi8uLi8uLi9jb250ZXh0cy9NYXRyaXhDbGllbnRDb250ZXh0XCI7XG5cbmludGVyZmFjZSBJUHJvcHMge1xuICAgIG9uU2hvd1FyOiAoKSA9PiB2b2lkO1xuICAgIHZlcnNpb25zPzogSVNlcnZlclZlcnNpb25zO1xuICAgIGNhcGFiaWxpdGllcz86IENhcGFiaWxpdGllcztcbiAgICB3ZWxsS25vd24/OiBJQ2xpZW50V2VsbEtub3duO1xuICAgIG9pZGNDbGllbnRDb25maWc/OiBPaWRjQ2xpZW50Q29uZmlnO1xuICAgIGlzQ3Jvc3NTaWduaW5nUmVhZHk/OiBib29sZWFuO1xufVxuXG5mdW5jdGlvbiBzaG91bGRTaG93UXJMZWdhY3koXG4gICAgdmVyc2lvbnM/OiBJU2VydmVyVmVyc2lvbnMsXG4gICAgd2VsbEtub3duPzogSUNsaWVudFdlbGxLbm93bixcbiAgICBjYXBhYmlsaXRpZXM/OiBDYXBhYmlsaXRpZXMsXG4pOiBib29sZWFuIHtcbiAgICAvLyBOZWVkcyBzZXJ2ZXIgc3VwcG9ydCBmb3IgKGdldF9sb2dpbl90b2tlbiBvciBPSURDIERldmljZSBBdXRob3JpemF0aW9uIEdyYW50KSBhbmQgTVNDMzg4NjpcbiAgICAvLyBpbiByMCBvZiBNU0MzODgyIGl0IGlzIGV4cG9zZWQgYXMgYSBmZWF0dXJlIGZsYWcsIGJ1dCBpbiBzdGFibGUgYW5kIHVuc3RhYmxlIHIxIGl0IGlzIGEgY2FwYWJpbGl0eVxuICAgIGNvbnN0IGxvZ2luVG9rZW5DYXBhYmlsaXR5ID0gR0VUX0xPR0lOX1RPS0VOX0NBUEFCSUxJVFkuZmluZEluPElHZXRMb2dpblRva2VuQ2FwYWJpbGl0eT4oY2FwYWJpbGl0aWVzKTtcbiAgICBjb25zdCBnZXRMb2dpblRva2VuU3VwcG9ydGVkID1cbiAgICAgICAgISF2ZXJzaW9ucz8udW5zdGFibGVfZmVhdHVyZXM/LltcIm9yZy5tYXRyaXgubXNjMzg4MlwiXSB8fCAhIWxvZ2luVG9rZW5DYXBhYmlsaXR5Py5lbmFibGVkO1xuICAgIGNvbnN0IG1zYzM4ODZTdXBwb3J0ZWQgPVxuICAgICAgICAhIXZlcnNpb25zPy51bnN0YWJsZV9mZWF0dXJlcz8uW1wib3JnLm1hdHJpeC5tc2MzODg2XCJdIHx8ICEhd2VsbEtub3duPy5bXCJpby5lbGVtZW50LnJlbmRlenZvdXNcIl0/LnNlcnZlcjtcbiAgICByZXR1cm4gZ2V0TG9naW5Ub2tlblN1cHBvcnRlZCAmJiBtc2MzODg2U3VwcG9ydGVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2hvdWxkU2hvd1FyKFxuICAgIGNsaTogTWF0cml4Q2xpZW50LFxuICAgIGlzQ3Jvc3NTaWduaW5nUmVhZHk6IGJvb2xlYW4sXG4gICAgb2lkY0NsaWVudENvbmZpZz86IE9pZGNDbGllbnRDb25maWcsXG4gICAgdmVyc2lvbnM/OiBJU2VydmVyVmVyc2lvbnMsXG4gICAgd2VsbEtub3duPzogSUNsaWVudFdlbGxLbm93bixcbik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IG1zYzQxMDhTdXBwb3J0ZWQgPVxuICAgICAgICAhIXZlcnNpb25zPy51bnN0YWJsZV9mZWF0dXJlcz8uW1wib3JnLm1hdHJpeC5tc2M0MTA4XCJdIHx8ICEhd2VsbEtub3duPy5bXCJpby5lbGVtZW50LnJlbmRlenZvdXNcIl0/LnNlcnZlcjtcblxuICAgIGNvbnN0IGRldmljZUF1dGhvcml6YXRpb25HcmFudFN1cHBvcnRlZCA9XG4gICAgICAgIG9pZGNDbGllbnRDb25maWc/Lm1ldGFkYXRhPy5ncmFudF90eXBlc19zdXBwb3J0ZWQuaW5jbHVkZXMoREVWSUNFX0NPREVfU0NPUEUpO1xuXG4gICAgcmV0dXJuIChcbiAgICAgICAgISFkZXZpY2VBdXRob3JpemF0aW9uR3JhbnRTdXBwb3J0ZWQgJiZcbiAgICAgICAgbXNjNDEwOFN1cHBvcnRlZCAmJlxuICAgICAgICAhIWNsaS5nZXRDcnlwdG8oKT8uZXhwb3J0U2VjcmV0c0J1bmRsZSAmJlxuICAgICAgICBpc0Nyb3NzU2lnbmluZ1JlYWR5XG4gICAgKTtcbn1cblxuY29uc3QgTG9naW5XaXRoUVJTZWN0aW9uOiBSZWFjdC5GQzxJUHJvcHM+ID0gKHtcbiAgICBvblNob3dRcixcbiAgICB2ZXJzaW9ucyxcbiAgICBjYXBhYmlsaXRpZXMsXG4gICAgd2VsbEtub3duLFxuICAgIG9pZGNDbGllbnRDb25maWcsXG4gICAgaXNDcm9zc1NpZ25pbmdSZWFkeSxcbn0pID0+IHtcbiAgICBjb25zdCBjbGkgPSB1c2VNYXRyaXhDbGllbnRDb250ZXh0KCk7XG4gICAgY29uc3Qgb2ZmZXJTaG93UXIgPSBvaWRjQ2xpZW50Q29uZmlnXG4gICAgICAgID8gc2hvdWxkU2hvd1FyKGNsaSwgISFpc0Nyb3NzU2lnbmluZ1JlYWR5LCBvaWRjQ2xpZW50Q29uZmlnLCB2ZXJzaW9ucywgd2VsbEtub3duKVxuICAgICAgICA6IHNob3VsZFNob3dRckxlZ2FjeSh2ZXJzaW9ucywgd2VsbEtub3duLCBjYXBhYmlsaXRpZXMpO1xuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPFNldHRpbmdzU3Vic2VjdGlvbiBoZWFkaW5nPXtfdChcInNldHRpbmdzfHNlc3Npb25zfHNpZ25faW5fd2l0aF9xclwiKX0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm14X0xvZ2luV2l0aFFSU2VjdGlvblwiPlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cIm14X1NldHRpbmdzVGFiX3N1YnNlY3Rpb25UZXh0XCI+e190KFwic2V0dGluZ3N8c2Vzc2lvbnN8c2lnbl9pbl93aXRoX3FyX2Rlc2NyaXB0aW9uXCIpfTwvcD5cbiAgICAgICAgICAgICAgICA8QWNjZXNzaWJsZUJ1dHRvbiBvbkNsaWNrPXtvblNob3dRcn0ga2luZD1cInByaW1hcnlcIiBkaXNhYmxlZD17IW9mZmVyU2hvd1FyfT5cbiAgICAgICAgICAgICAgICAgICAgPFFyQ29kZUljb24gaGVpZ2h0PXsyMH0gd2lkdGg9ezIwfSAvPlxuICAgICAgICAgICAgICAgICAgICB7X3QoXCJzZXR0aW5nc3xzZXNzaW9uc3xzaWduX2luX3dpdGhfcXJfYnV0dG9uXCIpfVxuICAgICAgICAgICAgICAgIDwvQWNjZXNzaWJsZUJ1dHRvbj5cbiAgICAgICAgICAgICAgICB7IW9mZmVyU2hvd1FyICYmIDxUZXh0IHNpemU9XCJzbVwiPntfdChcInNldHRpbmdzfHNlc3Npb25zfHNpZ25faW5fd2l0aF9xcl91bnN1cHBvcnRlZFwiKX08L1RleHQ+fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvU2V0dGluZ3NTdWJzZWN0aW9uPlxuICAgICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBMb2dpbldpdGhRUlNlY3Rpb247XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBUUEsSUFBQUEsTUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsT0FBQSxHQUFBRCxPQUFBO0FBVUEsSUFBQUUsT0FBQSxHQUFBSCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUcsWUFBQSxHQUFBSCxPQUFBO0FBRUEsSUFBQUksZ0JBQUEsR0FBQUosT0FBQTtBQUNBLElBQUFLLGlCQUFBLEdBQUFOLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBTSxtQkFBQSxHQUFBUCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQU8sb0JBQUEsR0FBQVAsT0FBQTtBQXpCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUE4QkEsU0FBU1Esa0JBQWtCQSxDQUN2QkMsUUFBMEIsRUFDMUJDLFNBQTRCLEVBQzVCQyxZQUEyQixFQUNwQjtFQUNQO0VBQ0E7RUFDQSxNQUFNQyxvQkFBb0IsR0FBR0Msa0NBQTBCLENBQUNDLE1BQU0sQ0FBMkJILFlBQVksQ0FBQztFQUN0RyxNQUFNSSxzQkFBc0IsR0FDeEIsQ0FBQyxDQUFDTixRQUFRLEVBQUVPLGlCQUFpQixHQUFHLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDSixvQkFBb0IsRUFBRUssT0FBTztFQUM1RixNQUFNQyxnQkFBZ0IsR0FDbEIsQ0FBQyxDQUFDVCxRQUFRLEVBQUVPLGlCQUFpQixHQUFHLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDTixTQUFTLEdBQUcsdUJBQXVCLENBQUMsRUFBRVMs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