keycloakify 7.10.0 → 7.11.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 CHANGED
@@ -44,14 +44,14 @@
44
44
  We are exclusively sponsored by [Cloud IAM](https://www.cloud-iam.com), a French company offering Keycloak as a service.
45
45
  Their dedicated support helps us continue the development and maintenance of this project.
46
46
 
47
- [Cloud IAM](https://www.cloud-iam.com/) provides the following services:
47
+ [Cloud IAM](https://cloud-iam.com/?mtm_campaign=keycloakify-deal&mtm_source=keycloakify-github) provides the following services:
48
48
 
49
- - Perfectly configured and optimized Keycloak IAM, ready in seconds.
49
+ - Simplify and secure your Keycloak Identity and Access Management. Keycloak as a Service.
50
50
  - Custom theme building for your brand using Keycloakify.
51
51
 
52
52
  <p align="center">
53
- <a href="https://www.cloud-iam.com/">
54
- <img src="https://user-images.githubusercontent.com/6702424/232165752-17134e68-4a55-4d6e-8672-e9132ecac5d5.svg" alt="Cloud IAM Logo" width="200"/>
53
+ <a href="https://cloud-iam.com/?mtm_campaign=keycloakify-deal&mtm_source=keycloakify-github">
54
+ <img src="https://user-images.githubusercontent.com/6702424/233476937-e37b1dc6-5a1c-4a0d-ba02-61c2ce62ffb6.png" alt="Cloud IAM Logo" width="350"/>
55
55
  </a>
56
56
  <br/>
57
57
  <i>Use promo code <code>keycloakify5</code> </i>
@@ -59,7 +59,7 @@ Their dedicated support helps us continue the development and maintenance of thi
59
59
  <i>5% of your annual subscription will be donated to us, and you'll get 5% off too.</i>
60
60
  </p>
61
61
 
62
- Thank you, [Cloud IAM](https://www.cloud-iam.com/), for your support!
62
+ Thank you, [Cloud IAM](https://cloud-iam.com/?mtm_campaign=keycloakify-deal&mtm_source=keycloakify-github), for your support!
63
63
 
64
64
  ## Contributors ✨
65
65
 
@@ -77,6 +77,8 @@ declare const keycloakifyExtraMessages: {
77
77
  shouldMatchPattern: string;
78
78
  mustBeAnInteger: string;
79
79
  notAValidOption: string;
80
+ newPasswordSameAsOld: string;
81
+ passwordConfirmNotMatch: string;
80
82
  };
81
83
  fr: {
82
84
  shouldBeEqual: string;
@@ -87,6 +89,8 @@ declare const keycloakifyExtraMessages: {
87
89
  logoutConfirmTitle: string;
88
90
  logoutConfirmHeader: string;
89
91
  doLogout: string;
92
+ newPasswordSameAsOld: string;
93
+ passwordConfirmNotMatch: string;
90
94
  };
91
95
  };
92
96
  export {};
@@ -91,7 +91,9 @@ const keycloakifyExtraMessages = {
91
91
  "shouldBeDifferent": "{0} should be different to {1}",
92
92
  "shouldMatchPattern": "Pattern should match: `/{0}/`",
93
93
  "mustBeAnInteger": "Must be an integer",
94
- "notAValidOption": "Not a valid option"
94
+ "notAValidOption": "Not a valid option",
95
+ "newPasswordSameAsOld": "New password must be different from the old one",
96
+ "passwordConfirmNotMatch": "Password confirmation does not match"
95
97
  },
96
98
  "fr": {
97
99
  /* spell-checker: disable */
@@ -102,7 +104,9 @@ const keycloakifyExtraMessages = {
102
104
  "notAValidOption": "N'est pas une option valide",
103
105
  "logoutConfirmTitle": "Déconnexion",
104
106
  "logoutConfirmHeader": "Êtes-vous sûr(e) de vouloir vous déconnecter ?",
105
- "doLogout": "Se déconnecter"
107
+ "doLogout": "Se déconnecter",
108
+ "newPasswordSameAsOld": "Le nouveau mot de passe doit être différent de l'ancien",
109
+ "passwordConfirmNotMatch": "La confirmation du mot de passe ne correspond pas"
106
110
  /* spell-checker: enable */
107
111
  }
108
112
  };
@@ -1 +1 @@
1
- {"version":3,"file":"i18n.js","sourceRoot":"","sources":["../../src/account/i18n/i18n.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"i18n.js","sourceRoot":"","sources":["../../src/account/i18n/i18n.tsx"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState } from "react";
2
3
  import { clsx } from "../../tools/clsx";
3
4
  import { useGetClassName } from "../../account/lib/useGetClassName";
4
5
  export default function Password(props) {
@@ -9,7 +10,73 @@ export default function Password(props) {
9
10
  "classes": Object.assign(Object.assign({}, classes), { "kcBodyClass": clsx(classes === null || classes === void 0 ? void 0 : classes.kcBodyClass, "password") })
10
11
  });
11
12
  const { url, password, account, stateChecker } = kcContext;
12
- const { msg } = i18n;
13
- return (_jsxs(Template, Object.assign({}, { kcContext, i18n, doUseDefaultCss, classes }, { active: "password" }, { children: [_jsxs("div", Object.assign({ className: "row" }, { children: [_jsx("div", Object.assign({ className: "col-md-10" }, { children: _jsx("h2", { children: msg("changePasswordHtmlTitle") }) })), _jsx("div", Object.assign({ className: "col-md-2 subtitle" }, { children: _jsx("span", Object.assign({ className: "subtitle" }, { children: msg("allFieldsRequired") })) }))] })), _jsxs("form", Object.assign({ action: url.passwordUrl, className: "form-horizontal", method: "post" }, { children: [_jsx("input", { type: "text", id: "username", name: "username", value: (_a = account.username) !== null && _a !== void 0 ? _a : "", autoComplete: "username", readOnly: true, style: { "display": "none" } }), password.passwordSet && (_jsxs("div", Object.assign({ className: "form-group" }, { children: [_jsx("div", Object.assign({ className: "col-sm-2 col-md-2" }, { children: _jsx("label", Object.assign({ htmlFor: "password", className: "control-label" }, { children: msg("password") })) })), _jsx("div", Object.assign({ className: "col-sm-10 col-md-10" }, { children: _jsx("input", { type: "password", className: "form-control", id: "password", name: "password", autoFocus: true, autoComplete: "current-password" }) }))] }))), _jsx("input", { type: "hidden", id: "stateChecker", name: "stateChecker", value: stateChecker }), _jsxs("div", Object.assign({ className: "form-group" }, { children: [_jsx("div", Object.assign({ className: "col-sm-2 col-md-2" }, { children: _jsx("label", Object.assign({ htmlFor: "password-new", className: "control-label" }, { children: msg("passwordNew") })) })), _jsx("div", Object.assign({ className: "col-sm-10 col-md-10" }, { children: _jsx("input", { type: "password", className: "form-control", id: "password-new", name: "password-new", autoComplete: "new-password" }) }))] })), _jsxs("div", Object.assign({ className: "form-group" }, { children: [_jsx("div", Object.assign({ className: "col-sm-2 col-md-2" }, { children: _jsx("label", Object.assign({ htmlFor: "password-confirm", className: "control-label two-lines" }, { children: msg("passwordConfirm") })) })), _jsx("div", Object.assign({ className: "col-sm-10 col-md-10" }, { children: _jsx("input", { type: "password", className: "form-control", id: "password-confirm", name: "password-confirm", autoComplete: "new-password" }) }))] })), _jsx("div", Object.assign({ className: "form-group" }, { children: _jsx("div", Object.assign({ id: "kc-form-buttons", className: "col-md-offset-2 col-md-10 submit" }, { children: _jsx("div", { children: _jsx("button", Object.assign({ type: "submit", className: clsx(getClassName("kcButtonClass"), getClassName("kcButtonPrimaryClass"), getClassName("kcButtonLargeClass")), name: "submitAction", value: "Save" }, { children: msg("doSave") })) }) })) }))] }))] })));
13
+ const { msgStr, msg } = i18n;
14
+ const [currentPassword, setCurrentPassword] = useState("");
15
+ const [newPassword, setNewPassword] = useState("");
16
+ const [newPasswordConfirm, setNewPasswordConfirm] = useState("");
17
+ const [newPasswordError, setNewPasswordError] = useState("");
18
+ const [newPasswordConfirmError, setNewPasswordConfirmError] = useState("");
19
+ const [hasNewPasswordBlurred, setHasNewPasswordBlurred] = useState(false);
20
+ const [hasNewPasswordConfirmBlurred, setHasNewPasswordConfirmBlurred] = useState(false);
21
+ const checkNewPassword = (newPassword) => {
22
+ if (!password.passwordSet) {
23
+ return;
24
+ }
25
+ if (newPassword === currentPassword) {
26
+ setNewPasswordError(msgStr("newPasswordSameAsOld"));
27
+ }
28
+ else {
29
+ setNewPasswordError("");
30
+ }
31
+ };
32
+ const checkNewPasswordConfirm = (newPasswordConfirm) => {
33
+ if (newPasswordConfirm === "") {
34
+ return;
35
+ }
36
+ if (newPassword !== newPasswordConfirm) {
37
+ setNewPasswordConfirmError(msgStr("passwordConfirmNotMatch"));
38
+ }
39
+ else {
40
+ setNewPasswordConfirmError("");
41
+ }
42
+ };
43
+ return (_jsxs(Template, Object.assign({}, {
44
+ kcContext: Object.assign(Object.assign({}, kcContext), { "message": (() => {
45
+ if (newPasswordError !== "") {
46
+ return {
47
+ "type": "error",
48
+ "summary": newPasswordError
49
+ };
50
+ }
51
+ if (newPasswordConfirmError !== "") {
52
+ return {
53
+ "type": "error",
54
+ "summary": newPasswordConfirmError
55
+ };
56
+ }
57
+ return kcContext.message;
58
+ })() }),
59
+ i18n,
60
+ doUseDefaultCss,
61
+ classes
62
+ }, { active: "password" }, { children: [_jsxs("div", Object.assign({ className: "row" }, { children: [_jsx("div", Object.assign({ className: "col-md-10" }, { children: _jsx("h2", { children: msg("changePasswordHtmlTitle") }) })), _jsx("div", Object.assign({ className: "col-md-2 subtitle" }, { children: _jsx("span", Object.assign({ className: "subtitle" }, { children: msg("allFieldsRequired") })) }))] })), _jsxs("form", Object.assign({ action: url.passwordUrl, className: "form-horizontal", method: "post" }, { children: [_jsx("input", { type: "text", id: "username", name: "username", value: (_a = account.username) !== null && _a !== void 0 ? _a : "", autoComplete: "username", readOnly: true, style: { "display": "none" } }), password.passwordSet && (_jsxs("div", Object.assign({ className: "form-group" }, { children: [_jsx("div", Object.assign({ className: "col-sm-2 col-md-2" }, { children: _jsx("label", Object.assign({ htmlFor: "password", className: "control-label" }, { children: msg("password") })) })), _jsx("div", Object.assign({ className: "col-sm-10 col-md-10" }, { children: _jsx("input", { type: "password", className: "form-control", id: "password", name: "password", autoFocus: true, autoComplete: "current-password", value: currentPassword, onChange: event => setCurrentPassword(event.target.value) }) }))] }))), _jsx("input", { type: "hidden", id: "stateChecker", name: "stateChecker", value: stateChecker }), _jsxs("div", Object.assign({ className: "form-group" }, { children: [_jsx("div", Object.assign({ className: "col-sm-2 col-md-2" }, { children: _jsx("label", Object.assign({ htmlFor: "password-new", className: "control-label" }, { children: msg("passwordNew") })) })), _jsx("div", Object.assign({ className: "col-sm-10 col-md-10" }, { children: _jsx("input", { type: "password", className: "form-control", id: "password-new", name: "password-new", autoComplete: "new-password", value: newPassword, onChange: event => {
63
+ const newPassword = event.target.value;
64
+ setNewPassword(newPassword);
65
+ if (hasNewPasswordBlurred) {
66
+ checkNewPassword(newPassword);
67
+ }
68
+ }, onBlur: () => {
69
+ setHasNewPasswordBlurred(true);
70
+ checkNewPassword(newPassword);
71
+ } }) }))] })), _jsxs("div", Object.assign({ className: "form-group" }, { children: [_jsx("div", Object.assign({ className: "col-sm-2 col-md-2" }, { children: _jsx("label", Object.assign({ htmlFor: "password-confirm", className: "control-label two-lines" }, { children: msg("passwordConfirm") })) })), _jsx("div", Object.assign({ className: "col-sm-10 col-md-10" }, { children: _jsx("input", { type: "password", className: "form-control", id: "password-confirm", name: "password-confirm", autoComplete: "new-password", value: newPasswordConfirm, onChange: event => {
72
+ const newPasswordConfirm = event.target.value;
73
+ setNewPasswordConfirm(newPasswordConfirm);
74
+ if (hasNewPasswordConfirmBlurred) {
75
+ checkNewPasswordConfirm(newPasswordConfirm);
76
+ }
77
+ }, onBlur: () => {
78
+ setHasNewPasswordConfirmBlurred(true);
79
+ checkNewPasswordConfirm(newPasswordConfirm);
80
+ } }) }))] })), _jsx("div", Object.assign({ className: "form-group" }, { children: _jsx("div", Object.assign({ id: "kc-form-buttons", className: "col-md-offset-2 col-md-10 submit" }, { children: _jsx("div", { children: _jsx("button", Object.assign({ disabled: newPasswordError !== "" || newPasswordConfirmError !== "", type: "submit", className: clsx(getClassName("kcButtonClass"), getClassName("kcButtonPrimaryClass"), getClassName("kcButtonLargeClass")), name: "submitAction", value: "Save" }, { children: msg("doSave") })) }) })) }))] }))] })));
14
81
  }
15
82
  //# sourceMappingURL=Password.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Password.js","sourceRoot":"","sources":["../../src/account/pages/Password.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Password.js","sourceRoot":"","sources":["../../src/account/pages/Password.tsx"],"names":[],"mappings":"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"}
@@ -62,6 +62,15 @@ var __read = (this && this.__read) || function (o, n) {
62
62
  }
63
63
  return ar;
64
64
  };
65
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
66
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
67
+ if (ar || !(i in from)) {
68
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
69
+ ar[i] = from[i];
70
+ }
71
+ }
72
+ return to.concat(ar || Array.prototype.slice.call(from));
73
+ };
65
74
  var __importDefault = (this && this.__importDefault) || function (mod) {
66
75
  return (mod && mod.__esModule) ? mod : { "default": mod };
67
76
  };
@@ -102,10 +111,34 @@ function exists(path) {
102
111
  });
103
112
  });
104
113
  }
114
+ function ensureArray(arg0) {
115
+ return Array.isArray(arg0) ? arg0 : typeof arg0 === "undefined" ? [] : [arg0];
116
+ }
117
+ function ensureSingleOrNone(arg0) {
118
+ if (!Array.isArray(arg0))
119
+ return arg0;
120
+ if (arg0.length === 0)
121
+ return undefined;
122
+ if (arg0.length === 1)
123
+ return arg0[0];
124
+ throw new Error("Illegal configuration, expected a single value but found multiple: " + arg0.map(String).join(", "));
125
+ }
126
+ var npmConfigReducer = function (cfg, _a) {
127
+ var _b, _c;
128
+ var _d = __read(_a, 2), key = _d[0], value = _d[1];
129
+ return key in cfg ? __assign(__assign({}, cfg), (_b = {}, _b[key] = __spreadArray(__spreadArray([], __read(ensureArray(cfg[key])), false), [value], false), _b)) : __assign(__assign({}, cfg), (_c = {}, _c[key] = value, _c));
130
+ };
105
131
  /**
106
132
  * Get npm configuration as map
107
133
  */
108
134
  function getNmpConfig() {
135
+ return __awaiter(this, void 0, void 0, function () {
136
+ return __generator(this, function (_a) {
137
+ return [2 /*return*/, readNpmConfig().then(parseNpmConfig)];
138
+ });
139
+ });
140
+ }
141
+ function readNpmConfig() {
109
142
  return __awaiter(this, void 0, void 0, function () {
110
143
  var stdout;
111
144
  return __generator(this, function (_a) {
@@ -113,38 +146,69 @@ function getNmpConfig() {
113
146
  case 0: return [4 /*yield*/, exec("npm config get", { encoding: "utf8" })];
114
147
  case 1:
115
148
  stdout = (_a.sent()).stdout;
116
- return [2 /*return*/, stdout
117
- .split("\n")
118
- .filter(function (line) { return !line.startsWith(";"); })
119
- .map(function (line) { return line.trim(); })
120
- .map(function (line) { return line.split("=", 2); })
121
- .reduce(function (cfg, _a) {
122
- var _b;
123
- var _c = __read(_a, 2), key = _c[0], value = _c[1];
124
- return (__assign(__assign({}, cfg), (_b = {}, _b[key] = value, _b)));
125
- }, {})];
149
+ return [2 /*return*/, stdout];
150
+ }
151
+ });
152
+ });
153
+ }
154
+ function parseNpmConfig(stdout) {
155
+ return stdout
156
+ .split("\n")
157
+ .filter(function (line) { return !line.startsWith(";"); })
158
+ .map(function (line) { return line.trim(); })
159
+ .map(function (line) { return line.split("=", 2); })
160
+ .reduce(npmConfigReducer, {});
161
+ }
162
+ function maybeBoolean(arg0) {
163
+ return typeof arg0 === "undefined" ? undefined : Boolean(arg0);
164
+ }
165
+ function chunks(arr, size) {
166
+ if (size === void 0) { size = 2; }
167
+ return arr.map(function (_, i) { return i % size == 0 && arr.slice(i, i + size); }).filter(Boolean);
168
+ }
169
+ function readCafile(cafile) {
170
+ return __awaiter(this, void 0, void 0, function () {
171
+ var cafileContent;
172
+ return __generator(this, function (_a) {
173
+ switch (_a.label) {
174
+ case 0: return [4 /*yield*/, (0, promises_1.readFile)(cafile, "utf-8")];
175
+ case 1:
176
+ cafileContent = _a.sent();
177
+ return [2 /*return*/, chunks(cafileContent.split(/(-----END CERTIFICATE-----)/), 2).map(function (ca) { return ca.join("").replace(/^\n/, "").replace(/\n/g, "\\n"); })];
126
178
  }
127
179
  });
128
180
  });
129
181
  }
