keycloakify 11.4.0-rc.0 → 11.4.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 +2 -0
- package/account/i18n/noJsx/getI18n.js +5 -7
- package/account/i18n/noJsx/getI18n.js.map +1 -1
- package/account/i18n/withJsx/useI18n.js +15 -4
- package/account/i18n/withJsx/useI18n.js.map +1 -1
- package/bin/20.index.js +0 -85
- package/bin/33.index.js +55 -212
- package/bin/356.index.js +106 -45
- package/bin/36.index.js +1 -2922
- package/bin/{526.index.js → 392.index.js} +107 -3
- package/bin/40.index.js +1 -86
- package/bin/453.index.js +85 -22
- package/bin/573.index.js +5 -86
- package/bin/653.index.js +752 -0
- package/bin/658.index.js +197 -0
- package/bin/735.index.js +343 -116
- package/bin/786.index.js +78 -14
- package/bin/805.index.js +15 -18
- package/bin/921.index.js +79 -18
- package/bin/97.index.js +64 -13
- package/bin/main.js +165 -86
- package/bin/shared/constants.d.ts +2 -0
- package/bin/shared/constants.js +3 -1
- package/bin/shared/constants.js.map +1 -1
- package/bin/start-keycloak/startViteDevServer.d.ts +8 -0
- package/bin/tools/crawlAsync.d.ts +1 -1
- package/bin/tools/isTrackedByGit.d.ts +3 -0
- package/bin/tools/runPrettier.d.ts +5 -5
- package/bin/tools/untrackFromGit.d.ts +3 -0
- package/lib/getKcClsx.js +1 -2
- package/lib/getKcClsx.js.map +1 -1
- package/login/KcContext/KcContext.d.ts +2 -2
- package/login/KcContext/kcContextMocks.d.ts +1 -1
- package/login/TemplateProps.d.ts +0 -1
- package/login/i18n/noJsx/getI18n.js +5 -7
- package/login/i18n/noJsx/getI18n.js.map +1 -1
- package/login/i18n/withJsx/useI18n.js +15 -4
- package/login/i18n/withJsx/useI18n.js.map +1 -1
- package/login/pages/LoginConfigTotp.js +1 -1
- package/login/pages/LoginConfigTotp.js.map +1 -1
- package/login/pages/LoginPasskeysConditionalAuthenticate.js +16 -18
- package/login/pages/LoginPasskeysConditionalAuthenticate.js.map +1 -1
- package/package.json +17 -7
- package/src/account/i18n/noJsx/getI18n.tsx +5 -7
- package/src/account/i18n/withJsx/useI18n.tsx +18 -4
- package/src/bin/eject-page.ts +28 -10
- package/src/bin/initialize-account-theme/initializeAccountTheme_singlePage.ts +3 -18
- package/src/bin/initialize-account-theme/updateAccountThemeImplementationInConfig.ts +1 -2
- package/src/bin/keycloakify/generateFtl/generateFtl.ts +6 -1
- package/src/bin/keycloakify/generateFtl/kcContextDeclarationTemplate.ftl +39 -0
- package/src/bin/keycloakify/generateResources/generateResources.ts +6 -2
- package/src/bin/main.ts +51 -4
- package/src/bin/postinstall/getUiModuleFileSourceCodeReadyToBeCopied.ts +30 -19
- package/src/bin/postinstall/installUiModulesPeerDependencies.ts +3 -3
- package/src/bin/postinstall/managedGitignoreFile.ts +4 -3
- package/src/bin/postinstall/postinstall.ts +24 -2
- package/src/bin/postinstall/uiModuleMeta.ts +14 -9
- package/src/bin/shared/buildContext.ts +1 -2
- package/src/bin/shared/constants.ts +4 -1
- package/src/bin/start-keycloak/myrealm-realm-25.json +21 -34
- package/src/bin/start-keycloak/myrealm-realm-26.json +32 -35
- package/src/bin/start-keycloak/start-keycloak.ts +94 -1
- package/src/bin/start-keycloak/startViteDevServer.ts +66 -0
- package/src/bin/tools/crawlAsync.ts +6 -6
- package/src/bin/tools/isTrackedByGit.ts +29 -0
- package/src/bin/tools/listInstalledModules.ts +1 -2
- package/src/bin/tools/npmInstall.ts +396 -1
- package/src/bin/tools/runPrettier.ts +63 -14
- package/src/bin/tools/untrackFromGit.ts +24 -0
- package/src/bin/tsconfig.json +1 -1
- package/src/bin/update-kc-gen.ts +17 -2
- package/src/lib/getKcClsx.ts +1 -2
- package/src/login/KcContext/KcContext.ts +2 -2
- package/src/login/KcContext/kcContextMocks.ts +1 -1
- package/src/login/TemplateProps.ts +0 -1
- package/src/login/i18n/noJsx/getI18n.tsx +5 -7
- package/src/login/i18n/withJsx/useI18n.tsx +18 -4
- package/src/login/pages/LoginConfigTotp.tsx +18 -20
- package/src/login/pages/LoginPasskeysConditionalAuthenticate.tsx +51 -52
- package/src/tools/StatefulObservable/StatefulObservable.ts +1 -2
- package/src/tools/deepAssign.ts +1 -2
- package/src/tools/extractLastParenthesisContent.ts +43 -0
- package/src/vite-plugin/vite-plugin.ts +67 -0
- package/stories/login/pages/Info.stories.tsx +3 -39
- package/tools/StatefulObservable/StatefulObservable.js +1 -2
- package/tools/StatefulObservable/StatefulObservable.js.map +1 -1
- package/tools/deepAssign.js +1 -2
- package/tools/deepAssign.js.map +1 -1
- package/tools/extractLastParenthesisContent.d.ts +6 -0
- package/tools/extractLastParenthesisContent.js +36 -0
- package/tools/extractLastParenthesisContent.js.map +1 -0
- package/vite-plugin/index.js +326 -186
- package/bin/124.index.js +0 -348
- package/stories/login/pages/LoginDeviceVerifyUserCode.stories.tsx +0 -18
@@ -9,8 +9,19 @@ export function createUseI18n(params) {
|
|
9
9
|
const cache = new WeakMap();
|
10
10
|
function renderHtmlString(params) {
|
11
11
|
const { htmlString, msgKey } = params;
|
12
|
-
|
13
|
-
|
12
|
+
const htmlString_sanitized = kcSanitize(htmlString);
|
13
|
+
const Element = (() => {
|
14
|
+
if (htmlString_sanitized.includes("<") && htmlString_sanitized.includes(">")) {
|
15
|
+
for (const tagName of ["div", "section", "article", "ul", "ol"]) {
|
16
|
+
if (htmlString_sanitized.includes(`<${tagName}`)) {
|
17
|
+
return "div";
|
18
|
+
}
|
19
|
+
}
|
20
|
+
}
|
21
|
+
return "span";
|
22
|
+
})();
|
23
|
+
return (_jsx(Element, { "data-kc-msg": msgKey, dangerouslySetInnerHTML: {
|
24
|
+
__html: htmlString_sanitized
|
14
25
|
} }));
|
15
26
|
}
|
16
27
|
function withJsx(i18n_noJsx) {
|
@@ -28,14 +39,14 @@ export function createUseI18n(params) {
|
|
28
39
|
return { withJsx };
|
29
40
|
})();
|
30
41
|
add_style: {
|
31
|
-
const attributeName = "data-kc-
|
42
|
+
const attributeName = "data-kc-msg";
|
32
43
|
// Check if already exists in head
|
33
44
|
if (document.querySelector(`style[${attributeName}]`) !== null) {
|
34
45
|
break add_style;
|
35
46
|
}
|
36
47
|
const styleElement = document.createElement("style");
|
37
48
|
styleElement.attributes.setNamedItem(document.createAttribute(attributeName));
|
38
|
-
styleElement.textContent = `[
|
49
|
+
styleElement.textContent = `div[${attributeName}] { display: inline-block; }`;
|
39
50
|
document.head.prepend(styleElement);
|
40
51
|
}
|
41
52
|
const { getI18n } = createGetI18n({ extraLanguageTranslations, messagesByLanguageTag_themeDefined });
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"useI18n.js","sourceRoot":"","sources":["../../../src/login/i18n/withJsx/useI18n.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAE,aAAa,EAAsB,MAAM,kBAAkB,CAAC;AAErE,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAaxC,MAAM,UAAU,aAAa,CAI3B,MAYD;IACG,MAAM,EAAE,yBAAyB,EAAE,kCAAkC,EAAE,GAAG,MAAM,CAAC;IAUjF,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,GAAG,EAAE;QACtB,MAAM,KAAK,GAAG,IAAI,OAAO,EAAoF,CAAC;QAE9G,SAAS,gBAAgB,CAAC,MAA8C;YACpE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;
|
1
|
+
{"version":3,"file":"useI18n.js","sourceRoot":"","sources":["../../../src/login/i18n/withJsx/useI18n.tsx"],"names":[],"mappings":"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"}
|
@@ -9,7 +9,7 @@ export default function LoginConfigTotp(props) {
|
|
9
9
|
});
|
10
10
|
const { url, isAppInitiatedAction, totp, mode, messagesPerField } = kcContext;
|
11
11
|
const { msg, msgStr, advancedMsg } = i18n;
|
12
|
-
return (_jsx(Template, Object.assign({ kcContext: kcContext, i18n: i18n, doUseDefaultCss: doUseDefaultCss, classes: classes, headerNode: msg("loginTotpTitle"), displayMessage: !messagesPerField.existsError("totp", "userLabel") }, { children: _jsxs(_Fragment, { children: [_jsxs("ol", Object.assign({ id: "kc-totp-settings" }, { children: [_jsxs("li", { children: [_jsx("p", { children: msg("loginTotpStep1") }), _jsx("ul", Object.assign({ id: "kc-totp-supported-apps" }, { children: totp.supportedApplications.map(app => (_jsx("li", { children: advancedMsg(app) }, app))) }))] }), mode == "manual" ? (_jsxs(_Fragment, { children: [_jsxs("li", { children: [_jsx("p", { children: msg("loginTotpManualStep2") }), _jsx("p", { children: _jsx("span", Object.assign({ id: "kc-totp-secret-key" }, { children: totp.totpSecretEncoded })) }), _jsx("p", { children: _jsx("a", Object.assign({ href: totp.qrUrl, id: "mode-barcode" }, { children: msg("loginTotpScanBarcode") })) })] }), _jsxs("li", { children: [_jsx("p", { children: msg("loginTotpManualStep3") }),
|
12
|
+
return (_jsx(Template, Object.assign({ kcContext: kcContext, i18n: i18n, doUseDefaultCss: doUseDefaultCss, classes: classes, headerNode: msg("loginTotpTitle"), displayMessage: !messagesPerField.existsError("totp", "userLabel") }, { children: _jsxs(_Fragment, { children: [_jsxs("ol", Object.assign({ id: "kc-totp-settings" }, { children: [_jsxs("li", { children: [_jsx("p", { children: msg("loginTotpStep1") }), _jsx("ul", Object.assign({ id: "kc-totp-supported-apps" }, { children: totp.supportedApplications.map(app => (_jsx("li", { children: advancedMsg(app) }, app))) }))] }), mode == "manual" ? (_jsxs(_Fragment, { children: [_jsxs("li", { children: [_jsx("p", { children: msg("loginTotpManualStep2") }), _jsx("p", { children: _jsx("span", Object.assign({ id: "kc-totp-secret-key" }, { children: totp.totpSecretEncoded })) }), _jsx("p", { children: _jsx("a", Object.assign({ href: totp.qrUrl, id: "mode-barcode" }, { children: msg("loginTotpScanBarcode") })) })] }), _jsxs("li", { children: [_jsx("p", { children: msg("loginTotpManualStep3") }), _jsxs("ul", { children: [_jsxs("li", Object.assign({ id: "kc-totp-type" }, { children: [msg("loginTotpType"), ": ", msg(`loginTotp.${totp.policy.type}`)] })), _jsxs("li", Object.assign({ id: "kc-totp-algorithm" }, { children: [msg("loginTotpAlgorithm"), ": ", totp.policy.getAlgorithmKey()] })), _jsxs("li", Object.assign({ id: "kc-totp-digits" }, { children: [msg("loginTotpDigits"), ": ", totp.policy.digits] })), totp.policy.type === "totp" ? (_jsxs("li", Object.assign({ id: "kc-totp-period" }, { children: [msg("loginTotpInterval"), ": ", totp.policy.period] }))) : (_jsxs("li", Object.assign({ id: "kc-totp-counter" }, { children: [msg("loginTotpCounter"), ": ", totp.policy.initialCounter] })))] })] })] })) : (_jsxs("li", { children: [_jsx("p", { children: msg("loginTotpStep2") }), _jsx("img", { id: "kc-totp-secret-qr-code", src: `data:image/png;base64, ${totp.totpSecretQrCode}`, alt: "Figure: Barcode" }), _jsx("br", {}), _jsx("p", { children: _jsx("a", Object.assign({ href: totp.manualUrl, id: "mode-manual" }, { children: msg("loginTotpUnableToScan") })) })] })), _jsxs("li", { children: [_jsx("p", { children: msg("loginTotpStep3") }), _jsx("p", { children: msg("loginTotpStep3DeviceName") })] })] })), _jsxs("form", Object.assign({ action: url.loginAction, className: kcClsx("kcFormClass"), id: "kc-totp-settings-form", method: "post" }, { children: [_jsxs("div", Object.assign({ className: kcClsx("kcFormGroupClass") }, { children: [_jsxs("div", Object.assign({ className: kcClsx("kcInputWrapperClass") }, { children: [_jsx("label", Object.assign({ htmlFor: "totp", className: kcClsx("kcLabelClass") }, { children: msg("authenticatorCode") })), " ", _jsx("span", Object.assign({ className: "required" }, { children: "*" }))] })), _jsxs("div", Object.assign({ className: kcClsx("kcInputWrapperClass") }, { children: [_jsx("input", { type: "text", id: "totp", name: "totp", autoComplete: "off", className: kcClsx("kcInputClass"), "aria-invalid": messagesPerField.existsError("totp") }), messagesPerField.existsError("totp") && (_jsx("span", { id: "input-error-otp-code", className: kcClsx("kcInputErrorMessageClass"), "aria-live": "polite", dangerouslySetInnerHTML: {
|
13
13
|
__html: kcSanitize(messagesPerField.get("totp"))
|
14
14
|
} }))] })), _jsx("input", { type: "hidden", id: "totpSecret", name: "totpSecret", value: totp.totpSecret }), mode && _jsx("input", { type: "hidden", id: "mode", value: mode })] })), _jsxs("div", Object.assign({ className: kcClsx("kcFormGroupClass") }, { children: [_jsxs("div", Object.assign({ className: kcClsx("kcInputWrapperClass") }, { children: [_jsx("label", Object.assign({ htmlFor: "userLabel", className: kcClsx("kcLabelClass") }, { children: msg("loginTotpDeviceName") })), " ", totp.otpCredentials.length >= 1 && _jsx("span", Object.assign({ className: "required" }, { children: "*" }))] })), _jsxs("div", Object.assign({ className: kcClsx("kcInputWrapperClass") }, { children: [_jsx("input", { type: "text", id: "userLabel", name: "userLabel", autoComplete: "off", className: kcClsx("kcInputClass"), "aria-invalid": messagesPerField.existsError("userLabel") }), messagesPerField.existsError("userLabel") && (_jsx("span", { id: "input-error-otp-label", className: kcClsx("kcInputErrorMessageClass"), "aria-live": "polite", dangerouslySetInnerHTML: {
|
15
15
|
__html: kcSanitize(messagesPerField.get("userLabel"))
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"LoginConfigTotp.js","sourceRoot":"","sources":["../../src/login/pages/LoginConfigTotp.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAU,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAKxD,MAAM,CAAC,OAAO,UAAU,eAAe,CAAC,KAA+E;IACnH,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;IAEtE,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;QACzB,eAAe;QACf,OAAO;KACV,CAAC,CAAC;IAEH,MAAM,EAAE,GAAG,EAAE,oBAAoB,EAAE,IAAI,EAAE,IAAI,EAAE,gBAAgB,EAAE,GAAG,SAAS,CAAC;IAE9E,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;IAE1C,OAAO,CACH,KAAC,QAAQ,kBACL,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,IAAI,EACV,eAAe,EAAE,eAAe,EAChC,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,GAAG,CAAC,gBAAgB,CAAC,EACjC,cAAc,EAAE,CAAC,gBAAgB,CAAC,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,gBAElE,8BACI,4BAAI,EAAE,EAAC,kBAAkB,iBACrB,yBACI,sBAAI,GAAG,CAAC,gBAAgB,CAAC,GAAK,EAE9B,2BAAI,EAAE,EAAC,wBAAwB,gBAC1B,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CACnC,uBAAe,WAAW,CAAC,GAAG,CAAC,IAAtB,GAAG,CAAyB,CACxC,CAAC,IACD,IACJ,EAEJ,IAAI,IAAI,QAAQ,CAAC,CAAC,CAAC,CAChB,8BACI,yBACI,sBAAI,GAAG,CAAC,sBAAsB,CAAC,GAAK,EACpC,sBACI,6BAAM,EAAE,EAAC,oBAAoB,gBAAE,IAAI,CAAC,iBAAiB,IAAQ,GAC7D,EACJ,sBACI,0BAAG,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,EAAC,cAAc,gBACjC,GAAG,CAAC,sBAAsB,CAAC,IAC5B,GACJ,IACH,EACL,yBACI,sBAAI,GAAG,CAAC,sBAAsB,CAAC,GAAK,EACpC,
|
1
|
+
{"version":3,"file":"LoginConfigTotp.js","sourceRoot":"","sources":["../../src/login/pages/LoginConfigTotp.tsx"],"names":[],"mappings":"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"}
|
@@ -15,23 +15,21 @@ export default function LoginPasskeysConditionalAuthenticate(props) {
|
|
15
15
|
const authButtonId = "authenticateWebAuthnButton";
|
16
16
|
useScript({ authButtonId, kcContext, i18n });
|
17
17
|
return (_jsxs(Template, Object.assign({ kcContext: kcContext, i18n: i18n, doUseDefaultCss: doUseDefaultCss, classes: classes, headerNode: msg("passkey-login-title"), infoNode: realm.registrationAllowed &&
|
18
|
-
!registrationDisabled && (_jsx("div", Object.assign({ id: "kc-registration" }, { children: _jsxs("span", { children: ["$", msg("noAccount"), " ", _jsx("a", Object.assign({ tabIndex: 6, href: url.registrationUrl }, { children: msg("doRegister") }))] }) }))) }, { children: [_jsxs("form", Object.assign({ id: "webauth", action: url.loginAction, method: "post" }, { children: [_jsx("input", { type: "hidden", id: "clientDataJSON", name: "clientDataJSON" }), _jsx("input", { type: "hidden", id: "authenticatorData", name: "authenticatorData" }), _jsx("input", { type: "hidden", id: "signature", name: "signature" }), _jsx("input", { type: "hidden", id: "credentialId", name: "credentialId" }), _jsx("input", { type: "hidden", id: "userHandle", name: "userHandle" }), _jsx("input", { type: "hidden", id: "error", name: "error" })] })),
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
//autoComplete="username webauthn"
|
35
|
-
type: "text", autoFocus: true, autoComplete: "off" }), messagesPerField.existsError("username") && (_jsx("span", Object.assign({ id: "input-error-username", className: kcClsx("kcInputErrorMessageClass"), "aria-live": "polite" }, { children: messagesPerField.get("username") })))] }))) }))), _jsx("div", Object.assign({ id: "kc-form-passkey-button", className: kcClsx("kcFormButtonsClass"), style: { display: "none" } }, { children: _jsx("input", { id: authButtonId, type: "button", autoFocus: true, value: msgStr("passkey-doAuthenticate"), className: kcClsx("kcButtonClass", "kcButtonPrimaryClass", "kcButtonBlockClass", "kcButtonLargeClass") }) }))] })) }))] })) }))] })));
|
18
|
+
!registrationDisabled && (_jsx("div", Object.assign({ id: "kc-registration" }, { children: _jsxs("span", { children: ["$", msg("noAccount"), " ", _jsx("a", Object.assign({ tabIndex: 6, href: url.registrationUrl }, { children: msg("doRegister") }))] }) }))) }, { children: [_jsxs("form", Object.assign({ id: "webauth", action: url.loginAction, method: "post" }, { children: [_jsx("input", { type: "hidden", id: "clientDataJSON", name: "clientDataJSON" }), _jsx("input", { type: "hidden", id: "authenticatorData", name: "authenticatorData" }), _jsx("input", { type: "hidden", id: "signature", name: "signature" }), _jsx("input", { type: "hidden", id: "credentialId", name: "credentialId" }), _jsx("input", { type: "hidden", id: "userHandle", name: "userHandle" }), _jsx("input", { type: "hidden", id: "error", name: "error" })] })), _jsxs("div", Object.assign({ className: kcClsx("kcFormGroupClass"), "no-bottom-margin": "true", style: { marginBottom: 0 } }, { children: [authenticators !== undefined && Object.keys(authenticators).length !== 0 && (_jsxs(_Fragment, { children: [_jsx("form", Object.assign({ id: "authn_select", className: kcClsx("kcFormClass") }, { children: authenticators.authenticators.map((authenticator, i) => (_jsx("input", { type: "hidden", name: "authn_use_chk", readOnly: true, value: authenticator.credentialId }, i))) })), shouldDisplayAuthenticators && (_jsxs(_Fragment, { children: [authenticators.authenticators.length > 1 && (_jsx("p", Object.assign({ className: kcClsx("kcSelectAuthListItemTitle") }, { children: msg("passkey-available-authenticators") }))), _jsx("div", Object.assign({ className: kcClsx("kcFormClass") }, { children: authenticators.authenticators.map((authenticator, i) => (_jsxs("div", Object.assign({ id: `kc-webauthn-authenticator-item-${i}`, className: kcClsx("kcSelectAuthListItemClass") }, { children: [_jsx("i", { className: clsx((() => {
|
19
|
+
const className = kcClsx(authenticator.transports.iconClass);
|
20
|
+
if (className === authenticator.transports.iconClass) {
|
21
|
+
return kcClsx("kcWebAuthnDefaultIcon");
|
22
|
+
}
|
23
|
+
return className;
|
24
|
+
})(), kcClsx("kcSelectAuthListItemIconPropertyClass")) }), _jsxs("div", Object.assign({ className: kcClsx("kcSelectAuthListItemBodyClass") }, { children: [_jsx("div", Object.assign({ id: `kc-webauthn-authenticator-label-${i}`, className: kcClsx("kcSelectAuthListItemHeadingClass") }, { children: advancedMsg(authenticator.label) })), authenticator.transports !== undefined &&
|
25
|
+
authenticator.transports.displayNameProperties !== undefined &&
|
26
|
+
authenticator.transports.displayNameProperties.length !== 0 && (_jsx("div", Object.assign({ id: `kc-webauthn-authenticator-transport-${i}`, className: kcClsx("kcSelectAuthListItemDescriptionClass") }, { children: authenticator.transports.displayNameProperties.map((nameProperty, i, arr) => (_jsxs(Fragment, { children: [_jsxs("span", { children: [" ", advancedMsg(nameProperty), " "] }, i), i !== arr.length - 1 && _jsx("span", { children: ", " })] }, i))) }))), _jsxs("div", Object.assign({ className: kcClsx("kcSelectAuthListItemDescriptionClass") }, { children: [_jsx("span", Object.assign({ id: `kc-webauthn-authenticator-createdlabel-${i}` }, { children: msg("passkey-createdAt-label") })), _jsx("span", Object.assign({ id: `kc-webauthn-authenticator-created-${i}` }, { children: authenticator.createdAt }))] }))] })), _jsx("div", { className: kcClsx("kcSelectAuthListItemFillClass") })] }), i))) }))] }))] })), _jsx("div", Object.assign({ id: "kc-form" }, { children: _jsxs("div", Object.assign({ id: "kc-form-wrapper" }, { children: [realm.password && (_jsx("form", Object.assign({ id: "kc-form-login", action: url.loginAction, method: "post", style: { display: "none" }, onSubmit: event => {
|
27
|
+
try {
|
28
|
+
// @ts-expect-error
|
29
|
+
event.target.login.disabled = true;
|
30
|
+
}
|
31
|
+
catch (_a) { }
|
32
|
+
return true;
|
33
|
+
} }, { children: !usernameHidden && (_jsxs("div", Object.assign({ className: kcClsx("kcFormGroupClass") }, { children: [_jsx("label", Object.assign({ htmlFor: "username", className: kcClsx("kcLabelClass") }, { children: msg("passkey-autofill-select") })), _jsx("input", { tabIndex: 1, id: "username", "aria-invalid": messagesPerField.existsError("username"), className: kcClsx("kcInputClass"), name: "username", defaultValue: (_a = login.username) !== null && _a !== void 0 ? _a : "", autoComplete: "username webauthn", type: "text", autoFocus: true }), messagesPerField.existsError("username") && (_jsx("span", Object.assign({ id: "input-error-username", className: kcClsx("kcInputErrorMessageClass"), "aria-live": "polite" }, { children: messagesPerField.get("username") })))] }))) }))), _jsx("div", Object.assign({ id: "kc-form-passkey-button", className: kcClsx("kcFormButtonsClass"), style: { display: "none" } }, { children: _jsx("input", { id: authButtonId, type: "button", autoFocus: true, value: msgStr("passkey-doAuthenticate"), className: kcClsx("kcButtonClass", "kcButtonPrimaryClass", "kcButtonBlockClass", "kcButtonLargeClass") }) }))] })) }))] }))] })));
|
36
34
|
}
|
37
35
|
//# sourceMappingURL=LoginPasskeysConditionalAuthenticate.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"LoginPasskeysConditionalAuthenticate.js","sourceRoot":"","sources":["../../src/login/pages/LoginPasskeysConditionalAuthenticate.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAE9C,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,wEAAwE,CAAC;AAInG,MAAM,CAAC,OAAO,UAAU,oCAAoC,CACxD,KAAqG;;IAErG,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;IAEtE,MAAM,EAAE,gBAAgB,EAAE,KAAK,EAAE,GAAG,EAAE,cAAc,EAAE,2BAA2B,EAAE,cAAc,EAAE,oBAAoB,EAAE,KAAK,EAAE,GAAG,SAAS,CAAC;IAE7I,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;IAE1C,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;QACzB,eAAe;QACf,OAAO;KACV,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG,4BAA4B,CAAC;IAElD,SAAS,CAAC,EAAE,YAAY,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE7C,OAAO,CACH,MAAC,QAAQ,kBACL,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,IAAI,EACV,eAAe,EAAE,eAAe,EAChC,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,GAAG,CAAC,qBAAqB,CAAC,EACtC,QAAQ,EACJ,KAAK,CAAC,mBAAmB;YACzB,CAAC,oBAAoB,IAAI,CACrB,4BAAK,EAAE,EAAC,iBAAiB,gBACrB,gCACM,GAAG,CAAC,WAAW,CAAC,EAAE,GAAG,EACvB,0BAAG,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,eAAe,gBACpC,GAAG,CAAC,YAAY,CAAC,IAClB,IACD,IACL,CACT,iBAGL,8BAAM,EAAE,EAAC,SAAS,EAAC,MAAM,EAAE,GAAG,CAAC,WAAW,EAAE,MAAM,EAAC,MAAM,iBACrD,gBAAO,IAAI,EAAC,QAAQ,EAAC,EAAE,EAAC,gBAAgB,EAAC,IAAI,EAAC,gBAAgB,GAAG,EACjE,gBAAO,IAAI,EAAC,QAAQ,EAAC,EAAE,EAAC,mBAAmB,EAAC,IAAI,EAAC,mBAAmB,GAAG,EACvE,gBAAO,IAAI,EAAC,QAAQ,EAAC,EAAE,EAAC,WAAW,EAAC,IAAI,EAAC,WAAW,GAAG,EACvD,gBAAO,IAAI,EAAC,QAAQ,EAAC,EAAE,EAAC,cAAc,EAAC,IAAI,EAAC,cAAc,GAAG,EAC7D,gBAAO,IAAI,EAAC,QAAQ,EAAC,EAAE,EAAC,YAAY,EAAC,IAAI,EAAC,YAAY,GAAG,EACzD,gBAAO,IAAI,EAAC,QAAQ,EAAC,EAAE,EAAC,OAAO,EAAC,IAAI,EAAC,OAAO,GAAG,KAC5C,EAEP,
|
1
|
+
{"version":3,"file":"LoginPasskeysConditionalAuthenticate.js","sourceRoot":"","sources":["../../src/login/pages/LoginPasskeysConditionalAuthenticate.tsx"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "keycloakify",
|
3
|
-
"version": "11.4.
|
3
|
+
"version": "11.4.1",
|
4
4
|
"description": "Framework to create custom Keycloak UIs",
|
5
5
|
"repository": {
|
6
6
|
"type": "git",
|
@@ -711,6 +711,7 @@
|
|
711
711
|
"src/bin/start-keycloak/myrealm-realm-25.json",
|
712
712
|
"src/bin/start-keycloak/myrealm-realm-26.json",
|
713
713
|
"src/bin/start-keycloak/start-keycloak.ts",
|
714
|
+
"src/bin/start-keycloak/startViteDevServer.ts",
|
714
715
|
"src/bin/tools/OptionalIfCanBeUndefined.ts",
|
715
716
|
"src/bin/tools/SemVer.ts",
|
716
717
|
"src/bin/tools/String.prototype.replaceAll.ts",
|
@@ -730,6 +731,7 @@
|
|
730
731
|
"src/bin/tools/getInstalledModuleDirPath.ts",
|
731
732
|
"src/bin/tools/getThisCodebaseRootDirPath.ts",
|
732
733
|
"src/bin/tools/isInside.ts",
|
734
|
+
"src/bin/tools/isTrackedByGit.ts",
|
733
735
|
"src/bin/tools/kebabCaseToSnakeCase.ts",
|
734
736
|
"src/bin/tools/listInstalledModules.ts",
|
735
737
|
"src/bin/tools/nodeModulesBinDirPath.ts",
|
@@ -742,6 +744,7 @@
|
|
742
744
|
"src/bin/tools/tee.ts",
|
743
745
|
"src/bin/tools/transformCodebase.ts",
|
744
746
|
"src/bin/tools/trimIndent.ts",
|
747
|
+
"src/bin/tools/untrackFromGit.ts",
|
745
748
|
"src/bin/tsconfig.json",
|
746
749
|
"src/bin/update-kc-gen.ts",
|
747
750
|
"src/lib/BASE_URL.ts",
|
@@ -865,6 +868,7 @@
|
|
865
868
|
"src/tools/clsx_withTransform.ts",
|
866
869
|
"src/tools/deepAssign.ts",
|
867
870
|
"src/tools/emailRegExp.ts",
|
871
|
+
"src/tools/extractLastParenthesisContent.ts",
|
868
872
|
"src/tools/formatNumber.ts",
|
869
873
|
"src/tools/pathBasename.ts",
|
870
874
|
"src/tools/structuredCloneButFunctions.ts",
|
@@ -898,7 +902,6 @@
|
|
898
902
|
"stories/login/pages/Info.stories.tsx",
|
899
903
|
"stories/login/pages/Login.stories.tsx",
|
900
904
|
"stories/login/pages/LoginConfigTotp.stories.tsx",
|
901
|
-
"stories/login/pages/LoginDeviceVerifyUserCode.stories.tsx",
|
902
905
|
"stories/login/pages/LoginIdpLinkConfirm.stories.tsx",
|
903
906
|
"stories/login/pages/LoginIdpLinkConfirmOverride.stories.tsx",
|
904
907
|
"stories/login/pages/LoginIdpLinkEmail.stories.tsx",
|
@@ -974,6 +977,9 @@
|
|
974
977
|
"tools/emailRegExp.d.ts",
|
975
978
|
"tools/emailRegExp.js",
|
976
979
|
"tools/emailRegExp.js.map",
|
980
|
+
"tools/extractLastParenthesisContent.d.ts",
|
981
|
+
"tools/extractLastParenthesisContent.js",
|
982
|
+
"tools/extractLastParenthesisContent.js.map",
|
977
983
|
"tools/formatNumber.d.ts",
|
978
984
|
"tools/formatNumber.js",
|
979
985
|
"tools/formatNumber.js.map",
|
@@ -1057,6 +1063,7 @@
|
|
1057
1063
|
"bin/start-keycloak/index.d.ts",
|
1058
1064
|
"bin/start-keycloak/keycloakifyBuild.d.ts",
|
1059
1065
|
"bin/start-keycloak/start-keycloak.d.ts",
|
1066
|
+
"bin/start-keycloak/startViteDevServer.d.ts",
|
1060
1067
|
"bin/tools/assertNoPnpmDlx.d.ts",
|
1061
1068
|
"bin/tools/crawl.d.ts",
|
1062
1069
|
"bin/tools/crawlAsync.d.ts",
|
@@ -1073,6 +1080,7 @@
|
|
1073
1080
|
"bin/tools/getInstalledModuleDirPath.d.ts",
|
1074
1081
|
"bin/tools/getThisCodebaseRootDirPath.d.ts",
|
1075
1082
|
"bin/tools/isInside.d.ts",
|
1083
|
+
"bin/tools/isTrackedByGit.d.ts",
|
1076
1084
|
"bin/tools/kebabCaseToSnakeCase.d.ts",
|
1077
1085
|
"bin/tools/listInstalledModules.d.ts",
|
1078
1086
|
"bin/tools/nodeModulesBinDirPath.d.ts",
|
@@ -1088,20 +1096,22 @@
|
|
1088
1096
|
"bin/tools/tee.d.ts",
|
1089
1097
|
"bin/tools/transformCodebase.d.ts",
|
1090
1098
|
"bin/tools/trimIndent.d.ts",
|
1099
|
+
"bin/tools/untrackFromGit.d.ts",
|
1091
1100
|
"bin/update-kc-gen.d.ts",
|
1092
1101
|
"bin/main.js",
|
1093
|
-
"bin/124.index.js",
|
1094
1102
|
"bin/20.index.js",
|
1095
1103
|
"bin/266.index.js",
|
1096
1104
|
"bin/304.index.js",
|
1097
1105
|
"bin/33.index.js",
|
1098
1106
|
"bin/356.index.js",
|
1099
1107
|
"bin/36.index.js",
|
1108
|
+
"bin/392.index.js",
|
1100
1109
|
"bin/40.index.js",
|
1101
1110
|
"bin/450.index.js",
|
1102
1111
|
"bin/453.index.js",
|
1103
|
-
"bin/526.index.js",
|
1104
1112
|
"bin/573.index.js",
|
1113
|
+
"bin/653.index.js",
|
1114
|
+
"bin/658.index.js",
|
1105
1115
|
"bin/720.index.js",
|
1106
1116
|
"bin/735.index.js",
|
1107
1117
|
"bin/743.index.js",
|
@@ -1134,7 +1144,7 @@
|
|
1134
1144
|
],
|
1135
1145
|
"homepage": "https://www.keycloakify.dev",
|
1136
1146
|
"dependencies": {
|
1137
|
-
"tsafe": "^1.
|
1147
|
+
"tsafe": "^1.8.5"
|
1138
1148
|
},
|
1139
1149
|
"devDependencies": {
|
1140
1150
|
"@babel/core": "^7.24.5",
|
@@ -1165,14 +1175,14 @@
|
|
1165
1175
|
"cli-select": "^1.1.2",
|
1166
1176
|
"dompurify": "^3.1.6",
|
1167
1177
|
"eslint-plugin-storybook": "^0.6.7",
|
1168
|
-
"evt": "^2.5.
|
1178
|
+
"evt": "^2.5.8",
|
1169
1179
|
"html-entities": "^2.5.2",
|
1170
1180
|
"husky": "^4.3.8",
|
1171
1181
|
"isomorphic-dompurify": "^2.15.0",
|
1172
1182
|
"lint-staged": "^11.0.0",
|
1173
1183
|
"magic-string": "^0.30.7",
|
1174
1184
|
"make-fetch-happen": "^11.0.3",
|
1175
|
-
"powerhooks": "^1.0.
|
1185
|
+
"powerhooks": "^1.0.19",
|
1176
1186
|
"prettier": "^3.2.5",
|
1177
1187
|
"properties-parser": "^0.3.1",
|
1178
1188
|
"react": "^18.2.0",
|
@@ -1,11 +1,11 @@
|
|
1
1
|
import "keycloakify/tools/Object.fromEntries";
|
2
|
-
import { assert } from "tsafe/assert";
|
2
|
+
import { assert, is } from "tsafe/assert";
|
3
|
+
import { extractLastParenthesisContent } from "keycloakify/tools/extractLastParenthesisContent";
|
3
4
|
import messages_defaultSet_fallbackLanguage from "../messages_defaultSet/en";
|
4
5
|
import { fetchMessages_defaultSet } from "../messages_defaultSet";
|
5
6
|
import type { KcContext } from "../../KcContext";
|
6
7
|
import { FALLBACK_LANGUAGE_TAG } from "keycloakify/bin/shared/constants";
|
7
8
|
import { id } from "tsafe/id";
|
8
|
-
import { is } from "tsafe/is";
|
9
9
|
import { Reflect } from "tsafe/Reflect";
|
10
10
|
import {
|
11
11
|
type LanguageTag as LanguageTag_defaultSet,
|
@@ -169,12 +169,10 @@ export function createGetI18n<
|
|
169
169
|
break from_server;
|
170
170
|
}
|
171
171
|
|
172
|
-
|
173
|
-
// from "Espagnol (Español)" we want to extract "Español"
|
174
|
-
const match = supportedEntry.label.match(/[^(]+\(([^)]+)\)/);
|
172
|
+
const lastParenthesisContent = extractLastParenthesisContent(supportedEntry.label);
|
175
173
|
|
176
|
-
if (
|
177
|
-
return
|
174
|
+
if (lastParenthesisContent !== undefined) {
|
175
|
+
return lastParenthesisContent;
|
178
176
|
}
|
179
177
|
|
180
178
|
return supportedEntry.label;
|
@@ -47,11 +47,25 @@ export function createUseI18n<
|
|
47
47
|
|
48
48
|
function renderHtmlString(params: { htmlString: string; msgKey: string }): JSX.Element {
|
49
49
|
const { htmlString, msgKey } = params;
|
50
|
+
|
51
|
+
const htmlString_sanitized = kcSanitize(htmlString);
|
52
|
+
|
53
|
+
const Element = (() => {
|
54
|
+
if (htmlString_sanitized.includes("<") && htmlString_sanitized.includes(">")) {
|
55
|
+
for (const tagName of ["div", "section", "article", "ul", "ol"]) {
|
56
|
+
if (htmlString_sanitized.includes(`<${tagName}`)) {
|
57
|
+
return "div";
|
58
|
+
}
|
59
|
+
}
|
60
|
+
}
|
61
|
+
return "span";
|
62
|
+
})();
|
63
|
+
|
50
64
|
return (
|
51
|
-
<
|
65
|
+
<Element
|
52
66
|
data-kc-msg={msgKey}
|
53
67
|
dangerouslySetInnerHTML={{
|
54
|
-
__html:
|
68
|
+
__html: htmlString_sanitized
|
55
69
|
}}
|
56
70
|
/>
|
57
71
|
);
|
@@ -83,7 +97,7 @@ export function createUseI18n<
|
|
83
97
|
})();
|
84
98
|
|
85
99
|
add_style: {
|
86
|
-
const attributeName = "data-kc-
|
100
|
+
const attributeName = "data-kc-msg";
|
87
101
|
|
88
102
|
// Check if already exists in head
|
89
103
|
if (document.querySelector(`style[${attributeName}]`) !== null) {
|
@@ -92,7 +106,7 @@ export function createUseI18n<
|
|
92
106
|
|
93
107
|
const styleElement = document.createElement("style");
|
94
108
|
styleElement.attributes.setNamedItem(document.createAttribute(attributeName));
|
95
|
-
styleElement.textContent = `[
|
109
|
+
styleElement.textContent = `div[${attributeName}] { display: inline-block; }`;
|
96
110
|
document.head.prepend(styleElement);
|
97
111
|
}
|
98
112
|
|
package/src/bin/eject-page.ts
CHANGED
@@ -66,23 +66,30 @@ export async function command(params: { buildContext: BuildContext }) {
|
|
66
66
|
return value;
|
67
67
|
})();
|
68
68
|
|
69
|
+
if (themeType === "admin") {
|
70
|
+
console.log(
|
71
|
+
"Use `npx keycloakify eject-file` command instead, see documentation"
|
72
|
+
);
|
73
|
+
|
74
|
+
process.exit(-1);
|
75
|
+
}
|
76
|
+
|
69
77
|
if (
|
70
|
-
themeType === "
|
71
|
-
(
|
72
|
-
|
73
|
-
buildContext.implementedThemeTypes.account.type === "Single-Page"))
|
78
|
+
themeType === "account" &&
|
79
|
+
(assert(buildContext.implementedThemeTypes.account.isImplemented),
|
80
|
+
buildContext.implementedThemeTypes.account.type === "Single-Page")
|
74
81
|
) {
|
75
82
|
const srcDirPath = pathJoin(
|
76
83
|
pathDirname(buildContext.packageJsonFilePath),
|
77
84
|
"node_modules",
|
78
85
|
"@keycloakify",
|
79
|
-
`keycloak
|
86
|
+
`keycloak-account-ui`,
|
80
87
|
"src"
|
81
88
|
);
|
82
89
|
|
83
90
|
console.log(
|
84
91
|
[
|
85
|
-
`There isn't an interactive CLI to eject components of the
|
92
|
+
`There isn't an interactive CLI to eject components of the Account SPA UI.`,
|
86
93
|
`You can however copy paste into your codebase the any file or directory from the following source directory:`,
|
87
94
|
``,
|
88
95
|
`${chalk.bold(pathJoin(pathRelative(process.cwd(), srcDirPath)))}`,
|
@@ -91,9 +98,9 @@ export async function command(params: { buildContext: BuildContext }) {
|
|
91
98
|
);
|
92
99
|
|
93
100
|
eject_entrypoint: {
|
94
|
-
const kcUiTsxFileRelativePath = `
|
101
|
+
const kcUiTsxFileRelativePath = `KcAccountUi.tsx` as const;
|
95
102
|
|
96
|
-
const themeSrcDirPath = pathJoin(buildContext.themeSrcDirPath,
|
103
|
+
const themeSrcDirPath = pathJoin(buildContext.themeSrcDirPath, "account");
|
97
104
|
|
98
105
|
const targetFilePath = pathJoin(themeSrcDirPath, kcUiTsxFileRelativePath);
|
99
106
|
|
@@ -113,11 +120,22 @@ export async function command(params: { buildContext: BuildContext }) {
|
|
113
120
|
""
|
114
121
|
);
|
115
122
|
|
116
|
-
|
117
|
-
`@keycloakify/keycloak
|
123
|
+
let modifiedKcPageTsxCode = kcPageTsxCode.replace(
|
124
|
+
`@keycloakify/keycloak-account-ui/${componentName}`,
|
118
125
|
`./${componentName}`
|
119
126
|
);
|
120
127
|
|
128
|
+
run_prettier: {
|
129
|
+
if (!(await getIsPrettierAvailable())) {
|
130
|
+
break run_prettier;
|
131
|
+
}
|
132
|
+
|
133
|
+
modifiedKcPageTsxCode = await runPrettier({
|
134
|
+
filePath: kcPageTsxFilePath,
|
135
|
+
sourceCode: modifiedKcPageTsxCode
|
136
|
+
});
|
137
|
+
}
|
138
|
+
|
121
139
|
fs.writeFileSync(
|
122
140
|
kcPageTsxFilePath,
|
123
141
|
Buffer.from(modifiedKcPageTsxCode, "utf8")
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import {
|
1
|
+
import { relative as pathRelative, dirname as pathDirname } from "path";
|
2
2
|
import type { BuildContext } from "../shared/buildContext";
|
3
3
|
import * as fs from "fs";
|
4
4
|
import chalk from "chalk";
|
@@ -9,12 +9,10 @@ import {
|
|
9
9
|
import { SemVer } from "../tools/SemVer";
|
10
10
|
import fetch from "make-fetch-happen";
|
11
11
|
import { z } from "zod";
|
12
|
-
import { assert, type Equals } from "tsafe/assert";
|
13
|
-
import { is } from "tsafe/is";
|
12
|
+
import { assert, type Equals, is } from "tsafe/assert";
|
14
13
|
import { id } from "tsafe/id";
|
15
14
|
import { npmInstall } from "../tools/npmInstall";
|
16
15
|
import { copyBoilerplate } from "./copyBoilerplate";
|
17
|
-
import { getThisCodebaseRootDirPath } from "../tools/getThisCodebaseRootDirPath";
|
18
16
|
|
19
17
|
type BuildContextLike = BuildContextLike_getLatestsSemVersionedTag & {
|
20
18
|
fetchOptions: BuildContext["fetchOptions"];
|
@@ -121,20 +119,7 @@ export async function initializeAccountTheme_singlePage(params: {
|
|
121
119
|
JSON.stringify(parsedPackageJson, undefined, 4)
|
122
120
|
);
|
123
121
|
|
124
|
-
|
125
|
-
if (
|
126
|
-
JSON.parse(
|
127
|
-
fs
|
128
|
-
.readFileSync(pathJoin(getThisCodebaseRootDirPath(), "package.json"))
|
129
|
-
.toString("utf8")
|
130
|
-
)["version"] === "0.0.0"
|
131
|
-
) {
|
132
|
-
//NOTE: Linked version
|
133
|
-
break run_npm_install;
|
134
|
-
}
|
135
|
-
|
136
|
-
npmInstall({ packageJsonDirPath: pathDirname(buildContext.packageJsonFilePath) });
|
137
|
-
}
|
122
|
+
npmInstall({ packageJsonDirPath: pathDirname(buildContext.packageJsonFilePath) });
|
138
123
|
|
139
124
|
copyBoilerplate({
|
140
125
|
accountThemeType: "Single-Page",
|
@@ -1,11 +1,10 @@
|
|
1
1
|
import { join as pathJoin } from "path";
|
2
|
-
import { assert, type Equals } from "tsafe/assert";
|
2
|
+
import { assert, type Equals, is } from "tsafe/assert";
|
3
3
|
import type { BuildContext } from "../shared/buildContext";
|
4
4
|
import * as fs from "fs";
|
5
5
|
import chalk from "chalk";
|
6
6
|
import { z } from "zod";
|
7
7
|
import { id } from "tsafe/id";
|
8
|
-
import { is } from "tsafe/is";
|
9
8
|
|
10
9
|
export type BuildContextLike = {
|
11
10
|
bundler: BuildContext["bundler"];
|
@@ -11,7 +11,11 @@ import * as fs from "fs";
|
|
11
11
|
import { join as pathJoin } from "path";
|
12
12
|
import type { BuildContext } from "../../shared/buildContext";
|
13
13
|
import { assert } from "tsafe/assert";
|
14
|
-
import {
|
14
|
+
import {
|
15
|
+
type ThemeType,
|
16
|
+
WELL_KNOWN_DIRECTORY_BASE_NAME,
|
17
|
+
KEYCLOAKIFY_SPA_DEV_SERVER_PORT
|
18
|
+
} from "../../shared/constants";
|
15
19
|
import { getThisCodebaseRootDirPath } from "../../tools/getThisCodebaseRootDirPath";
|
16
20
|
|
17
21
|
export type BuildContextLike = BuildContextLike_replaceImportsInJsCode &
|
@@ -116,6 +120,7 @@ export function generateFtlFilesCodeFactory(params: {
|
|
116
120
|
.replace("{{themeVersion}}", buildContext.themeVersion)
|
117
121
|
.replace("{{fieldNames}}", fieldNames.map(name => `"${name}"`).join(", "))
|
118
122
|
.replace("{{RESOURCES_COMMON}}", WELL_KNOWN_DIRECTORY_BASE_NAME.RESOURCES_COMMON)
|
123
|
+
.replace("{{KEYCLOAKIFY_SPA_DEV_SERVER_PORT}}", KEYCLOAKIFY_SPA_DEV_SERVER_PORT)
|
119
124
|
.replace(
|
120
125
|
"{{userDefinedExclusions}}",
|
121
126
|
buildContext.kcContextExclusionsFtlCode ?? ""
|
@@ -84,8 +84,47 @@ attributes_to_attributesByName: {
|
|
84
84
|
kcContext.profile.attributesByName[attribute.name] = attribute;
|
85
85
|
});
|
86
86
|
}
|
87
|
+
|
88
|
+
redirect_to_dev_server: {
|
89
|
+
|
90
|
+
switch(kcContext.themeType){
|
91
|
+
case "login":
|
92
|
+
break redirect_to_dev_server;
|
93
|
+
case "account":
|
94
|
+
if( kcContext.pageId !== "index.ftl" ){
|
95
|
+
break redirect_to_dev_server;
|
96
|
+
}
|
97
|
+
break;
|
98
|
+
case "admin":
|
99
|
+
break;
|
100
|
+
default:
|
101
|
+
break redirect_to_dev_server;
|
102
|
+
}
|
103
|
+
|
104
|
+
const devSeverPort = kcContext.properties.{{KEYCLOAKIFY_SPA_DEV_SERVER_PORT}};
|
105
|
+
|
106
|
+
if( !devSeverPort ){
|
107
|
+
break redirect_to_dev_server;
|
108
|
+
}
|
109
|
+
|
110
|
+
const redirectUrl = new URL(window.location.href);
|
111
|
+
|
112
|
+
redirectUrl.port = devSeverPort;
|
113
|
+
|
114
|
+
delete kcContext.msgJSON;
|
115
|
+
|
116
|
+
console.log(kcContext);
|
117
|
+
|
118
|
+
redirectUrl.searchParams.set("kcContext", encodeURIComponent(JSON.stringify(kcContext)));
|
119
|
+
|
120
|
+
window.location.href = redirectUrl.toString();
|
121
|
+
|
122
|
+
}
|
123
|
+
|
124
|
+
|
87
125
|
window.kcContext = kcContext;
|
88
126
|
|
127
|
+
|
89
128
|
<#if xKeycloakify.themeType == "login" >
|
90
129
|
{
|
91
130
|
const script = document.createElement("script");
|
@@ -20,7 +20,8 @@ import {
|
|
20
20
|
LOGIN_THEME_PAGE_IDS,
|
21
21
|
ACCOUNT_THEME_PAGE_IDS,
|
22
22
|
WELL_KNOWN_DIRECTORY_BASE_NAME,
|
23
|
-
THEME_TYPES
|
23
|
+
THEME_TYPES,
|
24
|
+
KEYCLOAKIFY_SPA_DEV_SERVER_PORT
|
24
25
|
} from "../../shared/constants";
|
25
26
|
import { assert, type Equals } from "tsafe/assert";
|
26
27
|
import { readFieldNameUsage } from "./readFieldNameUsage";
|
@@ -379,7 +380,10 @@ export async function generateResources(params: {
|
|
379
380
|
? ["deprecatedMode=false"]
|
380
381
|
: []),
|
381
382
|
...(buildContext.extraThemeProperties ?? []),
|
382
|
-
...
|
383
|
+
...[
|
384
|
+
...buildContext.environmentVariables,
|
385
|
+
{ name: KEYCLOAKIFY_SPA_DEV_SERVER_PORT, default: "" }
|
386
|
+
].map(
|
383
387
|
({ name, default: defaultValue }) =>
|
384
388
|
`${name}=\${env.${name}:${escapeStringForPropertiesFile(defaultValue)}}`
|
385
389
|
),
|