Use stable get_login_token and remove unstable MSC3882 support (#11001)
* Support for stable MSC3882 get_login_token * Fix unstable name type * Remove tests for unstable MSC3882 * Fix up tests
This commit is contained in:
parent
0ab51bc59d
commit
4fd8ab933a
5 changed files with 23 additions and 81 deletions
|
@ -16,9 +16,9 @@ limitations under the License.
|
||||||
|
|
||||||
import React from "react";
|
import React from "react";
|
||||||
import {
|
import {
|
||||||
IMSC3882GetLoginTokenCapability,
|
IGetLoginTokenCapability,
|
||||||
IServerVersions,
|
IServerVersions,
|
||||||
UNSTABLE_MSC3882_CAPABILITY,
|
GET_LOGIN_TOKEN_CAPABILITY,
|
||||||
Capabilities,
|
Capabilities,
|
||||||
IClientWellKnown,
|
IClientWellKnown,
|
||||||
} from "matrix-js-sdk/src/matrix";
|
} from "matrix-js-sdk/src/matrix";
|
||||||
|
@ -40,15 +40,15 @@ export default class LoginWithQRSection extends React.Component<IProps> {
|
||||||
}
|
}
|
||||||
|
|
||||||
public render(): JSX.Element | null {
|
public render(): JSX.Element | null {
|
||||||
// Needs server support for MSC3882 and MSC3886:
|
// Needs server support for get_login_token and MSC3886:
|
||||||
// in r0 of MSC3882 it is exposed as a feature flag, but in r1 it is a capability
|
// in r0 of MSC3882 it is exposed as a feature flag, but in stable and unstable r1 it is a capability
|
||||||
const capability = UNSTABLE_MSC3882_CAPABILITY.findIn<IMSC3882GetLoginTokenCapability>(this.props.capabilities);
|
const capability = GET_LOGIN_TOKEN_CAPABILITY.findIn<IGetLoginTokenCapability>(this.props.capabilities);
|
||||||
const msc3882Supported =
|
const getLoginTokenSupported =
|
||||||
!!this.props.versions?.unstable_features?.["org.matrix.msc3882"] || !!capability?.enabled;
|
!!this.props.versions?.unstable_features?.["org.matrix.msc3882"] || !!capability?.enabled;
|
||||||
const msc3886Supported =
|
const msc3886Supported =
|
||||||
!!this.props.versions?.unstable_features?.["org.matrix.msc3886"] ||
|
!!this.props.versions?.unstable_features?.["org.matrix.msc3886"] ||
|
||||||
this.props.wellKnown?.["io.element.rendezvous"]?.server;
|
this.props.wellKnown?.["io.element.rendezvous"]?.server;
|
||||||
const offerShowQr = msc3882Supported && msc3886Supported;
|
const offerShowQr = getLoginTokenSupported && msc3886Supported;
|
||||||
|
|
||||||
// don't show anything if no method is available
|
// don't show anything if no method is available
|
||||||
if (!offerShowQr) {
|
if (!offerShowQr) {
|
||||||
|
|
|
@ -89,8 +89,7 @@ describe("<LoginWithQR />", () => {
|
||||||
jest.spyOn(MSC3906Rendezvous.prototype, "verifyNewDeviceOnExistingDevice").mockResolvedValue(undefined);
|
jest.spyOn(MSC3906Rendezvous.prototype, "verifyNewDeviceOnExistingDevice").mockResolvedValue(undefined);
|
||||||
client.requestLoginToken.mockResolvedValue({
|
client.requestLoginToken.mockResolvedValue({
|
||||||
login_token: "token",
|
login_token: "token",
|
||||||
expires_in: 1000, // this is as per MSC3882 r0
|
expires_in_ms: 1000 * 1000,
|
||||||
expires_in_ms: 1000 * 1000, // this is as per MSC3882 r1
|
|
||||||
} as LoginTokenPostResponse); // we force the type here so that it works with versions of js-sdk that don't have r1 support yet
|
} as LoginTokenPostResponse); // we force the type here so that it works with versions of js-sdk that don't have r1 support yet
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -16,7 +16,7 @@ limitations under the License.
|
||||||
|
|
||||||
import { render } from "@testing-library/react";
|
import { render } from "@testing-library/react";
|
||||||
import { mocked } from "jest-mock";
|
import { mocked } from "jest-mock";
|
||||||
import { IClientWellKnown, IServerVersions, MatrixClient, UNSTABLE_MSC3882_CAPABILITY } from "matrix-js-sdk/src/matrix";
|
import { IClientWellKnown, IServerVersions, MatrixClient, GET_LOGIN_TOKEN_CAPABILITY } from "matrix-js-sdk/src/matrix";
|
||||||
import React from "react";
|
import React from "react";
|
||||||
|
|
||||||
import LoginWithQRSection from "../../../../../src/components/views/settings/devices/LoginWithQRSection";
|
import LoginWithQRSection from "../../../../../src/components/views/settings/devices/LoginWithQRSection";
|
||||||
|
@ -67,23 +67,18 @@ describe("<LoginWithQRSection />", () => {
|
||||||
expect(container).toMatchSnapshot();
|
expect(container).toMatchSnapshot();
|
||||||
});
|
});
|
||||||
|
|
||||||
it("only MSC3882 enabled", async () => {
|
it("only get_login_token enabled", async () => {
|
||||||
const { container } = render(getComponent({ versions: makeVersions({ "org.matrix.msc3882": true }) }));
|
|
||||||
expect(container).toMatchSnapshot();
|
|
||||||
});
|
|
||||||
|
|
||||||
it("only MSC3882 r1 enabled", async () => {
|
|
||||||
const { container } = render(
|
const { container } = render(
|
||||||
getComponent({ capabilities: { [UNSTABLE_MSC3882_CAPABILITY.name]: { enabled: true } } }),
|
getComponent({ capabilities: { [GET_LOGIN_TOKEN_CAPABILITY.name]: { enabled: true } } }),
|
||||||
);
|
);
|
||||||
expect(container).toMatchSnapshot();
|
expect(container).toMatchSnapshot();
|
||||||
});
|
});
|
||||||
|
|
||||||
it("MSC3886 + MSC3882 r1 disabled", async () => {
|
it("MSC3886 + get_login_token disabled", async () => {
|
||||||
const { container } = render(
|
const { container } = render(
|
||||||
getComponent({
|
getComponent({
|
||||||
versions: makeVersions({ "org.matrix.msc3886": true }),
|
versions: makeVersions({ "org.matrix.msc3886": true }),
|
||||||
capabilities: { [UNSTABLE_MSC3882_CAPABILITY.name]: { enabled: false } },
|
capabilities: { [GET_LOGIN_TOKEN_CAPABILITY.name]: { enabled: false } },
|
||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
expect(container).toMatchSnapshot();
|
expect(container).toMatchSnapshot();
|
||||||
|
@ -91,33 +86,21 @@ describe("<LoginWithQRSection />", () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
describe("should render panel", () => {
|
describe("should render panel", () => {
|
||||||
it("MSC3882 + MSC3886", async () => {
|
it("get_login_token + MSC3886", async () => {
|
||||||
const { container } = render(
|
|
||||||
getComponent({
|
|
||||||
versions: makeVersions({
|
|
||||||
"org.matrix.msc3882": true,
|
|
||||||
"org.matrix.msc3886": true,
|
|
||||||
}),
|
|
||||||
}),
|
|
||||||
);
|
|
||||||
expect(container).toMatchSnapshot();
|
|
||||||
});
|
|
||||||
|
|
||||||
it("MSC3882 r1 + MSC3886", async () => {
|
|
||||||
const { container } = render(
|
const { container } = render(
|
||||||
getComponent({
|
getComponent({
|
||||||
versions: makeVersions({
|
versions: makeVersions({
|
||||||
"org.matrix.msc3886": true,
|
"org.matrix.msc3886": true,
|
||||||
}),
|
}),
|
||||||
capabilities: {
|
capabilities: {
|
||||||
[UNSTABLE_MSC3882_CAPABILITY.name]: { enabled: true },
|
[GET_LOGIN_TOKEN_CAPABILITY.name]: { enabled: true },
|
||||||
},
|
},
|
||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
expect(container).toMatchSnapshot();
|
expect(container).toMatchSnapshot();
|
||||||
});
|
});
|
||||||
|
|
||||||
it("MSC3882 r1 + .well-known", async () => {
|
it("get_login_token + .well-known", async () => {
|
||||||
const wellKnown = {
|
const wellKnown = {
|
||||||
"io.element.rendezvous": {
|
"io.element.rendezvous": {
|
||||||
server: "https://rz.local",
|
server: "https://rz.local",
|
||||||
|
@ -127,7 +110,7 @@ describe("<LoginWithQRSection />", () => {
|
||||||
const { container } = render(
|
const { container } = render(
|
||||||
getComponent({
|
getComponent({
|
||||||
versions: makeVersions({}),
|
versions: makeVersions({}),
|
||||||
capabilities: { [UNSTABLE_MSC3882_CAPABILITY.name]: { enabled: true } },
|
capabilities: { [GET_LOGIN_TOKEN_CAPABILITY.name]: { enabled: true } },
|
||||||
wellKnown,
|
wellKnown,
|
||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
|
|
|
@ -1,14 +1,12 @@
|
||||||
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
||||||
|
|
||||||
exports[`<LoginWithQRSection /> should not render MSC3886 + MSC3882 r1 disabled 1`] = `<div />`;
|
exports[`<LoginWithQRSection /> should not render MSC3886 + get_login_token disabled 1`] = `<div />`;
|
||||||
|
|
||||||
exports[`<LoginWithQRSection /> should not render no support at all 1`] = `<div />`;
|
exports[`<LoginWithQRSection /> should not render no support at all 1`] = `<div />`;
|
||||||
|
|
||||||
exports[`<LoginWithQRSection /> should not render only MSC3882 enabled 1`] = `<div />`;
|
exports[`<LoginWithQRSection /> should not render only get_login_token enabled 1`] = `<div />`;
|
||||||
|
|
||||||
exports[`<LoginWithQRSection /> should not render only MSC3882 r1 enabled 1`] = `<div />`;
|
exports[`<LoginWithQRSection /> should render panel get_login_token + .well-known 1`] = `
|
||||||
|
|
||||||
exports[`<LoginWithQRSection /> should render panel MSC3882 + MSC3886 1`] = `
|
|
||||||
<div>
|
<div>
|
||||||
<div
|
<div
|
||||||
class="mx_SettingsSubsection"
|
class="mx_SettingsSubsection"
|
||||||
|
@ -46,45 +44,7 @@ exports[`<LoginWithQRSection /> should render panel MSC3882 + MSC3886 1`] = `
|
||||||
</div>
|
</div>
|
||||||
`;
|
`;
|
||||||
|
|
||||||
exports[`<LoginWithQRSection /> should render panel MSC3882 r1 + .well-known 1`] = `
|
exports[`<LoginWithQRSection /> should render panel get_login_token + MSC3886 1`] = `
|
||||||
<div>
|
|
||||||
<div
|
|
||||||
class="mx_SettingsSubsection"
|
|
||||||
>
|
|
||||||
<div
|
|
||||||
class="mx_SettingsSubsectionHeading"
|
|
||||||
>
|
|
||||||
<h3
|
|
||||||
class="mx_Heading_h4 mx_SettingsSubsectionHeading_heading"
|
|
||||||
>
|
|
||||||
Sign in with QR code
|
|
||||||
</h3>
|
|
||||||
</div>
|
|
||||||
<div
|
|
||||||
class="mx_SettingsSubsection_content"
|
|
||||||
>
|
|
||||||
<div
|
|
||||||
class="mx_LoginWithQRSection"
|
|
||||||
>
|
|
||||||
<p
|
|
||||||
class="mx_SettingsTab_subsectionText"
|
|
||||||
>
|
|
||||||
You can use this device to sign in a new device with a QR code. You will need to scan the QR code shown on this device with your device that's signed out.
|
|
||||||
</p>
|
|
||||||
<div
|
|
||||||
class="mx_AccessibleButton mx_AccessibleButton_hasKind mx_AccessibleButton_kind_primary"
|
|
||||||
role="button"
|
|
||||||
tabindex="0"
|
|
||||||
>
|
|
||||||
Show QR code
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
`;
|
|
||||||
|
|
||||||
exports[`<LoginWithQRSection /> should render panel MSC3882 r1 + MSC3886 1`] = `
|
|
||||||
<div>
|
<div>
|
||||||
<div
|
<div
|
||||||
class="mx_SettingsSubsection"
|
class="mx_SettingsSubsection"
|
||||||
|
|
|
@ -28,7 +28,7 @@ import {
|
||||||
PUSHER_DEVICE_ID,
|
PUSHER_DEVICE_ID,
|
||||||
PUSHER_ENABLED,
|
PUSHER_ENABLED,
|
||||||
IAuthData,
|
IAuthData,
|
||||||
UNSTABLE_MSC3882_CAPABILITY,
|
GET_LOGIN_TOKEN_CAPABILITY,
|
||||||
CryptoApi,
|
CryptoApi,
|
||||||
DeviceVerificationStatus,
|
DeviceVerificationStatus,
|
||||||
MatrixError,
|
MatrixError,
|
||||||
|
@ -1534,7 +1534,7 @@ describe("<SessionManagerTab />", () => {
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
mockClient.getCapabilities.mockResolvedValue({
|
mockClient.getCapabilities.mockResolvedValue({
|
||||||
[UNSTABLE_MSC3882_CAPABILITY.name]: {
|
[GET_LOGIN_TOKEN_CAPABILITY.name]: {
|
||||||
enabled: true,
|
enabled: true,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue