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"
};