keycloakify 4.2.10 β 4.2.14-beta.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/CHANGELOG.md +13 -0
- package/README.md +14 -3
- package/bin/build-keycloak-theme/build-keycloak-theme.js +7 -4
- package/bin/build-keycloak-theme/build-keycloak-theme.js.map +1 -1
- package/bin/build-keycloak-theme/generateFtl/common.ftl +30 -57
- package/bin/build-keycloak-theme/generateFtl/generateFtl.js +1 -1
- package/bin/build-keycloak-theme/generateFtl/generateFtl.js.map +1 -1
- package/package.json +3 -3
- package/src/bin/build-keycloak-theme/build-keycloak-theme.ts +7 -4
- package/src/bin/build-keycloak-theme/generateFtl/common.ftl +30 -57
- package/src/bin/build-keycloak-theme/generateFtl/generateFtl.ts +3 -1
package/CHANGELOG.md
CHANGED
@@ -1,3 +1,16 @@
|
|
1
|
+
### **4.2.13** (2021-12-08)
|
2
|
+
|
3
|
+
- Fix broken link about how to import fonts #62
|
4
|
+
- Add a video to show how to test the theme in a local container
|
5
|
+
|
6
|
+
### **4.2.12** (2021-12-08)
|
7
|
+
|
8
|
+
- Update post build instructions
|
9
|
+
|
10
|
+
### **4.2.11** (2021-12-07)
|
11
|
+
|
12
|
+
|
13
|
+
|
1
14
|
### **4.2.10** (2021-11-12)
|
2
15
|
|
3
16
|
- Export an exaustive list of KcLanguageTag
|
package/README.md
CHANGED
@@ -77,6 +77,7 @@ If you already have a Keycloak custom theme, it can be easily ported to Keycloak
|
|
77
77
|
- [Implement context persistence (optional)](#implement-context-persistence-optional)
|
78
78
|
- [Kickstart video](#kickstart-video)
|
79
79
|
- [About the errors related to `objectToJson` in Keycloak logs.](#about-the-errors-related-to-objecttojson-in-keycloak-logs)
|
80
|
+
- [The pages take too long to load ?](#the-pages-take-too-long-to-load-)
|
80
81
|
- [Adding custom message (to `i18n/useKcMessage.tsx`)](#adding-custom-message-to-i18nusekcmessagetsx)
|
81
82
|
- [Email domain whitelist](#email-domain-whitelist)
|
82
83
|
- [Changelog highlights](#changelog-highlights)
|
@@ -87,6 +88,8 @@ If you already have a Keycloak custom theme, it can be easily ported to Keycloak
|
|
87
88
|
|
88
89
|
# Requirements
|
89
90
|
|
91
|
+
On Windows OS you'll have to use [WSL](https://docs.microsoft.com/en-us/windows/wsl/install-win10). More info [here](https://github.com/InseeFrLab/keycloakify/issues/54%23issuecomment-984834217)
|
92
|
+
|
90
93
|
Tested with the following Keycloak versions:
|
91
94
|
|
92
95
|
- [11.0.3](https://hub.docker.com/layers/jboss/keycloak/11.0.3/images/sha256-4438f1e51c1369371cb807dffa526e1208086b3ebb9cab009830a178de949782?context=explore)
|
@@ -106,8 +109,6 @@ For more information see [this issue](https://github.com/InseeFrLab/keycloakify/
|
|
106
109
|
- `mvn` ([Maven](https://maven.apache.org/)), `rm`, `mkdir`, `curl`, `unzip` are assumed to be available.
|
107
110
|
- `docker` must be up and running when running `yarn keycloak`.
|
108
111
|
|
109
|
-
On Windows you'll have to use [WSL](https://docs.microsoft.com/en-us/windows/wsl/install-win10).
|
110
|
-
|
111
112
|
## My framework doesnβt seem to be supported, what can I do?
|
112
113
|
|
113
114
|
Currently Keycloakify is only compatible with `create-react-app` apps.
|
@@ -373,7 +374,8 @@ this limitation doesn't apply, you can import fonts however you see fit.
|
|
373
374
|
- If it is possible, use Google Fonts or any other font provider.
|
374
375
|
- If you want to host your font recommended approach is to move your fonts into the `public`
|
375
376
|
directory and to place your `@font-face` statements in the `public/index.html`.
|
376
|
-
Example [here](https://github.com/
|
377
|
+
Example [here](https://github.com/garronej/keycloakify-demo-app/blob/9aa2dbaec28a7786d6b2983c9a59d393dec1b2d6/public/index.html#L27-L73)
|
378
|
+
(and the font are [here](https://github.com/garronej/keycloakify-demo-app/tree/main/public/fonts/WorkSans)).
|
377
379
|
- You can also [use non relative url](https://github.com/garronej/keycloakify-demo-app/blob/2de8a9eb6f5de9c94f9cd3991faad0377e63268c/src/fonts.scss#L16) but don't forget [`Access-Control-Allow-Origin`](https://github.com/garronej/keycloakify-demo-app/blob/2de8a9eb6f5de9c94f9cd3991faad0377e63268c/nginx.conf#L17-L19).
|
378
380
|
|
379
381
|
# Implement context persistence (optional)
|
@@ -461,6 +463,15 @@ To [converts the `.ftl` values into a JavaScript object](https://github.com/Inse
|
|
461
463
|
without making assumptions on the `.data_model` we have to do things that throws.
|
462
464
|
It's all-right because every statement that can fail is inside an `<#attempt><#recorver>` block but it results in errors being printed to the logs.
|
463
465
|
|
466
|
+
# The pages take too long to load ?
|
467
|
+
|
468
|
+
The problem of templates taking a long time to load only happens in the test environment, when you have a console logging all the above-mentioned `.ftl` warnings in real time. Logging all those warnings is what takes time. Once in production page load is way faster.
|
469
|
+
|
470
|
+
If you run the docker container locally we acknowledge that the loading time is getting out of hand.
|
471
|
+
We are [in the process](https://github.com/InseeFrLab/keycloakify/pull/63) of resolving this issue.
|
472
|
+
|
473
|
+
In the meantime we recommend [to run the docker container as a background task](https://youtu.be/F29Z1GaH-jk).
|
474
|
+
|
464
475
|
# Adding custom message (to `i18n/useKcMessage.tsx`)
|
465
476
|
|
466
477
|
You can reproduce [this approach](https://github.com/garronej/keycloakify-demo-app/blob/main/src/kcMessagesExtension.ts)
|
@@ -127,11 +127,14 @@ function main() {
|
|
127
127
|
"",
|
128
128
|
"\uD83D\uDC49 $ ./" + (0, path_1.relative)(reactProjectDirPath, (0, path_1.join)(exports.keycloakThemeBuildingDirPath, generateDebugFiles_1.containerLaunchScriptBasename)) + " \uD83D\uDC48",
|
129
129
|
"",
|
130
|
-
|
131
|
-
"
|
132
|
-
|
130
|
+
"Once your container is up and running: ",
|
131
|
+
"- Log into the admin console π http://localhost:8080 username: admin, password: admin π",
|
132
|
+
'- Create a realm named "myrealm"',
|
133
|
+
'- Create a client with id "myclient" and root url: "https://www.keycloak.org/app/"',
|
134
|
+
"- Select Login Theme: " + themeName + " (don't forget to save at the bottom of the page)",
|
135
|
+
"- Go to \uD83D\uDC49 https://www.keycloak.org/app/ \uD83D\uDC48 Click \"Save\" then \"Sign in\". You should see your login page",
|
133
136
|
"",
|
134
|
-
"
|
137
|
+
"Video demoing this process: https://youtu.be/N3wlBoH4hKg",
|
135
138
|
"",
|
136
139
|
].join("\n"));
|
137
140
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"build-keycloak-theme.js","sourceRoot":"","sources":["../../src/bin/build-keycloak-theme/build-keycloak-theme.ts"],"names":[],"mappings":"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
|
1
|
+
{"version":3,"file":"build-keycloak-theme.js","sourceRoot":"","sources":["../../src/bin/build-keycloak-theme/build-keycloak-theme.ts"],"names":[],"mappings":"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"}
|
@@ -1,7 +1,6 @@
|
|
1
|
-
<script>const _=
|
2
|
-
<#macro objectToJson_please_ignore_errors object depth>
|
1
|
+
<script>const _=
|
2
|
+
<#macro objectToJson_please_ignore_errors object depth arr ftl>
|
3
3
|
<@compress>
|
4
|
-
|
5
4
|
<#local isHash = false>
|
6
5
|
<#attempt>
|
7
6
|
<#local isHash = object?is_hash || object?is_hash_ex>
|
@@ -11,9 +10,7 @@
|
|
11
10
|
<#return>
|
12
11
|
</#attempt>
|
13
12
|
<#if isHash>
|
14
|
-
|
15
13
|
<#local keys = "">
|
16
|
-
|
17
14
|
<#attempt>
|
18
15
|
<#local keys = object?keys>
|
19
16
|
<#recover>
|
@@ -21,41 +18,42 @@
|
|
21
18
|
undefined
|
22
19
|
<#return>
|
23
20
|
</#attempt>
|
24
|
-
|
21
|
+
<#if arr?sequence?size gte 1>
|
22
|
+
<#local keys = arr>
|
23
|
+
</#if>
|
25
24
|
{${'\n'}
|
26
|
-
|
27
25
|
<#list keys as key>
|
28
|
-
|
29
26
|
<#if key == "class">
|
30
27
|
/* skipping "class" property of object */
|
31
28
|
<#continue>
|
32
29
|
</#if>
|
33
|
-
|
34
|
-
<#local value = "">
|
35
|
-
|
36
30
|
<#attempt>
|
37
|
-
<#local value = object[key]>
|
31
|
+
<#local value = object[key]!"error_data_is_undefined">
|
38
32
|
<#recover>
|
39
33
|
/* couldn't dereference ${key} of object */
|
40
34
|
<#continue>
|
41
35
|
</#attempt>
|
42
|
-
|
43
36
|
<#if depth gt 7>
|
44
37
|
/* Avoid calling recustively too many times depth: ${depth}, key: ${key} */
|
45
38
|
<#continue>
|
46
39
|
</#if>
|
47
|
-
|
48
|
-
|
49
|
-
|
40
|
+
<#local arr_keys = []>
|
41
|
+
<#if depth==0 && key=="url" && ftl=="saml-post-form.ftl" >
|
42
|
+
<#local arr_keys = ["resourcesPath", "resourcesCommonPath", "loginRestartFlowUrl", "loginUrl", "loginResetCredentialsUrl", "registrationUrl", "registrationAction", "oauth2DeviceVerificationAction", "oauthAction", "loginResetCredentialsUrl"]>
|
43
|
+
<#elseif depth==0 && key=="url">
|
44
|
+
<#local arr_keys = ["loginAction", "resourcesPath", "resourcesCommonPath", "loginRestartFlowUrl", "loginUrl", "loginResetCredentialsUrl", "registrationUrl", "registrationAction", "oauth2DeviceVerificationAction", "oauthAction", "loginResetCredentialsUrl"]>
|
45
|
+
</#if>
|
46
|
+
<#if depth==0 && key=="auth" && ftl=="login-reset-password.ftl" >
|
47
|
+
<#local arr_keys = ["showUsername", "showResetCredentials", "showTryAnotherWayLink", "attemptedUsername"]>
|
48
|
+
<#elseif depth==0 && key=="auth">
|
49
|
+
<#local arr_keys = ["showUsername", "showResetCredentials", "showTryAnotherWayLink"]>
|
50
|
+
</#if>
|
51
|
+
<#if depth==0 && key=="updateProfileCtx" ><#continue></#if>
|
52
|
+
"${key}": <@objectToJson_please_ignore_errors object=value depth=depth+1 arr=arr_keys ftl=ftl />,
|
50
53
|
</#list>
|
51
|
-
|
52
54
|
}${'\n'}
|
53
|
-
|
54
55
|
<#return>
|
55
|
-
|
56
56
|
</#if>
|
57
|
-
|
58
|
-
|
59
57
|
<#local isMethod = "">
|
60
58
|
<#attempt>
|
61
59
|
<#local isMethod = object?is_method>
|
@@ -64,14 +62,10 @@
|
|
64
62
|
undefined
|
65
63
|
<#return>
|
66
64
|
</#attempt>
|
67
|
-
|
68
65
|
<#if isMethod>
|
69
66
|
undefined
|
70
67
|
<#return>
|
71
68
|
</#if>
|
72
|
-
|
73
|
-
|
74
|
-
|
75
69
|
<#local isBoolean = "">
|
76
70
|
<#attempt>
|
77
71
|
<#local isBoolean = object?is_boolean>
|
@@ -80,13 +74,10 @@
|
|
80
74
|
undefined
|
81
75
|
<#return>
|
82
76
|
</#attempt>
|
83
|
-
|
84
77
|
<#if isBoolean>
|
85
78
|
${object?c}
|
86
79
|
<#return>
|
87
80
|
</#if>
|
88
|
-
|
89
|
-
|
90
81
|
<#local isEnumerable = "">
|
91
82
|
<#attempt>
|
92
83
|
<#local isEnumerable = object?is_enumerable>
|
@@ -95,23 +86,14 @@
|
|
95
86
|
undefined
|
96
87
|
<#return>
|
97
88
|
</#attempt>
|
98
|
-
|
99
89
|
<#if isEnumerable>
|
100
|
-
|
101
90
|
[${'\n'}
|
102
|
-
|
103
91
|
<#list object as item>
|
104
|
-
|
105
|
-
<@objectToJson_please_ignore_errors object=item depth=depth+1/>,
|
106
|
-
|
92
|
+
<@objectToJson_please_ignore_errors object=item depth=depth+1 arr=[] ftl=ftl/>,
|
107
93
|
</#list>
|
108
|
-
|
109
94
|
]${'\n'}
|
110
|
-
|
111
95
|
<#return>
|
112
96
|
</#if>
|
113
|
-
|
114
|
-
|
115
97
|
<#attempt>
|
116
98
|
"${object?replace('"', '\\"')?no_esc}"
|
117
99
|
<#recover>
|
@@ -119,25 +101,21 @@
|
|
119
101
|
undefined;
|
120
102
|
<#return>
|
121
103
|
</#attempt>
|
122
|
-
|
123
|
-
|
124
104
|
</@compress>
|
125
105
|
</#macro>
|
126
|
-
|
127
106
|
(()=>{
|
128
|
-
|
129
|
-
const nonAutomaticallyConvertible = {
|
107
|
+
const nonAutomaticallyConvertible = {
|
130
108
|
"messagesPerField": {
|
131
|
-
|
132
|
-
<#assign
|
133
|
-
|
109
|
+
<#assign fieldNames = ["global", "userLabel", "username", "email", "firstName", "lastName", "password", "password-confirm", "totp", "totpSecret", "SAMLRequest", "SAMLResponse", "relayState", "device_user_code", "code", "password-new", "rememberMe", "login", "authenticationExecution", "cancel-aia", "clientDataJSON", "authenticatorData", "signature", "credentialId", "userHandle", "error", "authn_use_chk", "authenticationExecution", "isSetRetry", "try-again", "attestationObject", "publicKeyCredentialId", "authenticatorLabel"]>
|
110
|
+
<#assign attributes = (profile.attributes)![]>
|
134
111
|
<#attempt>
|
135
|
-
<#list
|
136
|
-
<#
|
112
|
+
<#list attributes as attribute>
|
113
|
+
<#if (attribute.name)??>
|
114
|
+
<#assign fieldNames += [attribute.name]>
|
115
|
+
</#if>
|
137
116
|
</#list>
|
138
117
|
<#recover>
|
139
118
|
</#attempt>
|
140
|
-
|
141
119
|
"printIfExists": function (fieldName, x) {
|
142
120
|
<#list fieldNames as fieldName>
|
143
121
|
if(fieldName === "${fieldName}" ){
|
@@ -185,24 +163,19 @@
|
|
185
163
|
throw new Error("There is no " + fieldName + " field");
|
186
164
|
}
|
187
165
|
},
|
188
|
-
"msg": function(){ throw new Error("use import { useKcMessage
|
189
|
-
"advancedMsg": function(){ throw new Error("use import { useKcMessage
|
166
|
+
"msg": function(){ throw new Error("use import { useKcMessage } from 'keycloakify'"); },
|
167
|
+
"advancedMsg": function(){ throw new Error("use import { useKcMessage } from 'keycloakify'"); }
|
190
168
|
};
|
191
|
-
|
192
169
|
const out = {};
|
193
|
-
|
194
170
|
Object.deepAssign(
|
195
171
|
out,
|
196
172
|
//Removing all the undefined
|
197
|
-
JSON.parse(JSON.stringify(<@objectToJson_please_ignore_errors object=.data_model depth=0 />))
|
173
|
+
JSON.parse(JSON.stringify(<@objectToJson_please_ignore_errors object=.data_model depth=0 arr=[] ftl="ftl_template_for_replacement" />), (key, value) => value === "error_data_is_undefined" ? undefined : value)
|
198
174
|
);
|
199
|
-
|
200
175
|
Object.deepAssign(
|
201
176
|
out,
|
202
177
|
nonAutomaticallyConvertible
|
203
178
|
);
|
204
|
-
|
205
179
|
return out;
|
206
|
-
|
207
180
|
})()
|
208
181
|
</script>
|
@@ -149,7 +149,7 @@ function generateFtlFilesCodeFactory(params) {
|
|
149
149
|
" );",
|
150
150
|
"</script>",
|
151
151
|
].join("\n"));
|
152
|
-
(0, objectKeys_1.objectKeys)(ftlPlaceholders).forEach(function (id) { return (ftlCode = ftlCode.replace(id, ftlPlaceholders[id])); });
|
152
|
+
(0, objectKeys_1.objectKeys)(ftlPlaceholders).forEach(function (id) { return (ftlCode = ftlCode.replace(id, ftlPlaceholders[id]).replace("ftl_template_for_replacement", pageId)); });
|
153
153
|
return { ftlCode: ftlCode };
|
154
154
|
}
|
155
155
|
return { generateFtlFilesCode: generateFtlFilesCode };
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"generateFtl.js","sourceRoot":"","sources":["../../../src/bin/build-keycloak-theme/generateFtl/generateFtl.ts"],"names":[],"mappings":"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
|
1
|
+
{"version":3,"file":"generateFtl.js","sourceRoot":"","sources":["../../../src/bin/build-keycloak-theme/generateFtl/generateFtl.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "keycloakify",
|
3
|
-
"version": "4.2.
|
3
|
+
"version": "4.2.14-beta.0",
|
4
4
|
"description": "Keycloak theme generator for Reacts app",
|
5
5
|
"repository": {
|
6
6
|
"type": "git",
|
@@ -321,7 +321,7 @@
|
|
321
321
|
"@emotion/react": "^11.4.1",
|
322
322
|
"powerhooks": "^0.10.0",
|
323
323
|
"react": "^16.8.0 || ^17.0.0",
|
324
|
-
"tss-react": "^1.1.0"
|
324
|
+
"tss-react": "^1.1.0 || ^3.0.0"
|
325
325
|
},
|
326
326
|
"devDependencies": {
|
327
327
|
"@emotion/react": "^11.4.1",
|
@@ -335,7 +335,7 @@
|
|
335
335
|
"properties-parser": "^0.3.1",
|
336
336
|
"react": "^17.0.1",
|
337
337
|
"rimraf": "^3.0.2",
|
338
|
-
"tss-react": "^
|
338
|
+
"tss-react": "^3.0.0",
|
339
339
|
"typescript": "^4.2.3"
|
340
340
|
},
|
341
341
|
"dependencies": {
|
@@ -121,11 +121,14 @@ export function main() {
|
|
121
121
|
"",
|
122
122
|
`π $ ./${pathRelative(reactProjectDirPath, pathJoin(keycloakThemeBuildingDirPath, containerLaunchScriptBasename))} π`,
|
123
123
|
"",
|
124
|
-
|
125
|
-
|
126
|
-
|
124
|
+
"Once your container is up and running: ",
|
125
|
+
"- Log into the admin console π http://localhost:8080 username: admin, password: admin π",
|
126
|
+
'- Create a realm named "myrealm"',
|
127
|
+
'- Create a client with id "myclient" and root url: "https://www.keycloak.org/app/"',
|
128
|
+
`- Select Login Theme: ${themeName} (don't forget to save at the bottom of the page)`,
|
129
|
+
`- Go to π https://www.keycloak.org/app/ π Click "Save" then "Sign in". You should see your login page`,
|
127
130
|
"",
|
128
|
-
"
|
131
|
+
"Video demoing this process: https://youtu.be/N3wlBoH4hKg",
|
129
132
|
"",
|
130
133
|
].join("\n"),
|
131
134
|
);
|
@@ -1,7 +1,6 @@
|
|
1
|
-
<script>const _=
|
2
|
-
<#macro objectToJson_please_ignore_errors object depth>
|
1
|
+
<script>const _=
|
2
|
+
<#macro objectToJson_please_ignore_errors object depth arr ftl>
|
3
3
|
<@compress>
|
4
|
-
|
5
4
|
<#local isHash = false>
|
6
5
|
<#attempt>
|
7
6
|
<#local isHash = object?is_hash || object?is_hash_ex>
|
@@ -11,9 +10,7 @@
|
|
11
10
|
<#return>
|
12
11
|
</#attempt>
|
13
12
|
<#if isHash>
|
14
|
-
|
15
13
|
<#local keys = "">
|
16
|
-
|
17
14
|
<#attempt>
|
18
15
|
<#local keys = object?keys>
|
19
16
|
<#recover>
|
@@ -21,41 +18,42 @@
|
|
21
18
|
undefined
|
22
19
|
<#return>
|
23
20
|
</#attempt>
|
24
|
-
|
21
|
+
<#if arr?sequence?size gte 1>
|
22
|
+
<#local keys = arr>
|
23
|
+
</#if>
|
25
24
|
{${'\n'}
|
26
|
-
|
27
25
|
<#list keys as key>
|
28
|
-
|
29
26
|
<#if key == "class">
|
30
27
|
/* skipping "class" property of object */
|
31
28
|
<#continue>
|
32
29
|
</#if>
|
33
|
-
|
34
|
-
<#local value = "">
|
35
|
-
|
36
30
|
<#attempt>
|
37
|
-
<#local value = object[key]>
|
31
|
+
<#local value = object[key]!"error_data_is_undefined">
|
38
32
|
<#recover>
|
39
33
|
/* couldn't dereference ${key} of object */
|
40
34
|
<#continue>
|
41
35
|
</#attempt>
|
42
|
-
|
43
36
|
<#if depth gt 7>
|
44
37
|
/* Avoid calling recustively too many times depth: ${depth}, key: ${key} */
|
45
38
|
<#continue>
|
46
39
|
</#if>
|
47
|
-
|
48
|
-
|
49
|
-
|
40
|
+
<#local arr_keys = []>
|
41
|
+
<#if depth==0 && key=="url" && ftl=="saml-post-form.ftl" >
|
42
|
+
<#local arr_keys = ["resourcesPath", "resourcesCommonPath", "loginRestartFlowUrl", "loginUrl", "loginResetCredentialsUrl", "registrationUrl", "registrationAction", "oauth2DeviceVerificationAction", "oauthAction", "loginResetCredentialsUrl"]>
|
43
|
+
<#elseif depth==0 && key=="url">
|
44
|
+
<#local arr_keys = ["loginAction", "resourcesPath", "resourcesCommonPath", "loginRestartFlowUrl", "loginUrl", "loginResetCredentialsUrl", "registrationUrl", "registrationAction", "oauth2DeviceVerificationAction", "oauthAction", "loginResetCredentialsUrl"]>
|
45
|
+
</#if>
|
46
|
+
<#if depth==0 && key=="auth" && ftl=="login-reset-password.ftl" >
|
47
|
+
<#local arr_keys = ["showUsername", "showResetCredentials", "showTryAnotherWayLink", "attemptedUsername"]>
|
48
|
+
<#elseif depth==0 && key=="auth">
|
49
|
+
<#local arr_keys = ["showUsername", "showResetCredentials", "showTryAnotherWayLink"]>
|
50
|
+
</#if>
|
51
|
+
<#if depth==0 && key=="updateProfileCtx" ><#continue></#if>
|
52
|
+
"${key}": <@objectToJson_please_ignore_errors object=value depth=depth+1 arr=arr_keys ftl=ftl />,
|
50
53
|
</#list>
|
51
|
-
|
52
54
|
}${'\n'}
|
53
|
-
|
54
55
|
<#return>
|
55
|
-
|
56
56
|
</#if>
|
57
|
-
|
58
|
-
|
59
57
|
<#local isMethod = "">
|
60
58
|
<#attempt>
|
61
59
|
<#local isMethod = object?is_method>
|
@@ -64,14 +62,10 @@
|
|
64
62
|
undefined
|
65
63
|
<#return>
|
66
64
|
</#attempt>
|
67
|
-
|
68
65
|
<#if isMethod>
|
69
66
|
undefined
|
70
67
|
<#return>
|
71
68
|
</#if>
|
72
|
-
|
73
|
-
|
74
|
-
|
75
69
|
<#local isBoolean = "">
|
76
70
|
<#attempt>
|
77
71
|
<#local isBoolean = object?is_boolean>
|
@@ -80,13 +74,10 @@
|
|
80
74
|
undefined
|
81
75
|
<#return>
|
82
76
|
</#attempt>
|
83
|
-
|
84
77
|
<#if isBoolean>
|
85
78
|
${object?c}
|
86
79
|
<#return>
|
87
80
|
</#if>
|
88
|
-
|
89
|
-
|
90
81
|
<#local isEnumerable = "">
|
91
82
|
<#attempt>
|
92
83
|
<#local isEnumerable = object?is_enumerable>
|
@@ -95,23 +86,14 @@
|
|
95
86
|
undefined
|
96
87
|
<#return>
|
97
88
|
</#attempt>
|
98
|
-
|
99
89
|
<#if isEnumerable>
|
100
|
-
|
101
90
|
[${'\n'}
|
102
|
-
|
103
91
|
<#list object as item>
|
104
|
-
|
105
|
-
<@objectToJson_please_ignore_errors object=item depth=depth+1/>,
|
106
|
-
|
92
|
+
<@objectToJson_please_ignore_errors object=item depth=depth+1 arr=[] ftl=ftl/>,
|
107
93
|
</#list>
|
108
|
-
|
109
94
|
]${'\n'}
|
110
|
-
|
111
95
|
<#return>
|
112
96
|
</#if>
|
113
|
-
|
114
|
-
|
115
97
|
<#attempt>
|
116
98
|
"${object?replace('"', '\\"')?no_esc}"
|
117
99
|
<#recover>
|
@@ -119,25 +101,21 @@
|
|
119
101
|
undefined;
|
120
102
|
<#return>
|
121
103
|
</#attempt>
|
122
|
-
|
123
|
-
|
124
104
|
</@compress>
|
125
105
|
</#macro>
|
126
|
-
|
127
106
|
(()=>{
|
128
|
-
|
129
|
-
const nonAutomaticallyConvertible = {
|
107
|
+
const nonAutomaticallyConvertible = {
|
130
108
|
"messagesPerField": {
|
131
|
-
|
132
|
-
<#assign
|
133
|
-
|
109
|
+
<#assign fieldNames = ["global", "userLabel", "username", "email", "firstName", "lastName", "password", "password-confirm", "totp", "totpSecret", "SAMLRequest", "SAMLResponse", "relayState", "device_user_code", "code", "password-new", "rememberMe", "login", "authenticationExecution", "cancel-aia", "clientDataJSON", "authenticatorData", "signature", "credentialId", "userHandle", "error", "authn_use_chk", "authenticationExecution", "isSetRetry", "try-again", "attestationObject", "publicKeyCredentialId", "authenticatorLabel"]>
|
110
|
+
<#assign attributes = (profile.attributes)![]>
|
134
111
|
<#attempt>
|
135
|
-
<#list
|
136
|
-
<#
|
112
|
+
<#list attributes as attribute>
|
113
|
+
<#if (attribute.name)??>
|
114
|
+
<#assign fieldNames += [attribute.name]>
|
115
|
+
</#if>
|
137
116
|
</#list>
|
138
117
|
<#recover>
|
139
118
|
</#attempt>
|
140
|
-
|
141
119
|
"printIfExists": function (fieldName, x) {
|
142
120
|
<#list fieldNames as fieldName>
|
143
121
|
if(fieldName === "${fieldName}" ){
|
@@ -185,24 +163,19 @@
|
|
185
163
|
throw new Error("There is no " + fieldName + " field");
|
186
164
|
}
|
187
165
|
},
|
188
|
-
"msg": function(){ throw new Error("use import { useKcMessage
|
189
|
-
"advancedMsg": function(){ throw new Error("use import { useKcMessage
|
166
|
+
"msg": function(){ throw new Error("use import { useKcMessage } from 'keycloakify'"); },
|
167
|
+
"advancedMsg": function(){ throw new Error("use import { useKcMessage } from 'keycloakify'"); }
|
190
168
|
};
|
191
|
-
|
192
169
|
const out = {};
|
193
|
-
|
194
170
|
Object.deepAssign(
|
195
171
|
out,
|
196
172
|
//Removing all the undefined
|
197
|
-
JSON.parse(JSON.stringify(<@objectToJson_please_ignore_errors object=.data_model depth=0 />))
|
173
|
+
JSON.parse(JSON.stringify(<@objectToJson_please_ignore_errors object=.data_model depth=0 arr=[] ftl="ftl_template_for_replacement" />), (key, value) => value === "error_data_is_undefined" ? undefined : value)
|
198
174
|
);
|
199
|
-
|
200
175
|
Object.deepAssign(
|
201
176
|
out,
|
202
177
|
nonAutomaticallyConvertible
|
203
178
|
);
|
204
|
-
|
205
179
|
return out;
|
206
|
-
|
207
180
|
})()
|
208
181
|
</script>
|
@@ -141,7 +141,9 @@ export function generateFtlFilesCodeFactory(params: {
|
|
141
141
|
].join("\n"),
|
142
142
|
);
|
143
143
|
|
144
|
-
objectKeys(ftlPlaceholders).forEach(
|
144
|
+
objectKeys(ftlPlaceholders).forEach(
|
145
|
+
id => (ftlCode = ftlCode.replace(id, ftlPlaceholders[id]).replace("ftl_template_for_replacement", pageId)),
|
146
|
+
);
|
145
147
|
|
146
148
|
return { ftlCode };
|
147
149
|
}
|