keycloakify 4.2.7 → 4.2.11
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 +17 -0
- package/README.md +10 -0
- package/lib/i18n/KcLanguageTag.d.ts +1 -0
- package/lib/i18n/KcLanguageTag.js +3 -3
- package/lib/i18n/KcLanguageTag.js.map +1 -1
- package/lib/i18n/useKcMessage.js +4 -4
- package/lib/i18n/useKcMessage.js.map +1 -1
- package/package.json +3 -3
- package/src/lib/i18n/KcLanguageTag.ts +2 -2
- package/src/lib/i18n/useKcMessage.tsx +6 -5
package/CHANGELOG.md
CHANGED
@@ -1,3 +1,20 @@
|
|
1
|
+
### **4.2.11** (2021-12-07)
|
2
|
+
|
3
|
+
|
4
|
+
|
5
|
+
### **4.2.10** (2021-11-12)
|
6
|
+
|
7
|
+
- Export an exaustive list of KcLanguageTag
|
8
|
+
|
9
|
+
### **4.2.9** (2021-11-11)
|
10
|
+
|
11
|
+
- Fix useAdvancedMsg
|
12
|
+
|
13
|
+
### **4.2.8** (2021-11-10)
|
14
|
+
|
15
|
+
- Update doc about pattern that can be used for user attributes #50
|
16
|
+
- Bring back Safari compat
|
17
|
+
|
1
18
|
### **4.2.7** (2021-11-09)
|
2
19
|
|
3
20
|
- Fix useFormValidationSlice
|
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)
|
@@ -307,6 +308,8 @@ Checkout a complete setup [here](https://github.com/garronej/keycloakify-demo-ap
|
|
307
308
|
</a>
|
308
309
|
</p>
|
309
310
|
|
311
|
+
NOTE: In reality the regexp used in this gif doesn't work server side, the regexp pattern should be `^[^@]@gmail\.com$` 😬.
|
312
|
+
|
310
313
|
User Profile is a Keycloak feature that enables to
|
311
314
|
[define, from the admin console](https://user-images.githubusercontent.com/6702424/136872461-1f5b64ef-d2ef-4c6b-bb8d-07d4729552b3.png),
|
312
315
|
what information you want to collect on your users in the register page and to validate inputs
|
@@ -459,6 +462,10 @@ To [converts the `.ftl` values into a JavaScript object](https://github.com/Inse
|
|
459
462
|
without making assumptions on the `.data_model` we have to do things that throws.
|
460
463
|
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.
|
461
464
|
|
465
|
+
# The pages take too long to load ?
|
466
|
+
|
467
|
+
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.
|
468
|
+
|
462
469
|
# Adding custom message (to `i18n/useKcMessage.tsx`)
|
463
470
|
|
464
471
|
You can reproduce [this approach](https://github.com/garronej/keycloakify-demo-app/blob/main/src/kcMessagesExtension.ts)
|
@@ -467,6 +474,9 @@ This approach is a bit hacky as it doesn't provide type safety but it works.
|
|
467
474
|
|
468
475
|
# Email domain whitelist
|
469
476
|
|
477
|
+
NOTE: This have been kind of deprecated by [user attribute](#user-profile-and-frontend-form-validation) you could
|
478
|
+
use a pattern [like this one](https://github.com/InseeFrLab/onyxia-web/blob/f1206e0329b3b8d401ca7bffa95ca9c213cb190a/src/app/components/KcApp/kcContext.ts#L106) to whitelist email domains.
|
479
|
+
|
470
480
|
If you want to restrict the emails domain that can register, you can use [this plugin](https://github.com/micedre/keycloak-mail-whitelisting)
|
471
481
|
and `kcRegisterContext["authorizedMailDomains"]` to validate on.
|
472
482
|
|
@@ -24,6 +24,7 @@ declare const kcLanguageByTagLabel: {
|
|
24
24
|
};
|
25
25
|
export declare type LanguageLabel = typeof kcLanguageByTagLabel[keyof typeof kcLanguageByTagLabel];
|
26
26
|
export declare function getKcLanguageTagLabel(language: KcLanguageTag): LanguageLabel;
|
27
|
+
export declare const kcLanguageTags: ("tr" | "no" | "en" | "fr" | "ca" | "cs" | "da" | "de" | "es" | "hu" | "it" | "ja" | "lt" | "nl" | "pl" | "pt-BR" | "ru" | "sk" | "sv" | "zh-CN")[];
|
27
28
|
/**
|
28
29
|
* Pass in "fr-FR" or "français" for example, it will return the AvailableLanguage
|
29
30
|
* it corresponds to: "fr".
|
@@ -1,6 +1,6 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.getBestMatchAmongKcLanguageTag = exports.getKcLanguageTagLabel = void 0;
|
3
|
+
exports.getBestMatchAmongKcLanguageTag = exports.kcLanguageTags = exports.getKcLanguageTagLabel = void 0;
|
4
4
|
var objectKeys_1 = require("tsafe/objectKeys");
|
5
5
|
var login_1 = require("./kcMessages/login");
|
6
6
|
var kcLanguageByTagLabel = {
|
@@ -32,7 +32,7 @@ function getKcLanguageTagLabel(language) {
|
|
32
32
|
return (_a = kcLanguageByTagLabel[language]) !== null && _a !== void 0 ? _a : language;
|
33
33
|
}
|
34
34
|
exports.getKcLanguageTagLabel = getKcLanguageTagLabel;
|
35
|
-
|
35
|
+
exports.kcLanguageTags = (0, objectKeys_1.objectKeys)(login_1.kcMessages);
|
36
36
|
/**
|
37
37
|
* Pass in "fr-FR" or "français" for example, it will return the AvailableLanguage
|
38
38
|
* it corresponds to: "fr".
|
@@ -41,7 +41,7 @@ var availableLanguages = (0, objectKeys_1.objectKeys)(login_1.kcMessages);
|
|
41
41
|
*/
|
42
42
|
function getBestMatchAmongKcLanguageTag(languageLike) {
|
43
43
|
var iso2LanguageLike = languageLike.split("-")[0].toLowerCase();
|
44
|
-
var kcLanguageTag =
|
44
|
+
var kcLanguageTag = exports.kcLanguageTags.find(function (language) {
|
45
45
|
return language.toLowerCase().includes(iso2LanguageLike) ||
|
46
46
|
getKcLanguageTagLabel(language).toLocaleLowerCase() === languageLike.toLocaleLowerCase();
|
47
47
|
});
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"KcLanguageTag.js","sourceRoot":"","sources":["../../src/lib/i18n/KcLanguageTag.ts"],"names":[],"mappings":";;;AAAA,+CAA8C;AAC9C,4CAAgD;AAIhD,IAAM,oBAAoB,GAAG;IACzB,4BAA4B;IAC5B,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,UAAU;IAChB,IAAI,EAAE,UAAU;IAChB,IAAI,EAAE,QAAQ;IACd,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,OAAO;IACb,OAAO,EAAE,oBAAoB;IAC7B,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,YAAY;IAClB,IAAI,EAAE,KAAK;IACX,IAAI,EAAE,QAAQ;IACd,OAAO,EAAE,MAAM;IACf,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,UAAU;IAChB,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,YAAY;IAClB,IAAI,EAAE,QAAQ;IACd,IAAI,EAAE,OAAO;IACb,IAAI,EAAE,QAAQ;IACd,2BAA2B;CACrB,CAAC;AAIX,SAAgB,qBAAqB,CAAC,QAAuB;;IACzD,OAAO,MAAA,oBAAoB,CAAC,QAAQ,CAAC,mCAAI,QAAQ,CAAC;AACtD,CAAC;AAFD,sDAEC;
|
1
|
+
{"version":3,"file":"KcLanguageTag.js","sourceRoot":"","sources":["../../src/lib/i18n/KcLanguageTag.ts"],"names":[],"mappings":";;;AAAA,+CAA8C;AAC9C,4CAAgD;AAIhD,IAAM,oBAAoB,GAAG;IACzB,4BAA4B;IAC5B,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,UAAU;IAChB,IAAI,EAAE,UAAU;IAChB,IAAI,EAAE,QAAQ;IACd,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,OAAO;IACb,OAAO,EAAE,oBAAoB;IAC7B,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,YAAY;IAClB,IAAI,EAAE,KAAK;IACX,IAAI,EAAE,QAAQ;IACd,OAAO,EAAE,MAAM;IACf,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,UAAU;IAChB,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,YAAY;IAClB,IAAI,EAAE,QAAQ;IACd,IAAI,EAAE,OAAO;IACb,IAAI,EAAE,QAAQ;IACd,2BAA2B;CACrB,CAAC;AAIX,SAAgB,qBAAqB,CAAC,QAAuB;;IACzD,OAAO,MAAA,oBAAoB,CAAC,QAAQ,CAAC,mCAAI,QAAQ,CAAC;AACtD,CAAC;AAFD,sDAEC;AAEY,QAAA,cAAc,GAAG,IAAA,uBAAU,EAAC,kBAAU,CAAC,CAAC;AAErD;;;;;GAKG;AACH,SAAgB,8BAA8B,CAAC,YAAoB;IAC/D,IAAM,gBAAgB,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IAElE,IAAM,aAAa,GAAG,sBAAc,CAAC,IAAI,CACrC,UAAA,QAAQ;QACJ,OAAA,QAAQ,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;YACjD,qBAAqB,CAAC,QAAQ,CAAC,CAAC,iBAAiB,EAAE,KAAK,YAAY,CAAC,iBAAiB,EAAE;IADxF,CACwF,CAC/F,CAAC;IAEF,IAAI,aAAa,KAAK,SAAS,EAAE;QAC7B,OAAO,aAAa,CAAC;KACxB;IAED,IAAI,YAAY,KAAK,SAAS,CAAC,QAAQ,EAAE;QACrC,OAAO,8BAA8B,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;KAC7D;IAED,OAAO,IAAI,CAAC;AAChB,CAAC;AAlBD,wEAkBC"}
|
package/lib/i18n/useKcMessage.js
CHANGED
@@ -51,7 +51,7 @@ function resolveMsg(props) {
|
|
51
51
|
str = (function () {
|
52
52
|
var _a;
|
53
53
|
var startIndex = (_a = str
|
54
|
-
.match(/
|
54
|
+
.match(/{[0-9]+}/g)) === null || _a === void 0 ? void 0 : _a.map(function (g) { return g.match(/{([0-9]+)}/)[1]; }).map(function (indexStr) { return parseInt(indexStr); }).sort(function (a, b) { return a - b; })[0];
|
55
55
|
if (startIndex === undefined) {
|
56
56
|
return str;
|
57
57
|
}
|
@@ -68,14 +68,14 @@ function resolveMsg(props) {
|
|
68
68
|
function resolveMsgAdvanced(props) {
|
69
69
|
var key = props.key, args = props.args, kcLanguageTag = props.kcLanguageTag, doRenderMarkdown = props.doRenderMarkdown;
|
70
70
|
var match = key.match(/^\$\{([^{]+)\}$/);
|
71
|
-
var
|
71
|
+
var keyUnwrappedFromCurlyBraces = match === null ? key : match[1];
|
72
72
|
var out = resolveMsg({
|
73
|
-
"key":
|
73
|
+
"key": keyUnwrappedFromCurlyBraces,
|
74
74
|
args: args,
|
75
75
|
kcLanguageTag: kcLanguageTag,
|
76
76
|
doRenderMarkdown: doRenderMarkdown,
|
77
77
|
});
|
78
|
-
return (out !== undefined ? out :
|
78
|
+
return (out !== undefined ? out : doRenderMarkdown ? (0, jsx_runtime_1.jsx)("span", { children: keyUnwrappedFromCurlyBraces }, void 0) : keyUnwrappedFromCurlyBraces);
|
79
79
|
}
|
80
80
|
/**
|
81
81
|
* When the language is switched the page is reloaded, this may appear
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"useKcMessage.js","sourceRoot":"","sources":["../../src/lib/i18n/useKcMessage.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gDAA8C;AAC9C,+BAAmC;AACnC,uDAAsD;AACtD,4CAAiE;AAMxD,2FANA,kBAAU,OAMA;AALnB,mCAAmC;AACnC,kIAAkI;AAClI,kEAA2C;AAC3C,kEAAiE;AAMjE,SAAS,UAAU,CAAuD,KAKzE;;IACW,IAAA,GAAG,GAA4C,KAAK,IAAjD,EAAE,IAAI,GAAsC,KAAK,KAA3C,EAAE,aAAa,GAAuB,KAAK,cAA5B,EAAE,gBAAgB,GAAK,KAAK,iBAAV,CAAW;IAE7D,IAAI,GAAG,GAAG,MAAA,kBAAU,CAAC,aAA4B,CAAC,CAAC,GAAiB,CAAC,mCAAI,kBAAU,CAAC,IAAI,CAAC,CAAC,GAAiB,CAAC,CAAC;IAE7G,IAAI,GAAG,KAAK,SAAS,EAAE;QACnB,OAAO,SAAgB,CAAC;KAC3B;IAED,GAAG,GAAG,CAAC;;QACH,IAAM,UAAU,GAAG,MAAA,GAAG;aACjB,KAAK,CAAC,
|
1
|
+
{"version":3,"file":"useKcMessage.js","sourceRoot":"","sources":["../../src/lib/i18n/useKcMessage.tsx"],"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.11",
|
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": {
|
@@ -34,7 +34,7 @@ export function getKcLanguageTagLabel(language: KcLanguageTag): LanguageLabel {
|
|
34
34
|
return kcLanguageByTagLabel[language] ?? language;
|
35
35
|
}
|
36
36
|
|
37
|
-
const
|
37
|
+
export const kcLanguageTags = objectKeys(kcMessages);
|
38
38
|
|
39
39
|
/**
|
40
40
|
* Pass in "fr-FR" or "français" for example, it will return the AvailableLanguage
|
@@ -45,7 +45,7 @@ const availableLanguages = objectKeys(kcMessages);
|
|
45
45
|
export function getBestMatchAmongKcLanguageTag(languageLike: string): KcLanguageTag {
|
46
46
|
const iso2LanguageLike = languageLike.split("-")[0].toLowerCase();
|
47
47
|
|
48
|
-
const kcLanguageTag =
|
48
|
+
const kcLanguageTag = kcLanguageTags.find(
|
49
49
|
language =>
|
50
50
|
language.toLowerCase().includes(iso2LanguageLike) ||
|
51
51
|
getKcLanguageTagLabel(language).toLocaleLowerCase() === languageLike.toLocaleLowerCase(),
|
@@ -27,8 +27,9 @@ function resolveMsg<Key extends string, DoRenderMarkdown extends boolean>(props:
|
|
27
27
|
|
28
28
|
str = (() => {
|
29
29
|
const startIndex = str
|
30
|
-
.match(/
|
31
|
-
?.map(g =>
|
30
|
+
.match(/{[0-9]+}/g)
|
31
|
+
?.map(g => g.match(/{([0-9]+)}/)![1])
|
32
|
+
.map(indexStr => parseInt(indexStr))
|
32
33
|
.sort((a, b) => a - b)[0];
|
33
34
|
|
34
35
|
if (startIndex === undefined) {
|
@@ -67,16 +68,16 @@ function resolveMsgAdvanced<Key extends string, DoRenderMarkdown extends boolean
|
|
67
68
|
|
68
69
|
const match = key.match(/^\$\{([^{]+)\}$/);
|
69
70
|
|
70
|
-
const
|
71
|
+
const keyUnwrappedFromCurlyBraces = match === null ? key : match[1];
|
71
72
|
|
72
73
|
const out = resolveMsg({
|
73
|
-
"key":
|
74
|
+
"key": keyUnwrappedFromCurlyBraces,
|
74
75
|
args,
|
75
76
|
kcLanguageTag,
|
76
77
|
doRenderMarkdown,
|
77
78
|
});
|
78
79
|
|
79
|
-
return (out !== undefined ? out :
|
80
|
+
return (out !== undefined ? out : doRenderMarkdown ? <span>{keyUnwrappedFromCurlyBraces}</span> : keyUnwrappedFromCurlyBraces) as any;
|
80
81
|
}
|
81
82
|
|
82
83
|
/**
|