keycloakify 9.3.0-rc.0 → 9.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -11
- package/bin/constants.d.ts +1 -0
- package/bin/constants.js +2 -1
- package/bin/constants.js.map +1 -1
- package/bin/download-builtin-keycloak-theme.js +28 -1
- package/bin/download-builtin-keycloak-theme.js.map +1 -1
- package/bin/keycloakify/BuildOptions.d.ts +2 -0
- package/bin/keycloakify/BuildOptions.js +8 -60
- package/bin/keycloakify/BuildOptions.js.map +1 -1
- package/bin/keycloakify/generateFtl/generateFtl.js +1 -1
- package/bin/keycloakify/generateFtl/generateFtl.js.map +1 -1
- package/bin/keycloakify/generateJavaStackFiles/bringInAccountV1.js +17 -4
- package/bin/keycloakify/generateJavaStackFiles/bringInAccountV1.js.map +1 -1
- package/bin/keycloakify/generateJavaStackFiles/generateJavaStackFiles.d.ts +1 -0
- package/bin/keycloakify/generateJavaStackFiles/generateJavaStackFiles.js +9 -2
- package/bin/keycloakify/generateJavaStackFiles/generateJavaStackFiles.js.map +1 -1
- package/bin/keycloakify/generateTheme/generateTheme.d.ts +1 -0
- package/bin/keycloakify/generateTheme/generateTheme.js +18 -4
- package/bin/keycloakify/generateTheme/generateTheme.js.map +1 -1
- package/bin/keycloakify/replacers/replaceImportsFromStaticInJsCode.d.ts +0 -11
- package/bin/keycloakify/replacers/replaceImportsFromStaticInJsCode.js +13 -27
- package/bin/keycloakify/replacers/replaceImportsFromStaticInJsCode.js.map +1 -1
- package/bin/promptKeycloakVersion.js +2 -0
- package/bin/promptKeycloakVersion.js.map +1 -1
- package/login/lib/useGetClassName.js +1 -1
- package/login/lib/useGetClassName.js.map +1 -1
- package/login/pages/LoginOtp.js +5 -43
- package/login/pages/LoginOtp.js.map +1 -1
- package/package.json +3 -17
- package/src/bin/constants.ts +1 -0
- package/src/bin/download-builtin-keycloak-theme.ts +45 -0
- package/src/bin/keycloakify/BuildOptions.ts +5 -13
- package/src/bin/keycloakify/generateFtl/generateFtl.ts +1 -1
- package/src/bin/keycloakify/generateJavaStackFiles/bringInAccountV1.ts +17 -3
- package/src/bin/keycloakify/generateJavaStackFiles/generateJavaStackFiles.ts +11 -2
- package/src/bin/keycloakify/generateTheme/generateTheme.ts +31 -7
- package/src/bin/keycloakify/replacers/replaceImportsFromStaticInJsCode.ts +10 -24
- package/src/bin/promptKeycloakVersion.ts +2 -0
- package/src/login/lib/useGetClassName.ts +1 -1
- package/src/login/pages/LoginOtp.tsx +64 -94
- package/src/tsconfig.json +1 -1
- package/src/vite-plugin/index.ts +0 -1
- package/src/vite-plugin/tsconfig.json +0 -12
- package/src/vite-plugin/vite-plugin.ts +0 -31
- package/vite-plugin/index.d.ts +0 -1
- package/vite-plugin/index.js +0 -18
- package/vite-plugin/index.js.map +0 -1
- package/vite-plugin/tsconfig.tsbuildinfo +0 -1
- package/vite-plugin/vite-plugin.d.ts +0 -2
- package/vite-plugin/vite-plugin.js +0 -49
- package/vite-plugin/vite-plugin.js.map +0 -1
@@ -81,7 +81,7 @@ export const { useGetClassName } = createUseClassName({
|
|
81
81
|
"kcAuthenticatorWebAuthnClass": "fa fa-key list-view-pf-icon-lg",
|
82
82
|
"kcAuthenticatorWebAuthnPasswordlessClass": "fa fa-key list-view-pf-icon-lg",
|
83
83
|
//css classes for the OTP Login Form
|
84
|
-
"kcSelectOTPListClass": "card-pf card-pf-view card-pf-view-select card-pf-view-single-select",
|
84
|
+
"kcSelectOTPListClass": "card-pf card-pf-view card-pf-view-select card-pf-view-single-select col-xs-12",
|
85
85
|
"kcSelectOTPListItemClass": "card-pf-body card-pf-top-element",
|
86
86
|
"kcAuthenticatorOtpCircleClass": "fa fa-mobile card-pf-icon-circle",
|
87
87
|
"kcSelectOTPItemHeadingClass": "card-pf-title text-center",
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"useGetClassName.js","sourceRoot":"","sources":["../../src/login/lib/useGetClassName.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AAGrE,MAAM,CAAC,MAAM,EAAE,eAAe,EAAE,GAAG,kBAAkB,CAAW;IAC5D,gBAAgB,EAAE;QACd,aAAa,EAAE,SAAS;QACxB,aAAa,EAAE,UAAU;QACzB,cAAc,EAAE,eAAe;QAC/B,uBAAuB,EAAE,KAAK;QAC9B,eAAe,EAAE,sBAAsB;QACvC,sBAAsB,EAAE,SAAS;QACjC,iBAAiB,EAAE,SAAS;QAC5B,wBAAwB,EAAE,mBAAmB;QAC7C,0BAA0B,EAAE,yBAAyB;QACrD,iCAAiC,EAAE,oBAAoB;QACvD,mBAAmB,EAAE,iBAAiB;QACtC,sBAAsB,EAAE,SAAS;QACjC,qBAAqB,EAAE,8BAA8B;QACrD,uBAAuB,EAAE,kCAAkC;QAC3D,uBAAuB,EAAE,kBAAkB;QAC3C,oBAAoB,EAAE,oBAAoB;QAC1C,iBAAiB,EAAE,2BAA2B;QAC9C,kBAAkB,EAAE,YAAY;QAChC,qBAAqB,EAAE,yCAAyC;QAChE,eAAe,EAAE,iBAAiB;QAClC,wBAAwB,EAAE,SAAS;QAEnC,aAAa,EAAE,gBAAgB;QAC/B,kBAAkB,EAAE,iBAAiB;QACrC,gBAAgB,EAAE,4EAA4E;QAC9F,qBAAqB,EAAE,WAAW;QAClC,eAAe,EAAE,oBAAoB;QACrC,uBAAuB,EAAE,8BAA8B;QAEvD,iBAAiB,EAAE,6EAA6E;QAChG,8BAA8B,EAAE,mDAAmD;QACnF,oCAAoC,EAAE,4BAA4B;QAClE,kCAAkC,EAAE,sBAAsB;QAC1D,mBAAmB,EAAE,mBAAmB;QACxC,uBAAuB,EAAE,mBAAmB;QAE5C,aAAa,EAAE,iBAAiB;QAChC,uBAAuB,EAAE,WAAW;QACpC,cAAc,EAAE,eAAe;QAC/B,cAAc,EAAE,cAAc;QAC9B,0BAA0B,EAAE,6DAA6D;QACzF,qBAAqB,EAAE,yCAAyC;QAChE,2BAA2B,EAAE,SAAS;QACtC,oBAAoB,EAAE,yCAAyC;QAC/D,oBAAoB,EAAE,yCAAyC;QAC/D,oBAAoB,EAAE,mBAAmB;QACzC,iBAAiB,EAAE,cAAc;QAEjC,iBAAiB,EAAE,8CAA8C;QAEjE,wBAAwB;QACxB,mBAAmB,EAAE,kBAAkB;QAEvC,+DAA+D;QAC/D,eAAe,EAAE,KAAK;QACtB,0HAA0H;QAC1H,sBAAsB,EAAE,aAAa;QACrC,sBAAsB,EAAE,aAAa;QACrC,sCAAsC;QACtC,oBAAoB,EAAE,QAAQ;QAC9B,oBAAoB,EAAE,WAAW;QAEjC,wBAAwB;QACxB,mBAAmB,EAAE,UAAU;QAC/B,cAAc,EAAE,kBAAkB;QAElC,qCAAqC;QACrC,eAAe,EAAE,SAAS;QAE1B,4CAA4C;QAC5C,uBAAuB,EAAE,yBAAyB;QAClD,2BAA2B,EAAE,sCAAsC;QACnE,+BAA+B,EAAE,4BAA4B;QAC7D,uCAAuC,EAAE,uCAAuC;QAChF,+BAA+B,EAAE,uCAAuC;QACxE,2BAA2B,EAAE,2BAA2B;QACxD,+BAA+B,EAAE,wBAAwB;QACzD,+BAA+B,EAAE,mBAAmB;QACpD,+BAA+B,EAAE,mBAAmB;QACpD,sCAAsC,EAAE,0BAA0B;QAClE,kCAAkC,EAAE,yBAAyB;QAC7D,mCAAmC,EAAE,sBAAsB;QAE3D,qCAAqC;QACrC,6BAA6B,EAAE,yBAAyB;QACxD,8BAA8B,EAAE,mCAAmC;QACnE,yBAAyB,EAAE,mCAAmC;QAC9D,8BAA8B,EAAE,gCAAgC;QAChE,0CAA0C,EAAE,gCAAgC;QAE5E,oCAAoC;QACpC,sBAAsB,EAAE
|
1
|
+
{"version":3,"file":"useGetClassName.js","sourceRoot":"","sources":["../../src/login/lib/useGetClassName.ts"],"names":[],"mappings":"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"}
|
package/login/pages/LoginOtp.js
CHANGED
@@ -1,6 +1,4 @@
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
2
|
-
import { useEffect } from "react";
|
3
|
-
import { headInsert } from "../../tools/headInsert";
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
4
2
|
import { clsx } from "../../tools/clsx";
|
5
3
|
import { useGetClassName } from "../../login/lib/useGetClassName";
|
6
4
|
export default function LoginOtp(props) {
|
@@ -11,45 +9,9 @@ export default function LoginOtp(props) {
|
|
11
9
|
});
|
12
10
|
const { otpLogin, url } = kcContext;
|
13
11
|
const { msg, msgStr } = i18n;
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
"src": `${kcContext.url.resourcesCommonPath}/node_modules/jquery/dist/jquery.min.js`
|
19
|
-
});
|
20
|
-
(async () => {
|
21
|
-
await prLoaded;
|
22
|
-
if (isCleanedUp) {
|
23
|
-
return;
|
24
|
-
}
|
25
|
-
evaluateInlineScript();
|
26
|
-
})();
|
27
|
-
return () => {
|
28
|
-
isCleanedUp = true;
|
29
|
-
remove();
|
30
|
-
};
|
31
|
-
}, []);
|
32
|
-
return (_jsx(Template, Object.assign({}, { kcContext, i18n, doUseDefaultCss, classes }, { headerNode: msg("doLogIn") }, { children: _jsxs("form", Object.assign({ id: "kc-otp-login-form", className: getClassName("kcFormClass"), action: url.loginAction, method: "post" }, { children: [otpLogin.userOtpCredentials.length > 1 && (_jsx("div", Object.assign({ className: getClassName("kcFormGroupClass") }, { children: _jsx("div", Object.assign({ className: getClassName("kcInputWrapperClass") }, { children: otpLogin.userOtpCredentials.map(otpCredential => (_jsxs("div", Object.assign({ className: getClassName("kcSelectOTPListClass") }, { children: [_jsx("input", { type: "hidden", value: "${otpCredential.id}" }), _jsxs("div", Object.assign({ className: getClassName("kcSelectOTPListItemClass") }, { children: [_jsx("span", { className: getClassName("kcAuthenticatorOtpCircleClass") }), _jsx("h2", Object.assign({ className: getClassName("kcSelectOTPItemHeadingClass") }, { children: otpCredential.userLabel }))] }))] }), otpCredential.id))) })) }))), _jsxs("div", Object.assign({ className: getClassName("kcFormGroupClass") }, { children: [_jsx("div", Object.assign({ className: getClassName("kcLabelWrapperClass") }, { children: _jsx("label", Object.assign({ htmlFor: "otp", className: getClassName("kcLabelClass") }, { children: msg("loginOtpOneTime") })) })), _jsx("div", Object.assign({ className: getClassName("kcInputWrapperClass") }, { children: _jsx("input", { id: "otp", name: "otp", autoComplete: "off", type: "text", className: getClassName("kcInputClass"), autoFocus: true }) }))] })), _jsxs("div", Object.assign({ className: getClassName("kcFormGroupClass") }, { children: [_jsx("div", Object.assign({ id: "kc-form-options", className: getClassName("kcFormOptionsClass") }, { children: _jsx("div", { className: getClassName("kcFormOptionsWrapperClass") }) })), _jsx("div", Object.assign({ id: "kc-form-buttons", className: getClassName("kcFormButtonsClass") }, { children: _jsx("input", { className: clsx(getClassName("kcButtonClass"), getClassName("kcButtonPrimaryClass"), getClassName("kcButtonBlockClass"), getClassName("kcButtonLargeClass")), name: "login", id: "kc-login", type: "submit", value: msgStr("doLogIn") }) }))] }))] })) })));
|
33
|
-
}
|
34
|
-
function evaluateInlineScript() {
|
35
|
-
$(document).ready(function () {
|
36
|
-
// Card Single Select
|
37
|
-
$(".card-pf-view-single-select").click(function () {
|
38
|
-
if ($(this).hasClass("active")) {
|
39
|
-
$(this).removeClass("active");
|
40
|
-
$(this).children().removeAttr("name");
|
41
|
-
}
|
42
|
-
else {
|
43
|
-
$(".card-pf-view-single-select").removeClass("active");
|
44
|
-
$(".card-pf-view-single-select").children().removeAttr("name");
|
45
|
-
$(this).addClass("active");
|
46
|
-
$(this).children().attr("name", "selectedCredentialId");
|
47
|
-
}
|
48
|
-
});
|
49
|
-
var defaultCred = $(".card-pf-view-single-select")[0];
|
50
|
-
if (defaultCred) {
|
51
|
-
defaultCred.click();
|
52
|
-
}
|
53
|
-
});
|
12
|
+
return (_jsxs(_Fragment, { children: [_jsx("style", { children: `
|
13
|
+
input[type="radio"]:checked~label.kcSelectOTPListClass{
|
14
|
+
border: 2px solid #39a5dc;
|
15
|
+
}` }), _jsx(Template, Object.assign({}, { kcContext, i18n, doUseDefaultCss, classes }, { headerNode: msg("doLogIn") }, { children: _jsxs("form", Object.assign({ id: "kc-otp-login-form", className: getClassName("kcFormClass"), action: url.loginAction, method: "post" }, { children: [otpLogin.userOtpCredentials.length > 1 && (_jsx("div", Object.assign({ className: getClassName("kcFormGroupClass") }, { children: _jsx("div", Object.assign({ className: getClassName("kcInputWrapperClass") }, { children: otpLogin.userOtpCredentials.map((otpCredential, index) => (_jsxs("div", { children: [_jsx("input", { id: `kc-otp-credential-${index}`, name: "selectedCredentialId", type: "radio", value: otpCredential.id, style: { display: "none" } }), _jsx("label", Object.assign({ htmlFor: `kc-otp-credential-${index}`, className: getClassName("kcSelectOTPListClass") }, { children: _jsxs("div", Object.assign({ className: getClassName("kcSelectOTPListItemClass") }, { children: [_jsx("span", { className: getClassName("kcAuthenticatorOtpCircleClass") }), _jsx("h2", Object.assign({ className: getClassName("kcSelectOTPItemHeadingClass") }, { children: otpCredential.userLabel }))] })) }), otpCredential.id)] }, otpCredential.id))) })) }))), _jsxs("div", Object.assign({ className: getClassName("kcFormGroupClass") }, { children: [_jsx("div", Object.assign({ className: getClassName("kcLabelWrapperClass") }, { children: _jsx("label", Object.assign({ htmlFor: "otp", className: getClassName("kcLabelClass") }, { children: msg("loginOtpOneTime") })) })), _jsx("div", Object.assign({ className: getClassName("kcInputWrapperClass") }, { children: _jsx("input", { id: "otp", name: "otp", autoComplete: "off", type: "text", className: getClassName("kcInputClass"), autoFocus: true }) }))] })), _jsxs("div", Object.assign({ className: getClassName("kcFormGroupClass") }, { children: [_jsx("div", Object.assign({ id: "kc-form-options", className: getClassName("kcFormOptionsClass") }, { children: _jsx("div", { className: getClassName("kcFormOptionsWrapperClass") }) })), _jsx("div", Object.assign({ id: "kc-form-buttons", className: getClassName("kcFormButtonsClass") }, { children: _jsx("input", { className: clsx(getClassName("kcButtonClass"), getClassName("kcButtonPrimaryClass"), getClassName("kcButtonBlockClass"), getClassName("kcButtonLargeClass")), name: "login", id: "kc-login", type: "submit", value: msgStr("doLogIn") }) }))] }))] })) }))] }));
|
54
16
|
}
|
55
17
|
//# sourceMappingURL=LoginOtp.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"LoginOtp.js","sourceRoot":"","sources":["../../src/login/pages/LoginOtp.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,
|
1
|
+
{"version":3,"file":"LoginOtp.js","sourceRoot":"","sources":["../../src/login/pages/LoginOtp.tsx"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "keycloakify",
|
3
|
-
"version": "9.3.
|
3
|
+
"version": "9.3.1",
|
4
4
|
"description": "Create Keycloak themes using React",
|
5
5
|
"repository": {
|
6
6
|
"type": "git",
|
@@ -212,9 +212,6 @@
|
|
212
212
|
"src/tools/useConst.ts",
|
213
213
|
"src/tools/useConstCallback.ts",
|
214
214
|
"src/tsconfig.json",
|
215
|
-
"src/vite-plugin/index.ts",
|
216
|
-
"src/vite-plugin/tsconfig.json",
|
217
|
-
"src/vite-plugin/vite-plugin.ts",
|
218
215
|
"account/Fallback.d.ts",
|
219
216
|
"account/Fallback.js",
|
220
217
|
"account/Fallback.js.map",
|
@@ -895,9 +892,6 @@
|
|
895
892
|
"src/tools/useConst.ts",
|
896
893
|
"src/tools/useConstCallback.ts",
|
897
894
|
"src/tsconfig.json",
|
898
|
-
"src/vite-plugin/index.ts",
|
899
|
-
"src/vite-plugin/tsconfig.json",
|
900
|
-
"src/vite-plugin/vite-plugin.ts",
|
901
895
|
"tools/AndByDiscriminatingKey.d.ts",
|
902
896
|
"tools/AndByDiscriminatingKey.js",
|
903
897
|
"tools/AndByDiscriminatingKey.js.map",
|
@@ -945,14 +939,7 @@
|
|
945
939
|
"tools/useConst.js.map",
|
946
940
|
"tools/useConstCallback.d.ts",
|
947
941
|
"tools/useConstCallback.js",
|
948
|
-
"tools/useConstCallback.js.map"
|
949
|
-
"vite-plugin/index.d.ts",
|
950
|
-
"vite-plugin/index.js",
|
951
|
-
"vite-plugin/index.js.map",
|
952
|
-
"vite-plugin/tsconfig.tsbuildinfo",
|
953
|
-
"vite-plugin/vite-plugin.d.ts",
|
954
|
-
"vite-plugin/vite-plugin.js",
|
955
|
-
"vite-plugin/vite-plugin.js.map"
|
942
|
+
"tools/useConstCallback.js.map"
|
956
943
|
],
|
957
944
|
"keywords": [
|
958
945
|
"bluehats",
|
@@ -1006,8 +993,7 @@
|
|
1006
993
|
"tss-react": "^4.8.2",
|
1007
994
|
"typescript": "^4.9.1-beta",
|
1008
995
|
"vitest": "^0.29.8",
|
1009
|
-
"zod-to-json-schema": "^3.20.4"
|
1010
|
-
"vite": "^5.0.12"
|
996
|
+
"zod-to-json-schema": "^3.20.4"
|
1011
997
|
},
|
1012
998
|
"dependencies": {
|
1013
999
|
"@babel/generator": "^7.22.9",
|
package/src/bin/constants.ts
CHANGED
@@ -3,6 +3,7 @@ export const resources_common = "resources-common";
|
|
3
3
|
export const lastKeycloakVersionWithAccountV1 = "21.1.2";
|
4
4
|
|
5
5
|
export const themeTypes = ["login", "account"] as const;
|
6
|
+
export const retrocompatPostfix = "_retrocompat";
|
6
7
|
export const accountV1 = "account-v1";
|
7
8
|
|
8
9
|
export type ThemeType = (typeof themeTypes)[number];
|
@@ -27,6 +27,51 @@ export async function downloadBuiltinKeycloakTheme(params: { keycloakVersion: st
|
|
27
27
|
"preCacheTransform": {
|
28
28
|
"actionCacheId": "npm install and build",
|
29
29
|
"action": async ({ destDirPath }) => {
|
30
|
+
fix_account_css: {
|
31
|
+
const accountCssFilePath = pathJoin(destDirPath, "keycloak", "account", "resources", "css", "account.css");
|
32
|
+
|
33
|
+
if (!fs.existsSync(accountCssFilePath)) {
|
34
|
+
break fix_account_css;
|
35
|
+
}
|
36
|
+
|
37
|
+
fs.writeFileSync(
|
38
|
+
accountCssFilePath,
|
39
|
+
Buffer.from(fs.readFileSync(accountCssFilePath).toString("utf8").replace("top: -34px;", "top: -34px !important;"), "utf8")
|
40
|
+
);
|
41
|
+
}
|
42
|
+
|
43
|
+
fix_account_topt: {
|
44
|
+
const totpFtlFilePath = pathJoin(destDirPath, "base", "account", "totp.ftl");
|
45
|
+
|
46
|
+
if (!fs.existsSync(totpFtlFilePath)) {
|
47
|
+
break fix_account_topt;
|
48
|
+
}
|
49
|
+
|
50
|
+
fs.writeFileSync(
|
51
|
+
totpFtlFilePath,
|
52
|
+
Buffer.from(
|
53
|
+
fs
|
54
|
+
.readFileSync(totpFtlFilePath)
|
55
|
+
.toString("utf8")
|
56
|
+
.replace(
|
57
|
+
[
|
58
|
+
" <#list totp.policy.supportedApplications as app>",
|
59
|
+
" <li>${app}</li>",
|
60
|
+
" </#list>"
|
61
|
+
].join("\n"),
|
62
|
+
[
|
63
|
+
" <#if totp.policy.supportedApplications?has_content>",
|
64
|
+
" <#list totp.policy.supportedApplications as app>",
|
65
|
+
" <li>${app}</li>",
|
66
|
+
" </#list>",
|
67
|
+
" </#if>"
|
68
|
+
].join("\n")
|
69
|
+
),
|
70
|
+
"utf8"
|
71
|
+
)
|
72
|
+
);
|
73
|
+
}
|
74
|
+
|
30
75
|
install_common_node_modules: {
|
31
76
|
const commonResourcesDirPath = pathJoin(destDirPath, "keycloak", "common", "resources");
|
32
77
|
|
@@ -3,7 +3,6 @@ import { getParsedPackageJson } from "./parsedPackageJson";
|
|
3
3
|
import { join as pathJoin } from "path";
|
4
4
|
import parseArgv from "minimist";
|
5
5
|
import { getAbsoluteAndInOsFormatPath } from "../tools/getAbsoluteAndInOsFormatPath";
|
6
|
-
import * as fs from "fs";
|
7
6
|
|
8
7
|
/** Consolidated build option gathered form CLI arguments and config in package.json */
|
9
8
|
export type BuildOptions = {
|
@@ -16,6 +15,7 @@ export type BuildOptions = {
|
|
16
15
|
doCreateJar: boolean;
|
17
16
|
loginThemeResourcesFromKeycloakVersion: string;
|
18
17
|
reactAppRootDirPath: string;
|
18
|
+
/** Directory of your built react project. Defaults to {cwd}/build */
|
19
19
|
reactAppBuildDirPath: string;
|
20
20
|
/** Directory that keycloakify outputs to. Defaults to {cwd}/build_keycloak */
|
21
21
|
keycloakifyBuildDirPath: string;
|
@@ -24,6 +24,7 @@ export type BuildOptions = {
|
|
24
24
|
/** If your app is hosted under a subpath, it's the case in CRA if you have "homepage": "https://example.com/my-app" in your package.json
|
25
25
|
* In this case the urlPathname will be "/my-app/" */
|
26
26
|
urlPathname: string | undefined;
|
27
|
+
doBuildRetrocompatAccountTheme: boolean;
|
27
28
|
};
|
28
29
|
|
29
30
|
export function readBuildOptions(params: { reactAppRootDirPath: string; processArgv: string[] }): BuildOptions {
|
@@ -106,17 +107,7 @@ export function readBuildOptions(params: { reactAppRootDirPath: string; processA
|
|
106
107
|
});
|
107
108
|
}
|
108
109
|
|
109
|
-
|
110
|
-
const out = pathJoin(reactAppRootDirPath, name);
|
111
|
-
|
112
|
-
if (!fs.existsSync(out)) {
|
113
|
-
continue;
|
114
|
-
}
|
115
|
-
|
116
|
-
return out;
|
117
|
-
}
|
118
|
-
|
119
|
-
throw new Error("Please use the reactAppBuildDirPath option to specify the build directory of your react app");
|
110
|
+
return pathJoin(reactAppRootDirPath, "build");
|
120
111
|
})(),
|
121
112
|
"keycloakifyBuildDirPath": (() => {
|
122
113
|
const { keycloakifyBuildDirPath } = parsedPackageJson.keycloakify ?? {};
|
@@ -160,6 +151,7 @@ export function readBuildOptions(params: { reactAppRootDirPath: string; processA
|
|
160
151
|
|
161
152
|
const out = url.pathname.replace(/([^/])$/, "$1/");
|
162
153
|
return out === "/" ? undefined : out;
|
163
|
-
})()
|
154
|
+
})(),
|
155
|
+
"doBuildRetrocompatAccountTheme": parsedPackageJson.keycloakify?.doBuildRetrocompatAccountTheme ?? true
|
164
156
|
};
|
165
157
|
}
|
@@ -37,7 +37,7 @@ export function generateFtlFilesCodeFactory(params: {
|
|
37
37
|
|
38
38
|
assert(jsCode !== null);
|
39
39
|
|
40
|
-
const { fixedJsCode } = replaceImportsFromStaticInJsCode({ jsCode
|
40
|
+
const { fixedJsCode } = replaceImportsFromStaticInJsCode({ jsCode });
|
41
41
|
|
42
42
|
$(element).text(fixedJsCode);
|
43
43
|
});
|
@@ -38,7 +38,21 @@ export async function bringInAccountV1(params: { buildOptions: BuildOptionsLike
|
|
38
38
|
|
39
39
|
const commonResourceFilePaths = [
|
40
40
|
"node_modules/patternfly/dist/css/patternfly.min.css",
|
41
|
-
"node_modules/patternfly/dist/css/patternfly-additions.min.css"
|
41
|
+
"node_modules/patternfly/dist/css/patternfly-additions.min.css",
|
42
|
+
...[
|
43
|
+
"OpenSans-Light-webfont.woff2",
|
44
|
+
"OpenSans-Regular-webfont.woff2",
|
45
|
+
"OpenSans-Bold-webfont.woff2",
|
46
|
+
"OpenSans-Semibold-webfont.woff2",
|
47
|
+
"OpenSans-Bold-webfont.woff",
|
48
|
+
"OpenSans-Light-webfont.woff",
|
49
|
+
"OpenSans-Regular-webfont.woff",
|
50
|
+
"OpenSans-Semibold-webfont.woff",
|
51
|
+
"OpenSans-Regular-webfont.ttf",
|
52
|
+
"OpenSans-Light-webfont.ttf",
|
53
|
+
"OpenSans-Semibold-webfont.ttf",
|
54
|
+
"OpenSans-Bold-webfont.ttf"
|
55
|
+
].map(path => `node_modules/patternfly/dist/fonts/${path}`)
|
42
56
|
];
|
43
57
|
|
44
58
|
for (const relativeFilePath of commonResourceFilePaths.map(path => pathJoin(...path.split("/")))) {
|
@@ -49,7 +63,7 @@ export async function bringInAccountV1(params: { buildOptions: BuildOptionsLike
|
|
49
63
|
fs.cpSync(pathJoin(builtinKeycloakThemeTmpDirPath, "keycloak", "common", "resources", relativeFilePath), destFilePath);
|
50
64
|
}
|
51
65
|
|
52
|
-
const resourceFilePaths = ["css/account.css"];
|
66
|
+
const resourceFilePaths = ["css/account.css", "img/icon-sidebar-active.png", "img/logo.png"];
|
53
67
|
|
54
68
|
for (const relativeFilePath of resourceFilePaths.map(path => pathJoin(...path.split("/")))) {
|
55
69
|
const destFilePath = pathJoin(accountV1DirPath, "resources", relativeFilePath);
|
@@ -69,7 +83,7 @@ export async function bringInAccountV1(params: { buildOptions: BuildOptionsLike
|
|
69
83
|
"",
|
70
84
|
"locales=ar,ca,cs,da,de,en,es,fr,fi,hu,it,ja,lt,nl,no,pl,pt-BR,ru,sk,sv,tr,zh-CN",
|
71
85
|
"",
|
72
|
-
"styles=" + [...resourceFilePaths, ...commonResourceFilePaths.map(path => `
|
86
|
+
"styles=" + [...resourceFilePaths, ...commonResourceFilePaths.map(path => `resources-common/${path}`)].join(" "),
|
73
87
|
"",
|
74
88
|
"##### css classes for form buttons",
|
75
89
|
"# main class used for all buttons",
|
@@ -3,7 +3,7 @@ import { join as pathJoin, dirname as pathDirname } from "path";
|
|
3
3
|
import { assert } from "tsafe/assert";
|
4
4
|
import { Reflect } from "tsafe/Reflect";
|
5
5
|
import type { BuildOptions } from "../BuildOptions";
|
6
|
-
import { type ThemeType, accountV1 } from "../../constants";
|
6
|
+
import { type ThemeType, retrocompatPostfix, accountV1 } from "../../constants";
|
7
7
|
import { bringInAccountV1 } from "./bringInAccountV1";
|
8
8
|
|
9
9
|
export type BuildOptionsLike = {
|
@@ -13,6 +13,7 @@ export type BuildOptionsLike = {
|
|
13
13
|
cacheDirPath: string;
|
14
14
|
keycloakifyBuildDirPath: string;
|
15
15
|
themeNames: string[];
|
16
|
+
doBuildRetrocompatAccountTheme: boolean;
|
16
17
|
};
|
17
18
|
|
18
19
|
{
|
@@ -113,7 +114,15 @@ export async function generateJavaStackFiles(params: {
|
|
113
114
|
"types": Object.entries(implementedThemeTypes)
|
114
115
|
.filter(([, isImplemented]) => isImplemented)
|
115
116
|
.map(([themeType]) => themeType)
|
116
|
-
}
|
117
|
+
},
|
118
|
+
...(!implementedThemeTypes.account || !buildOptions.doBuildRetrocompatAccountTheme
|
119
|
+
? []
|
120
|
+
: [
|
121
|
+
{
|
122
|
+
"name": `${themeName}${retrocompatPostfix}`,
|
123
|
+
"types": ["account"]
|
124
|
+
}
|
125
|
+
])
|
117
126
|
])
|
118
127
|
.flat()
|
119
128
|
]
|
@@ -1,10 +1,10 @@
|
|
1
1
|
import { transformCodebase } from "../../tools/transformCodebase";
|
2
2
|
import * as fs from "fs";
|
3
|
-
import { join as pathJoin, resolve as pathResolve } from "path";
|
3
|
+
import { join as pathJoin, basename as pathBasename, resolve as pathResolve } from "path";
|
4
4
|
import { replaceImportsFromStaticInJsCode } from "../replacers/replaceImportsFromStaticInJsCode";
|
5
5
|
import { replaceImportsInCssCode } from "../replacers/replaceImportsInCssCode";
|
6
6
|
import { generateFtlFilesCodeFactory, loginThemePageIds, accountThemePageIds } from "../generateFtl";
|
7
|
-
import { themeTypes, type ThemeType, lastKeycloakVersionWithAccountV1, keycloak_resources, accountV1 } from "../../constants";
|
7
|
+
import { themeTypes, type ThemeType, lastKeycloakVersionWithAccountV1, keycloak_resources, retrocompatPostfix, accountV1 } from "../../constants";
|
8
8
|
import { isInside } from "../../tools/isInside";
|
9
9
|
import type { BuildOptions } from "../BuildOptions";
|
10
10
|
import { assert, type Equals } from "tsafe/assert";
|
@@ -22,6 +22,7 @@ export type BuildOptionsLike = {
|
|
22
22
|
keycloakifyBuildDirPath: string;
|
23
23
|
reactAppBuildDirPath: string;
|
24
24
|
cacheDirPath: string;
|
25
|
+
doBuildRetrocompatAccountTheme: boolean;
|
25
26
|
};
|
26
27
|
|
27
28
|
assert<BuildOptions extends BuildOptionsLike ? true : false>();
|
@@ -35,9 +36,17 @@ export async function generateTheme(params: {
|
|
35
36
|
}): Promise<void> {
|
36
37
|
const { themeName, themeSrcDirPath, keycloakifySrcDirPath, buildOptions, keycloakifyVersion } = params;
|
37
38
|
|
38
|
-
const getThemeTypeDirPath = (params: { themeType: ThemeType | "email" }) => {
|
39
|
-
const { themeType } = params;
|
40
|
-
return pathJoin(
|
39
|
+
const getThemeTypeDirPath = (params: { themeType: ThemeType | "email"; isRetrocompat?: true }) => {
|
40
|
+
const { themeType, isRetrocompat = false } = params;
|
41
|
+
return pathJoin(
|
42
|
+
buildOptions.keycloakifyBuildDirPath,
|
43
|
+
"src",
|
44
|
+
"main",
|
45
|
+
"resources",
|
46
|
+
"theme",
|
47
|
+
`${themeName}${isRetrocompat ? retrocompatPostfix : ""}`,
|
48
|
+
themeType
|
49
|
+
);
|
41
50
|
};
|
42
51
|
|
43
52
|
let allCssGlobalsToDefine: Record<string, string> = {};
|
@@ -93,8 +102,7 @@ export async function generateTheme(params: {
|
|
93
102
|
|
94
103
|
if (/\.js?$/i.test(filePath)) {
|
95
104
|
const { fixedJsCode } = replaceImportsFromStaticInJsCode({
|
96
|
-
"jsCode": sourceCode.toString("utf8")
|
97
|
-
"bundler": "vite"
|
105
|
+
"jsCode": sourceCode.toString("utf8")
|
98
106
|
});
|
99
107
|
|
100
108
|
return { "modifiedSourceCode": Buffer.from(fixedJsCode, "utf8") };
|
@@ -193,6 +201,22 @@ export async function generateTheme(params: {
|
|
193
201
|
"utf8"
|
194
202
|
)
|
195
203
|
);
|
204
|
+
|
205
|
+
if (themeType === "account" && buildOptions.doBuildRetrocompatAccountTheme) {
|
206
|
+
transformCodebase({
|
207
|
+
"srcDirPath": themeTypeDirPath,
|
208
|
+
"destDirPath": getThemeTypeDirPath({ themeType, "isRetrocompat": true }),
|
209
|
+
"transformSourceCode": ({ filePath, sourceCode }) => {
|
210
|
+
if (pathBasename(filePath) === "theme.properties") {
|
211
|
+
return {
|
212
|
+
"modifiedSourceCode": Buffer.from(sourceCode.toString("utf8").replace(`parent=${accountV1}`, "parent=keycloak"), "utf8")
|
213
|
+
};
|
214
|
+
}
|
215
|
+
|
216
|
+
return { "modifiedSourceCode": sourceCode };
|
217
|
+
}
|
218
|
+
});
|
219
|
+
}
|
196
220
|
}
|
197
221
|
|
198
222
|
email: {
|
@@ -1,32 +1,18 @@
|
|
1
1
|
import { ftlValuesGlobalName } from "../ftlValuesGlobalName";
|
2
2
|
|
3
|
-
export function replaceImportsFromStaticInJsCode(params: { jsCode: string
|
4
|
-
|
5
|
-
|
6
|
-
const { fixedJsCode } = (() => {
|
7
|
-
switch (params.bundler) {
|
8
|
-
case "vite":
|
9
|
-
return replaceImportsFromStaticInJsCode_vite({ jsCode });
|
10
|
-
case "webpack":
|
11
|
-
return replaceImportsFromStaticInJsCode_webpack({ jsCode });
|
12
|
-
}
|
13
|
-
})();
|
14
|
-
|
15
|
-
return { fixedJsCode };
|
16
|
-
}
|
17
|
-
|
18
|
-
export function replaceImportsFromStaticInJsCode_vite(params: { jsCode: string }): { fixedJsCode: string } {
|
19
|
-
const { jsCode } = params;
|
3
|
+
export function replaceImportsFromStaticInJsCode(params: { jsCode: string }): { fixedJsCode: string } {
|
4
|
+
/*
|
5
|
+
NOTE:
|
20
6
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
7
|
+
When we have urlOrigin defined it means that
|
8
|
+
we are building with --external-assets
|
9
|
+
so we have to make sur that the fixed js code will run
|
10
|
+
inside and outside keycloak.
|
25
11
|
|
26
|
-
|
27
|
-
|
12
|
+
When urlOrigin isn't defined we can assume the fixedJsCode
|
13
|
+
will always run in keycloak context.
|
14
|
+
*/
|
28
15
|
|
29
|
-
export function replaceImportsFromStaticInJsCode_webpack(params: { jsCode: string }): { fixedJsCode: string } {
|
30
16
|
const { jsCode } = params;
|
31
17
|
|
32
18
|
const getReplaceArgs = (language: "js" | "css"): Parameters<typeof String.prototype.replace> => [
|
@@ -1,6 +1,7 @@
|
|
1
1
|
import { getLatestsSemVersionedTagFactory } from "./tools/octokit-addons/getLatestsSemVersionedTag";
|
2
2
|
import { Octokit } from "@octokit/rest";
|
3
3
|
import cliSelect from "cli-select";
|
4
|
+
import { lastKeycloakVersionWithAccountV1 } from "./constants";
|
4
5
|
|
5
6
|
export async function promptKeycloakVersion() {
|
6
7
|
const { getLatestsSemVersionedTag } = (() => {
|
@@ -26,6 +27,7 @@ export async function promptKeycloakVersion() {
|
|
26
27
|
"owner": "keycloak",
|
27
28
|
"repo": "keycloak"
|
28
29
|
}).then(arr => arr.map(({ tag }) => tag))),
|
30
|
+
lastKeycloakVersionWithAccountV1,
|
29
31
|
"11.0.3"
|
30
32
|
];
|
31
33
|
|
@@ -94,7 +94,7 @@ export const { useGetClassName } = createUseClassName<ClassKey>({
|
|
94
94
|
"kcAuthenticatorWebAuthnPasswordlessClass": "fa fa-key list-view-pf-icon-lg",
|
95
95
|
|
96
96
|
//css classes for the OTP Login Form
|
97
|
-
"kcSelectOTPListClass": "card-pf card-pf-view card-pf-view-select card-pf-view-single-select",
|
97
|
+
"kcSelectOTPListClass": "card-pf card-pf-view card-pf-view-select card-pf-view-single-select col-xs-12",
|
98
98
|
"kcSelectOTPListItemClass": "card-pf-body card-pf-top-element",
|
99
99
|
"kcAuthenticatorOtpCircleClass": "fa fa-mobile card-pf-icon-circle",
|
100
100
|
"kcSelectOTPItemHeadingClass": "card-pf-title text-center",
|