diff --git a/src/bin/keycloakify/generateFtl/pageId.ts b/src/bin/keycloakify/generateFtl/pageId.ts index e2f6b82c..c60fbe94 100644 --- a/src/bin/keycloakify/generateFtl/pageId.ts +++ b/src/bin/keycloakify/generateFtl/pageId.ts @@ -26,7 +26,8 @@ export const loginThemePageIds = [ "update-email.ftl", "select-authenticator.ftl", "saml-post-form.ftl", - "delete-credential.ftl" + "delete-credential.ftl", + "code.ftl" ] as const; export const accountThemePageIds = ["password.ftl", "account.ftl", "sessions.ftl", "totp.ftl", "applications.ftl", "log.ftl"] as const; diff --git a/src/login/Fallback.tsx b/src/login/Fallback.tsx index b0bb4d83..447218fd 100644 --- a/src/login/Fallback.tsx +++ b/src/login/Fallback.tsx @@ -32,6 +32,7 @@ const UpdateEmail = lazy(() => import("keycloakify/login/pages/UpdateEmail")); const SelectAuthenticator = lazy(() => import("keycloakify/login/pages/SelectAuthenticator")); const SamlPostForm = lazy(() => import("keycloakify/login/pages/SamlPostForm")); const DeleteCredential = lazy(() => import("keycloakify/login/pages/DeleteCredential")); +const Code = lazy(() => import("keycloakify/login/pages/Code")); type FallbackProps = PageProps & { UserProfileFormFields: LazyOrNot<(props: UserProfileFormFieldsProps) => JSX.Element>; @@ -98,6 +99,8 @@ export default function Fallback(props: FallbackProps) { return ; case "delete-credential.ftl": return ; + case "code.ftl": + return ; } assert>(false); })()} diff --git a/src/login/kcContext/KcContext.ts b/src/login/kcContext/KcContext.ts index 557741b0..3004aa83 100644 --- a/src/login/kcContext/KcContext.ts +++ b/src/login/kcContext/KcContext.ts @@ -36,7 +36,8 @@ export type KcContext = | KcContext.UpdateEmail | KcContext.SelectAuthenticator | KcContext.SamlPostForm - | KcContext.DeleteCredential; + | KcContext.DeleteCredential + | KcContext.Code; assert(); @@ -497,6 +498,15 @@ export declare namespace KcContext { pageId: "delete-credential.ftl"; credentialLabel: string; }; + + export type Code = Common & { + pageId: "code.ftl"; + code: { + success: boolean; + code?: string; + error?: string; + }; + }; } export type UserProfile = { diff --git a/src/login/pages/Code.tsx b/src/login/pages/Code.tsx new file mode 100644 index 00000000..e243e6ef --- /dev/null +++ b/src/login/pages/Code.tsx @@ -0,0 +1,35 @@ +import type { PageProps } from "keycloakify/login/pages/PageProps"; +import { useGetClassName } from "keycloakify/login/lib/useGetClassName"; +import type { KcContext } from "../kcContext"; +import type { I18n } from "../i18n"; + +export default function Code(props: PageProps, I18n>) { + const { kcContext, i18n, doUseDefaultCss, Template, classes } = props; + + const { getClassName } = useGetClassName({ + doUseDefaultCss, + classes + }); + + const { code } = kcContext; + + const { msg } = i18n; + + return ( + + ); +}