keycloakify 11.3.32 → 11.4.0
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/bin/{526.index.js → 392.index.js} +89 -3
- package/bin/573.index.js +4 -1
- package/bin/main.js +5 -2
- 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 +7 -0
- package/package.json +4 -2
- package/src/bin/keycloakify/generateFtl/kcContextDeclarationTemplate.ftl +39 -0
- package/src/bin/keycloakify/generateResources/generateResources.ts +6 -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 +93 -1
- package/src/bin/start-keycloak/startViteDevServer.ts +39 -0
- package/src/vite-plugin/vite-plugin.ts +67 -0
- package/vite-plugin/index.js +65 -1
@@ -1,9 +1,9 @@
|
|
1
1
|
"use strict";
|
2
|
-
exports.id =
|
3
|
-
exports.ids = [
|
2
|
+
exports.id = 392;
|
3
|
+
exports.ids = [392];
|
4
4
|
exports.modules = {
|
5
5
|
|
6
|
-
/***/
|
6
|
+
/***/ 18392:
|
7
7
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
8
8
|
|
9
9
|
// ESM COMPAT FLAG
|
@@ -191,6 +191,29 @@ var fs_existsAsync = __webpack_require__(43765);
|
|
191
191
|
var fs_rm = __webpack_require__(8699);
|
192
192
|
// EXTERNAL MODULE: ./dist/bin/tools/downloadAndExtractArchive.js
|
193
193
|
var downloadAndExtractArchive = __webpack_require__(38367);
|
194
|
+
;// CONCATENATED MODULE: ./dist/bin/start-keycloak/startViteDevServer.js
|
195
|
+
|
196
|
+
|
197
|
+
|
198
|
+
|
199
|
+
(0,assert/* assert */.h)();
|
200
|
+
function startViteDevServer(params) {
|
201
|
+
const { buildContext, port } = params;
|
202
|
+
console.log(source_default().blue(`$ npx vite dev --port ${port}`));
|
203
|
+
const child = external_child_process_.spawn("npx", ["vite", "dev", "--port", `${port}`], {
|
204
|
+
cwd: buildContext.projectDirPath,
|
205
|
+
env: Object.assign(Object.assign({}, process.env), { [constants/* VITE_PLUGIN_SUB_SCRIPTS_ENV_NAMES.READ_KC_CONTEXT_FROM_URL */.TE.READ_KC_CONTEXT_FROM_URL]: "true" }),
|
206
|
+
shell: true
|
207
|
+
});
|
208
|
+
child.stdout.on("data", data => {
|
209
|
+
if (!data.toString("utf8").includes("[vite] hmr")) {
|
210
|
+
return;
|
211
|
+
}
|
212
|
+
process.stdout.write(data);
|
213
|
+
});
|
214
|
+
child.stderr.on("data", data => process.stderr.write(data));
|
215
|
+
}
|
216
|
+
//# sourceMappingURL=startViteDevServer.js.map
|
194
217
|
;// CONCATENATED MODULE: ./dist/bin/start-keycloak/start-keycloak.js
|
195
218
|
|
196
219
|
|
@@ -212,6 +235,7 @@ var downloadAndExtractArchive = __webpack_require__(38367);
|
|
212
235
|
|
213
236
|
|
214
237
|
|
238
|
+
|
215
239
|
|
216
240
|
|
217
241
|
async function command(params) {
|
@@ -428,12 +452,48 @@ async function command(params) {
|
|
428
452
|
catch (_h) { }
|
429
453
|
const DEFAULT_PORT = 8080;
|
430
454
|
const port = (_c = (_b = cliCommandOptions.port) !== null && _b !== void 0 ? _b : buildContext.startKeycloakOptions.port) !== null && _c !== void 0 ? _c : DEFAULT_PORT;
|
455
|
+
const devServerPort = (() => {
|
456
|
+
const hasSpaUi = buildContext.implementedThemeTypes.admin.isImplemented ||
|
457
|
+
(buildContext.implementedThemeTypes.account.isImplemented &&
|
458
|
+
buildContext.implementedThemeTypes.account.type === "Single-Page");
|
459
|
+
if (!hasSpaUi) {
|
460
|
+
return undefined;
|
461
|
+
}
|
462
|
+
if (buildContext.bundler !== "vite") {
|
463
|
+
console.log(source_default().yellow([
|
464
|
+
`WARNING: Since you are using ${buildContext.bundler} instead of Vite,`,
|
465
|
+
`you'll have to wait serval seconds for the changes you made on your account or admin theme to be reflected in the browser.\n`,
|
466
|
+
`For a better development experience, consider migrating to Vite.`
|
467
|
+
].join(" ")));
|
468
|
+
return undefined;
|
469
|
+
}
|
470
|
+
if (keycloakMajorVersionNumber < 25) {
|
471
|
+
console.log(source_default().yellow([
|
472
|
+
`WARNING: Your account or admin theme can't be tested with hot module replacement on Keycloak ${keycloakMajorVersionNumber}.`,
|
473
|
+
`This mean that you'll have to wait serval seconds for the changes to be reflected in the browser.`,
|
474
|
+
`For a better development experience, select a more recent version of Keycloak.`
|
475
|
+
].join("\n")));
|
476
|
+
return undefined;
|
477
|
+
}
|
478
|
+
return port + 1;
|
479
|
+
})();
|
480
|
+
if (devServerPort !== undefined) {
|
481
|
+
startViteDevServer({
|
482
|
+
buildContext,
|
483
|
+
port: devServerPort
|
484
|
+
});
|
485
|
+
}
|
431
486
|
const SPACE_PLACEHOLDER = "SPACE_PLACEHOLDER_xKLmdPd";
|
432
487
|
const dockerRunArgs = [
|
433
488
|
`-p${SPACE_PLACEHOLDER}${port}:8080`,
|
434
489
|
`--name${SPACE_PLACEHOLDER}${constants/* CONTAINER_NAME */.sv}`,
|
435
490
|
`-e${SPACE_PLACEHOLDER}KEYCLOAK_ADMIN=admin`,
|
436
491
|
`-e${SPACE_PLACEHOLDER}KEYCLOAK_ADMIN_PASSWORD=admin`,
|
492
|
+
...(devServerPort === undefined
|
493
|
+
? []
|
494
|
+
: [
|
495
|
+
`-e${SPACE_PLACEHOLDER}${constants/* KEYCLOAKIFY_SPA_DEV_SERVER_PORT */.Sz}=${devServerPort}`
|
496
|
+
]),
|
437
497
|
...(buildContext.startKeycloakOptions.dockerExtraArgs.length === 0
|
438
498
|
? []
|
439
499
|
: [
|
@@ -566,6 +626,32 @@ async function command(params) {
|
|
566
626
|
ignoreInitial: true
|
567
627
|
})
|
568
628
|
.on("all", async (...[, filePath]) => {
|
629
|
+
ignore_account_spa: {
|
630
|
+
const doImplementAccountSpa = buildContext.implementedThemeTypes.account.isImplemented &&
|
631
|
+
buildContext.implementedThemeTypes.account.type === "Single-Page";
|
632
|
+
if (!doImplementAccountSpa) {
|
633
|
+
break ignore_account_spa;
|
634
|
+
}
|
635
|
+
if (!(0,isInside/* isInside */.V)({
|
636
|
+
dirPath: (0,external_path_.join)(buildContext.themeSrcDirPath, "account"),
|
637
|
+
filePath
|
638
|
+
})) {
|
639
|
+
break ignore_account_spa;
|
640
|
+
}
|
641
|
+
return;
|
642
|
+
}
|
643
|
+
ignore_admin: {
|
644
|
+
if (!buildContext.implementedThemeTypes.admin.isImplemented) {
|
645
|
+
break ignore_admin;
|
646
|
+
}
|
647
|
+
if (!(0,isInside/* isInside */.V)({
|
648
|
+
dirPath: (0,external_path_.join)(buildContext.themeSrcDirPath, "admin"),
|
649
|
+
filePath
|
650
|
+
})) {
|
651
|
+
break ignore_admin;
|
652
|
+
}
|
653
|
+
return;
|
654
|
+
}
|
569
655
|
console.log(`Detected changes in ${filePath}`);
|
570
656
|
await waitForDebounce();
|
571
657
|
runFullBuild();
|
package/bin/573.index.js
CHANGED
@@ -1022,7 +1022,10 @@ async function generateResources(params) {
|
|
1022
1022
|
? ["deprecatedMode=false"]
|
1023
1023
|
: []),
|
1024
1024
|
...((_a = buildContext.extraThemeProperties) !== null && _a !== void 0 ? _a : []),
|
1025
|
-
...
|
1025
|
+
...[
|
1026
|
+
...buildContext.environmentVariables,
|
1027
|
+
{ name: constants/* KEYCLOAKIFY_SPA_DEV_SERVER_PORT */.Sz, default: "" }
|
1028
|
+
].map(({ name, default: defaultValue }) => `${name}=\${env.${name}:${(0,escapeStringForPropertiesFile/* escapeStringForPropertiesFile */.y)(defaultValue)}}`),
|
1026
1029
|
...(languageTags === undefined
|
1027
1030
|
? []
|
1028
1031
|
: [`locales=${languageTags.join(",")}`])
|
package/bin/main.js
CHANGED
@@ -10,6 +10,7 @@
|
|
10
10
|
/* harmony export */ "Jh": () => (/* binding */ THEME_TYPES),
|
11
11
|
/* harmony export */ "Ju": () => (/* binding */ WELL_KNOWN_DIRECTORY_BASE_NAME),
|
12
12
|
/* harmony export */ "PC": () => (/* binding */ KEYCLOAK_THEME),
|
13
|
+
/* harmony export */ "Sz": () => (/* binding */ KEYCLOAKIFY_SPA_DEV_SERVER_PORT),
|
13
14
|
/* harmony export */ "TE": () => (/* binding */ VITE_PLUGIN_SUB_SCRIPTS_ENV_NAMES),
|
14
15
|
/* harmony export */ "XV": () => (/* binding */ LOGIN_THEME_PAGE_IDS),
|
15
16
|
/* harmony export */ "_L": () => (/* binding */ FALLBACK_LANGUAGE_TAG),
|
@@ -26,7 +27,8 @@ const WELL_KNOWN_DIRECTORY_BASE_NAME = {
|
|
26
27
|
const THEME_TYPES = ["login", "account", "admin"];
|
27
28
|
const VITE_PLUGIN_SUB_SCRIPTS_ENV_NAMES = {
|
28
29
|
RUN_POST_BUILD_SCRIPT: "KEYCLOAKIFY_RUN_POST_BUILD_SCRIPT",
|
29
|
-
RESOLVE_VITE_CONFIG: "KEYCLOAKIFY_RESOLVE_VITE_CONFIG"
|
30
|
+
RESOLVE_VITE_CONFIG: "KEYCLOAKIFY_RESOLVE_VITE_CONFIG",
|
31
|
+
READ_KC_CONTEXT_FROM_URL: "KEYCLOAKIFY_READ_KC_CONTEXT_FROM_URL"
|
30
32
|
};
|
31
33
|
const BUILD_FOR_KEYCLOAK_MAJOR_VERSION_ENV_NAME = "KEYCLOAKIFY_BUILD_FOR_KEYCLOAK_MAJOR_VERSION";
|
32
34
|
const LOGIN_THEME_PAGE_IDS = [
|
@@ -83,6 +85,7 @@ const CUSTOM_HANDLER_ENV_NAMES = {
|
|
83
85
|
BUILD_CONTEXT: "KEYCLOAKIFY_BUILD_CONTEXT"
|
84
86
|
};
|
85
87
|
const KEYCLOAK_THEME = "keycloak-theme";
|
88
|
+
const KEYCLOAKIFY_SPA_DEV_SERVER_PORT = "KEYCLOAKIFY_SPA_DEV_SERVER_PORT";
|
86
89
|
//# sourceMappingURL=constants.js.map
|
87
90
|
|
88
91
|
/***/ }),
|
@@ -16283,7 +16286,7 @@ program
|
|
16283
16286
|
.task({
|
16284
16287
|
skip,
|
16285
16288
|
handler: async ({ projectDirPath, keycloakVersion, port, realmJsonFilePath }) => {
|
16286
|
-
const { command } = await Promise.all(/* import() */[__nccwpck_require__.e(805), __nccwpck_require__.e(450), __nccwpck_require__.e(33), __nccwpck_require__.e(36), __nccwpck_require__.e(20), __nccwpck_require__.e(
|
16289
|
+
const { command } = await Promise.all(/* import() */[__nccwpck_require__.e(805), __nccwpck_require__.e(450), __nccwpck_require__.e(33), __nccwpck_require__.e(36), __nccwpck_require__.e(20), __nccwpck_require__.e(392)]).then(__nccwpck_require__.bind(__nccwpck_require__, 18392));
|
16287
16290
|
validate_keycloak_version: {
|
16288
16291
|
if (keycloakVersion === undefined) {
|
16289
16292
|
break validate_keycloak_version;
|
@@ -8,6 +8,7 @@ export type ThemeType = (typeof THEME_TYPES)[number];
|
|
8
8
|
export declare const VITE_PLUGIN_SUB_SCRIPTS_ENV_NAMES: {
|
9
9
|
readonly RUN_POST_BUILD_SCRIPT: "KEYCLOAKIFY_RUN_POST_BUILD_SCRIPT";
|
10
10
|
readonly RESOLVE_VITE_CONFIG: "KEYCLOAKIFY_RESOLVE_VITE_CONFIG";
|
11
|
+
readonly READ_KC_CONTEXT_FROM_URL: "KEYCLOAKIFY_READ_KC_CONTEXT_FROM_URL";
|
11
12
|
};
|
12
13
|
export declare const BUILD_FOR_KEYCLOAK_MAJOR_VERSION_ENV_NAME = "KEYCLOAKIFY_BUILD_FOR_KEYCLOAK_MAJOR_VERSION";
|
13
14
|
export declare const LOGIN_THEME_PAGE_IDS: readonly ["login.ftl", "login-username.ftl", "login-password.ftl", "webauthn-authenticate.ftl", "webauthn-register.ftl", "register.ftl", "info.ftl", "error.ftl", "login-reset-password.ftl", "login-verify-email.ftl", "terms.ftl", "login-oauth2-device-verify-user-code.ftl", "login-oauth-grant.ftl", "login-otp.ftl", "login-update-profile.ftl", "login-update-password.ftl", "login-idp-link-confirm.ftl", "login-idp-link-email.ftl", "login-page-expired.ftl", "login-config-totp.ftl", "logout-confirm.ftl", "idp-review-user-profile.ftl", "update-email.ftl", "select-authenticator.ftl", "saml-post-form.ftl", "delete-credential.ftl", "code.ftl", "delete-account-confirm.ftl", "frontchannel-logout.ftl", "login-recovery-authn-code-config.ftl", "login-recovery-authn-code-input.ftl", "login-reset-otp.ftl", "login-x509-info.ftl", "webauthn-error.ftl", "login-passkeys-conditional-authenticate.ftl", "login-idp-link-confirm-override.ftl"];
|
@@ -21,3 +22,4 @@ export declare const CUSTOM_HANDLER_ENV_NAMES: {
|
|
21
22
|
BUILD_CONTEXT: string;
|
22
23
|
};
|
23
24
|
export declare const KEYCLOAK_THEME = "keycloak-theme";
|
25
|
+
export declare const KEYCLOAKIFY_SPA_DEV_SERVER_PORT = "KEYCLOAKIFY_SPA_DEV_SERVER_PORT";
|
package/bin/shared/constants.js
CHANGED
@@ -6,7 +6,8 @@ export const WELL_KNOWN_DIRECTORY_BASE_NAME = {
|
|
6
6
|
export const THEME_TYPES = ["login", "account", "admin"];
|
7
7
|
export const VITE_PLUGIN_SUB_SCRIPTS_ENV_NAMES = {
|
8
8
|
RUN_POST_BUILD_SCRIPT: "KEYCLOAKIFY_RUN_POST_BUILD_SCRIPT",
|
9
|
-
RESOLVE_VITE_CONFIG: "KEYCLOAKIFY_RESOLVE_VITE_CONFIG"
|
9
|
+
RESOLVE_VITE_CONFIG: "KEYCLOAKIFY_RESOLVE_VITE_CONFIG",
|
10
|
+
READ_KC_CONTEXT_FROM_URL: "KEYCLOAKIFY_READ_KC_CONTEXT_FROM_URL"
|
10
11
|
};
|
11
12
|
export const BUILD_FOR_KEYCLOAK_MAJOR_VERSION_ENV_NAME = "KEYCLOAKIFY_BUILD_FOR_KEYCLOAK_MAJOR_VERSION";
|
12
13
|
export const LOGIN_THEME_PAGE_IDS = [
|
@@ -63,4 +64,5 @@ export const CUSTOM_HANDLER_ENV_NAMES = {
|
|
63
64
|
BUILD_CONTEXT: "KEYCLOAKIFY_BUILD_CONTEXT"
|
64
65
|
};
|
65
66
|
export const KEYCLOAK_THEME = "keycloak-theme";
|
67
|
+
export const KEYCLOAKIFY_SPA_DEV_SERVER_PORT = "KEYCLOAKIFY_SPA_DEV_SERVER_PORT";
|
66
68
|
//# sourceMappingURL=constants.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/bin/shared/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,8BAA8B,GAAG;IAC1C,yBAAyB,EAAE,2BAA2B;IACtD,gBAAgB,EAAE,kBAAkB;IACpC,IAAI,EAAE,MAAM;CACN,CAAC;AAEX,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,CAAU,CAAC;AAIlE,MAAM,CAAC,MAAM,iCAAiC,GAAG;IAC7C,qBAAqB,EAAE,mCAAmC;IAC1D,mBAAmB,EAAE,iCAAiC;
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/bin/shared/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,8BAA8B,GAAG;IAC1C,yBAAyB,EAAE,2BAA2B;IACtD,gBAAgB,EAAE,kBAAkB;IACpC,IAAI,EAAE,MAAM;CACN,CAAC;AAEX,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,CAAU,CAAC;AAIlE,MAAM,CAAC,MAAM,iCAAiC,GAAG;IAC7C,qBAAqB,EAAE,mCAAmC;IAC1D,mBAAmB,EAAE,iCAAiC;IACtD,wBAAwB,EAAE,sCAAsC;CAC1D,CAAC;AAEX,MAAM,CAAC,MAAM,yCAAyC,GAClD,8CAA8C,CAAC;AAEnD,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAChC,WAAW;IACX,oBAAoB;IACpB,oBAAoB;IACpB,2BAA2B;IAC3B,uBAAuB;IACvB,cAAc;IACd,UAAU;IACV,WAAW;IACX,0BAA0B;IAC1B,wBAAwB;IACxB,WAAW;IACX,0CAA0C;IAC1C,uBAAuB;IACvB,eAAe;IACf,0BAA0B;IAC1B,2BAA2B;IAC3B,4BAA4B;IAC5B,0BAA0B;IAC1B,wBAAwB;IACxB,uBAAuB;IACvB,oBAAoB;IACpB,6BAA6B;IAC7B,kBAAkB;IAClB,0BAA0B;IAC1B,oBAAoB;IACpB,uBAAuB;IACvB,UAAU;IACV,4BAA4B;IAC5B,yBAAyB;IACzB,sCAAsC;IACtC,qCAAqC;IACrC,qBAAqB;IACrB,qBAAqB;IACrB,oBAAoB;IACpB,6CAA6C;IAC7C,qCAAqC;CAC/B,CAAC;AAEX,MAAM,CAAC,MAAM,sBAAsB,GAAG;IAClC,cAAc;IACd,aAAa;IACb,cAAc;IACd,UAAU;IACV,kBAAkB;IAClB,SAAS;IACT,uBAAuB;CACjB,CAAC;AAKX,MAAM,CAAC,MAAM,cAAc,GAAG,sBAAsB,CAAC;AAErD,MAAM,CAAC,MAAM,qBAAqB,GAAG,IAAI,CAAC;AAE1C,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACpC,YAAY,EAAE,0BAA0B;IACxC,aAAa,EAAE,2BAA2B;CAC7C,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,gBAAgB,CAAC;AAE/C,MAAM,CAAC,MAAM,+BAA+B,GAAG,iCAAiC,CAAC"}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "keycloakify",
|
3
|
-
"version": "11.
|
3
|
+
"version": "11.4.0",
|
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",
|
@@ -1062,6 +1063,7 @@
|
|
1062
1063
|
"bin/start-keycloak/index.d.ts",
|
1063
1064
|
"bin/start-keycloak/keycloakifyBuild.d.ts",
|
1064
1065
|
"bin/start-keycloak/start-keycloak.d.ts",
|
1066
|
+
"bin/start-keycloak/startViteDevServer.d.ts",
|
1065
1067
|
"bin/tools/assertNoPnpmDlx.d.ts",
|
1066
1068
|
"bin/tools/crawl.d.ts",
|
1067
1069
|
"bin/tools/crawlAsync.d.ts",
|
@@ -1103,10 +1105,10 @@
|
|
1103
1105
|
"bin/33.index.js",
|
1104
1106
|
"bin/356.index.js",
|
1105
1107
|
"bin/36.index.js",
|
1108
|
+
"bin/392.index.js",
|
1106
1109
|
"bin/40.index.js",
|
1107
1110
|
"bin/450.index.js",
|
1108
1111
|
"bin/453.index.js",
|
1109
|
-
"bin/526.index.js",
|
1110
1112
|
"bin/573.index.js",
|
1111
1113
|
"bin/653.index.js",
|
1112
1114
|
"bin/658.index.js",
|
@@ -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
|
),
|
@@ -10,7 +10,8 @@ export type ThemeType = (typeof THEME_TYPES)[number];
|
|
10
10
|
|
11
11
|
export const VITE_PLUGIN_SUB_SCRIPTS_ENV_NAMES = {
|
12
12
|
RUN_POST_BUILD_SCRIPT: "KEYCLOAKIFY_RUN_POST_BUILD_SCRIPT",
|
13
|
-
RESOLVE_VITE_CONFIG: "KEYCLOAKIFY_RESOLVE_VITE_CONFIG"
|
13
|
+
RESOLVE_VITE_CONFIG: "KEYCLOAKIFY_RESOLVE_VITE_CONFIG",
|
14
|
+
READ_KC_CONTEXT_FROM_URL: "KEYCLOAKIFY_READ_KC_CONTEXT_FROM_URL"
|
14
15
|
} as const;
|
15
16
|
|
16
17
|
export const BUILD_FOR_KEYCLOAK_MAJOR_VERSION_ENV_NAME =
|
@@ -78,3 +79,5 @@ export const CUSTOM_HANDLER_ENV_NAMES = {
|
|
78
79
|
};
|
79
80
|
|
80
81
|
export const KEYCLOAK_THEME = "keycloak-theme";
|
82
|
+
|
83
|
+
export const KEYCLOAKIFY_SPA_DEV_SERVER_PORT = "KEYCLOAKIFY_SPA_DEV_SERVER_PORT";
|
@@ -628,14 +628,16 @@
|
|
628
628
|
"id": "d8f14dc4-5f0f-4a1d-8c0b-cfe78ee55cb3",
|
629
629
|
"clientId": "account-console",
|
630
630
|
"name": "${client_account-console}",
|
631
|
+
"description": "",
|
631
632
|
"rootUrl": "${authBaseUrl}",
|
633
|
+
"adminUrl": "",
|
632
634
|
"baseUrl": "/realms/myrealm/account/",
|
633
635
|
"surrogateAuthRequired": false,
|
634
636
|
"enabled": true,
|
635
637
|
"alwaysDisplayInConsole": false,
|
636
638
|
"clientAuthenticatorType": "client-secret",
|
637
|
-
"redirectUris": ["
|
638
|
-
"webOrigins": [],
|
639
|
+
"redirectUris": ["*"],
|
640
|
+
"webOrigins": ["*"],
|
639
641
|
"notBefore": 0,
|
640
642
|
"bearerOnly": false,
|
641
643
|
"consentRequired": false,
|
@@ -647,8 +649,13 @@
|
|
647
649
|
"frontchannelLogout": false,
|
648
650
|
"protocol": "openid-connect",
|
649
651
|
"attributes": {
|
652
|
+
"oidc.ciba.grant.enabled": "false",
|
653
|
+
"backchannel.logout.session.required": "true",
|
650
654
|
"post.logout.redirect.uris": "+",
|
651
|
-
"
|
655
|
+
"oauth2.device.authorization.grant.enabled": "false",
|
656
|
+
"display.on.consent.screen": "false",
|
657
|
+
"pkce.code.challenge.method": "S256",
|
658
|
+
"backchannel.logout.revoke.offline.tokens": "false"
|
652
659
|
},
|
653
660
|
"authenticationFlowBindingOverrides": {},
|
654
661
|
"fullScopeAllowed": false,
|
@@ -1574,14 +1581,14 @@
|
|
1574
1581
|
"subComponents": {},
|
1575
1582
|
"config": {
|
1576
1583
|
"allowed-protocol-mapper-types": [
|
1584
|
+
"oidc-sha256-pairwise-sub-mapper",
|
1577
1585
|
"oidc-full-name-mapper",
|
1578
|
-
"oidc-usermodel-attribute-mapper",
|
1579
|
-
"oidc-address-mapper",
|
1580
|
-
"saml-user-attribute-mapper",
|
1581
1586
|
"oidc-usermodel-property-mapper",
|
1582
|
-
"saml-user-property-mapper",
|
1583
1587
|
"saml-role-list-mapper",
|
1584
|
-
"
|
1588
|
+
"saml-user-attribute-mapper",
|
1589
|
+
"saml-user-property-mapper",
|
1590
|
+
"oidc-usermodel-attribute-mapper",
|
1591
|
+
"oidc-address-mapper"
|
1585
1592
|
]
|
1586
1593
|
}
|
1587
1594
|
},
|
@@ -1612,13 +1619,13 @@
|
|
1612
1619
|
"config": {
|
1613
1620
|
"allowed-protocol-mapper-types": [
|
1614
1621
|
"oidc-sha256-pairwise-sub-mapper",
|
1615
|
-
"
|
1616
|
-
"oidc-address-mapper",
|
1622
|
+
"saml-user-property-mapper",
|
1617
1623
|
"oidc-usermodel-attribute-mapper",
|
1618
|
-
"oidc-
|
1624
|
+
"oidc-address-mapper",
|
1625
|
+
"saml-role-list-mapper",
|
1626
|
+
"oidc-usermodel-property-mapper",
|
1619
1627
|
"saml-user-attribute-mapper",
|
1620
|
-
"
|
1621
|
-
"saml-role-list-mapper"
|
1628
|
+
"oidc-full-name-mapper"
|
1622
1629
|
]
|
1623
1630
|
}
|
1624
1631
|
},
|
@@ -1671,13 +1678,6 @@
|
|
1671
1678
|
"providerId": "rsa-generated",
|
1672
1679
|
"subComponents": {},
|
1673
1680
|
"config": {
|
1674
|
-
"privateKey": [
|
1675
|
-
"MIIEowIBAAKCAQEAsYUWzVfZMd6ywpBmLJYeF1U9Mgd/z3xWvl1Yq76oRPPfpcqQitN+cktWqu0hPerCVSl2ltwXDMrUwFzswG9MiM9hb+BLEld7kYiYkcFNt3lCtmmeRQEae7JwWimzeNV96Qlz0tHY8f9Zh0ffPDsLTN1HGAeRJJhI7mNQm6qCJNMCfVA/O5SWumsIn2XLnSMiQ05AACVHOLUq6rAZ2zCCaYmXTmJkuSOb8e26V303P6l63DSe5HSNXDdI00tjfFFf37q870zhvfsotrjjx0RMijy9Kjj8OZF+pFHpDRaGEi8tpQxZDnCTofTieB/Vp3QP+aTlvAyD3Q1ZnJxGQCLygwIDAQABAoIBABUJ9XMJGNQzamiVwuOWN7ht4UP8ezYvgdEA8NaLUO0PIYVIKyD7l4OwkHPPM9PfRACM2qG0MZp8sCyg4WxIeepy+D979oRqJYUmNRLSipqWlASuItRXIPjiY99uYXdjh2R8Os5pvCD+MZxPX9KHGuaVXmzSJMO7YAAPeYkMHcLYTp/U0c65Ztaaz1zz1FeyvpjkLr9SHiMcIN51zFmhvT1tcRIqy4zidisjrTSUr/KPVxeJtrEfyhTGk3z41yJf5YbeaxaMjJR5x0WXzt1fWVmA/V1bWa2Zlj9d8AxDReA1p7Lpstz34PRoCMj9bmFguI2+RTw6K0D++Jydfxmh8vUCgYEA5Zwk2r3TFO3i3V70LOn6CLzn15yLeuSIJ9p2os70jQOmFMCreLdcUbCaiUe7UV/IIVftbcxhFm9zECXZXX0wubcmHZqyptlbuAn1de4QkLJixXo1A7ZQXBEZk22WN2naXHQF5oK6lh/VSLcZBajTsyvBm5JWXrd8djjG06MugA8CgYEAxexKI5IwcLhpMDV9UPQb/+lDWHVqCT2xwYxnZ85y+5gmrOyyT7mIChz3DFYiaw4CHJWmBkIDBaiDgLEgQk4QXWzYshXawShBHnv1h08bVMMw98Ivec7ZRkV+/ET30YRwC2Uyk4bm4HpwVV5GCFhC4aAvRcCA1CIJk3MwcOwksk0CgYEAqxyaOomMbOR7VQ4WWgJkW26sOHppV8RH06tzDhG9HfnCI2USZHwBSL+b6wKSDiqbMn4cat8M23NjBH2wZ4OMdFqRBS7sRHtnZtfFHYW0wqCuCwzvxTxw1qvHq57Xe6RfHtc4LnjuJELE59PLyfPvEG9jcVS1GREUp+XYBpBtbvECgYAMhWBDU9JAr0noRNoCrw6+Z9Fc3UCyCPcf2XQJOyRHCl8X/XliVchna2GtpB1VTHORv13bc32hdAGtuIbj6vBaGLK0wXEvWw6TkR/9SWHfQOHuKpi6Sf2w1mCsMOjElm5IKkTC1Hvyo4xLukUP7hV9FJcpAH6l7OlSLK1Z13aS2QKBgB6w4gvmVEQruHV5+K60OatuFojr+kxJwmzCb5uKOULUFezT2pA3p3l6IWxGL2XtM+LD0SiZE3KZJUzf+LatYlBU9ek4F1krkVNUTRZpzUa0oADbymCL1chM4oPIs7sISQlFIH2wOSZt6Blvcw0E0wfjd9Gv/LHxcMnlRb1t1sLk"
|
1676
|
-
],
|
1677
|
-
"keyUse": ["SIG"],
|
1678
|
-
"certificate": [
|
1679
|
-
"MIICnTCCAYUCBgGQBsyplzANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdteXJlYWxtMB4XDTI0MDYxMTEwMTQ1NFoXDTM0MDYxMTEwMTYzNFowEjEQMA4GA1UEAwwHbXlyZWFsbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALGFFs1X2THessKQZiyWHhdVPTIHf898Vr5dWKu+qETz36XKkIrTfnJLVqrtIT3qwlUpdpbcFwzK1MBc7MBvTIjPYW/gSxJXe5GImJHBTbd5QrZpnkUBGnuycFops3jVfekJc9LR2PH/WYdH3zw7C0zdRxgHkSSYSO5jUJuqgiTTAn1QPzuUlrprCJ9ly50jIkNOQAAlRzi1KuqwGdswgmmJl05iZLkjm/Htuld9Nz+petw0nuR0jVw3SNNLY3xRX9+6vO9M4b37KLa448dETIo8vSo4/DmRfqRR6Q0WhhIvLaUMWQ5wk6H04ngf1ad0D/mk5bwMg90NWZycRkAi8oMCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAVS+gJshIFX6cmBGI8UaOOI/9+XFb4Gi+DHaHVWVVHTd14MoqNK1bmmyTHbGIZbvK8UqgJ9+FhJX1ejx17d4KBzkZI3tYvPnVacHvaw1CIUMZ1Ini6u+UGUTnIlnQzCG0pcTKjOZXf3ih1B2CKdwyC7XeXyEJHicAIG7XfzYfYd9DYHvA+h6hrXaQcNJMW7WFNbtb3fJhtlv5P1Iw+ZEGdj15ukMI0bg2OEQA0F3jIw6QZpigSAGuai3HOY6OgoPO82d7TyTYlNhuwyutWr9izl6QMc2R7BmRfW9XQj4ICR2VWJiL9nqz+SOyqnjQiOObuw8Vywb8c36R1Ym1aaGjOw=="
|
1680
|
-
],
|
1681
1681
|
"priority": ["100"]
|
1682
1682
|
}
|
1683
1683
|
},
|
@@ -1687,13 +1687,6 @@
|
|
1687
1687
|
"providerId": "rsa-enc-generated",
|
1688
1688
|
"subComponents": {},
|
1689
1689
|
"config": {
|
1690
|
-
"privateKey": [
|
1691
|
-
"MIIEogIBAAKCAQEAkQtefHy82e8d5dVWN00LnGI5YmBOTKh0tgqayVRjqLH6u3NfgJVVIe0tFnxa7Wka/ySHrn1KSsW52czZ4uPXLUo4sXBkQxyyFXeZiWN8H+9WiUQ+0hefZF4es5ZPhY2VpeMK9XAnphC362LFLVycXulkpJcQ+4DjI99To4LLyJmjQvsVaJ7amoVJ5xd62eUv+D7f2+jwuaTwjGE3+MWZADXjVxsUY1qJuGLGKnLkNNxJNMDhvnKYw+aa3Z4V90fQVyjN1Volgw3DdA59o4wrWEy+2xHc6j2ESi8+cM60fWzZU9sp2XkyJoCnV7nmwk7pZkDy3zvAkeOWzrr3OWeR3wIDAQABAoIBACWMcet8R0+L7YuATQ+H7IeRjhV/pQWHXp9541RXem1DlgtM9N5Oynk78z4s90Uavphqlo1/deohgdl2hLmODjh1THPzCqGtHhUcnyzICmwiA58JgdHVt7e9/eiz8uY6HxGQ01dyr3D4RwSyzyTNItYXSayqRwU0+phgykA8LhFCAQM/UkRXDf6UCFKBhDyE7VPBaDv0xyxNb7dKtE7C6Qo5t5D40xCfQ8ni8OcD5RvshQq5xOWcw7igxAhlmXCu1fuO2CDiSiqXLMENs4NlwilQ3caMXAIzUiblaKwCrrK2noBoitx6vuOR2tKmIZSlTyDAG4vLQQtOHk53hBoupGECgYEAx4jSmLM9uUzNwNY1zfs8iNswxbU3YibNe2Q+IFmOQofvTaq1jBBxdPWX5ifIbuTvOAA33pmJRh+BtWzOBBQC7Z4i9mdfvyWB6s8t9nnTnWIY5Hj+hV5gaqae59MjdudsORR887fxzPIeAwwaETfKaZnYpC6zLaE3BXwhIcjlFTcCgYEAuhcKf16JkEYNIwanVHpUXjFxwAThAogHWZAngRokmai67Iulx+rSUhhtOIXtmjj/EaObsrqo5yCKAVZ5EbPTOajdd9RtFzH6q3bRjRdp8o8ZVx4c1vMNaOnLbvK4YzJlKSZN9N7m255Mg+/ea3veKVZsSVHDMnuYmH8GjncjPJkCgYAOIUlQmPjZA3BapJDA2nbJ9kO47IFUiQzqHQotPkpNudSfemRK2+s87htoqA6Qk9PA8nsCX3sSJS8JSwA317bxXs55Bo8IOT6/AxbtKmlq7sR2gX78sNdBFjWQkyoixHasgB/tHmyYJ9kqPBQoffvuiH+H+OqlY5JC6CxseQ6H9wKBgF69Hj4MDjLiRwve9k9+2/b8azHcCgX05PEG/+WtPpbwHQIScnseJKdhAjH1lSqf+9OqHLlYaGcK3Nejg42spEvFmcLI5iUZ78lde3++PNUdX0RH81zHbrtL06MPdSojXPcfJi8VUCjdJY1CEFVeQZOACS8mrh7EZ8KzYM4k/055AoGAYqjBv3WS8ul7kAsjpZKpIw1QZZaTjBSmLpjB6X8InF+Zihjgm80Dd4RMFnMnEawhFBvnpklvyw5Ce6NSwcC137kN3NVpJypykkXuYkimg7OxgJjR7YFdbQWJWlc+1eB81WTHcEOHVI/DmeV2yVJcv6kA2iC+3/JA0VoJxvrRBKc="
|
1692
|
-
],
|
1693
|
-
"keyUse": ["ENC"],
|
1694
|
-
"certificate": [
|
1695
|
-
"MIICnTCCAYUCBgGQBsyq0jANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdteXJlYWxtMB4XDTI0MDYxMTEwMTQ1NFoXDTM0MDYxMTEwMTYzNFowEjEQMA4GA1UEAwwHbXlyZWFsbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJELXnx8vNnvHeXVVjdNC5xiOWJgTkyodLYKmslUY6ix+rtzX4CVVSHtLRZ8Wu1pGv8kh659SkrFudnM2eLj1y1KOLFwZEMcshV3mYljfB/vVolEPtIXn2ReHrOWT4WNlaXjCvVwJ6YQt+tixS1cnF7pZKSXEPuA4yPfU6OCy8iZo0L7FWie2pqFSecXetnlL/g+39vo8Lmk8IxhN/jFmQA141cbFGNaibhixipy5DTcSTTA4b5ymMPmmt2eFfdH0FcozdVaJYMNw3QOfaOMK1hMvtsR3Oo9hEovPnDOtH1s2VPbKdl5MiaAp1e55sJO6WZA8t87wJHjls669zlnkd8CAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAD9wQ+CJ0FRgls3JrUzxwHLgrJ3Yo4+mDFpSe1rh2XYK5FEIWDWSqxaXI3p0cOZq75RZmI2xV8oaiJMUz9WMZkbNe/KtGRzHY1N9AZooicGIsnFu1t++b8taFxxpvKWZgnbOum2PZlfcNiXL0QeMv0wwhfn9zKA9W1DRcqYGbIamoyVlumvbNyIjqXJKwGYIOW6GNt7v3wJl5AJw8qAU/O/DQwWwmzcnFGNRxRxAwI7we8EiQ5JlG0Wi+nyAQn74o3RhNr3zsY0ndmFx9bFV4BBo2AiYGozCDOCCG5HvrmoDbrm//wmGRv0tCwueBzWHL2mhtbZ6sGWmMWfiTJ2HPpg=="
|
1696
|
-
],
|
1697
1690
|
"priority": ["100"],
|
1698
1691
|
"algorithm": ["RSA-OAEP"]
|
1699
1692
|
}
|
@@ -1704,8 +1697,6 @@
|
|
1704
1697
|
"providerId": "aes-generated",
|
1705
1698
|
"subComponents": {},
|
1706
1699
|
"config": {
|
1707
|
-
"kid": ["1c1d0c8a-6f0b-48a9-a66f-488489137d85"],
|
1708
|
-
"secret": ["N4wzheVYYBWxFn9VGWTPQQ"],
|
1709
1700
|
"priority": ["100"]
|
1710
1701
|
}
|
1711
1702
|
},
|
@@ -1715,10 +1706,6 @@
|
|
1715
1706
|
"providerId": "hmac-generated",
|
1716
1707
|
"subComponents": {},
|
1717
1708
|
"config": {
|
1718
|
-
"kid": ["ce43821c-6cfd-4ea9-a29a-a724a37e6955"],
|
1719
|
-
"secret": [
|
1720
|
-
"j_8WeQHYt5R6coay0IOUeu9hGvCoJsgnENSoYm0gDlDx6IHOg-f6p17QIaesNmgrzXtJDRpYMhSjpTMHOnHCHLxwUM4eVg9TcszffndB850Yj3PHPeCc5aoHcpYzWN9NDZZ02nBYA04nfbkdlLXiGlpS3I3e502e4DX3rFtbFZ0"
|
1721
|
-
],
|
1722
1709
|
"priority": ["100"],
|
1723
1710
|
"algorithm": ["HS512"]
|
1724
1711
|
}
|
@@ -2388,7 +2375,7 @@
|
|
2388
2375
|
"clientSessionMaxLifespan": "0",
|
2389
2376
|
"organizationsEnabled": "false"
|
2390
2377
|
},
|
2391
|
-
"keycloakVersion": "25.0.
|
2378
|
+
"keycloakVersion": "25.0.6",
|
2392
2379
|
"userManagedAccessAllowed": false,
|
2393
2380
|
"organizationsEnabled": false,
|
2394
2381
|
"clientProfiles": {
|
@@ -38,6 +38,7 @@
|
|
38
38
|
"bruteForceProtected": false,
|
39
39
|
"permanentLockout": false,
|
40
40
|
"maxTemporaryLockouts": 0,
|
41
|
+
"bruteForceStrategy": "MULTIPLE",
|
41
42
|
"maxFailureWaitSeconds": 900,
|
42
43
|
"minimumQuickLoginWaitSeconds": 60,
|
43
44
|
"waitIncrementSeconds": 60,
|
@@ -604,6 +605,7 @@
|
|
604
605
|
"frontchannelLogout": false,
|
605
606
|
"protocol": "openid-connect",
|
606
607
|
"attributes": {
|
608
|
+
"realm_client": "false",
|
607
609
|
"post.logout.redirect.uris": "+"
|
608
610
|
},
|
609
611
|
"authenticationFlowBindingOverrides": {},
|
@@ -628,14 +630,16 @@
|
|
628
630
|
"id": "d8f14dc4-5f0f-4a1d-8c0b-cfe78ee55cb3",
|
629
631
|
"clientId": "account-console",
|
630
632
|
"name": "${client_account-console}",
|
633
|
+
"description": "",
|
631
634
|
"rootUrl": "${authBaseUrl}",
|
635
|
+
"adminUrl": "",
|
632
636
|
"baseUrl": "/realms/myrealm/account/",
|
633
637
|
"surrogateAuthRequired": false,
|
634
638
|
"enabled": true,
|
635
639
|
"alwaysDisplayInConsole": false,
|
636
640
|
"clientAuthenticatorType": "client-secret",
|
637
|
-
"redirectUris": ["
|
638
|
-
"webOrigins": [],
|
641
|
+
"redirectUris": ["*"],
|
642
|
+
"webOrigins": ["*"],
|
639
643
|
"notBefore": 0,
|
640
644
|
"bearerOnly": false,
|
641
645
|
"consentRequired": false,
|
@@ -647,8 +651,14 @@
|
|
647
651
|
"frontchannelLogout": false,
|
648
652
|
"protocol": "openid-connect",
|
649
653
|
"attributes": {
|
654
|
+
"realm_client": "false",
|
655
|
+
"oidc.ciba.grant.enabled": "false",
|
656
|
+
"backchannel.logout.session.required": "true",
|
650
657
|
"post.logout.redirect.uris": "+",
|
651
|
-
"
|
658
|
+
"oauth2.device.authorization.grant.enabled": "false",
|
659
|
+
"display.on.consent.screen": "false",
|
660
|
+
"pkce.code.challenge.method": "S256",
|
661
|
+
"backchannel.logout.revoke.offline.tokens": "false"
|
652
662
|
},
|
653
663
|
"authenticationFlowBindingOverrides": {},
|
654
664
|
"fullScopeAllowed": false,
|
@@ -699,10 +709,12 @@
|
|
699
709
|
"frontchannelLogout": false,
|
700
710
|
"protocol": "openid-connect",
|
701
711
|
"attributes": {
|
712
|
+
"realm_client": "false",
|
713
|
+
"client.use.lightweight.access.token.enabled": "true",
|
702
714
|
"post.logout.redirect.uris": "+"
|
703
715
|
},
|
704
716
|
"authenticationFlowBindingOverrides": {},
|
705
|
-
"fullScopeAllowed":
|
717
|
+
"fullScopeAllowed": true,
|
706
718
|
"nodeReRegistrationTimeout": 0,
|
707
719
|
"defaultClientScopes": [
|
708
720
|
"web-origins",
|
@@ -740,6 +752,7 @@
|
|
740
752
|
"frontchannelLogout": false,
|
741
753
|
"protocol": "openid-connect",
|
742
754
|
"attributes": {
|
755
|
+
"realm_client": "true",
|
743
756
|
"post.logout.redirect.uris": "+"
|
744
757
|
},
|
745
758
|
"authenticationFlowBindingOverrides": {},
|
@@ -789,6 +802,7 @@
|
|
789
802
|
"frontchannelLogout": true,
|
790
803
|
"protocol": "openid-connect",
|
791
804
|
"attributes": {
|
805
|
+
"realm_client": "false",
|
792
806
|
"oidc.ciba.grant.enabled": "false",
|
793
807
|
"backchannel.logout.session.required": "true",
|
794
808
|
"login_theme": "keycloakify-starter",
|
@@ -855,6 +869,7 @@
|
|
855
869
|
"frontchannelLogout": false,
|
856
870
|
"protocol": "openid-connect",
|
857
871
|
"attributes": {
|
872
|
+
"realm_client": "true",
|
858
873
|
"post.logout.redirect.uris": "+"
|
859
874
|
},
|
860
875
|
"authenticationFlowBindingOverrides": {},
|
@@ -898,11 +913,13 @@
|
|
898
913
|
"frontchannelLogout": false,
|
899
914
|
"protocol": "openid-connect",
|
900
915
|
"attributes": {
|
916
|
+
"realm_client": "false",
|
917
|
+
"client.use.lightweight.access.token.enabled": "true",
|
901
918
|
"post.logout.redirect.uris": "+",
|
902
919
|
"pkce.code.challenge.method": "S256"
|
903
920
|
},
|
904
921
|
"authenticationFlowBindingOverrides": {},
|
905
|
-
"fullScopeAllowed":
|
922
|
+
"fullScopeAllowed": true,
|
906
923
|
"nodeReRegistrationTimeout": 0,
|
907
924
|
"protocolMappers": [
|
908
925
|
{
|
@@ -1574,14 +1591,14 @@
|
|
1574
1591
|
"subComponents": {},
|
1575
1592
|
"config": {
|
1576
1593
|
"allowed-protocol-mapper-types": [
|
1594
|
+
"saml-user-attribute-mapper",
|
1595
|
+
"oidc-sha256-pairwise-sub-mapper",
|
1577
1596
|
"oidc-full-name-mapper",
|
1578
|
-
"
|
1597
|
+
"saml-user-property-mapper",
|
1579
1598
|
"oidc-address-mapper",
|
1580
|
-
"saml-user-attribute-mapper",
|
1581
1599
|
"oidc-usermodel-property-mapper",
|
1582
|
-
"saml-user-property-mapper",
|
1583
1600
|
"saml-role-list-mapper",
|
1584
|
-
"oidc-
|
1601
|
+
"oidc-usermodel-attribute-mapper"
|
1585
1602
|
]
|
1586
1603
|
}
|
1587
1604
|
},
|
@@ -1611,14 +1628,14 @@
|
|
1611
1628
|
"subComponents": {},
|
1612
1629
|
"config": {
|
1613
1630
|
"allowed-protocol-mapper-types": [
|
1614
|
-
"oidc-sha256-pairwise-sub-mapper",
|
1615
|
-
"oidc-usermodel-property-mapper",
|
1616
|
-
"oidc-address-mapper",
|
1617
1631
|
"oidc-usermodel-attribute-mapper",
|
1618
1632
|
"oidc-full-name-mapper",
|
1619
|
-
"
|
1633
|
+
"oidc-usermodel-property-mapper",
|
1634
|
+
"oidc-address-mapper",
|
1620
1635
|
"saml-user-property-mapper",
|
1621
|
-
"saml-role-list-mapper"
|
1636
|
+
"saml-role-list-mapper",
|
1637
|
+
"saml-user-attribute-mapper",
|
1638
|
+
"oidc-sha256-pairwise-sub-mapper"
|
1622
1639
|
]
|
1623
1640
|
}
|
1624
1641
|
},
|
@@ -1671,13 +1688,6 @@
|
|
1671
1688
|
"providerId": "rsa-generated",
|
1672
1689
|
"subComponents": {},
|
1673
1690
|
"config": {
|
1674
|
-
"privateKey": [
|
1675
|
-
"MIIEowIBAAKCAQEAsYUWzVfZMd6ywpBmLJYeF1U9Mgd/z3xWvl1Yq76oRPPfpcqQitN+cktWqu0hPerCVSl2ltwXDMrUwFzswG9MiM9hb+BLEld7kYiYkcFNt3lCtmmeRQEae7JwWimzeNV96Qlz0tHY8f9Zh0ffPDsLTN1HGAeRJJhI7mNQm6qCJNMCfVA/O5SWumsIn2XLnSMiQ05AACVHOLUq6rAZ2zCCaYmXTmJkuSOb8e26V303P6l63DSe5HSNXDdI00tjfFFf37q870zhvfsotrjjx0RMijy9Kjj8OZF+pFHpDRaGEi8tpQxZDnCTofTieB/Vp3QP+aTlvAyD3Q1ZnJxGQCLygwIDAQABAoIBABUJ9XMJGNQzamiVwuOWN7ht4UP8ezYvgdEA8NaLUO0PIYVIKyD7l4OwkHPPM9PfRACM2qG0MZp8sCyg4WxIeepy+D979oRqJYUmNRLSipqWlASuItRXIPjiY99uYXdjh2R8Os5pvCD+MZxPX9KHGuaVXmzSJMO7YAAPeYkMHcLYTp/U0c65Ztaaz1zz1FeyvpjkLr9SHiMcIN51zFmhvT1tcRIqy4zidisjrTSUr/KPVxeJtrEfyhTGk3z41yJf5YbeaxaMjJR5x0WXzt1fWVmA/V1bWa2Zlj9d8AxDReA1p7Lpstz34PRoCMj9bmFguI2+RTw6K0D++Jydfxmh8vUCgYEA5Zwk2r3TFO3i3V70LOn6CLzn15yLeuSIJ9p2os70jQOmFMCreLdcUbCaiUe7UV/IIVftbcxhFm9zECXZXX0wubcmHZqyptlbuAn1de4QkLJixXo1A7ZQXBEZk22WN2naXHQF5oK6lh/VSLcZBajTsyvBm5JWXrd8djjG06MugA8CgYEAxexKI5IwcLhpMDV9UPQb/+lDWHVqCT2xwYxnZ85y+5gmrOyyT7mIChz3DFYiaw4CHJWmBkIDBaiDgLEgQk4QXWzYshXawShBHnv1h08bVMMw98Ivec7ZRkV+/ET30YRwC2Uyk4bm4HpwVV5GCFhC4aAvRcCA1CIJk3MwcOwksk0CgYEAqxyaOomMbOR7VQ4WWgJkW26sOHppV8RH06tzDhG9HfnCI2USZHwBSL+b6wKSDiqbMn4cat8M23NjBH2wZ4OMdFqRBS7sRHtnZtfFHYW0wqCuCwzvxTxw1qvHq57Xe6RfHtc4LnjuJELE59PLyfPvEG9jcVS1GREUp+XYBpBtbvECgYAMhWBDU9JAr0noRNoCrw6+Z9Fc3UCyCPcf2XQJOyRHCl8X/XliVchna2GtpB1VTHORv13bc32hdAGtuIbj6vBaGLK0wXEvWw6TkR/9SWHfQOHuKpi6Sf2w1mCsMOjElm5IKkTC1Hvyo4xLukUP7hV9FJcpAH6l7OlSLK1Z13aS2QKBgB6w4gvmVEQruHV5+K60OatuFojr+kxJwmzCb5uKOULUFezT2pA3p3l6IWxGL2XtM+LD0SiZE3KZJUzf+LatYlBU9ek4F1krkVNUTRZpzUa0oADbymCL1chM4oPIs7sISQlFIH2wOSZt6Blvcw0E0wfjd9Gv/LHxcMnlRb1t1sLk"
|
1676
|
-
],
|
1677
|
-
"keyUse": ["SIG"],
|
1678
|
-
"certificate": [
|
1679
|
-
"MIICnTCCAYUCBgGQBsyplzANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdteXJlYWxtMB4XDTI0MDYxMTEwMTQ1NFoXDTM0MDYxMTEwMTYzNFowEjEQMA4GA1UEAwwHbXlyZWFsbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALGFFs1X2THessKQZiyWHhdVPTIHf898Vr5dWKu+qETz36XKkIrTfnJLVqrtIT3qwlUpdpbcFwzK1MBc7MBvTIjPYW/gSxJXe5GImJHBTbd5QrZpnkUBGnuycFops3jVfekJc9LR2PH/WYdH3zw7C0zdRxgHkSSYSO5jUJuqgiTTAn1QPzuUlrprCJ9ly50jIkNOQAAlRzi1KuqwGdswgmmJl05iZLkjm/Htuld9Nz+petw0nuR0jVw3SNNLY3xRX9+6vO9M4b37KLa448dETIo8vSo4/DmRfqRR6Q0WhhIvLaUMWQ5wk6H04ngf1ad0D/mk5bwMg90NWZycRkAi8oMCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAVS+gJshIFX6cmBGI8UaOOI/9+XFb4Gi+DHaHVWVVHTd14MoqNK1bmmyTHbGIZbvK8UqgJ9+FhJX1ejx17d4KBzkZI3tYvPnVacHvaw1CIUMZ1Ini6u+UGUTnIlnQzCG0pcTKjOZXf3ih1B2CKdwyC7XeXyEJHicAIG7XfzYfYd9DYHvA+h6hrXaQcNJMW7WFNbtb3fJhtlv5P1Iw+ZEGdj15ukMI0bg2OEQA0F3jIw6QZpigSAGuai3HOY6OgoPO82d7TyTYlNhuwyutWr9izl6QMc2R7BmRfW9XQj4ICR2VWJiL9nqz+SOyqnjQiOObuw8Vywb8c36R1Ym1aaGjOw=="
|
1680
|
-
],
|
1681
1691
|
"priority": ["100"]
|
1682
1692
|
}
|
1683
1693
|
},
|
@@ -1687,13 +1697,6 @@
|
|
1687
1697
|
"providerId": "rsa-enc-generated",
|
1688
1698
|
"subComponents": {},
|
1689
1699
|
"config": {
|
1690
|
-
"privateKey": [
|
1691
|
-
"MIIEogIBAAKCAQEAkQtefHy82e8d5dVWN00LnGI5YmBOTKh0tgqayVRjqLH6u3NfgJVVIe0tFnxa7Wka/ySHrn1KSsW52czZ4uPXLUo4sXBkQxyyFXeZiWN8H+9WiUQ+0hefZF4es5ZPhY2VpeMK9XAnphC362LFLVycXulkpJcQ+4DjI99To4LLyJmjQvsVaJ7amoVJ5xd62eUv+D7f2+jwuaTwjGE3+MWZADXjVxsUY1qJuGLGKnLkNNxJNMDhvnKYw+aa3Z4V90fQVyjN1Volgw3DdA59o4wrWEy+2xHc6j2ESi8+cM60fWzZU9sp2XkyJoCnV7nmwk7pZkDy3zvAkeOWzrr3OWeR3wIDAQABAoIBACWMcet8R0+L7YuATQ+H7IeRjhV/pQWHXp9541RXem1DlgtM9N5Oynk78z4s90Uavphqlo1/deohgdl2hLmODjh1THPzCqGtHhUcnyzICmwiA58JgdHVt7e9/eiz8uY6HxGQ01dyr3D4RwSyzyTNItYXSayqRwU0+phgykA8LhFCAQM/UkRXDf6UCFKBhDyE7VPBaDv0xyxNb7dKtE7C6Qo5t5D40xCfQ8ni8OcD5RvshQq5xOWcw7igxAhlmXCu1fuO2CDiSiqXLMENs4NlwilQ3caMXAIzUiblaKwCrrK2noBoitx6vuOR2tKmIZSlTyDAG4vLQQtOHk53hBoupGECgYEAx4jSmLM9uUzNwNY1zfs8iNswxbU3YibNe2Q+IFmOQofvTaq1jBBxdPWX5ifIbuTvOAA33pmJRh+BtWzOBBQC7Z4i9mdfvyWB6s8t9nnTnWIY5Hj+hV5gaqae59MjdudsORR887fxzPIeAwwaETfKaZnYpC6zLaE3BXwhIcjlFTcCgYEAuhcKf16JkEYNIwanVHpUXjFxwAThAogHWZAngRokmai67Iulx+rSUhhtOIXtmjj/EaObsrqo5yCKAVZ5EbPTOajdd9RtFzH6q3bRjRdp8o8ZVx4c1vMNaOnLbvK4YzJlKSZN9N7m255Mg+/ea3veKVZsSVHDMnuYmH8GjncjPJkCgYAOIUlQmPjZA3BapJDA2nbJ9kO47IFUiQzqHQotPkpNudSfemRK2+s87htoqA6Qk9PA8nsCX3sSJS8JSwA317bxXs55Bo8IOT6/AxbtKmlq7sR2gX78sNdBFjWQkyoixHasgB/tHmyYJ9kqPBQoffvuiH+H+OqlY5JC6CxseQ6H9wKBgF69Hj4MDjLiRwve9k9+2/b8azHcCgX05PEG/+WtPpbwHQIScnseJKdhAjH1lSqf+9OqHLlYaGcK3Nejg42spEvFmcLI5iUZ78lde3++PNUdX0RH81zHbrtL06MPdSojXPcfJi8VUCjdJY1CEFVeQZOACS8mrh7EZ8KzYM4k/055AoGAYqjBv3WS8ul7kAsjpZKpIw1QZZaTjBSmLpjB6X8InF+Zihjgm80Dd4RMFnMnEawhFBvnpklvyw5Ce6NSwcC137kN3NVpJypykkXuYkimg7OxgJjR7YFdbQWJWlc+1eB81WTHcEOHVI/DmeV2yVJcv6kA2iC+3/JA0VoJxvrRBKc="
|
1692
|
-
],
|
1693
|
-
"keyUse": ["ENC"],
|
1694
|
-
"certificate": [
|
1695
|
-
"MIICnTCCAYUCBgGQBsyq0jANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdteXJlYWxtMB4XDTI0MDYxMTEwMTQ1NFoXDTM0MDYxMTEwMTYzNFowEjEQMA4GA1UEAwwHbXlyZWFsbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJELXnx8vNnvHeXVVjdNC5xiOWJgTkyodLYKmslUY6ix+rtzX4CVVSHtLRZ8Wu1pGv8kh659SkrFudnM2eLj1y1KOLFwZEMcshV3mYljfB/vVolEPtIXn2ReHrOWT4WNlaXjCvVwJ6YQt+tixS1cnF7pZKSXEPuA4yPfU6OCy8iZo0L7FWie2pqFSecXetnlL/g+39vo8Lmk8IxhN/jFmQA141cbFGNaibhixipy5DTcSTTA4b5ymMPmmt2eFfdH0FcozdVaJYMNw3QOfaOMK1hMvtsR3Oo9hEovPnDOtH1s2VPbKdl5MiaAp1e55sJO6WZA8t87wJHjls669zlnkd8CAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAD9wQ+CJ0FRgls3JrUzxwHLgrJ3Yo4+mDFpSe1rh2XYK5FEIWDWSqxaXI3p0cOZq75RZmI2xV8oaiJMUz9WMZkbNe/KtGRzHY1N9AZooicGIsnFu1t++b8taFxxpvKWZgnbOum2PZlfcNiXL0QeMv0wwhfn9zKA9W1DRcqYGbIamoyVlumvbNyIjqXJKwGYIOW6GNt7v3wJl5AJw8qAU/O/DQwWwmzcnFGNRxRxAwI7we8EiQ5JlG0Wi+nyAQn74o3RhNr3zsY0ndmFx9bFV4BBo2AiYGozCDOCCG5HvrmoDbrm//wmGRv0tCwueBzWHL2mhtbZ6sGWmMWfiTJ2HPpg=="
|
1696
|
-
],
|
1697
1700
|
"priority": ["100"],
|
1698
1701
|
"algorithm": ["RSA-OAEP"]
|
1699
1702
|
}
|
@@ -1704,8 +1707,6 @@
|
|
1704
1707
|
"providerId": "aes-generated",
|
1705
1708
|
"subComponents": {},
|
1706
1709
|
"config": {
|
1707
|
-
"kid": ["1c1d0c8a-6f0b-48a9-a66f-488489137d85"],
|
1708
|
-
"secret": ["N4wzheVYYBWxFn9VGWTPQQ"],
|
1709
1710
|
"priority": ["100"]
|
1710
1711
|
}
|
1711
1712
|
},
|
@@ -1715,10 +1716,6 @@
|
|
1715
1716
|
"providerId": "hmac-generated",
|
1716
1717
|
"subComponents": {},
|
1717
1718
|
"config": {
|
1718
|
-
"kid": ["ce43821c-6cfd-4ea9-a29a-a724a37e6955"],
|
1719
|
-
"secret": [
|
1720
|
-
"j_8WeQHYt5R6coay0IOUeu9hGvCoJsgnENSoYm0gDlDx6IHOg-f6p17QIaesNmgrzXtJDRpYMhSjpTMHOnHCHLxwUM4eVg9TcszffndB850Yj3PHPeCc5aoHcpYzWN9NDZZ02nBYA04nfbkdlLXiGlpS3I3e502e4DX3rFtbFZ0"
|
1721
|
-
],
|
1722
1719
|
"priority": ["100"],
|
1723
1720
|
"algorithm": ["HS512"]
|
1724
1721
|
}
|
@@ -2388,7 +2385,7 @@
|
|
2388
2385
|
"clientSessionMaxLifespan": "0",
|
2389
2386
|
"organizationsEnabled": "false"
|
2390
2387
|
},
|
2391
|
-
"keycloakVersion": "
|
2388
|
+
"keycloakVersion": "26.0.6",
|
2392
2389
|
"userManagedAccessAllowed": false,
|
2393
2390
|
"organizationsEnabled": false,
|
2394
2391
|
"clientProfiles": {
|
@@ -1,7 +1,7 @@
|
|
1
1
|
import type { BuildContext } from "../shared/buildContext";
|
2
2
|
import { exclude } from "tsafe/exclude";
|
3
3
|
import { promptKeycloakVersion } from "../shared/promptKeycloakVersion";
|
4
|
-
import { CONTAINER_NAME } from "../shared/constants";
|
4
|
+
import { CONTAINER_NAME, KEYCLOAKIFY_SPA_DEV_SERVER_PORT } from "../shared/constants";
|
5
5
|
import { SemVer } from "../tools/SemVer";
|
6
6
|
import { assert, type Equals } from "tsafe/assert";
|
7
7
|
import * as fs from "fs";
|
@@ -27,6 +27,7 @@ import { isInside } from "../tools/isInside";
|
|
27
27
|
import { existsAsync } from "../tools/fs.existsAsync";
|
28
28
|
import { rm } from "../tools/fs.rm";
|
29
29
|
import { downloadAndExtractArchive } from "../tools/downloadAndExtractArchive";
|
30
|
+
import { startViteDevServer } from "./startViteDevServer";
|
30
31
|
|
31
32
|
export async function command(params: {
|
32
33
|
buildContext: BuildContext;
|
@@ -379,6 +380,54 @@ export async function command(params: {
|
|
379
380
|
const port =
|
380
381
|
cliCommandOptions.port ?? buildContext.startKeycloakOptions.port ?? DEFAULT_PORT;
|
381
382
|
|
383
|
+
const devServerPort = (() => {
|
384
|
+
const hasSpaUi =
|
385
|
+
buildContext.implementedThemeTypes.admin.isImplemented ||
|
386
|
+
(buildContext.implementedThemeTypes.account.isImplemented &&
|
387
|
+
buildContext.implementedThemeTypes.account.type === "Single-Page");
|
388
|
+
|
389
|
+
if (!hasSpaUi) {
|
390
|
+
return undefined;
|
391
|
+
}
|
392
|
+
|
393
|
+
if (buildContext.bundler !== "vite") {
|
394
|
+
console.log(
|
395
|
+
chalk.yellow(
|
396
|
+
[
|
397
|
+
`WARNING: Since you are using ${buildContext.bundler} instead of Vite,`,
|
398
|
+
`you'll have to wait serval seconds for the changes you made on your account or admin theme to be reflected in the browser.\n`,
|
399
|
+
`For a better development experience, consider migrating to Vite.`
|
400
|
+
].join(" ")
|
401
|
+
)
|
402
|
+
);
|
403
|
+
|
404
|
+
return undefined;
|
405
|
+
}
|
406
|
+
|
407
|
+
if (keycloakMajorVersionNumber < 25) {
|
408
|
+
console.log(
|
409
|
+
chalk.yellow(
|
410
|
+
[
|
411
|
+
`WARNING: Your account or admin theme can't be tested with hot module replacement on Keycloak ${keycloakMajorVersionNumber}.`,
|
412
|
+
`This mean that you'll have to wait serval seconds for the changes to be reflected in the browser.`,
|
413
|
+
`For a better development experience, select a more recent version of Keycloak.`
|
414
|
+
].join("\n")
|
415
|
+
)
|
416
|
+
);
|
417
|
+
|
418
|
+
return undefined;
|
419
|
+
}
|
420
|
+
|
421
|
+
return port + 1;
|
422
|
+
})();
|
423
|
+
|
424
|
+
if (devServerPort !== undefined) {
|
425
|
+
startViteDevServer({
|
426
|
+
buildContext,
|
427
|
+
port: devServerPort
|
428
|
+
});
|
429
|
+
}
|
430
|
+
|
382
431
|
const SPACE_PLACEHOLDER = "SPACE_PLACEHOLDER_xKLmdPd";
|
383
432
|
|
384
433
|
const dockerRunArgs: string[] = [
|
@@ -386,6 +435,11 @@ export async function command(params: {
|
|
386
435
|
`--name${SPACE_PLACEHOLDER}${CONTAINER_NAME}`,
|
387
436
|
`-e${SPACE_PLACEHOLDER}KEYCLOAK_ADMIN=admin`,
|
388
437
|
`-e${SPACE_PLACEHOLDER}KEYCLOAK_ADMIN_PASSWORD=admin`,
|
438
|
+
...(devServerPort === undefined
|
439
|
+
? []
|
440
|
+
: [
|
441
|
+
`-e${SPACE_PLACEHOLDER}${KEYCLOAKIFY_SPA_DEV_SERVER_PORT}=${devServerPort}`
|
442
|
+
]),
|
389
443
|
...(buildContext.startKeycloakOptions.dockerExtraArgs.length === 0
|
390
444
|
? []
|
391
445
|
: [
|
@@ -592,6 +646,44 @@ export async function command(params: {
|
|
592
646
|
}
|
593
647
|
)
|
594
648
|
.on("all", async (...[, filePath]) => {
|
649
|
+
ignore_account_spa: {
|
650
|
+
const doImplementAccountSpa =
|
651
|
+
buildContext.implementedThemeTypes.account.isImplemented &&
|
652
|
+
buildContext.implementedThemeTypes.account.type === "Single-Page";
|
653
|
+
|
654
|
+
if (!doImplementAccountSpa) {
|
655
|
+
break ignore_account_spa;
|
656
|
+
}
|
657
|
+
|
658
|
+
if (
|
659
|
+
!isInside({
|
660
|
+
dirPath: pathJoin(buildContext.themeSrcDirPath, "account"),
|
661
|
+
filePath
|
662
|
+
})
|
663
|
+
) {
|
664
|
+
break ignore_account_spa;
|
665
|
+
}
|
666
|
+
|
667
|
+
return;
|
668
|
+
}
|
669
|
+
|
670
|
+
ignore_admin: {
|
671
|
+
if (!buildContext.implementedThemeTypes.admin.isImplemented) {
|
672
|
+
break ignore_admin;
|
673
|
+
}
|
674
|
+
|
675
|
+
if (
|
676
|
+
!isInside({
|
677
|
+
dirPath: pathJoin(buildContext.themeSrcDirPath, "admin"),
|
678
|
+
filePath
|
679
|
+
})
|
680
|
+
) {
|
681
|
+
break ignore_admin;
|
682
|
+
}
|
683
|
+
|
684
|
+
return;
|
685
|
+
}
|
686
|
+
|
595
687
|
console.log(`Detected changes in ${filePath}`);
|
596
688
|
|
597
689
|
await waitForDebounce();
|
@@ -0,0 +1,39 @@
|
|
1
|
+
import * as child_process from "child_process";
|
2
|
+
import { assert } from "tsafe/assert";
|
3
|
+
import type { BuildContext } from "../shared/buildContext";
|
4
|
+
import chalk from "chalk";
|
5
|
+
import { VITE_PLUGIN_SUB_SCRIPTS_ENV_NAMES } from "../shared/constants";
|
6
|
+
|
7
|
+
export type BuildContextLike = {
|
8
|
+
projectDirPath: string;
|
9
|
+
};
|
10
|
+
|
11
|
+
assert<BuildContext extends BuildContextLike ? true : false>();
|
12
|
+
|
13
|
+
export function startViteDevServer(params: {
|
14
|
+
buildContext: BuildContextLike;
|
15
|
+
port: number;
|
16
|
+
}): void {
|
17
|
+
const { buildContext, port } = params;
|
18
|
+
|
19
|
+
console.log(chalk.blue(`$ npx vite dev --port ${port}`));
|
20
|
+
|
21
|
+
const child = child_process.spawn("npx", ["vite", "dev", "--port", `${port}`], {
|
22
|
+
cwd: buildContext.projectDirPath,
|
23
|
+
env: {
|
24
|
+
...process.env,
|
25
|
+
[VITE_PLUGIN_SUB_SCRIPTS_ENV_NAMES.READ_KC_CONTEXT_FROM_URL]: "true"
|
26
|
+
},
|
27
|
+
shell: true
|
28
|
+
});
|
29
|
+
|
30
|
+
child.stdout.on("data", data => {
|
31
|
+
if (!data.toString("utf8").includes("[vite] hmr")) {
|
32
|
+
return;
|
33
|
+
}
|
34
|
+
|
35
|
+
process.stdout.write(data);
|
36
|
+
});
|
37
|
+
|
38
|
+
child.stderr.on("data", data => process.stderr.write(data));
|
39
|
+
}
|
@@ -212,6 +212,73 @@ export function keycloakify(params: keycloakify.Params) {
|
|
212
212
|
force: true
|
213
213
|
}
|
214
214
|
);
|
215
|
+
},
|
216
|
+
transformIndexHtml: html => {
|
217
|
+
const doReadKcContextFromUrl =
|
218
|
+
process.env.NODE_ENV === "development" &&
|
219
|
+
process.env[
|
220
|
+
VITE_PLUGIN_SUB_SCRIPTS_ENV_NAMES.READ_KC_CONTEXT_FROM_URL
|
221
|
+
] === "true";
|
222
|
+
|
223
|
+
if (!doReadKcContextFromUrl) {
|
224
|
+
return html;
|
225
|
+
}
|
226
|
+
|
227
|
+
const scriptContent = `
|
228
|
+
(()=>{
|
229
|
+
|
230
|
+
const kcContext = (()=>{
|
231
|
+
|
232
|
+
const paramName= "kcContext";
|
233
|
+
|
234
|
+
read_from_url_case: {
|
235
|
+
|
236
|
+
const url = new URL(window.location.href);
|
237
|
+
|
238
|
+
const paramValue = url.searchParams.get(paramName);
|
239
|
+
|
240
|
+
if( paramValue === null ){
|
241
|
+
break read_from_url_case;
|
242
|
+
}
|
243
|
+
|
244
|
+
url.searchParams.delete(paramName);
|
245
|
+
|
246
|
+
window.history.replaceState({}, "", url);
|
247
|
+
|
248
|
+
const kcContext = JSON.parse(decodeURIComponent(paramValue));
|
249
|
+
|
250
|
+
sessionStorage.setItem(paramName, JSON.stringify(kcContext));
|
251
|
+
|
252
|
+
return kcContext;
|
253
|
+
|
254
|
+
}
|
255
|
+
|
256
|
+
read_from_session_storage_case: {
|
257
|
+
|
258
|
+
const paramValue = sessionStorage.getItem(paramName);
|
259
|
+
|
260
|
+
if( paramValue === null ){
|
261
|
+
break read_from_session_storage_case;
|
262
|
+
}
|
263
|
+
|
264
|
+
return JSON.parse(paramValue);
|
265
|
+
|
266
|
+
}
|
267
|
+
|
268
|
+
return undefined;
|
269
|
+
|
270
|
+
})();
|
271
|
+
|
272
|
+
if( kcContext === undefined ){
|
273
|
+
return;
|
274
|
+
}
|
275
|
+
|
276
|
+
window.kcContext = kcContext;
|
277
|
+
|
278
|
+
})();
|
279
|
+
`;
|
280
|
+
|
281
|
+
return html.replace(/<head>/, `<head><script>${scriptContent}</script>`);
|
215
282
|
}
|
216
283
|
} satisfies Plugin;
|
217
284
|
|
package/vite-plugin/index.js
CHANGED
@@ -4944,6 +4944,7 @@ __nccwpck_require__.r(__webpack_exports__);
|
|
4944
4944
|
/* harmony export */ "CONTAINER_NAME": () => (/* binding */ CONTAINER_NAME),
|
4945
4945
|
/* harmony export */ "CUSTOM_HANDLER_ENV_NAMES": () => (/* binding */ CUSTOM_HANDLER_ENV_NAMES),
|
4946
4946
|
/* harmony export */ "FALLBACK_LANGUAGE_TAG": () => (/* binding */ FALLBACK_LANGUAGE_TAG),
|
4947
|
+
/* harmony export */ "KEYCLOAKIFY_SPA_DEV_SERVER_PORT": () => (/* binding */ KEYCLOAKIFY_SPA_DEV_SERVER_PORT),
|
4947
4948
|
/* harmony export */ "KEYCLOAK_THEME": () => (/* binding */ KEYCLOAK_THEME),
|
4948
4949
|
/* harmony export */ "LOGIN_THEME_PAGE_IDS": () => (/* binding */ LOGIN_THEME_PAGE_IDS),
|
4949
4950
|
/* harmony export */ "THEME_TYPES": () => (/* binding */ THEME_TYPES),
|
@@ -4958,7 +4959,8 @@ const WELL_KNOWN_DIRECTORY_BASE_NAME = {
|
|
4958
4959
|
const THEME_TYPES = ["login", "account", "admin"];
|
4959
4960
|
const VITE_PLUGIN_SUB_SCRIPTS_ENV_NAMES = {
|
4960
4961
|
RUN_POST_BUILD_SCRIPT: "KEYCLOAKIFY_RUN_POST_BUILD_SCRIPT",
|
4961
|
-
RESOLVE_VITE_CONFIG: "KEYCLOAKIFY_RESOLVE_VITE_CONFIG"
|
4962
|
+
RESOLVE_VITE_CONFIG: "KEYCLOAKIFY_RESOLVE_VITE_CONFIG",
|
4963
|
+
READ_KC_CONTEXT_FROM_URL: "KEYCLOAKIFY_READ_KC_CONTEXT_FROM_URL"
|
4962
4964
|
};
|
4963
4965
|
const BUILD_FOR_KEYCLOAK_MAJOR_VERSION_ENV_NAME = "KEYCLOAKIFY_BUILD_FOR_KEYCLOAK_MAJOR_VERSION";
|
4964
4966
|
const LOGIN_THEME_PAGE_IDS = [
|
@@ -5015,6 +5017,7 @@ const CUSTOM_HANDLER_ENV_NAMES = {
|
|
5015
5017
|
BUILD_CONTEXT: "KEYCLOAKIFY_BUILD_CONTEXT"
|
5016
5018
|
};
|
5017
5019
|
const KEYCLOAK_THEME = "keycloak-theme";
|
5020
|
+
const KEYCLOAKIFY_SPA_DEV_SERVER_PORT = "KEYCLOAKIFY_SPA_DEV_SERVER_PORT";
|
5018
5021
|
//# sourceMappingURL=constants.js.map
|
5019
5022
|
|
5020
5023
|
/***/ }),
|
@@ -5848,6 +5851,67 @@ function keycloakify(params) {
|
|
5848
5851
|
recursive: true,
|
5849
5852
|
force: true
|
5850
5853
|
});
|
5854
|
+
},
|
5855
|
+
transformIndexHtml: html => {
|
5856
|
+
const doReadKcContextFromUrl = process.env.NODE_ENV === "development" &&
|
5857
|
+
process.env[constants_1.VITE_PLUGIN_SUB_SCRIPTS_ENV_NAMES.READ_KC_CONTEXT_FROM_URL] === "true";
|
5858
|
+
if (!doReadKcContextFromUrl) {
|
5859
|
+
return html;
|
5860
|
+
}
|
5861
|
+
const scriptContent = `
|
5862
|
+
(()=>{
|
5863
|
+
|
5864
|
+
const kcContext = (()=>{
|
5865
|
+
|
5866
|
+
const paramName= "kcContext";
|
5867
|
+
|
5868
|
+
read_from_url_case: {
|
5869
|
+
|
5870
|
+
const url = new URL(window.location.href);
|
5871
|
+
|
5872
|
+
const paramValue = url.searchParams.get(paramName);
|
5873
|
+
|
5874
|
+
if( paramValue === null ){
|
5875
|
+
break read_from_url_case;
|
5876
|
+
}
|
5877
|
+
|
5878
|
+
url.searchParams.delete(paramName);
|
5879
|
+
|
5880
|
+
window.history.replaceState({}, "", url);
|
5881
|
+
|
5882
|
+
const kcContext = JSON.parse(decodeURIComponent(paramValue));
|
5883
|
+
|
5884
|
+
sessionStorage.setItem(paramName, JSON.stringify(kcContext));
|
5885
|
+
|
5886
|
+
return kcContext;
|
5887
|
+
|
5888
|
+
}
|
5889
|
+
|
5890
|
+
read_from_session_storage_case: {
|
5891
|
+
|
5892
|
+
const paramValue = sessionStorage.getItem(paramName);
|
5893
|
+
|
5894
|
+
if( paramValue === null ){
|
5895
|
+
break read_from_session_storage_case;
|
5896
|
+
}
|
5897
|
+
|
5898
|
+
return JSON.parse(paramValue);
|
5899
|
+
|
5900
|
+
}
|
5901
|
+
|
5902
|
+
return undefined;
|
5903
|
+
|
5904
|
+
})();
|
5905
|
+
|
5906
|
+
if( kcContext === undefined ){
|
5907
|
+
return;
|
5908
|
+
}
|
5909
|
+
|
5910
|
+
window.kcContext = kcContext;
|
5911
|
+
|
5912
|
+
})();
|
5913
|
+
`;
|
5914
|
+
return html.replace(/<head>/, `<head><script>${scriptContent}</script>`);
|
5851
5915
|
}
|
5852
5916
|
};
|
5853
5917
|
return plugin;
|