Use LegacyRendezvousFailureReason over RendezvousFailureReason (#12578)
This commit is contained in:
parent
e867196c15
commit
ca7760789b
4 changed files with 22 additions and 18 deletions
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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";
|
||||||
|
|
|
@ -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 () => {
|
||||||
|
|
|
@ -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 () => {
|
||||||
|
|
Loading…
Reference in a new issue