From 94b618626dd1a57ee0438cc7bb6606d3a87d1ff6 Mon Sep 17 00:00:00 2001 From: Joseph Garrone Date: Sat, 11 May 2024 19:18:52 +0200 Subject: [PATCH] Add webauthn-error.ftl page --- src/bin/keycloakify/generateFtl/pageId.ts | 3 +- src/login/Fallback.tsx | 3 ++ src/login/kcContext/KcContext.ts | 8 ++- src/login/pages/WebauthnError.tsx | 66 +++++++++++++++++++++++ 4 files changed, 78 insertions(+), 2 deletions(-) create mode 100644 src/login/pages/WebauthnError.tsx diff --git a/src/bin/keycloakify/generateFtl/pageId.ts b/src/bin/keycloakify/generateFtl/pageId.ts index 4d8dc4c1..e9c4b1e3 100644 --- a/src/bin/keycloakify/generateFtl/pageId.ts +++ b/src/bin/keycloakify/generateFtl/pageId.ts @@ -33,7 +33,8 @@ export const loginThemePageIds = [ "login-recovery-authn-code-config.ftl", "login-recovery-authn-code-input.ftl", "login-reset-otp.ftl", - "login-x509-info.ftl" + "login-x509-info.ftl", + "webauthn-error.ftl" ] as const; export const accountThemePageIds = [ diff --git a/src/login/Fallback.tsx b/src/login/Fallback.tsx index 5f360369..d08cd78e 100644 --- a/src/login/Fallback.tsx +++ b/src/login/Fallback.tsx @@ -39,6 +39,7 @@ const LoginRecoveryAuthnCodeConfig = lazy(() => import("keycloakify/login/pages/ const LoginRecoveryAuthnCodeInput = lazy(() => import("keycloakify/login/pages/LoginRecoveryAuthnCodeInput")); const LoginResetOtp = lazy(() => import("keycloakify/login/pages/LoginResetOtp")); const LoginX509Info = lazy(() => import("keycloakify/login/pages/LoginX509Info")); +const WebauthnError = lazy(() => import("keycloakify/login/pages/WebauthnError")); type FallbackProps = PageProps & { UserProfileFormFields: LazyOrNot<(props: UserProfileFormFieldsProps) => JSX.Element>; @@ -119,6 +120,8 @@ export default function Fallback(props: FallbackProps) { return ; case "login-x509-info.ftl": return ; + case "webauthn-error.ftl": + return ; } assert>(false); })()} diff --git a/src/login/kcContext/KcContext.ts b/src/login/kcContext/KcContext.ts index fed2c6bb..d71586de 100644 --- a/src/login/kcContext/KcContext.ts +++ b/src/login/kcContext/KcContext.ts @@ -43,7 +43,8 @@ export type KcContext = | KcContext.LoginRecoveryAuthnCodeConfig | KcContext.LoginRecoveryAuthnCodeInput | KcContext.LoginResetOtp - | KcContext.LoginX509Info; + | KcContext.LoginX509Info + | KcContext.WebauthnError; assert(); @@ -565,6 +566,11 @@ export declare namespace KcContext { }; }; }; + + export type WebauthnError = Common & { + pageId: "webauthn-error.ftl"; + isAppInitiatedAction?: boolean; + }; } export type UserProfile = { diff --git a/src/login/pages/WebauthnError.tsx b/src/login/pages/WebauthnError.tsx new file mode 100644 index 00000000..7ddc5fd7 --- /dev/null +++ b/src/login/pages/WebauthnError.tsx @@ -0,0 +1,66 @@ +import type { PageProps } from "keycloakify/login/pages/PageProps"; +import { clsx } from "keycloakify/tools/clsx"; +import { useGetClassName } from "keycloakify/login/lib/useGetClassName"; +import type { KcContext } from "../kcContext"; +import type { I18n } from "../i18n"; + +export default function WebauthnError(props: PageProps, I18n>) { + const { kcContext, i18n, doUseDefaultCss, Template, classes } = props; + + const { url, isAppInitiatedAction } = kcContext; + + const { msg, msgStr } = i18n; + + const { getClassName } = useGetClassName({ + doUseDefaultCss, + classes + }); + + return ( + + ); +}