Use LegacyRendezvousFailureReason over RendezvousFailureReason (#12578)

This commit is contained in:
Michael Telatynski 2024-06-06 09:19:49 +01:00 committed by GitHub
parent e867196c15
commit ca7760789b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 22 additions and 18 deletions

View file

@ -15,7 +15,11 @@ limitations under the License.
*/ */
import React from "react"; import React from "react";
import { MSC3906Rendezvous, MSC3906RendezvousPayload, RendezvousFailureReason } from "matrix-js-sdk/src/rendezvous"; import {
MSC3906Rendezvous,
MSC3906RendezvousPayload,
LegacyRendezvousFailureReason,
} from "matrix-js-sdk/src/rendezvous";
import { MSC3886SimpleHttpRendezvousTransport } from "matrix-js-sdk/src/rendezvous/transports"; import { MSC3886SimpleHttpRendezvousTransport } from "matrix-js-sdk/src/rendezvous/transports";
import { MSC3903ECDHPayload, MSC3903ECDHv2RendezvousChannel } from "matrix-js-sdk/src/rendezvous/channels"; import { MSC3903ECDHPayload, MSC3903ECDHv2RendezvousChannel } from "matrix-js-sdk/src/rendezvous/channels";
import { logger } from "matrix-js-sdk/src/logger"; import { logger } from "matrix-js-sdk/src/logger";
@ -44,7 +48,7 @@ export enum LoginWithQRFailureReason {
RateLimited = "rate_limited", RateLimited = "rate_limited",
} }
export type FailureReason = RendezvousFailureReason | LoginWithQRFailureReason; export type FailureReason = LegacyRendezvousFailureReason | LoginWithQRFailureReason;
// n.b MSC3886/MSC3903/MSC3906 that this is based on are now closed. // n.b MSC3886/MSC3903/MSC3906 that this is based on are now closed.
// However, we want to keep this implementation around for some time. // However, we want to keep this implementation around for some time.
@ -81,7 +85,7 @@ export default class LoginWithQR extends React.Component<IProps, IState> {
if (this.state.rendezvous) { if (this.state.rendezvous) {
const rendezvous = this.state.rendezvous; const rendezvous = this.state.rendezvous;
rendezvous.onFailure = undefined; rendezvous.onFailure = undefined;
await rendezvous.cancel(RendezvousFailureReason.UserCancelled); await rendezvous.cancel(LegacyRendezvousFailureReason.UserCancelled);
this.setState({ rendezvous: undefined }); this.setState({ rendezvous: undefined });
} }
if (mode === Mode.Show) { if (mode === Mode.Show) {
@ -94,7 +98,7 @@ export default class LoginWithQR extends React.Component<IProps, IState> {
// eslint-disable-next-line react/no-direct-mutation-state // eslint-disable-next-line react/no-direct-mutation-state
this.state.rendezvous.onFailure = undefined; this.state.rendezvous.onFailure = undefined;
// calling cancel will call close() as well to clean up the resources // calling cancel will call close() as well to clean up the resources
this.state.rendezvous.cancel(RendezvousFailureReason.UserCancelled).then(() => {}); this.state.rendezvous.cancel(LegacyRendezvousFailureReason.UserCancelled).then(() => {});
} }
} }
@ -140,7 +144,7 @@ export default class LoginWithQR extends React.Component<IProps, IState> {
this.setState({ phase: Phase.Error, failureReason: LoginWithQRFailureReason.RateLimited }); this.setState({ phase: Phase.Error, failureReason: LoginWithQRFailureReason.RateLimited });
return; return;
} }
this.setState({ phase: Phase.Error, failureReason: RendezvousFailureReason.Unknown }); this.setState({ phase: Phase.Error, failureReason: LegacyRendezvousFailureReason.Unknown });
} }
}; };
@ -170,7 +174,7 @@ export default class LoginWithQR extends React.Component<IProps, IState> {
}); });
} catch (e) { } catch (e) {
logger.error("Error whilst generating QR code", e); logger.error("Error whilst generating QR code", e);
this.setState({ phase: Phase.Error, failureReason: RendezvousFailureReason.HomeserverLacksSupport }); this.setState({ phase: Phase.Error, failureReason: LegacyRendezvousFailureReason.HomeserverLacksSupport });
return; return;
} }
@ -181,12 +185,12 @@ export default class LoginWithQR extends React.Component<IProps, IState> {
logger.error("Error whilst doing QR login", e); logger.error("Error whilst doing QR login", e);
// only set to error phase if it hasn't already been set by onFailure or similar // only set to error phase if it hasn't already been set by onFailure or similar
if (this.state.phase !== Phase.Error) { if (this.state.phase !== Phase.Error) {
this.setState({ phase: Phase.Error, failureReason: RendezvousFailureReason.Unknown }); this.setState({ phase: Phase.Error, failureReason: LegacyRendezvousFailureReason.Unknown });
} }
} }
}; };
private onFailure = (reason: RendezvousFailureReason): void => { private onFailure = (reason: LegacyRendezvousFailureReason): void => {
logger.info(`Rendezvous failed: ${reason}`); logger.info(`Rendezvous failed: ${reason}`);
this.setState({ phase: Phase.Error, failureReason: reason }); this.setState({ phase: Phase.Error, failureReason: reason });
}; };
@ -202,7 +206,7 @@ export default class LoginWithQR extends React.Component<IProps, IState> {
private onClick = async (type: Click): Promise<void> => { private onClick = async (type: Click): Promise<void> => {
switch (type) { switch (type) {
case Click.Cancel: case Click.Cancel:
await this.state.rendezvous?.cancel(RendezvousFailureReason.UserCancelled); await this.state.rendezvous?.cancel(LegacyRendezvousFailureReason.UserCancelled);
this.reset(); this.reset();
this.props.onFinished(false); this.props.onFinished(false);
break; break;
@ -219,7 +223,7 @@ export default class LoginWithQR extends React.Component<IProps, IState> {
await this.updateMode(this.props.mode); await this.updateMode(this.props.mode);
break; break;
case Click.Back: case Click.Back:
await this.state.rendezvous?.cancel(RendezvousFailureReason.UserCancelled); await this.state.rendezvous?.cancel(LegacyRendezvousFailureReason.UserCancelled);
this.props.onFinished(false); this.props.onFinished(false);
break; break;
} }

View file

@ -15,7 +15,7 @@ limitations under the License.
*/ */
import React, { ReactNode } from "react"; import React, { ReactNode } from "react";
import { RendezvousFailureReason as LegacyRendezvousFailureReason } from "matrix-js-sdk/src/rendezvous"; import { LegacyRendezvousFailureReason } from "matrix-js-sdk/src/rendezvous";
import { Icon as ChevronLeftIcon } from "@vector-im/compound-design-tokens/icons/chevron-left.svg"; import { Icon as ChevronLeftIcon } from "@vector-im/compound-design-tokens/icons/chevron-left.svg";
import { Icon as CheckCircleSolidIcon } from "@vector-im/compound-design-tokens/icons/check-circle-solid.svg"; import { Icon as CheckCircleSolidIcon } from "@vector-im/compound-design-tokens/icons/check-circle-solid.svg";
import { Icon as ErrorIcon } from "@vector-im/compound-design-tokens/icons/error.svg"; import { Icon as ErrorIcon } from "@vector-im/compound-design-tokens/icons/error.svg";

View file

@ -17,7 +17,7 @@ limitations under the License.
import { cleanup, render, waitFor } from "@testing-library/react"; import { cleanup, render, waitFor } from "@testing-library/react";
import { MockedObject, mocked } from "jest-mock"; import { MockedObject, mocked } from "jest-mock";
import React from "react"; import React from "react";
import { MSC3906Rendezvous, RendezvousFailureReason } from "matrix-js-sdk/src/rendezvous"; import { MSC3906Rendezvous, LegacyRendezvousFailureReason } from "matrix-js-sdk/src/rendezvous";
import { HTTPError, LoginTokenPostResponse } from "matrix-js-sdk/src/matrix"; import { HTTPError, LoginTokenPostResponse } from "matrix-js-sdk/src/matrix";
import LoginWithQR from "../../../../../src/components/views/auth/LoginWithQR"; import LoginWithQR from "../../../../../src/components/views/auth/LoginWithQR";
@ -111,7 +111,7 @@ describe("<LoginWithQR />", () => {
await waitFor(() => await waitFor(() =>
expect(mockedFlow).toHaveBeenLastCalledWith({ expect(mockedFlow).toHaveBeenLastCalledWith({
phase: Phase.Error, phase: Phase.Error,
failureReason: RendezvousFailureReason.HomeserverLacksSupport, failureReason: LegacyRendezvousFailureReason.HomeserverLacksSupport,
onClick: expect.any(Function), onClick: expect.any(Function),
}), }),
); );
@ -125,7 +125,7 @@ describe("<LoginWithQR />", () => {
await waitFor(() => await waitFor(() =>
expect(mockedFlow).toHaveBeenLastCalledWith({ expect(mockedFlow).toHaveBeenLastCalledWith({
phase: Phase.Error, phase: Phase.Error,
failureReason: RendezvousFailureReason.Unknown, failureReason: LegacyRendezvousFailureReason.Unknown,
onClick: expect.any(Function), onClick: expect.any(Function),
}), }),
); );
@ -160,7 +160,7 @@ describe("<LoginWithQR />", () => {
const onClick = mockedFlow.mock.calls[0][0].onClick; const onClick = mockedFlow.mock.calls[0][0].onClick;
await onClick(Click.Cancel); await onClick(Click.Cancel);
expect(onFinished).toHaveBeenCalledWith(false); expect(onFinished).toHaveBeenCalledWith(false);
expect(rendezvous.cancel).toHaveBeenCalledWith(RendezvousFailureReason.UserCancelled); expect(rendezvous.cancel).toHaveBeenCalledWith(LegacyRendezvousFailureReason.UserCancelled);
// try again // try again
onClick(Click.TryAgain); onClick(Click.TryAgain);
@ -205,7 +205,7 @@ describe("<LoginWithQR />", () => {
const onClick = mockedFlow.mock.calls[0][0].onClick; const onClick = mockedFlow.mock.calls[0][0].onClick;
await onClick(Click.Back); await onClick(Click.Back);
expect(onFinished).toHaveBeenCalledWith(false); expect(onFinished).toHaveBeenCalledWith(false);
expect(rendezvous.cancel).toHaveBeenCalledWith(RendezvousFailureReason.UserCancelled); expect(rendezvous.cancel).toHaveBeenCalledWith(LegacyRendezvousFailureReason.UserCancelled);
}); });
test("render QR then decline", async () => { test("render QR then decline", async () => {

View file

@ -16,7 +16,7 @@ limitations under the License.
import { cleanup, fireEvent, render, screen, waitFor } from "@testing-library/react"; import { cleanup, fireEvent, render, screen, waitFor } from "@testing-library/react";
import React from "react"; import React from "react";
import { RendezvousFailureReason } from "matrix-js-sdk/src/rendezvous"; import { LegacyRendezvousFailureReason } from "matrix-js-sdk/src/rendezvous";
import LoginWithQRFlow from "../../../../../src/components/views/auth/LoginWithQRFlow"; import LoginWithQRFlow from "../../../../../src/components/views/auth/LoginWithQRFlow";
import { LoginWithQRFailureReason, FailureReason } from "../../../../../src/components/views/auth/LoginWithQR"; import { LoginWithQRFailureReason, FailureReason } from "../../../../../src/components/views/auth/LoginWithQR";
@ -99,7 +99,7 @@ describe("<LoginWithQRFlow />", () => {
describe("errors", () => { describe("errors", () => {
for (const failureReason of [ for (const failureReason of [
...Object.values(RendezvousFailureReason), ...Object.values(LegacyRendezvousFailureReason),
...Object.values(LoginWithQRFailureReason), ...Object.values(LoginWithQRFailureReason),
]) { ]) {
it(`renders ${failureReason}`, async () => { it(`renders ${failureReason}`, async () => {