From 4fd8ab933a33dad2e52d71765a8bfb95b9693cbb Mon Sep 17 00:00:00 2001 From: Hugh Nimmo-Smith Date: Tue, 3 Oct 2023 13:15:41 +0100 Subject: [PATCH] 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 --- .../settings/devices/LoginWithQRSection.tsx | 14 +++--- .../settings/devices/LoginWithQR-test.tsx | 3 +- .../devices/LoginWithQRSection-test.tsx | 35 ++++---------- .../LoginWithQRSection-test.tsx.snap | 48 ++----------------- .../tabs/user/SessionManagerTab-test.tsx | 4 +- 5 files changed, 23 insertions(+), 81 deletions(-) diff --git a/src/components/views/settings/devices/LoginWithQRSection.tsx b/src/components/views/settings/devices/LoginWithQRSection.tsx index 5db5246bb4..036597cfe9 100644 --- a/src/components/views/settings/devices/LoginWithQRSection.tsx +++ b/src/components/views/settings/devices/LoginWithQRSection.tsx @@ -16,9 +16,9 @@ limitations under the License. import React from "react"; import { - IMSC3882GetLoginTokenCapability, + IGetLoginTokenCapability, IServerVersions, - UNSTABLE_MSC3882_CAPABILITY, + GET_LOGIN_TOKEN_CAPABILITY, Capabilities, IClientWellKnown, } from "matrix-js-sdk/src/matrix"; @@ -40,15 +40,15 @@ export default class LoginWithQRSection extends React.Component { } public render(): JSX.Element | null { - // Needs server support for MSC3882 and MSC3886: - // in r0 of MSC3882 it is exposed as a feature flag, but in r1 it is a capability - const capability = UNSTABLE_MSC3882_CAPABILITY.findIn(this.props.capabilities); - const msc3882Supported = + // Needs server support for get_login_token and MSC3886: + // in r0 of MSC3882 it is exposed as a feature flag, but in stable and unstable r1 it is a capability + const capability = GET_LOGIN_TOKEN_CAPABILITY.findIn(this.props.capabilities); + const getLoginTokenSupported = !!this.props.versions?.unstable_features?.["org.matrix.msc3882"] || !!capability?.enabled; const msc3886Supported = !!this.props.versions?.unstable_features?.["org.matrix.msc3886"] || this.props.wellKnown?.["io.element.rendezvous"]?.server; - const offerShowQr = msc3882Supported && msc3886Supported; + const offerShowQr = getLoginTokenSupported && msc3886Supported; // don't show anything if no method is available if (!offerShowQr) { diff --git a/test/components/views/settings/devices/LoginWithQR-test.tsx b/test/components/views/settings/devices/LoginWithQR-test.tsx index 188997745d..3f72b96ccb 100644 --- a/test/components/views/settings/devices/LoginWithQR-test.tsx +++ b/test/components/views/settings/devices/LoginWithQR-test.tsx @@ -89,8 +89,7 @@ describe("", () => { jest.spyOn(MSC3906Rendezvous.prototype, "verifyNewDeviceOnExistingDevice").mockResolvedValue(undefined); client.requestLoginToken.mockResolvedValue({ login_token: "token", - expires_in: 1000, // this is as per MSC3882 r0 - expires_in_ms: 1000 * 1000, // this is as per MSC3882 r1 + expires_in_ms: 1000 * 1000, } as LoginTokenPostResponse); // we force the type here so that it works with versions of js-sdk that don't have r1 support yet }); diff --git a/test/components/views/settings/devices/LoginWithQRSection-test.tsx b/test/components/views/settings/devices/LoginWithQRSection-test.tsx index 0787345cd1..8dc78bfd28 100644 --- a/test/components/views/settings/devices/LoginWithQRSection-test.tsx +++ b/test/components/views/settings/devices/LoginWithQRSection-test.tsx @@ -16,7 +16,7 @@ limitations under the License. import { render } from "@testing-library/react"; 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 LoginWithQRSection from "../../../../../src/components/views/settings/devices/LoginWithQRSection"; @@ -67,23 +67,18 @@ describe("", () => { expect(container).toMatchSnapshot(); }); - it("only MSC3882 enabled", async () => { - const { container } = render(getComponent({ versions: makeVersions({ "org.matrix.msc3882": true }) })); - expect(container).toMatchSnapshot(); - }); - - it("only MSC3882 r1 enabled", async () => { + it("only get_login_token enabled", async () => { const { container } = render( - getComponent({ capabilities: { [UNSTABLE_MSC3882_CAPABILITY.name]: { enabled: true } } }), + getComponent({ capabilities: { [GET_LOGIN_TOKEN_CAPABILITY.name]: { enabled: true } } }), ); expect(container).toMatchSnapshot(); }); - it("MSC3886 + MSC3882 r1 disabled", async () => { + it("MSC3886 + get_login_token disabled", async () => { const { container } = render( getComponent({ versions: makeVersions({ "org.matrix.msc3886": true }), - capabilities: { [UNSTABLE_MSC3882_CAPABILITY.name]: { enabled: false } }, + capabilities: { [GET_LOGIN_TOKEN_CAPABILITY.name]: { enabled: false } }, }), ); expect(container).toMatchSnapshot(); @@ -91,33 +86,21 @@ describe("", () => { }); describe("should render panel", () => { - it("MSC3882 + MSC3886", async () => { - const { container } = render( - getComponent({ - versions: makeVersions({ - "org.matrix.msc3882": true, - "org.matrix.msc3886": true, - }), - }), - ); - expect(container).toMatchSnapshot(); - }); - - it("MSC3882 r1 + MSC3886", async () => { + it("get_login_token + MSC3886", async () => { const { container } = render( getComponent({ versions: makeVersions({ "org.matrix.msc3886": true, }), capabilities: { - [UNSTABLE_MSC3882_CAPABILITY.name]: { enabled: true }, + [GET_LOGIN_TOKEN_CAPABILITY.name]: { enabled: true }, }, }), ); expect(container).toMatchSnapshot(); }); - it("MSC3882 r1 + .well-known", async () => { + it("get_login_token + .well-known", async () => { const wellKnown = { "io.element.rendezvous": { server: "https://rz.local", @@ -127,7 +110,7 @@ describe("", () => { const { container } = render( getComponent({ versions: makeVersions({}), - capabilities: { [UNSTABLE_MSC3882_CAPABILITY.name]: { enabled: true } }, + capabilities: { [GET_LOGIN_TOKEN_CAPABILITY.name]: { enabled: true } }, wellKnown, }), ); diff --git a/test/components/views/settings/devices/__snapshots__/LoginWithQRSection-test.tsx.snap b/test/components/views/settings/devices/__snapshots__/LoginWithQRSection-test.tsx.snap index 5bb4cbb7a4..48d8294ae0 100644 --- a/test/components/views/settings/devices/__snapshots__/LoginWithQRSection-test.tsx.snap +++ b/test/components/views/settings/devices/__snapshots__/LoginWithQRSection-test.tsx.snap @@ -1,14 +1,12 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[` should not render MSC3886 + MSC3882 r1 disabled 1`] = `
`; +exports[` should not render MSC3886 + get_login_token disabled 1`] = `
`; exports[` should not render no support at all 1`] = `
`; -exports[` should not render only MSC3882 enabled 1`] = `
`; +exports[` should not render only get_login_token enabled 1`] = `
`; -exports[` should not render only MSC3882 r1 enabled 1`] = `
`; - -exports[` should render panel MSC3882 + MSC3886 1`] = ` +exports[` should render panel get_login_token + .well-known 1`] = `
should render panel MSC3882 + MSC3886 1`] = `
`; -exports[` should render panel MSC3882 r1 + .well-known 1`] = ` -
-
-
-

- Sign in with QR code -

-
-
-
-

- 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. -

-
- Show QR code -
-
-
-
-
-`; - -exports[` should render panel MSC3882 r1 + MSC3886 1`] = ` +exports[` should render panel get_login_token + MSC3886 1`] = `
", () => { }, }); mockClient.getCapabilities.mockResolvedValue({ - [UNSTABLE_MSC3882_CAPABILITY.name]: { + [GET_LOGIN_TOKEN_CAPABILITY.name]: { enabled: true, }, });