From 49e495dbbee1252ccd32b3b2f533de7bdee08afc Mon Sep 17 00:00:00 2001 From: garronej Date: Tue, 4 Apr 2023 01:40:55 +0200 Subject: [PATCH] Include keycloakfiy version number in kcContext (for debug purpose) --- src/account/kcContext/KcContext.ts | 1 + src/account/kcContext/kcContextMocks.ts | 1 + .../ftl_object_to_js_code_declaring_an_object.ftl | 1 + src/bin/keycloakify/generateFtl/generateFtl.ts | 7 ++++--- src/bin/keycloakify/generateKeycloakThemeResources.ts | 6 ++++-- src/bin/keycloakify/keycloakify.ts | 10 +++++++++- src/login/kcContext/KcContext.ts | 1 + src/login/kcContext/kcContextMocks.ts | 1 + 8 files changed, 22 insertions(+), 6 deletions(-) diff --git a/src/account/kcContext/KcContext.ts b/src/account/kcContext/KcContext.ts index 53db5157..31e7b70e 100644 --- a/src/account/kcContext/KcContext.ts +++ b/src/account/kcContext/KcContext.ts @@ -6,6 +6,7 @@ export type KcContext = KcContext.Password | KcContext.Account; export declare namespace KcContext { export type Common = { + keycloakifyVersion: string; locale?: { supported: { url: string; diff --git a/src/account/kcContext/kcContextMocks.ts b/src/account/kcContext/kcContextMocks.ts index 2857514d..3fbc7222 100644 --- a/src/account/kcContext/kcContextMocks.ts +++ b/src/account/kcContext/kcContextMocks.ts @@ -7,6 +7,7 @@ import type { KcContext } from "./KcContext"; const PUBLIC_URL = process.env["PUBLIC_URL"] ?? "/"; export const kcContextCommonMock: KcContext.Common = { + "keycloakifyVersion": "0.0.0", "url": { "resourcesPath": pathJoin(PUBLIC_URL, mockTestingResourcesPath), "resourcesCommonPath": pathJoin(PUBLIC_URL, mockTestingResourcesCommonPath), diff --git a/src/bin/keycloakify/generateFtl/ftl_object_to_js_code_declaring_an_object.ftl b/src/bin/keycloakify/generateFtl/ftl_object_to_js_code_declaring_an_object.ftl index ecd12da3..ffb9ee97 100644 --- a/src/bin/keycloakify/generateFtl/ftl_object_to_js_code_declaring_an_object.ftl +++ b/src/bin/keycloakify/generateFtl/ftl_object_to_js_code_declaring_an_object.ftl @@ -119,6 +119,7 @@ out["pageId"] = "PAGE_ID_xIgLsPgGId9D8e"; + out["keycloakifyVersion"] = "KEYCLOAKIFY_VERSION_xEdKd3xEdr"; return out; diff --git a/src/bin/keycloakify/generateFtl/generateFtl.ts b/src/bin/keycloakify/generateFtl/generateFtl.ts index 0689d212..48257180 100644 --- a/src/bin/keycloakify/generateFtl/generateFtl.ts +++ b/src/bin/keycloakify/generateFtl/generateFtl.ts @@ -53,8 +53,9 @@ export function generateFtlFilesCodeFactory(params: { //NOTE: Expected to be an empty object if external assets mode is enabled. cssGlobalsToDefine: Record; buildOptions: BuildOptionsLike; + keycloakifyVersion: string; }) { - const { cssGlobalsToDefine, indexHtmlCode, buildOptions } = params; + const { cssGlobalsToDefine, indexHtmlCode, buildOptions, keycloakifyVersion } = params; const $ = cheerio.load(indexHtmlCode); @@ -128,7 +129,8 @@ export function generateFtlFilesCodeFactory(params: { .replace( "CUSTOM_USER_ATTRIBUTES_eKsIY4ZsZ4xeM", buildOptions.customUserAttributes.length === 0 ? "" : ", " + buildOptions.customUserAttributes.map(name => `"${name}"`).join(", ") - ), + ) + .replace("KEYCLOAKIFY_VERSION_xEdKd3xEdr", keycloakifyVersion), "": [ "<#if scripts??>", " <#list scripts as script>", @@ -161,7 +163,6 @@ export function generateFtlFilesCodeFactory(params: { Object.entries({ ...replaceValueBySearchValue, - //If updated, don't forget to change in the ftl script as well. "PAGE_ID_xIgLsPgGId9D8e": pageId }).map(([searchValue, replaceValue]) => (ftlCode = ftlCode.replace(searchValue, replaceValue))); diff --git a/src/bin/keycloakify/generateKeycloakThemeResources.ts b/src/bin/keycloakify/generateKeycloakThemeResources.ts index f626566e..8d12de60 100644 --- a/src/bin/keycloakify/generateKeycloakThemeResources.ts +++ b/src/bin/keycloakify/generateKeycloakThemeResources.ts @@ -54,8 +54,9 @@ export async function generateKeycloakThemeResources(params: { emailThemeSrcDirPath: string | undefined; keycloakVersion: string; buildOptions: BuildOptionsLike; + keycloakifyVersion: string; }): Promise<{ doBundlesEmailTemplate: boolean }> { - const { reactAppBuildDirPath, keycloakThemeBuildingDirPath, emailThemeSrcDirPath, keycloakVersion, buildOptions } = params; + const { reactAppBuildDirPath, keycloakThemeBuildingDirPath, emailThemeSrcDirPath, keycloakVersion, buildOptions, keycloakifyVersion } = params; const getThemeDirPath = (themeType: ThemeType | "email") => pathJoin(keycloakThemeBuildingDirPath, "src", "main", "resources", "theme", buildOptions.themeName, themeType); @@ -138,7 +139,8 @@ export async function generateKeycloakThemeResources(params: { const { generateFtlFilesCode } = generateFtlFilesCodeFactory({ "indexHtmlCode": fs.readFileSync(pathJoin(reactAppBuildDirPath, "index.html")).toString("utf8"), "cssGlobalsToDefine": allCssGlobalsToDefine, - buildOptions + buildOptions, + keycloakifyVersion }); return generateFtlFilesCode; diff --git a/src/bin/keycloakify/keycloakify.ts b/src/bin/keycloakify/keycloakify.ts index 4817efd4..228f7ae2 100644 --- a/src/bin/keycloakify/keycloakify.ts +++ b/src/bin/keycloakify/keycloakify.ts @@ -11,6 +11,7 @@ import jar from "../tools/jar"; import { assert } from "tsafe/assert"; import { Equals } from "tsafe"; import { getEmailThemeSrcDirPath } from "../getSrcDirPath"; +import { getProjectRoot } from "../tools/getProjectRoot"; export async function main() { const { isSilent, hasExternalAssets } = getCliOptions(process.argv.slice(2)); @@ -38,7 +39,14 @@ export async function main() { })(), "reactAppBuildDirPath": buildOptions.reactAppBuildDirPath, buildOptions, - "keycloakVersion": buildOptions.keycloakVersionDefaultAssets + "keycloakVersion": buildOptions.keycloakVersionDefaultAssets, + "keycloakifyVersion": (() => { + const version = JSON.parse(fs.readFileSync(pathJoin(getProjectRoot(), "package.json")).toString("utf8"))["version"]; + + assert(typeof version === "string"); + + return version; + })() }); const { jarFilePath } = generateJavaStackFiles({ diff --git a/src/login/kcContext/KcContext.ts b/src/login/kcContext/KcContext.ts index 9f692ae3..f67c0762 100644 --- a/src/login/kcContext/KcContext.ts +++ b/src/login/kcContext/KcContext.ts @@ -36,6 +36,7 @@ export type KcContext = export declare namespace KcContext { export type Common = { + keycloakifyVersion: string; url: { loginAction: string; resourcesPath: string; diff --git a/src/login/kcContext/kcContextMocks.ts b/src/login/kcContext/kcContextMocks.ts index e28bce3c..736b2fe5 100644 --- a/src/login/kcContext/kcContextMocks.ts +++ b/src/login/kcContext/kcContextMocks.ts @@ -101,6 +101,7 @@ const attributes: Attribute[] = [ const attributesByName = Object.fromEntries(attributes.map(attribute => [attribute.name, attribute])) as any; export const kcContextCommonMock: KcContext.Common = { + "keycloakifyVersion": "0.0.0", "url": { "loginAction": "#", "resourcesPath": pathJoin(PUBLIC_URL, mockTestingResourcesPath),