From c9b2db625ce8cb336892109772273233f243c775 Mon Sep 17 00:00:00 2001 From: garronej Date: Wed, 23 Jun 2021 18:03:49 +0200 Subject: [PATCH] Enable possiblity to support custom pages (without forking keycloakify) --- src/bin/build-keycloak-theme/build-keycloak-theme.ts | 6 ++++-- src/bin/build-keycloak-theme/generateFtl/generateFtl.ts | 2 +- .../generateKeycloakThemeResources.ts | 8 ++++++-- src/lib/getKcContext/KcContextBase.ts | 5 ----- src/lib/getKcContext/getKcContext.ts | 6 +++--- src/lib/getKcContext/kcContextMocks/kcContextMocks.ts | 7 ------- src/test/generateKeycloakThemeResources.ts | 3 ++- 7 files changed, 16 insertions(+), 21 deletions(-) diff --git a/src/bin/build-keycloak-theme/build-keycloak-theme.ts b/src/bin/build-keycloak-theme/build-keycloak-theme.ts index 595d7d32..c3b33f0c 100644 --- a/src/bin/build-keycloak-theme/build-keycloak-theme.ts +++ b/src/bin/build-keycloak-theme/build-keycloak-theme.ts @@ -6,7 +6,6 @@ import * as child_process from "child_process"; import { generateDebugFiles, containerLaunchScriptBasename } from "./generateDebugFiles"; import { URL } from "url"; - const reactProjectDirPath = process.cwd(); const doUseExternalAssets = process.argv[2]?.toLowerCase() === "--external-assets"; @@ -19,6 +18,8 @@ export function main() { console.log("🔏 Building the keycloak theme...⌚"); + const extraPagesId: string[] = (parsedPackageJson as any)["keycloakify"]?.["extraPages"] ?? []; + generateKeycloakThemeResources({ keycloakThemeBuildingDirPath, "reactAppBuildDirPath": pathJoin(reactProjectDirPath, "build"), @@ -53,7 +54,8 @@ export function main() { }; - })() + })(), + extraPagesId }); const { jarFilePath } = generateJavaStackFiles({ diff --git a/src/bin/build-keycloak-theme/generateFtl/generateFtl.ts b/src/bin/build-keycloak-theme/generateFtl/generateFtl.ts index b972642c..e4f2d939 100644 --- a/src/bin/build-keycloak-theme/generateFtl/generateFtl.ts +++ b/src/bin/build-keycloak-theme/generateFtl/generateFtl.ts @@ -136,7 +136,7 @@ export function generateFtlFilesCodeFactory( function generateFtlFilesCode( params: { - pageId: PageId; + pageId: string; } ): { ftlCode: string; } { diff --git a/src/bin/build-keycloak-theme/generateKeycloakThemeResources.ts b/src/bin/build-keycloak-theme/generateKeycloakThemeResources.ts index d55c0257..86e2d7ab 100644 --- a/src/bin/build-keycloak-theme/generateKeycloakThemeResources.ts +++ b/src/bin/build-keycloak-theme/generateKeycloakThemeResources.ts @@ -22,10 +22,14 @@ export function generateKeycloakThemeResources( urlPathname: string; //If urlOrigin is not undefined then it means --externals-assets urlOrigin: undefined | string; + extraPagesId: string[]; } ) { - const { themeName, reactAppBuildDirPath, keycloakThemeBuildingDirPath, urlPathname, urlOrigin } = params; + const { + themeName, reactAppBuildDirPath, keycloakThemeBuildingDirPath, + urlPathname, urlOrigin, extraPagesId + } = params; const themeDirPath = pathJoin(keycloakThemeBuildingDirPath, "src", "main", "resources", "theme", themeName, "login"); @@ -92,7 +96,7 @@ export function generateKeycloakThemeResources( urlOrigin }); - pageIds.forEach(pageId => { + [...pageIds, ...extraPagesId].forEach(pageId => { const { ftlCode } = generateFtlFilesCode({ pageId }); diff --git a/src/lib/getKcContext/KcContextBase.ts b/src/lib/getKcContext/KcContextBase.ts index e3257c8b..227a80d7 100644 --- a/src/lib/getKcContext/KcContextBase.ts +++ b/src/lib/getKcContext/KcContextBase.ts @@ -123,11 +123,6 @@ export declare namespace KcContextBase { passwordRequired: boolean; recaptchaRequired: boolean; recaptchaSiteKey?: string; - /** - * Defined when you use the keycloak-mail-whitelisting keycloak plugin - * (https://github.com/micedre/keycloak-mail-whitelisting) - */ - authorizedMailDomains?: string[]; social: { displayInfo: boolean; providers?: { diff --git a/src/lib/getKcContext/getKcContext.ts b/src/lib/getKcContext/getKcContext.ts index 982c2acb..c939d01e 100644 --- a/src/lib/getKcContext/getKcContext.ts +++ b/src/lib/getKcContext/getKcContext.ts @@ -5,14 +5,14 @@ import { ftlValuesGlobalName } from "../../bin/build-keycloak-theme/ftlValuesGlo export function getKcContext( params?: { - mockPageId: KcContextBase["pageId"] | KcContextExtended["pageId"] | false; + mockPageId?: KcContextBase["pageId"] | KcContextExtended["pageId"]; kcContextExtendedMock?: KcContextExtended[]; } -): { kcContext: KcContextBase | KcContextExtended & KcContextBase.Common; } { +): { kcContext: (KcContextBase | KcContextExtended & KcContextBase.Common) | undefined; } { const { mockPageId, kcContextExtendedMock } = params ?? { "mockPageId": false }; - if (typeof mockPageId === "string") { + if (mockPageId !== undefined) { return { "pageId": mockPageId, diff --git a/src/lib/getKcContext/kcContextMocks/kcContextMocks.ts b/src/lib/getKcContext/kcContextMocks/kcContextMocks.ts index d9775cbf..c59cfd68 100644 --- a/src/lib/getKcContext/kcContextMocks/kcContextMocks.ts +++ b/src/lib/getKcContext/kcContextMocks/kcContextMocks.ts @@ -166,13 +166,6 @@ export const kcContextMocks: KcContextBase[] = [ }, "passwordRequired": true, "recaptchaRequired": false, - "authorizedMailDomains": [ - "example.com", - "another-example.com", - "*.yet-another-example.com", - "*.example.com", - "hello-world.com" - ], "social": { "displayInfo": true }, diff --git a/src/test/generateKeycloakThemeResources.ts b/src/test/generateKeycloakThemeResources.ts index 7d199dfa..a37f0488 100644 --- a/src/test/generateKeycloakThemeResources.ts +++ b/src/test/generateKeycloakThemeResources.ts @@ -13,6 +13,7 @@ generateKeycloakThemeResources({ "reactAppBuildDirPath": pathJoin(sampleReactProjectDirPath, "build"), "keycloakThemeBuildingDirPath": pathJoin(sampleReactProjectDirPath, "build_keycloak_theme"), "urlPathname": "/keycloakify-demo-app/", - "urlOrigin": undefined + "urlOrigin": undefined, + "extraPagesId": ["my-custom-page.ftl"] });