From 2c36bfe3bbc7837a52188d04c2fc7bd04565b49e Mon Sep 17 00:00:00 2001 From: Joseph Garrone Date: Sat, 11 May 2024 18:54:11 +0200 Subject: [PATCH] Add the login-x509-info.ftl page --- src/bin/keycloakify/generateFtl/pageId.ts | 3 +- src/login/Fallback.tsx | 3 + src/login/kcContext/KcContext.ts | 14 +++- src/login/pages/LoginX509Info.tsx | 94 +++++++++++++++++++++++ 4 files changed, 112 insertions(+), 2 deletions(-) create mode 100644 src/login/pages/LoginX509Info.tsx diff --git a/src/bin/keycloakify/generateFtl/pageId.ts b/src/bin/keycloakify/generateFtl/pageId.ts index a44f4527..4d9054bf 100644 --- a/src/bin/keycloakify/generateFtl/pageId.ts +++ b/src/bin/keycloakify/generateFtl/pageId.ts @@ -32,7 +32,8 @@ export const loginThemePageIds = [ "frontchannel-logout.ftl", "login-recovery-authn-code-config.ftl", "login-recovery-authn-code-input.ftl", - "login-reset-otp.ftl" + "login-reset-otp.ftl", + "login-x509-info.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 0a1f1d3f..5f360369 100644 --- a/src/login/Fallback.tsx +++ b/src/login/Fallback.tsx @@ -38,6 +38,7 @@ const FrontchannelLogout = lazy(() => import("keycloakify/login/pages/Frontchann const LoginRecoveryAuthnCodeConfig = lazy(() => import("keycloakify/login/pages/LoginRecoveryAuthnCodeConfig")); const LoginRecoveryAuthnCodeInput = lazy(() => import("keycloakify/login/pages/LoginRecoveryAuthnCodeInput")); const LoginResetOtp = lazy(() => import("keycloakify/login/pages/LoginResetOtp")); +const LoginX509Info = lazy(() => import("keycloakify/login/pages/LoginX509Info")); type FallbackProps = PageProps & { UserProfileFormFields: LazyOrNot<(props: UserProfileFormFieldsProps) => JSX.Element>; @@ -116,6 +117,8 @@ export default function Fallback(props: FallbackProps) { return ; case "login-reset-otp.ftl": return ; + case "login-x509-info.ftl": + return ; } assert>(false); })()} diff --git a/src/login/kcContext/KcContext.ts b/src/login/kcContext/KcContext.ts index 7bf481ea..fed2c6bb 100644 --- a/src/login/kcContext/KcContext.ts +++ b/src/login/kcContext/KcContext.ts @@ -42,7 +42,8 @@ export type KcContext = | KcContext.FrontchannelLogout | KcContext.LoginRecoveryAuthnCodeConfig | KcContext.LoginRecoveryAuthnCodeInput - | KcContext.LoginResetOtp; + | KcContext.LoginResetOtp + | KcContext.LoginX509Info; assert(); @@ -553,6 +554,17 @@ export declare namespace KcContext { selectedCredentialId: string; }; }; + + export type LoginX509Info = Common & { + pageId: "login-x509-info.ftl"; + x509: { + formData: { + subjectDN?: string; + isUserEnabled?: boolean; + username?: string; + }; + }; + }; } export type UserProfile = { diff --git a/src/login/pages/LoginX509Info.tsx b/src/login/pages/LoginX509Info.tsx new file mode 100644 index 00000000..460ffc67 --- /dev/null +++ b/src/login/pages/LoginX509Info.tsx @@ -0,0 +1,94 @@ +import { clsx } from "keycloakify/tools/clsx"; +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 LoginX509Info(props: PageProps, I18n>) { + const { kcContext, i18n, doUseDefaultCss, Template, classes } = props; + + const { getClassName } = useGetClassName({ + doUseDefaultCss, + classes + }); + + const { url, x509 } = kcContext; + + const { msg, msgStr } = i18n; + + return ( + + ); +}