diff --git a/web/src/flow/FlowExecutor.ts b/web/src/flow/FlowExecutor.ts index bde3616b52..f110a56ad6 100644 --- a/web/src/flow/FlowExecutor.ts +++ b/web/src/flow/FlowExecutor.ts @@ -36,6 +36,7 @@ import { ChallengeChoices, ChallengeTypes, ContextualFlowInfo, + FetchError, FlowChallengeResponseRequest, FlowErrorChallenge, FlowLayoutEnum, @@ -205,7 +206,7 @@ export class FlowExecutor extends Interface implements StageHost { } return !this.challenge.responseErrors; } catch (exc: unknown) { - this.errorMessage(exc as Error | ResponseError); + this.errorMessage(exc as Error | ResponseError | FetchError); return false; } finally { this.loading = false; @@ -237,15 +238,17 @@ export class FlowExecutor extends Interface implements StageHost { } } catch (exc: unknown) { // Catch JSON or Update errors - this.errorMessage(exc as Error | ResponseError); + this.errorMessage(exc as Error | ResponseError | FetchError); } finally { this.loading = false; } } - async errorMessage(error: Error | ResponseError): Promise { + async errorMessage(error: Error | ResponseError | FetchError): Promise { let body = ""; - if (error instanceof ResponseError) { + if (error instanceof FetchError) { + body = msg("Request failed. Please try again later."); + } else if (error instanceof ResponseError) { body = await error.response.text(); } else if (error instanceof Error) { body = error.message; @@ -415,7 +418,8 @@ export class FlowExecutor extends Interface implements StageHost { async renderChallenge(): Promise { if (!this.challenge) { - return html``; + return html` + `; } switch (this.challenge.type) { case ChallengeChoices.Redirect: @@ -431,23 +435,21 @@ export class FlowExecutor extends Interface implements StageHost { return await this.renderChallengeNativeElement(); default: console.debug(`authentik/flows: unexpected data type ${this.challenge.type}`); - break; + return html``; } - return html``; } renderChallengeWrapper(): TemplateResult { const logo = html``; - const fallbackLoadSpinner = html` - `; if (!this.challenge) { - return html`${logo}${fallbackLoadSpinner}`; + return html`${logo} + `; } return html` ${this.loading ? html`` : nothing} ${logo} - ${until(this.renderChallenge(), fallbackLoadSpinner)} + ${until(this.renderChallenge())} `; } diff --git a/web/src/flow/stages/FlowErrorStage.ts b/web/src/flow/stages/FlowErrorStage.ts index 6e854c0a0d..f7a83ee88c 100644 --- a/web/src/flow/stages/FlowErrorStage.ts +++ b/web/src/flow/stages/FlowErrorStage.ts @@ -46,22 +46,26 @@ export class FlowErrorStage extends BaseStage