From 0858fe63192b79be97955e99eb429d287373bd50 Mon Sep 17 00:00:00 2001 From: Joseph Garrone Date: Thu, 1 Apr 2021 16:51:28 +0200 Subject: [PATCH] Fix error.ftt, Adopt best effort strategy to convert ftl values into JS --- .../generateFtl/common.ftl | 112 +++++++++++++++++ .../build-keycloak-theme/generateFtl/index.ts | 4 +- .../generateFtl/template.ftl | 114 ------------------ src/lib/components/Template.tsx | 2 +- src/lib/kcContext.ts | 21 ++-- src/lib/kcContextMocks/index.ts | 24 ++-- 6 files changed, 140 insertions(+), 137 deletions(-) create mode 100644 src/bin/build-keycloak-theme/generateFtl/common.ftl delete mode 100644 src/bin/build-keycloak-theme/generateFtl/template.ftl diff --git a/src/bin/build-keycloak-theme/generateFtl/common.ftl b/src/bin/build-keycloak-theme/generateFtl/common.ftl new file mode 100644 index 00000000..bde65569 --- /dev/null +++ b/src/bin/build-keycloak-theme/generateFtl/common.ftl @@ -0,0 +1,112 @@ + \ No newline at end of file diff --git a/src/bin/build-keycloak-theme/generateFtl/index.ts b/src/bin/build-keycloak-theme/generateFtl/index.ts index ae27a6b2..c2ed8034 100644 --- a/src/bin/build-keycloak-theme/generateFtl/index.ts +++ b/src/bin/build-keycloak-theme/generateFtl/index.ts @@ -19,7 +19,7 @@ function loadAdjacentFile(fileBasename: string) { .toString("utf8"); }; -function loadFtlFile(ftlFileBasename: PageId | "template.ftl") { +function loadFtlFile(ftlFileBasename: PageId | "common.ftl") { try { return loadAdjacentFile(ftlFileBasename) @@ -91,7 +91,7 @@ export function generateFtlFilesCodeFactory( //FTL is no valid html, we can't insert with cheerio, we put placeholder for injecting later. const ftlCommonPlaceholders = { - '{ "x": "vIdLqMeOed9sdLdIdOxdK0d" }': loadFtlFile("template.ftl"), + '{ "x": "vIdLqMeOed9sdLdIdOxdK0d" }': loadFtlFile("common.ftl"), '': [ '<#if scripts??>', diff --git a/src/bin/build-keycloak-theme/generateFtl/template.ftl b/src/bin/build-keycloak-theme/generateFtl/template.ftl deleted file mode 100644 index 05a0296c..00000000 --- a/src/bin/build-keycloak-theme/generateFtl/template.ftl +++ /dev/null @@ -1,114 +0,0 @@ - \ No newline at end of file diff --git a/src/lib/components/Template.tsx b/src/lib/components/Template.tsx index ff4b3fb0..d41b823b 100644 --- a/src/lib/components/Template.tsx +++ b/src/lib/components/Template.tsx @@ -25,7 +25,7 @@ export type TemplateProps = { showUsernameNode?: ReactNode; formNode: ReactNode; infoNode?: ReactNode; -} & { kcContext: KcContext.Template; } & KcTemplateProps; +} & { kcContext: KcContext; } & KcTemplateProps; export const Template = memo((props: TemplateProps) => { diff --git a/src/lib/kcContext.ts b/src/lib/kcContext.ts index ab11a834..c0eb7037 100644 --- a/src/lib/kcContext.ts +++ b/src/lib/kcContext.ts @@ -10,12 +10,17 @@ import type { LanguageLabel } from "./i18n/KcLanguageTag"; type ExtractAfterStartingWith = StrEnum extends `${Prefix}${infer U}` ? U : never; +/** Take theses type definition with a grain of salt. + * Some values might be undefined on some pages. + * (ex: url.loginAction is undefined on error.ftl) + */ export type KcContext = KcContext.Login | KcContext.Register | KcContext.Info | KcContext.Error | KcContext.LoginResetPassword | KcContext.LoginVerifyEmail; + export declare namespace KcContext { - export type Template = { + export type Common = { url: { loginAction: string; resourcesPath: string; @@ -27,7 +32,7 @@ export declare namespace KcContext { displayName?: string; displayNameHtml?: string; internationalizationEnabled: boolean; - registrationEmailAsUsername: boolean; //<--- + registrationEmailAsUsername: boolean; }; /** Undefined if !realm.internationalizationEnabled */ locale?: { @@ -55,7 +60,7 @@ export declare namespace KcContext { isAppInitiatedAction: boolean; }; - export type Login = Template & { + export type Login = Common & { pageId: "login.ftl"; url: { loginResetCredentialsUrl: string; @@ -88,7 +93,7 @@ export declare namespace KcContext { }; }; - export type Register = Template & { + export type Register = Common & { pageId: "register.ftl"; url: { registrationAction: string; @@ -120,7 +125,7 @@ export declare namespace KcContext { recaptchaSiteKey?: string; }; - export type Info = Template & { + export type Info = Common & { pageId: "info.ftl"; messageHeader?: string; requiredActions?: ExtractAfterStartingWith<"requiredAction.", MessageKey>[]; @@ -132,21 +137,21 @@ export declare namespace KcContext { } }; - export type Error = Template & { + export type Error = Common & { pageId: "error.ftl"; client?: { baseUrl?: string; } }; - export type LoginResetPassword = Template & { + export type LoginResetPassword = Common & { pageId: "login-reset-password.ftl"; realm: { loginWithEmailAllowed: boolean; } }; - export type LoginVerifyEmail = Template & { + export type LoginVerifyEmail = Common & { pageId: "login-verify-email.ftl"; }; diff --git a/src/lib/kcContextMocks/index.ts b/src/lib/kcContextMocks/index.ts index 1ba87eb6..c90104ce 100644 --- a/src/lib/kcContextMocks/index.ts +++ b/src/lib/kcContextMocks/index.ts @@ -6,7 +6,7 @@ import { getKcLanguageTagLabel } from "../i18n/KcLanguageTag"; //NOTE: Aside because we want to be able to import them from node import { resourcesCommonPath, resourcesPath } from "./urlResourcesPath"; -export const kcTemplateContext: KcContext.Template = { +const kcCommonContext: KcContext.Common = { "url": { "loginAction": "#", "resourcesPath": `${process.env["PUBLIC_URL"]}/${resourcesPath}`, @@ -111,7 +111,7 @@ export const kcTemplateContext: KcContext.Template = { }; Object.defineProperty( - kcTemplateContext.locale!, + kcCommonContext.locale!, "current", { "get": () => getKcLanguageTagLabel(getEvtKcLanguage().state), @@ -120,22 +120,22 @@ Object.defineProperty( ); export const kcLoginContext: KcContext.Login = { - ...kcTemplateContext, + ...kcCommonContext, "pageId": "login.ftl", "url": { - ...kcTemplateContext.url, + ...kcCommonContext.url, "loginResetCredentialsUrl": "/auth/realms/myrealm/login-actions/reset-credentials?client_id=account&tab_id=HoAx28ja4xg", "registrationUrl": "/auth/realms/myrealm/login-actions/registration?client_id=account&tab_id=HoAx28ja4xg" }, "realm": { - ...kcTemplateContext.realm, + ...kcCommonContext.realm, "loginWithEmailAllowed": true, "rememberMe": true, "password": true, "resetPasswordAllowed": true, "registrationAllowed": true }, - "auth": kcTemplateContext.auth!, + "auth": kcCommonContext.auth!, "social": { "displayInfo": true }, @@ -147,7 +147,7 @@ export const kcLoginContext: KcContext.Login = { }; export const kcRegisterContext: KcContext.Register = { - ...kcTemplateContext, + ...kcCommonContext, "url": { ...kcLoginContext.url, "registrationAction": "http://localhost:8080/auth/realms/myrealm/login-actions/registration?session_code=gwZdUeO7pbYpFTRxiIxRg_QtzMbtFTKrNu6XW_f8asM&execution=12146ce0-b139-4bbd-b25b-0eccfee6577e&client_id=account&tab_id=uS8lYfebLa0" @@ -166,7 +166,7 @@ export const kcRegisterContext: KcContext.Register = { }; export const kcInfoContext: KcContext.Info ={ - ...kcTemplateContext, + ...kcCommonContext, "pageId": "info.ftl", "messageHeader": "", "requiredActions": undefined, @@ -178,7 +178,7 @@ export const kcInfoContext: KcContext.Info ={ }; export const kcErrorContext: KcContext.Error = { - ...kcTemplateContext, + ...kcCommonContext, "pageId": "error.ftl", "client": { "baseUrl": "#" @@ -186,16 +186,16 @@ export const kcErrorContext: KcContext.Error = { }; export const kcLoginResetPasswordContext: KcContext.LoginResetPassword = { - ...kcTemplateContext, + ...kcCommonContext, "pageId": "login-reset-password.ftl", "realm":{ - ...kcTemplateContext.realm, + ...kcCommonContext.realm, "loginWithEmailAllowed": false } }; export const kcLoginVerifyEmailContext: KcContext.LoginVerifyEmail = { - ...kcTemplateContext, + ...kcCommonContext, "pageId": "login-verify-email.ftl" };