130
182
  /**
131
- * Get proxy configuration from npm config files. Note that we don't care about
183
+ * Get proxy and ssl configuration from npm config files. Note that we don't care about
132
184
  * proxy config in env vars, because make-fetch-happen will do that for us.
133
185
  *
134
186
  * @returns proxy configuration
135
187
  */
136
- function getNpmProxyConfig() {
137
- var _a, _b;
188
+ function getFetchOptions() {
189
+ var _a, _b, _c;
138
190
  return __awaiter(this, void 0, void 0, function () {
139
- var cfg, proxy, noProxy;
140
- return __generator(this, function (_c) {
141
- switch (_c.label) {
191
+ var cfg, proxy, noProxy, strictSSL, cert, ca, cafile, _d, _e, _f, _g;
192
+ return __generator(this, function (_h) {
193
+ switch (_h.label) {
142
194
  case 0: return [4 /*yield*/, getNmpConfig()];
143
195
  case 1:
144
- cfg = _c.sent();
145
- proxy = (_a = cfg["https-proxy"]) !== null && _a !== void 0 ? _a : cfg["proxy"];
196
+ cfg = _h.sent();
197
+ proxy = ensureSingleOrNone((_a = cfg["https-proxy"]) !== null && _a !== void 0 ? _a : cfg["proxy"]);
146
198
  noProxy = (_b = cfg["noproxy"]) !== null && _b !== void 0 ? _b : cfg["no-proxy"];
147
- return [2 /*return*/, { proxy: proxy, noProxy: noProxy }];
199
+ strictSSL = maybeBoolean(ensureSingleOrNone(cfg["strict-ssl"]));
200
+ cert = cfg["cert"];
201
+ ca = ensureArray((_c = cfg["ca"]) !== null && _c !== void 0 ? _c : cfg["ca[]"]);
202
+ cafile = ensureSingleOrNone(cfg["cafile"]);
203
+ if (!(typeof cafile !== "undefined" && cafile !== "null")) return [3 /*break*/, 3];
204
+ _e = (_d = ca.push).apply;
205
+ _f = [ca];
206
+ _g = [[]];
207
+ return [4 /*yield*/, readCafile(cafile)];
208
+ case 2:
209
+ _e.apply(_d, _f.concat([__spreadArray.apply(void 0, _g.concat([__read.apply(void 0, [(_h.sent())]), false]))]));
210
+ _h.label = 3;
211
+ case 3: return [2 /*return*/, { proxy: proxy, noProxy: noProxy, strictSSL: strictSSL, cert: cert, ca: ca.length === 0 ? undefined : ca }];
148
212
  }
149
213
  });
150
214
  });
@@ -152,7 +216,7 @@ function getNpmProxyConfig() {
152
216
  function downloadAndUnzip(params) {
153
217
  var _a, _b;
154
218
  return __awaiter(this, void 0, void 0, function () {
155
- var url, destDirPath, pathOfDirToExtractInArchive, downloadHash, projectRoot, cacheRoot, zipFilePath, extractDirPath, proxyOpts, response;
219
+ var url, destDirPath, pathOfDirToExtractInArchive, downloadHash, projectRoot, cacheRoot, zipFilePath, extractDirPath, opts, response;
156
220
  return __generator(this, function (_c) {
157
221
  switch (_c.label) {
158
222
  case 0:
@@ -165,10 +229,10 @@ function downloadAndUnzip(params) {
165
229
  return [4 /*yield*/, exists(zipFilePath)];
166
230
  case 1:
167
231
  if (!!(_c.sent())) return [3 /*break*/, 6];
168
- return [4 /*yield*/, getNpmProxyConfig()];
232
+ return [4 /*yield*/, getFetchOptions()];
169
233
  case 2:
170
- proxyOpts = _c.sent();
171
- return [4 /*yield*/, (0, make_fetch_happen_1.default)(url, proxyOpts)];
234
+ opts = _c.sent();
235
+ return [4 /*yield*/, (0, make_fetch_happen_1.default)(url, opts)];
172
236
  case 3:
173
237
  response = _c.sent();
174
238
  return [4 /*yield*/, (0, promises_1.mkdir)((0, path_1.dirname)(zipFilePath), { "recursive": true })];
@@ -1 +1 @@
1
- {"version":3,"file":"downloadAndUnzip.js","sourceRoot":"","sources":["../../src/bin/tools/downloadAndUnzip.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"downloadAndUnzip.js","sourceRoot":"","sources":["../../src/bin/tools/downloadAndUnzip.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "keycloakify",
3
- "version": "7.10.0",
3
+ "version": "7.11.1",
4
4
  "description": "Create Keycloak themes using React",
5
5
  "repository": {
6
6
  "type": "git",
@@ -211,7 +211,9 @@ const keycloakifyExtraMessages = {
211
211
  "shouldBeDifferent": "{0} should be different to {1}",
212
212
  "shouldMatchPattern": "Pattern should match: `/{0}/`",
213
213
  "mustBeAnInteger": "Must be an integer",
214
- "notAValidOption": "Not a valid option"
214
+ "notAValidOption": "Not a valid option",
215
+ "newPasswordSameAsOld": "New password must be different from the old one",
216
+ "passwordConfirmNotMatch": "Password confirmation does not match"
215
217
  },
216
218
  "fr": {
217
219
  /* spell-checker: disable */
@@ -223,7 +225,9 @@ const keycloakifyExtraMessages = {
223
225
 
224
226
  "logoutConfirmTitle": "Déconnexion",
225
227
  "logoutConfirmHeader": "Êtes-vous sûr(e) de vouloir vous déconnecter ?",
226
- "doLogout": "Se déconnecter"
228
+ "doLogout": "Se déconnecter",
229
+ "newPasswordSameAsOld": "Le nouveau mot de passe doit être différent de l'ancien",
230
+ "passwordConfirmNotMatch": "La confirmation du mot de passe ne correspond pas"
227
231
  /* spell-checker: enable */
228
232
  }
229
233
  };
@@ -1,3 +1,4 @@
1
+ import { useState } from "react";
1
2
  import { clsx } from "keycloakify/tools/clsx";
2
3
  import type { PageProps } from "keycloakify/account/pages/PageProps";
3
4
  import { useGetClassName } from "keycloakify/account/lib/useGetClassName";
@@ -17,10 +18,69 @@ export default function Password(props: PageProps<Extract<KcContext, { pageId: "
17
18
 
18
19
  const { url, password, account, stateChecker } = kcContext;
19
20
 
20
- const { msg } = i18n;
21
+ const { msgStr, msg } = i18n;
22
+
23
+ const [currentPassword, setCurrentPassword] = useState("");
24
+ const [newPassword, setNewPassword] = useState("");
25
+ const [newPasswordConfirm, setNewPasswordConfirm] = useState("");
26
+ const [newPasswordError, setNewPasswordError] = useState("");
27
+ const [newPasswordConfirmError, setNewPasswordConfirmError] = useState("");
28
+ const [hasNewPasswordBlurred, setHasNewPasswordBlurred] = useState(false);
29
+ const [hasNewPasswordConfirmBlurred, setHasNewPasswordConfirmBlurred] = useState(false);
30
+
31
+ const checkNewPassword = (newPassword: string) => {
32
+ if (!password.passwordSet) {
33
+ return;
34
+ }
35
+
36
+ if (newPassword === currentPassword) {
37
+ setNewPasswordError(msgStr("newPasswordSameAsOld"));
38
+ } else {
39
+ setNewPasswordError("");
40
+ }
41
+ };
42
+
43
+ const checkNewPasswordConfirm = (newPasswordConfirm: string) => {
44
+ if (newPasswordConfirm === "") {
45
+ return;
46
+ }
47
+
48
+ if (newPassword !== newPasswordConfirm) {
49
+ setNewPasswordConfirmError(msgStr("passwordConfirmNotMatch"));
50
+ } else {
51
+ setNewPasswordConfirmError("");
52
+ }
53
+ };
21
54
 
22
55
  return (
23
- <Template {...{ kcContext, i18n, doUseDefaultCss, classes }} active="password">
56
+ <Template
57
+ {...{
58
+ kcContext: {
59
+ ...kcContext,
60
+ "message": (() => {
61
+ if (newPasswordError !== "") {
62
+ return {
63
+ "type": "error",
64
+ "summary": newPasswordError
65
+ };
66
+ }
67
+
68
+ if (newPasswordConfirmError !== "") {
69
+ return {
70
+ "type": "error",
71
+ "summary": newPasswordConfirmError
72
+ };
73
+ }
74
+
75
+ return kcContext.message;
76
+ })()
77
+ },
78
+ i18n,
79
+ doUseDefaultCss,
80
+ classes
81
+ }}
82
+ active="password"
83
+ >
24
84
  <div className="row">
25
85
  <div className="col-md-10">
26
86
  <h2>{msg("changePasswordHtmlTitle")}</h2>
@@ -48,9 +108,17 @@ export default function Password(props: PageProps<Extract<KcContext, { pageId: "
48
108
  {msg("password")}
49
109
  </label>
50
110
  </div>
51
-
52
111
  <div className="col-sm-10 col-md-10">
53
- <input type="password" className="form-control" id="password" name="password" autoFocus autoComplete="current-password" />
112
+ <input
113
+ type="password"
114
+ className="form-control"
115
+ id="password"
116
+ name="password"
117
+ autoFocus
118
+ autoComplete="current-password"
119
+ value={currentPassword}
120
+ onChange={event => setCurrentPassword(event.target.value)}
121
+ />
54
122
  </div>
55
123
  </div>
56
124
  )}
@@ -63,9 +131,27 @@ export default function Password(props: PageProps<Extract<KcContext, { pageId: "
63
131
  {msg("passwordNew")}
64
132
  </label>
65
133
  </div>
66
-
67
134
  <div className="col-sm-10 col-md-10">
68
- <input type="password" className="form-control" id="password-new" name="password-new" autoComplete="new-password" />
135
+ <input
136
+ type="password"
137
+ className="form-control"
138
+ id="password-new"
139
+ name="password-new"
140
+ autoComplete="new-password"
141
+ value={newPassword}
142
+ onChange={event => {
143
+ const newPassword = event.target.value;
144
+
145
+ setNewPassword(newPassword);
146
+ if (hasNewPasswordBlurred) {
147
+ checkNewPassword(newPassword);
148
+ }
149
+ }}
150
+ onBlur={() => {
151
+ setHasNewPasswordBlurred(true);
152
+ checkNewPassword(newPassword);
153
+ }}
154
+ />
69
155
  </div>
70
156
  </div>
71
157
 
@@ -77,7 +163,26 @@ export default function Password(props: PageProps<Extract<KcContext, { pageId: "
77
163
  </div>
78
164
 
79
165
  <div className="col-sm-10 col-md-10">
80
- <input type="password" className="form-control" id="password-confirm" name="password-confirm" autoComplete="new-password" />
166
+ <input
167
+ type="password"
168
+ className="form-control"
169
+ id="password-confirm"
170
+ name="password-confirm"
171
+ autoComplete="new-password"
172
+ value={newPasswordConfirm}
173
+ onChange={event => {
174
+ const newPasswordConfirm = event.target.value;
175
+
176
+ setNewPasswordConfirm(newPasswordConfirm);
177
+ if (hasNewPasswordConfirmBlurred) {
178
+ checkNewPasswordConfirm(newPasswordConfirm);
179
+ }
180
+ }}
181
+ onBlur={() => {
182
+ setHasNewPasswordConfirmBlurred(true);
183
+ checkNewPasswordConfirm(newPasswordConfirm);
184
+ }}
185
+ />
81
186
  </div>
82
187
  </div>
83
188
 
@@ -85,6 +190,7 @@ export default function Password(props: PageProps<Extract<KcContext, { pageId: "
85
190
  <div id="kc-form-buttons" className="col-md-offset-2 col-md-10 submit">
86
191
  <div>
87
192
  <button
193
+ disabled={newPasswordError !== "" || newPasswordConfirmError !== ""}
88
194
  type="submit"
89
195
  className={clsx(
90
196
  getClassName("kcButtonClass"),
@@ -1,6 +1,6 @@
1
1
  import { exec as execCallback } from "child_process";
2
2
  import { createHash } from "crypto";
3
- import { mkdir, stat, writeFile } from "fs/promises";
3
+ import { mkdir, readFile, stat, writeFile } from "fs/promises";
4
4
  import fetch, { type FetchOptions } from "make-fetch-happen";
5
5
  import { dirname as pathDirname, join as pathJoin } from "path";
6
6
  import { assert } from "tsafe";
@@ -25,32 +25,75 @@ async function exists(path: string) {
25
25
  }
26
26
  }
27
27
 
28
+ function ensureArray<T>(arg0: T | T[]) {
29
+ return Array.isArray(arg0) ? arg0 : typeof arg0 === "undefined" ? [] : [arg0];
30
+ }
31
+
32
+ function ensureSingleOrNone<T>(arg0: T | T[]) {
33
+ if (!Array.isArray(arg0)) return arg0;
34
+ if (arg0.length === 0) return undefined;
35
+ if (arg0.length === 1) return arg0[0];
36
+ throw new Error("Illegal configuration, expected a single value but found multiple: " + arg0.map(String).join(", "));
37
+ }
38
+
39
+ type NPMConfig = Record<string, string | string[]>;
40
+
41
+ const npmConfigReducer = (cfg: NPMConfig, [key, value]: [string, string]) =>
42
+ key in cfg ? { ...cfg, [key]: [...ensureArray(cfg[key]), value] } : { ...cfg, [key]: value };
43
+
28
44
  /**
29
45
  * Get npm configuration as map
30
46
  */
31
- async function getNmpConfig(): Promise<Record<string, string>> {
47
+ async function getNmpConfig() {
48
+ return readNpmConfig().then(parseNpmConfig);
49
+ }
50
+
51
+ async function readNpmConfig() {
32
52
  const { stdout } = await exec("npm config get", { encoding: "utf8" });
53
+ return stdout;
54
+ }
55
+
56
+ function parseNpmConfig(stdout: string) {
33
57
  return stdout
34
58
  .split("\n")
35
59
  .filter(line => !line.startsWith(";"))
36
60
  .map(line => line.trim())
37
- .map(line => line.split("=", 2))
38
- .reduce((cfg, [key, value]) => ({ ...cfg, [key]: value }), {});
61
+ .map(line => line.split("=", 2) as [string, string])
62
+ .reduce(npmConfigReducer, {} as NPMConfig);
63
+ }
64
+
65
+ function maybeBoolean(arg0: string | undefined) {
66
+ return typeof arg0 === "undefined" ? undefined : Boolean(arg0);
67
+ }
68
+
69
+ function chunks<T>(arr: T[], size: number = 2) {
70
+ return arr.map((_, i) => i % size == 0 && arr.slice(i, i + size)).filter(Boolean) as T[][];
71
+ }
72
+
73
+ async function readCafile(cafile: string) {
74
+ const cafileContent = await readFile(cafile, "utf-8");
75
+ return chunks(cafileContent.split(/(-----END CERTIFICATE-----)/), 2).map(ca => ca.join("").replace(/^\n/, "").replace(/\n/g, "\\n"));
39
76
  }
40
77
 
41
78
  /**
42
- * Get proxy configuration from npm config files. Note that we don't care about
79
+ * Get proxy and ssl configuration from npm config files. Note that we don't care about
43
80
  * proxy config in env vars, because make-fetch-happen will do that for us.
44
81
  *
45
82
  * @returns proxy configuration
46
83
  */
47
- async function getNpmProxyConfig(): Promise<Pick<FetchOptions, "proxy" | "noProxy">> {
84
+ async function getFetchOptions(): Promise<Pick<FetchOptions, "proxy" | "noProxy" | "strictSSL" | "ca" | "cert">> {
48
85
  const cfg = await getNmpConfig();
49
86
 
50
- const proxy = cfg["https-proxy"] ?? cfg["proxy"];
87
+ const proxy = ensureSingleOrNone(cfg["https-proxy"] ?? cfg["proxy"]);
51
88
  const noProxy = cfg["noproxy"] ?? cfg["no-proxy"];
89
+ const strictSSL = maybeBoolean(ensureSingleOrNone(cfg["strict-ssl"]));
90
+ const cert = cfg["cert"];
91
+ const ca = ensureArray(cfg["ca"] ?? cfg["ca[]"]);
92
+ const cafile = ensureSingleOrNone(cfg["cafile"]);
93
+
94
+ if (typeof cafile !== "undefined" && cafile !== "null") ca.push(...(await readCafile(cafile)));
52
95
 
53
- return { proxy, noProxy };
96
+ return { proxy, noProxy, strictSSL, cert, ca: ca.length === 0 ? undefined : ca };
54
97
  }
55
98
 
56
99
  export async function downloadAndUnzip(params: { url: string; destDirPath: string; pathOfDirToExtractInArchive?: string }) {
@@ -63,8 +106,8 @@ export async function downloadAndUnzip(params: { url: string; destDirPath: strin
63
106
  const extractDirPath = pathJoin(cacheRoot, "keycloakify", "unzip", `_${downloadHash}`);
64
107
 
65
108
  if (!(await exists(zipFilePath))) {
66
- const proxyOpts = await getNpmProxyConfig();
67
- const response = await fetch(url, proxyOpts);
109
+ const opts = await getFetchOptions();
110
+ const response = await fetch(url, opts);
68
111
  await mkdir(pathDirname(zipFilePath), { "recursive": true });
69
112
  /**
70
113
  * The correct way to fix this is to upgrade node-fetch beyond 3.2.5