You've already forked matrix-js-sdk
mirror of
https://github.com/matrix-org/matrix-js-sdk.git
synced 2025-08-07 23:02:56 +03:00
Fix registration check your emails stage regression (#3616)
* Fix registration check your emails stage regression * Simplify diff * Add test
This commit is contained in:
committed by
GitHub
parent
6b018b6927
commit
533c21a515
@@ -375,7 +375,7 @@ describe("InteractiveAuth", () => {
|
|||||||
await expect(ia.attemptAuth.bind(ia)).rejects.toThrow(new Error("No appropriate authentication flow found"));
|
await expect(ia.attemptAuth.bind(ia)).rejects.toThrow(new Error("No appropriate authentication flow found"));
|
||||||
});
|
});
|
||||||
|
|
||||||
it("should handle unexpected error types without data propery set", async () => {
|
it("should handle unexpected error types without data property set", async () => {
|
||||||
const doRequest = jest.fn();
|
const doRequest = jest.fn();
|
||||||
const stateUpdated = jest.fn();
|
const stateUpdated = jest.fn();
|
||||||
const requestEmailToken = jest.fn();
|
const requestEmailToken = jest.fn();
|
||||||
@@ -559,4 +559,40 @@ describe("InteractiveAuth", () => {
|
|||||||
ia.chooseStage();
|
ia.chooseStage();
|
||||||
expect(ia.getChosenFlow()?.stages).toEqual([AuthType.Password]);
|
expect(ia.getChosenFlow()?.stages).toEqual([AuthType.Password]);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it("should fire stateUpdated callback if with error when encountered", async () => {
|
||||||
|
const doRequest = jest.fn();
|
||||||
|
const stateUpdated = jest.fn();
|
||||||
|
|
||||||
|
const ia = new InteractiveAuth({
|
||||||
|
matrixClient: getFakeClient(),
|
||||||
|
doRequest: doRequest,
|
||||||
|
stateUpdated: stateUpdated,
|
||||||
|
requestEmailToken: jest.fn(),
|
||||||
|
authData: {
|
||||||
|
session: "sessionId",
|
||||||
|
flows: [{ stages: [AuthType.Password] }],
|
||||||
|
params: {
|
||||||
|
[AuthType.Password]: { param: "aa" },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
// first we expect a call here
|
||||||
|
stateUpdated.mockImplementation((stage) => {
|
||||||
|
expect(stage).toEqual(AuthType.Password);
|
||||||
|
ia.submitAuthDict({
|
||||||
|
type: AuthType.Password,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
// .. which should trigger a call here
|
||||||
|
doRequest.mockRejectedValue(new MatrixError({ errcode: "M_UNKNOWN", error: "This is an error" }));
|
||||||
|
|
||||||
|
await Promise.allSettled([ia.attemptAuth()]);
|
||||||
|
expect(stateUpdated).toHaveBeenCalledWith("m.login.password", {
|
||||||
|
errcode: "M_UNKNOWN",
|
||||||
|
error: "This is an error",
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
@@ -264,8 +264,8 @@ export class InteractiveAuth<T> {
|
|||||||
private readonly requestEmailTokenCallback: IOpts<T>["requestEmailToken"];
|
private readonly requestEmailTokenCallback: IOpts<T>["requestEmailToken"];
|
||||||
private readonly supportedStages?: Set<string>;
|
private readonly supportedStages?: Set<string>;
|
||||||
|
|
||||||
// The current latest data received from the server during the user interactive auth flow.
|
// The current latest data or error received from the server during the user interactive auth flow.
|
||||||
private data: IAuthData;
|
private data: IAuthData & MatrixError["data"];
|
||||||
private emailSid?: string;
|
private emailSid?: string;
|
||||||
private requestingEmailToken = false;
|
private requestingEmailToken = false;
|
||||||
private attemptAuthDeferred: IDeferred<T> | null = null;
|
private attemptAuthDeferred: IDeferred<T> | null = null;
|
||||||
@@ -549,7 +549,7 @@ export class InteractiveAuth<T> {
|
|||||||
matrixError.data.session = (this.data as IAuthData).session;
|
matrixError.data.session = (this.data as IAuthData).session;
|
||||||
}
|
}
|
||||||
if (matrixError) {
|
if (matrixError) {
|
||||||
this.data = matrixError.data as IAuthData;
|
this.data = matrixError.data;
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
this.startNextAuthStage();
|
this.startNextAuthStage();
|
||||||
@@ -602,6 +602,14 @@ export class InteractiveAuth<T> {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (this.data?.errcode || this.data?.error) {
|
||||||
|
this.stateUpdatedCallback(nextStage, {
|
||||||
|
errcode: this.data?.errcode || "",
|
||||||
|
error: this.data?.error || "",
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
this.stateUpdatedCallback(nextStage, nextStage === EMAIL_STAGE_TYPE ? { emailSid: this.emailSid } : {});
|
this.stateUpdatedCallback(nextStage, nextStage === EMAIL_STAGE_TYPE ? { emailSid: this.emailSid } : {});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user