diff --git a/src/bin/build-keycloak-theme/generateFtl/generateFtl.ts b/src/bin/build-keycloak-theme/generateFtl/generateFtl.ts index cdb0977e..1c625b36 100644 --- a/src/bin/build-keycloak-theme/generateFtl/generateFtl.ts +++ b/src/bin/build-keycloak-theme/generateFtl/generateFtl.ts @@ -20,6 +20,7 @@ export const pageIds = [ "login-idp-link-confirm.ftl", "login-idp-link-email.ftl", "login-page-expired.ftl", + "login-config-totp.ftl", ] as const; export type PageId = typeof pageIds[number]; diff --git a/src/lib/components/KcApp.tsx b/src/lib/components/KcApp.tsx index e060506c..e157c5ec 100644 --- a/src/lib/components/KcApp.tsx +++ b/src/lib/components/KcApp.tsx @@ -15,6 +15,7 @@ import { LoginUpdateProfile } from "./LoginUpdateProfile"; import { LoginIdpLinkConfirm } from "./LoginIdpLinkConfirm"; import { LoginPageExpired } from "./LoginPageExpired"; import { LoginIdpLinkEmail } from "./LoginIdpLinkEmail"; +import { LoginConfigTotp } from "./LoginConfigTotp"; export const KcApp = memo(({ kcContext, ...props }: { kcContext: KcContextBase } & KcProps) => { switch (kcContext.pageId) { @@ -46,5 +47,7 @@ export const KcApp = memo(({ kcContext, ...props }: { kcContext: KcContextBase } return ; case "login-page-expired.ftl": return ; + case "login-config-totp.ftl": + return ; } }); diff --git a/src/lib/components/LoginConfigTotp.tsx b/src/lib/components/LoginConfigTotp.tsx new file mode 100644 index 00000000..63072c7e --- /dev/null +++ b/src/lib/components/LoginConfigTotp.tsx @@ -0,0 +1,183 @@ +import { memo } from "react"; +import { Template } from "./Template"; +import type { KcProps } from "./KcProps"; +import type { KcContextBase } from "../getKcContext/KcContextBase"; +import { getMsg } from "../i18n"; +import { useCssAndCx } from "tss-react"; + +export const LoginConfigTotp = memo(({ kcContext, ...props }: { kcContext: KcContextBase.LoginConfigTotp } & KcProps) => { + const { url, isAppInitiatedAction, totp, mode, messagesPerField } = kcContext; + + const { cx } = useCssAndCx(); + + const { msg, msgStr } = getMsg(kcContext); + const algToKeyUriAlg: Record = { + HmacSHA1: "SHA1", + HmacSHA256: "SHA256", + HmacSHA512: "SHA512", + }; + + return ( +