keycloakify 11.11.3 → 11.12.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/README.md +1 -0
- package/bin/375.index.js +1 -1
- package/bin/main.js +2 -2
- package/bin/shared/constants.d.ts +1 -1
- package/bin/shared/constants.js +1 -1
- package/bin/shared/constants.js.map +1 -1
- package/login/KcContext/KcContext.d.ts +20 -0
- package/login/KcContext/KcContext.js.map +1 -1
- package/login/KcContext/kcContextMocks.js +6 -2
- package/login/KcContext/kcContextMocks.js.map +1 -1
- package/login/pages/Login.js +20 -13
- package/login/pages/Login.js.map +1 -1
- package/login/pages/Login.useScript.d.ts +21 -0
- package/login/pages/Login.useScript.js +47 -0
- package/login/pages/Login.useScript.js.map +1 -0
- package/login/pages/LoginPassword.js +15 -8
- package/login/pages/LoginPassword.js.map +1 -1
- package/login/pages/LoginPassword.useScript.d.ts +21 -0
- package/login/pages/LoginPassword.useScript.js +47 -0
- package/login/pages/LoginPassword.useScript.js.map +1 -0
- package/login/pages/LoginUsername.js +3 -3
- package/login/pages/LoginUsername.js.map +1 -1
- package/login/pages/LoginUsername.useScript.d.ts +1 -1
- package/login/pages/LoginUsername.useScript.js +3 -3
- package/login/pages/LoginUsername.useScript.js.map +1 -1
- package/package.json +9 -1
- package/src/bin/shared/constants.ts +1 -1
- package/src/bin/start-keycloak/start-keycloak.ts +2 -2
- package/src/login/KcContext/KcContext.ts +20 -0
- package/src/login/KcContext/kcContextMocks.ts +22 -2
- package/src/login/pages/Login.tsx +45 -1
- package/src/login/pages/Login.useScript.tsx +71 -0
- package/src/login/pages/LoginPassword.tsx +44 -1
- package/src/login/pages/LoginPassword.useScript.tsx +71 -0
- package/src/login/pages/LoginUsername.tsx +6 -6
- package/src/login/pages/LoginUsername.useScript.tsx +4 -4
- package/vite-plugin/index.js +2 -2
package/README.md
CHANGED
|
@@ -137,6 +137,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
|
|
|
137
137
|
<td align="center" valign="top" width="14.28%"><a href="https://github.com/rgrosjean"><img src="https://avatars.githubusercontent.com/u/39985706?v=4?s=100" width="100px;" alt="rgrosjean"/><br /><sub><b>rgrosjean</b></sub></a><br /><a href="https://github.com/keycloakify/keycloakify/commits?author=rgrosjean" title="Code">💻</a> <a href="https://github.com/keycloakify/keycloakify/commits?author=rgrosjean" title="Tests">⚠️</a></td>
|
|
138
138
|
<td align="center" valign="top" width="14.28%"><a href="http://about.me/lleir"><img src="https://avatars.githubusercontent.com/u/34919?v=4?s=100" width="100px;" alt="Lleïr Borràs Metje"/><br /><sub><b>Lleïr Borràs Metje</b></sub></a><br /><a href="https://github.com/keycloakify/keycloakify/issues?q=author%3Alleirborras" title="Bug reports">🐛</a></td>
|
|
139
139
|
<td align="center" valign="top" width="14.28%"><a href="https://waynekirimi.netlify.app/"><img src="https://avatars.githubusercontent.com/u/37283450?v=4?s=100" width="100px;" alt="Wayne Kirimi"/><br /><sub><b>Wayne Kirimi</b></sub></a><br /><a href="https://github.com/keycloakify/keycloakify/commits?author=waynemorphic" title="Code">💻</a></td>
|
|
140
|
+
<td align="center" valign="top" width="14.28%"><a href="https://github.com/discostur"><img src="https://avatars.githubusercontent.com/u/2615420?v=4?s=100" width="100px;" alt="Kilian Ries"/><br /><sub><b>Kilian Ries</b></sub></a><br /><a href="https://github.com/keycloakify/keycloakify/commits?author=discostur" title="Code">💻</a></td>
|
|
140
141
|
</tr>
|
|
141
142
|
</tbody>
|
|
142
143
|
</table>
|
package/bin/375.index.js
CHANGED
|
@@ -1727,7 +1727,7 @@ async function command(params) {
|
|
|
1727
1727
|
? (console.log(source_default().yellow("WARNING: With older version of keycloak your changes to the realm configuration are not persisted")),
|
|
1728
1728
|
[])
|
|
1729
1729
|
: [
|
|
1730
|
-
(0,external_path_.join)((0,getThisCodebaseRootDirPath/* getThisCodebaseRootDirPath */.e)(), "src", "bin", "start-keycloak", constants/*
|
|
1730
|
+
(0,external_path_.join)((0,getThisCodebaseRootDirPath/* getThisCodebaseRootDirPath */.e)(), "src", "bin", "start-keycloak", constants/* KEYCLOAKIFY_LOGGING_JAR_BASENAME */.mr)
|
|
1731
1731
|
]),
|
|
1732
1732
|
...(await Promise.all(buildContext.startKeycloakOptions.extensionJars.map(async (extensionJar) => {
|
|
1733
1733
|
switch (extensionJar.type) {
|
package/bin/main.js
CHANGED
|
@@ -803,12 +803,12 @@ function getBuildContext(params) {
|
|
|
803
803
|
/* harmony export */ "PC": () => (/* binding */ KEYCLOAK_THEME),
|
|
804
804
|
/* harmony export */ "Sz": () => (/* binding */ KEYCLOAKIFY_SPA_DEV_SERVER_PORT),
|
|
805
805
|
/* harmony export */ "TE": () => (/* binding */ VITE_PLUGIN_SUB_SCRIPTS_ENV_NAMES),
|
|
806
|
-
/* harmony export */ "Tr": () => (/* binding */ KEYCLOAKIFY_LOGIN_JAR_BASENAME),
|
|
807
806
|
/* harmony export */ "XV": () => (/* binding */ LOGIN_THEME_PAGE_IDS),
|
|
808
807
|
/* harmony export */ "_L": () => (/* binding */ FALLBACK_LANGUAGE_TAG),
|
|
809
808
|
/* harmony export */ "_S": () => (/* binding */ CUSTOM_HANDLER_ENV_NAMES),
|
|
810
809
|
/* harmony export */ "ac": () => (/* binding */ BUILD_FOR_KEYCLOAK_MAJOR_VERSION_ENV_NAME),
|
|
811
810
|
/* harmony export */ "jp": () => (/* binding */ TEST_APP_URL),
|
|
811
|
+
/* harmony export */ "mr": () => (/* binding */ KEYCLOAKIFY_LOGGING_JAR_BASENAME),
|
|
812
812
|
/* harmony export */ "sv": () => (/* binding */ CONTAINER_NAME),
|
|
813
813
|
/* harmony export */ "yV": () => (/* binding */ ACCOUNT_THEME_PAGE_IDS)
|
|
814
814
|
/* harmony export */ });
|
|
@@ -882,7 +882,7 @@ const CUSTOM_HANDLER_ENV_NAMES = {
|
|
|
882
882
|
const KEYCLOAK_THEME = "keycloak-theme";
|
|
883
883
|
const KEYCLOAKIFY_SPA_DEV_SERVER_PORT = "KEYCLOAKIFY_SPA_DEV_SERVER_PORT";
|
|
884
884
|
const KEYCLOAKIFY_LOGGING_VERSION = "1.0.3";
|
|
885
|
-
const
|
|
885
|
+
const KEYCLOAKIFY_LOGGING_JAR_BASENAME = `keycloakify-logging-${KEYCLOAKIFY_LOGGING_VERSION}.jar`;
|
|
886
886
|
const TEST_APP_URL = "https://my-theme.keycloakify.dev";
|
|
887
887
|
//# sourceMappingURL=constants.js.map
|
|
888
888
|
|
|
@@ -24,5 +24,5 @@ export declare const CUSTOM_HANDLER_ENV_NAMES: {
|
|
|
24
24
|
export declare const KEYCLOAK_THEME = "keycloak-theme";
|
|
25
25
|
export declare const KEYCLOAKIFY_SPA_DEV_SERVER_PORT = "KEYCLOAKIFY_SPA_DEV_SERVER_PORT";
|
|
26
26
|
export declare const KEYCLOAKIFY_LOGGING_VERSION = "1.0.3";
|
|
27
|
-
export declare const
|
|
27
|
+
export declare const KEYCLOAKIFY_LOGGING_JAR_BASENAME: string;
|
|
28
28
|
export declare const TEST_APP_URL = "https://my-theme.keycloakify.dev";
|
package/bin/shared/constants.js
CHANGED
|
@@ -67,6 +67,6 @@ export const CUSTOM_HANDLER_ENV_NAMES = {
|
|
|
67
67
|
export const KEYCLOAK_THEME = "keycloak-theme";
|
|
68
68
|
export const KEYCLOAKIFY_SPA_DEV_SERVER_PORT = "KEYCLOAKIFY_SPA_DEV_SERVER_PORT";
|
|
69
69
|
export const KEYCLOAKIFY_LOGGING_VERSION = "1.0.3";
|
|
70
|
-
export const
|
|
70
|
+
export const KEYCLOAKIFY_LOGGING_JAR_BASENAME = `keycloakify-logging-${KEYCLOAKIFY_LOGGING_VERSION}.jar`;
|
|
71
71
|
export const TEST_APP_URL = "https://my-theme.keycloakify.dev";
|
|
72
72
|
//# 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;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;IACrC,yBAAyB;CACnB,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;AAEjF,MAAM,CAAC,MAAM,2BAA2B,GAAG,OAAO,CAAC;AAEnD,MAAM,CAAC,MAAM,
|
|
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;IACrC,yBAAyB;CACnB,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;AAEjF,MAAM,CAAC,MAAM,2BAA2B,GAAG,OAAO,CAAC;AAEnD,MAAM,CAAC,MAAM,gCAAgC,GAAG,uBAAuB,2BAA2B,MAAM,CAAC;AAEzG,MAAM,CAAC,MAAM,YAAY,GAAG,kCAAkC,CAAC"}
|
|
@@ -147,6 +147,16 @@ export declare namespace KcContext {
|
|
|
147
147
|
iconClasses?: string;
|
|
148
148
|
}[];
|
|
149
149
|
};
|
|
150
|
+
enableWebAuthnConditionalUI?: boolean;
|
|
151
|
+
authenticators?: {
|
|
152
|
+
authenticators: WebauthnAuthenticate.WebauthnAuthenticator[];
|
|
153
|
+
};
|
|
154
|
+
challenge: string;
|
|
155
|
+
userVerification: WebauthnAuthenticate["userVerification"];
|
|
156
|
+
rpId: string;
|
|
157
|
+
createTimeout: number | string;
|
|
158
|
+
isUserIdentified: "true" | "false";
|
|
159
|
+
shouldDisplayAuthenticators?: boolean;
|
|
150
160
|
};
|
|
151
161
|
type Register = Common & {
|
|
152
162
|
pageId: "register.ftl";
|
|
@@ -291,6 +301,16 @@ export declare namespace KcContext {
|
|
|
291
301
|
showTryAnotherWayLink?: boolean;
|
|
292
302
|
attemptedUsername?: string;
|
|
293
303
|
};
|
|
304
|
+
enableWebAuthnConditionalUI?: boolean;
|
|
305
|
+
authenticators?: {
|
|
306
|
+
authenticators: WebauthnAuthenticate.WebauthnAuthenticator[];
|
|
307
|
+
};
|
|
308
|
+
challenge: string;
|
|
309
|
+
userVerification: WebauthnAuthenticate["userVerification"];
|
|
310
|
+
rpId: string;
|
|
311
|
+
createTimeout: number | string;
|
|
312
|
+
isUserIdentified: "true" | "false";
|
|
313
|
+
shouldDisplayAuthenticators?: boolean;
|
|
294
314
|
};
|
|
295
315
|
type WebauthnAuthenticate = Common & {
|
|
296
316
|
pageId: "webauthn-authenticate.ftl";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KcContext.js","sourceRoot":"","sources":["../../src/login/KcContext/KcContext.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAgEtC,MAAM,EAA2D,CAAC;
|
|
1
|
+
{"version":3,"file":"KcContext.js","sourceRoot":"","sources":["../../src/login/KcContext/KcContext.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAgEtC,MAAM,EAA2D,CAAC;AA6tBlE;IAOI,MAAM,EAA4B,CAAC;IACnC,MAAM,EAAiC,CAAC;CAC3C"}
|
|
@@ -173,7 +173,9 @@ const loginUrl = Object.assign(Object.assign({}, kcContextCommonMock.url), { log
|
|
|
173
173
|
export const kcContextMocks = [
|
|
174
174
|
id(Object.assign(Object.assign({}, kcContextCommonMock), { pageId: "login.ftl", url: loginUrl, realm: Object.assign(Object.assign({}, kcContextCommonMock.realm), { loginWithEmailAllowed: true, rememberMe: true, password: true, resetPasswordAllowed: true, registrationAllowed: true }), auth: kcContextCommonMock.auth, social: {
|
|
175
175
|
displayInfo: true
|
|
176
|
-
}, usernameHidden: false, login: {}, registrationDisabled: false
|
|
176
|
+
}, usernameHidden: false, login: {}, registrationDisabled: false, enableWebAuthnConditionalUI: false, authenticators: {
|
|
177
|
+
authenticators: []
|
|
178
|
+
}, challenge: "", userVerification: "not specified", rpId: "", createTimeout: "0", isUserIdentified: "false", shouldDisplayAuthenticators: false })),
|
|
177
179
|
id(Object.assign(Object.assign({}, kcContextCommonMock), { url: Object.assign(Object.assign({}, loginUrl), { registrationAction: "#" }), isAppInitiatedAction: false, passwordRequired: true, recaptchaRequired: false, pageId: "register.ftl", profile: {
|
|
178
180
|
attributesByName
|
|
179
181
|
}, scripts: [
|
|
@@ -225,7 +227,9 @@ export const kcContextMocks = [
|
|
|
225
227
|
id(Object.assign(Object.assign({}, kcContextCommonMock), { pageId: "login-username.ftl", url: loginUrl, realm: Object.assign(Object.assign({}, kcContextCommonMock.realm), { loginWithEmailAllowed: true, rememberMe: true, password: true, resetPasswordAllowed: true, registrationAllowed: true }), social: {
|
|
226
228
|
displayInfo: true
|
|
227
229
|
}, usernameHidden: false, login: {}, registrationDisabled: false, challenge: "", userVerification: "not specified", rpId: "", createTimeout: "0", isUserIdentified: "false" })),
|
|
228
|
-
id(Object.assign(Object.assign({}, kcContextCommonMock), { pageId: "login-password.ftl", url: loginUrl, realm: Object.assign(Object.assign({}, kcContextCommonMock.realm), { resetPasswordAllowed: true })
|
|
230
|
+
id(Object.assign(Object.assign({}, kcContextCommonMock), { pageId: "login-password.ftl", url: loginUrl, realm: Object.assign(Object.assign({}, kcContextCommonMock.realm), { resetPasswordAllowed: true }), enableWebAuthnConditionalUI: false, authenticators: {
|
|
231
|
+
authenticators: []
|
|
232
|
+
}, challenge: "", userVerification: "not specified", rpId: "", createTimeout: "0", isUserIdentified: "false", shouldDisplayAuthenticators: false })),
|
|
229
233
|
id(Object.assign(Object.assign({}, kcContextCommonMock), { pageId: "webauthn-authenticate.ftl", url: loginUrl, authenticators: {
|
|
230
234
|
authenticators: []
|
|
231
235
|
}, realm: Object.assign(Object.assign({}, kcContextCommonMock.realm), { password: true, registrationAllowed: true }), challenge: "", userVerification: "not specified", rpId: "", createTimeout: "0", isUserIdentified: "false", shouldDisplayAuthenticators: false })),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kcContextMocks.js","sourceRoot":"","sources":["../../src/login/KcContext/kcContextMocks.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"kcContextMocks.js","sourceRoot":"","sources":["../../src/login/KcContext/kcContextMocks.ts"],"names":[],"mappings":"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"}
|
package/login/pages/Login.js
CHANGED
|
@@ -4,6 +4,7 @@ import { kcSanitize } from "../../lib/kcSanitize";
|
|
|
4
4
|
import { useIsPasswordRevealed } from "../../tools/useIsPasswordRevealed";
|
|
5
5
|
import { clsx } from "../../tools/clsx";
|
|
6
6
|
import { getKcClsx } from "../../login/lib/kcClsx";
|
|
7
|
+
import { useScript } from "../../login/pages/Login.useScript";
|
|
7
8
|
export default function Login(props) {
|
|
8
9
|
var _a;
|
|
9
10
|
const { kcContext, i18n, doUseDefaultCss, Template, classes } = props;
|
|
@@ -11,21 +12,27 @@ export default function Login(props) {
|
|
|
11
12
|
doUseDefaultCss,
|
|
12
13
|
classes
|
|
13
14
|
});
|
|
14
|
-
const { social, realm, url, usernameHidden, login, auth, registrationDisabled, messagesPerField } = kcContext;
|
|
15
|
+
const { social, realm, url, usernameHidden, login, auth, registrationDisabled, messagesPerField, enableWebAuthnConditionalUI, authenticators } = kcContext;
|
|
15
16
|
const { msg, msgStr } = i18n;
|
|
16
17
|
const [isLoginButtonDisabled, setIsLoginButtonDisabled] = useState(false);
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
18
|
+
const webAuthnButtonId = "authenticateWebAuthnButton";
|
|
19
|
+
useScript({
|
|
20
|
+
webAuthnButtonId,
|
|
21
|
+
kcContext,
|
|
22
|
+
i18n
|
|
23
|
+
});
|
|
24
|
+
return (_jsxs(Template, Object.assign({ kcContext: kcContext, i18n: i18n, doUseDefaultCss: doUseDefaultCss, classes: classes, displayMessage: !messagesPerField.existsError("username", "password"), headerNode: msg("loginAccountTitle"), displayInfo: realm.password && realm.registrationAllowed && !registrationDisabled, infoNode: _jsx("div", Object.assign({ id: "kc-registration-container" }, { children: _jsx("div", Object.assign({ id: "kc-registration" }, { children: _jsxs("span", { children: [msg("noAccount"), " ", _jsx("a", Object.assign({ tabIndex: 8, href: url.registrationUrl }, { children: msg("doRegister") }))] }) })) })), socialProvidersNode: _jsx(_Fragment, { children: realm.password && (social === null || social === void 0 ? void 0 : social.providers) !== undefined && social.providers.length !== 0 && (_jsxs("div", Object.assign({ id: "kc-social-providers", className: kcClsx("kcFormSocialAccountSectionClass") }, { children: [_jsx("hr", {}), _jsx("h2", { children: msg("identity-provider-login-label") }), _jsx("ul", Object.assign({ className: kcClsx("kcFormSocialAccountListClass", social.providers.length > 3 && "kcFormSocialAccountListGridClass") }, { children: social.providers.map((...[p, , providers]) => (_jsx("li", { children: _jsxs("a", Object.assign({ id: `social-${p.alias}`, className: kcClsx("kcFormSocialAccountListButtonClass", providers.length > 3 && "kcFormSocialAccountGridItem"), type: "button", href: p.loginUrl }, { children: [p.iconClasses && _jsx("i", { className: clsx(kcClsx("kcCommonLogoIdP"), p.iconClasses), "aria-hidden": "true" }), _jsx("span", { className: clsx(kcClsx("kcFormSocialAccountNameClass"), p.iconClasses && "kc-social-icon-text"), dangerouslySetInnerHTML: { __html: kcSanitize(p.displayName) } })] })) }, p.alias))) }))] }))) }) }, { children: [_jsx("div", Object.assign({ id: "kc-form" }, { children: _jsx("div", Object.assign({ id: "kc-form-wrapper" }, { children: realm.password && (_jsxs("form", Object.assign({ id: "kc-form-login", onSubmit: () => {
|
|
25
|
+
setIsLoginButtonDisabled(true);
|
|
26
|
+
return true;
|
|
27
|
+
}, action: url.loginAction, method: "post" }, { children: [!usernameHidden && (_jsxs("div", Object.assign({ className: kcClsx("kcFormGroupClass") }, { children: [_jsx("label", Object.assign({ htmlFor: "username", className: kcClsx("kcLabelClass") }, { children: !realm.loginWithEmailAllowed
|
|
28
|
+
? msg("username")
|
|
29
|
+
: !realm.registrationEmailAsUsername
|
|
30
|
+
? msg("usernameOrEmail")
|
|
31
|
+
: msg("email") })), _jsx("input", { tabIndex: 2, id: "username", className: kcClsx("kcInputClass"), name: "username", defaultValue: (_a = login.username) !== null && _a !== void 0 ? _a : "", type: "text", autoFocus: true, autoComplete: "username", "aria-invalid": messagesPerField.existsError("username", "password") }), messagesPerField.existsError("username", "password") && (_jsx("span", { id: "input-error", className: kcClsx("kcInputErrorMessageClass"), "aria-live": "polite", dangerouslySetInnerHTML: {
|
|
32
|
+
__html: kcSanitize(messagesPerField.getFirstError("username", "password"))
|
|
33
|
+
} }))] }))), _jsxs("div", Object.assign({ className: kcClsx("kcFormGroupClass") }, { children: [_jsx("label", Object.assign({ htmlFor: "password", className: kcClsx("kcLabelClass") }, { children: msg("password") })), _jsx(PasswordWrapper, Object.assign({ kcClsx: kcClsx, i18n: i18n, passwordInputId: "password" }, { children: _jsx("input", { tabIndex: 3, id: "password", className: kcClsx("kcInputClass"), name: "password", type: "password", autoComplete: "current-password", "aria-invalid": messagesPerField.existsError("username", "password") }) })), usernameHidden && messagesPerField.existsError("username", "password") && (_jsx("span", { id: "input-error", className: kcClsx("kcInputErrorMessageClass"), "aria-live": "polite", dangerouslySetInnerHTML: {
|
|
34
|
+
__html: kcSanitize(messagesPerField.getFirstError("username", "password"))
|
|
35
|
+
} }))] })), _jsxs("div", Object.assign({ className: kcClsx("kcFormGroupClass", "kcFormSettingClass") }, { children: [_jsx("div", Object.assign({ id: "kc-form-options" }, { children: realm.rememberMe && !usernameHidden && (_jsx("div", Object.assign({ className: "checkbox" }, { children: _jsxs("label", { children: [_jsx("input", { tabIndex: 5, id: "rememberMe", name: "rememberMe", type: "checkbox", defaultChecked: !!login.rememberMe }), " ", msg("rememberMe")] }) }))) })), _jsx("div", Object.assign({ className: kcClsx("kcFormOptionsWrapperClass") }, { children: realm.resetPasswordAllowed && (_jsx("span", { children: _jsx("a", Object.assign({ tabIndex: 6, href: url.loginResetCredentialsUrl }, { children: msg("doForgotPassword") })) })) }))] })), _jsxs("div", Object.assign({ id: "kc-form-buttons", className: kcClsx("kcFormGroupClass") }, { children: [_jsx("input", { type: "hidden", id: "id-hidden-input", name: "credentialId", value: auth.selectedCredential }), _jsx("input", { tabIndex: 7, disabled: isLoginButtonDisabled, className: kcClsx("kcButtonClass", "kcButtonPrimaryClass", "kcButtonBlockClass", "kcButtonLargeClass"), name: "login", id: "kc-login", type: "submit", value: msgStr("doLogIn") })] }))] }))) })) })), enableWebAuthnConditionalUI && (_jsxs(_Fragment, { children: [_jsxs("form", Object.assign({ id: "webauth", action: url.loginAction, method: "post" }, { children: [_jsx("input", { type: "hidden", id: "clientDataJSON", name: "clientDataJSON" }), _jsx("input", { type: "hidden", id: "authenticatorData", name: "authenticatorData" }), _jsx("input", { type: "hidden", id: "signature", name: "signature" }), _jsx("input", { type: "hidden", id: "credentialId", name: "credentialId" }), _jsx("input", { type: "hidden", id: "userHandle", name: "userHandle" }), _jsx("input", { type: "hidden", id: "error", name: "error" })] })), authenticators !== undefined && authenticators.authenticators.length !== 0 && (_jsx(_Fragment, { children: _jsx("form", Object.assign({ id: "authn_select", className: kcClsx("kcFormClass") }, { children: authenticators.authenticators.map((authenticator, i) => (_jsx("input", { type: "hidden", name: "authn_use_chk", readOnly: true, value: authenticator.credentialId }, i))) })) })), _jsx("br", {}), _jsx("input", { id: webAuthnButtonId, type: "button", className: kcClsx("kcButtonClass", "kcButtonDefaultClass", "kcButtonBlockClass", "kcButtonLargeClass"), value: msgStr("passkey-doAuthenticate") })] }))] })));
|
|
29
36
|
}
|
|
30
37
|
function PasswordWrapper(props) {
|
|
31
38
|
const { kcClsx, i18n, passwordInputId, children } = props;
|
package/login/pages/Login.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Login.js","sourceRoot":"","sources":["../../src/login/pages/Login.tsx"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"Login.js","sourceRoot":"","sources":["../../src/login/pages/Login.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { KcContext } from "../../login/KcContext/KcContext";
|
|
2
|
+
type KcContextLike = {
|
|
3
|
+
url: {
|
|
4
|
+
resourcesPath: string;
|
|
5
|
+
};
|
|
6
|
+
isUserIdentified: "true" | "false";
|
|
7
|
+
challenge: string;
|
|
8
|
+
userVerification: KcContext.WebauthnAuthenticate["userVerification"];
|
|
9
|
+
rpId: string;
|
|
10
|
+
createTimeout: number | string;
|
|
11
|
+
};
|
|
12
|
+
type I18nLike = {
|
|
13
|
+
msgStr: (key: "webauthn-unsupported-browser-text") => string;
|
|
14
|
+
isFetchingTranslations: boolean;
|
|
15
|
+
};
|
|
16
|
+
export declare function useScript(params: {
|
|
17
|
+
webAuthnButtonId: string;
|
|
18
|
+
kcContext: KcContextLike;
|
|
19
|
+
i18n: I18nLike;
|
|
20
|
+
}): void;
|
|
21
|
+
export {};
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { useEffect } from "react";
|
|
2
|
+
import { useInsertScriptTags } from "../../tools/useInsertScriptTags";
|
|
3
|
+
import { assert } from "../../tools/assert";
|
|
4
|
+
import { waitForElementMountedOnDom } from "../../tools/waitForElementMountedOnDom";
|
|
5
|
+
assert();
|
|
6
|
+
assert();
|
|
7
|
+
export function useScript(params) {
|
|
8
|
+
const { webAuthnButtonId, kcContext, i18n } = params;
|
|
9
|
+
const { url, isUserIdentified, challenge, userVerification, rpId, createTimeout } = kcContext;
|
|
10
|
+
const { msgStr, isFetchingTranslations } = i18n;
|
|
11
|
+
const { insertScriptTags } = useInsertScriptTags({
|
|
12
|
+
componentOrHookName: "Login",
|
|
13
|
+
scriptTags: [
|
|
14
|
+
{
|
|
15
|
+
type: "module",
|
|
16
|
+
textContent: () => `
|
|
17
|
+
|
|
18
|
+
import { authenticateByWebAuthn } from "${url.resourcesPath}/js/webauthnAuthenticate.js";
|
|
19
|
+
const authButton = document.getElementById('${webAuthnButtonId}');
|
|
20
|
+
authButton.addEventListener("click", function() {
|
|
21
|
+
const input = {
|
|
22
|
+
isUserIdentified : ${isUserIdentified},
|
|
23
|
+
challenge : '${challenge}',
|
|
24
|
+
userVerification : '${userVerification}',
|
|
25
|
+
rpId : '${rpId}',
|
|
26
|
+
createTimeout : ${createTimeout},
|
|
27
|
+
errmsg : ${JSON.stringify(msgStr("webauthn-unsupported-browser-text"))}
|
|
28
|
+
};
|
|
29
|
+
authenticateByWebAuthn(input);
|
|
30
|
+
});
|
|
31
|
+
`
|
|
32
|
+
}
|
|
33
|
+
]
|
|
34
|
+
});
|
|
35
|
+
useEffect(() => {
|
|
36
|
+
if (isFetchingTranslations) {
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
(async () => {
|
|
40
|
+
await waitForElementMountedOnDom({
|
|
41
|
+
elementId: webAuthnButtonId
|
|
42
|
+
});
|
|
43
|
+
insertScriptTags();
|
|
44
|
+
})();
|
|
45
|
+
}, [isFetchingTranslations]);
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=Login.useScript.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Login.useScript.js","sourceRoot":"","sources":["../../src/login/pages/Login.useScript.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EAAE,mBAAmB,EAAE,MAAM,uCAAuC,CAAC;AAC5E,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAElD,OAAO,EAAE,0BAA0B,EAAE,MAAM,8CAA8C,CAAC;AAa1F,MAAM,EAAoE,CAAC;AAC3E,MAAM,EAAwD,CAAC;AAO/D,MAAM,UAAU,SAAS,CAAC,MAA8E;IACpG,MAAM,EAAE,gBAAgB,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC;IAErD,MAAM,EAAE,GAAG,EAAE,gBAAgB,EAAE,SAAS,EAAE,gBAAgB,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,SAAS,CAAC;IAE9F,MAAM,EAAE,MAAM,EAAE,sBAAsB,EAAE,GAAG,IAAI,CAAC;IAEhD,MAAM,EAAE,gBAAgB,EAAE,GAAG,mBAAmB,CAAC;QAC7C,mBAAmB,EAAE,OAAO;QAC5B,UAAU,EAAE;YACR;gBACI,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,GAAG,EAAE,CAAC;;8DAE2B,GAAG,CAAC,aAAa;kEACb,gBAAgB;;;iDAGjC,gBAAgB;2CACtB,SAAS;kDACF,gBAAgB;sCAC5B,IAAI;8CACI,aAAa;uCACpB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,mCAAmC,CAAC,CAAC;;;;iBAIjF;aACJ;SACJ;KACJ,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACX,IAAI,sBAAsB,EAAE;YACxB,OAAO;SACV;QAED,CAAC,KAAK,IAAI,EAAE;YACR,MAAM,0BAA0B,CAAC;gBAC7B,SAAS,EAAE,gBAAgB;aAC9B,CAAC,CAAC;YAEH,gBAAgB,EAAE,CAAC;QACvB,CAAC,CAAC,EAAE,CAAC;IACT,CAAC,EAAE,CAAC,sBAAsB,CAAC,CAAC,CAAC;AACjC,CAAC"}
|
|
@@ -1,24 +1,31 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
2
|
import { useState } from "react";
|
|
3
3
|
import { kcSanitize } from "../../lib/kcSanitize";
|
|
4
4
|
import { clsx } from "../../tools/clsx";
|
|
5
5
|
import { useIsPasswordRevealed } from "../../tools/useIsPasswordRevealed";
|
|
6
6
|
import { getKcClsx } from "../../login/lib/kcClsx";
|
|
7
|
+
import { useScript } from "../../login/pages/LoginPassword.useScript";
|
|
7
8
|
export default function LoginPassword(props) {
|
|
8
9
|
const { kcContext, i18n, doUseDefaultCss, Template, classes } = props;
|
|
9
10
|
const { kcClsx } = getKcClsx({
|
|
10
11
|
doUseDefaultCss,
|
|
11
12
|
classes
|
|
12
13
|
});
|
|
13
|
-
const { realm, url, messagesPerField } = kcContext;
|
|
14
|
+
const { realm, url, messagesPerField, enableWebAuthnConditionalUI, authenticators } = kcContext;
|
|
14
15
|
const { msg, msgStr } = i18n;
|
|
15
16
|
const [isLoginButtonDisabled, setIsLoginButtonDisabled] = useState(false);
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
17
|
+
const webAuthnButtonId = "authenticateWebAuthnButton";
|
|
18
|
+
useScript({
|
|
19
|
+
webAuthnButtonId,
|
|
20
|
+
kcContext,
|
|
21
|
+
i18n
|
|
22
|
+
});
|
|
23
|
+
return (_jsxs(Template, Object.assign({ kcContext: kcContext, i18n: i18n, doUseDefaultCss: doUseDefaultCss, classes: classes, headerNode: msg("doLogIn"), displayMessage: !messagesPerField.existsError("password") }, { children: [_jsx("div", Object.assign({ id: "kc-form" }, { children: _jsx("div", Object.assign({ id: "kc-form-wrapper" }, { children: _jsxs("form", Object.assign({ id: "kc-form-login", onSubmit: () => {
|
|
24
|
+
setIsLoginButtonDisabled(true);
|
|
25
|
+
return true;
|
|
26
|
+
}, action: url.loginAction, method: "post" }, { children: [_jsxs("div", Object.assign({ className: clsx(kcClsx("kcFormGroupClass"), "no-bottom-margin") }, { children: [_jsx("hr", {}), _jsx("label", Object.assign({ htmlFor: "password", className: kcClsx("kcLabelClass") }, { children: msg("password") })), _jsx(PasswordWrapper, Object.assign({ kcClsx: kcClsx, i18n: i18n, passwordInputId: "password" }, { children: _jsx("input", { tabIndex: 2, id: "password", className: kcClsx("kcInputClass"), name: "password", type: "password", autoFocus: true, autoComplete: "on", "aria-invalid": messagesPerField.existsError("username", "password") }) })), messagesPerField.existsError("password") && (_jsx("span", { id: "input-error-password", className: kcClsx("kcInputErrorMessageClass"), "aria-live": "polite", dangerouslySetInnerHTML: {
|
|
27
|
+
__html: kcSanitize(messagesPerField.get("password"))
|
|
28
|
+
} }))] })), _jsxs("div", Object.assign({ className: kcClsx("kcFormGroupClass", "kcFormSettingClass") }, { children: [_jsx("div", { id: "kc-form-options" }), _jsx("div", Object.assign({ className: kcClsx("kcFormOptionsWrapperClass") }, { children: realm.resetPasswordAllowed && (_jsx("span", { children: _jsx("a", Object.assign({ tabIndex: 5, href: url.loginResetCredentialsUrl }, { children: msg("doForgotPassword") })) })) }))] })), _jsx("div", Object.assign({ id: "kc-form-buttons", className: kcClsx("kcFormGroupClass") }, { children: _jsx("input", { tabIndex: 4, className: kcClsx("kcButtonClass", "kcButtonPrimaryClass", "kcButtonBlockClass", "kcButtonLargeClass"), name: "login", id: "kc-login", type: "submit", value: msgStr("doLogIn"), disabled: isLoginButtonDisabled }) }))] })) })) })), enableWebAuthnConditionalUI && (_jsxs(_Fragment, { children: [_jsxs("form", Object.assign({ id: "webauth", action: url.loginAction, method: "post" }, { children: [_jsx("input", { type: "hidden", id: "clientDataJSON", name: "clientDataJSON" }), _jsx("input", { type: "hidden", id: "authenticatorData", name: "authenticatorData" }), _jsx("input", { type: "hidden", id: "signature", name: "signature" }), _jsx("input", { type: "hidden", id: "credentialId", name: "credentialId" }), _jsx("input", { type: "hidden", id: "userHandle", name: "userHandle" }), _jsx("input", { type: "hidden", id: "error", name: "error" })] })), authenticators !== undefined && authenticators.authenticators.length !== 0 && (_jsx(_Fragment, { children: _jsx("form", Object.assign({ id: "authn_select", className: kcClsx("kcFormClass") }, { children: authenticators.authenticators.map((authenticator, i) => (_jsx("input", { type: "hidden", name: "authn_use_chk", readOnly: true, value: authenticator.credentialId }, i))) })) })), _jsx("br", {}), _jsx("input", { id: webAuthnButtonId, type: "button", className: kcClsx("kcButtonClass", "kcButtonDefaultClass", "kcButtonBlockClass", "kcButtonLargeClass"), value: msgStr("passkey-doAuthenticate") })] }))] })));
|
|
22
29
|
}
|
|
23
30
|
function PasswordWrapper(props) {
|
|
24
31
|
const { kcClsx, i18n, passwordInputId, children } = props;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LoginPassword.js","sourceRoot":"","sources":["../../src/login/pages/LoginPassword.tsx"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"LoginPassword.js","sourceRoot":"","sources":["../../src/login/pages/LoginPassword.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { KcContext } from "../../login/KcContext/KcContext";
|
|
2
|
+
type KcContextLike = {
|
|
3
|
+
url: {
|
|
4
|
+
resourcesPath: string;
|
|
5
|
+
};
|
|
6
|
+
isUserIdentified: "true" | "false";
|
|
7
|
+
challenge: string;
|
|
8
|
+
userVerification: KcContext.WebauthnAuthenticate["userVerification"];
|
|
9
|
+
rpId: string;
|
|
10
|
+
createTimeout: number | string;
|
|
11
|
+
};
|
|
12
|
+
type I18nLike = {
|
|
13
|
+
msgStr: (key: "webauthn-unsupported-browser-text") => string;
|
|
14
|
+
isFetchingTranslations: boolean;
|
|
15
|
+
};
|
|
16
|
+
export declare function useScript(params: {
|
|
17
|
+
webAuthnButtonId: string;
|
|
18
|
+
kcContext: KcContextLike;
|
|
19
|
+
i18n: I18nLike;
|
|
20
|
+
}): void;
|
|
21
|
+
export {};
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { useEffect } from "react";
|
|
2
|
+
import { useInsertScriptTags } from "../../tools/useInsertScriptTags";
|
|
3
|
+
import { assert } from "../../tools/assert";
|
|
4
|
+
import { waitForElementMountedOnDom } from "../../tools/waitForElementMountedOnDom";
|
|
5
|
+
assert();
|
|
6
|
+
assert();
|
|
7
|
+
export function useScript(params) {
|
|
8
|
+
const { webAuthnButtonId, kcContext, i18n } = params;
|
|
9
|
+
const { url, isUserIdentified, challenge, userVerification, rpId, createTimeout } = kcContext;
|
|
10
|
+
const { msgStr, isFetchingTranslations } = i18n;
|
|
11
|
+
const { insertScriptTags } = useInsertScriptTags({
|
|
12
|
+
componentOrHookName: "LoginPassword",
|
|
13
|
+
scriptTags: [
|
|
14
|
+
{
|
|
15
|
+
type: "module",
|
|
16
|
+
textContent: () => `
|
|
17
|
+
|
|
18
|
+
import { authenticateByWebAuthn } from "${url.resourcesPath}/js/webauthnAuthenticate.js";
|
|
19
|
+
const authButton = document.getElementById('${webAuthnButtonId}');
|
|
20
|
+
authButton.addEventListener("click", function() {
|
|
21
|
+
const input = {
|
|
22
|
+
isUserIdentified : ${isUserIdentified},
|
|
23
|
+
challenge : '${challenge}',
|
|
24
|
+
userVerification : '${userVerification}',
|
|
25
|
+
rpId : '${rpId}',
|
|
26
|
+
createTimeout : ${createTimeout},
|
|
27
|
+
errmsg : ${JSON.stringify(msgStr("webauthn-unsupported-browser-text"))}
|
|
28
|
+
};
|
|
29
|
+
authenticateByWebAuthn(input);
|
|
30
|
+
});
|
|
31
|
+
`
|
|
32
|
+
}
|
|
33
|
+
]
|
|
34
|
+
});
|
|
35
|
+
useEffect(() => {
|
|
36
|
+
if (isFetchingTranslations) {
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
(async () => {
|
|
40
|
+
await waitForElementMountedOnDom({
|
|
41
|
+
elementId: webAuthnButtonId
|
|
42
|
+
});
|
|
43
|
+
insertScriptTags();
|
|
44
|
+
})();
|
|
45
|
+
}, [isFetchingTranslations]);
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=LoginPassword.useScript.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LoginPassword.useScript.js","sourceRoot":"","sources":["../../src/login/pages/LoginPassword.useScript.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EAAE,mBAAmB,EAAE,MAAM,uCAAuC,CAAC;AAC5E,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAElD,OAAO,EAAE,0BAA0B,EAAE,MAAM,8CAA8C,CAAC;AAa1F,MAAM,EAA4E,CAAC;AACnF,MAAM,EAAgE,CAAC;AAOvE,MAAM,UAAU,SAAS,CAAC,MAA8E;IACpG,MAAM,EAAE,gBAAgB,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC;IAErD,MAAM,EAAE,GAAG,EAAE,gBAAgB,EAAE,SAAS,EAAE,gBAAgB,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,SAAS,CAAC;IAE9F,MAAM,EAAE,MAAM,EAAE,sBAAsB,EAAE,GAAG,IAAI,CAAC;IAEhD,MAAM,EAAE,gBAAgB,EAAE,GAAG,mBAAmB,CAAC;QAC7C,mBAAmB,EAAE,eAAe;QACpC,UAAU,EAAE;YACR;gBACI,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,GAAG,EAAE,CAAC;;8DAE2B,GAAG,CAAC,aAAa;kEACb,gBAAgB;;;iDAGjC,gBAAgB;2CACtB,SAAS;kDACF,gBAAgB;sCAC5B,IAAI;8CACI,aAAa;uCACpB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,mCAAmC,CAAC,CAAC;;;;iBAIjF;aACJ;SACJ;KACJ,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACX,IAAI,sBAAsB,EAAE;YACxB,OAAO;SACV;QAED,CAAC,KAAK,IAAI,EAAE;YACR,MAAM,0BAA0B,CAAC;gBAC7B,SAAS,EAAE,gBAAgB;aAC9B,CAAC,CAAC;YAEH,gBAAgB,EAAE,CAAC;QACvB,CAAC,CAAC,EAAE,CAAC;IACT,CAAC,EAAE,CAAC,sBAAsB,CAAC,CAAC,CAAC;AACjC,CAAC"}
|
|
@@ -13,9 +13,9 @@ export default function LoginUsername(props) {
|
|
|
13
13
|
const { social, realm, url, usernameHidden, login, registrationDisabled, messagesPerField, enableWebAuthnConditionalUI, authenticators } = kcContext;
|
|
14
14
|
const { msg, msgStr } = i18n;
|
|
15
15
|
const [isLoginButtonDisabled, setIsLoginButtonDisabled] = useState(false);
|
|
16
|
-
const
|
|
16
|
+
const webAuthnButtonId = "authenticateWebAuthnButton";
|
|
17
17
|
useScript({
|
|
18
|
-
|
|
18
|
+
webAuthnButtonId,
|
|
19
19
|
kcContext,
|
|
20
20
|
i18n
|
|
21
21
|
});
|
|
@@ -26,6 +26,6 @@ export default function LoginUsername(props) {
|
|
|
26
26
|
? msg("username")
|
|
27
27
|
: !realm.registrationEmailAsUsername
|
|
28
28
|
? msg("usernameOrEmail")
|
|
29
|
-
: msg("email") })), _jsx("input", { tabIndex: 2, id: "username", className: kcClsx("kcInputClass"), name: "username", defaultValue: (_a = login.username) !== null && _a !== void 0 ? _a : "", type: "text", autoFocus: true, autoComplete: "username", "aria-invalid": messagesPerField.existsError("username") }), messagesPerField.existsError("username") && (_jsx("span", Object.assign({ id: "input-error", className: kcClsx("kcInputErrorMessageClass"), "aria-live": "polite" }, { children: messagesPerField.getFirstError("username") })))] }))), _jsx("div", Object.assign({ className: kcClsx("kcFormGroupClass", "kcFormSettingClass") }, { children: _jsx("div", Object.assign({ id: "kc-form-options" }, { children: realm.rememberMe && !usernameHidden && (_jsx("div", Object.assign({ className: "checkbox" }, { children: _jsxs("label", { children: [_jsx("input", { tabIndex: 3, id: "rememberMe", name: "rememberMe", type: "checkbox", defaultChecked: !!login.rememberMe }), " ", msg("rememberMe")] }) }))) })) })), _jsx("div", Object.assign({ id: "kc-form-buttons", className: kcClsx("kcFormGroupClass") }, { children: _jsx("input", { tabIndex: 4, disabled: isLoginButtonDisabled, className: kcClsx("kcButtonClass", "kcButtonPrimaryClass", "kcButtonBlockClass", "kcButtonLargeClass"), name: "login", id: "kc-login", type: "submit", value: msgStr("doLogIn") }) }))] }))) })) })), enableWebAuthnConditionalUI && (_jsxs(_Fragment, { children: [_jsxs("form", Object.assign({ id: "webauth", action: url.loginAction, method: "post" }, { children: [_jsx("input", { type: "hidden", id: "clientDataJSON", name: "clientDataJSON" }), _jsx("input", { type: "hidden", id: "authenticatorData", name: "authenticatorData" }), _jsx("input", { type: "hidden", id: "signature", name: "signature" }), _jsx("input", { type: "hidden", id: "credentialId", name: "credentialId" }), _jsx("input", { type: "hidden", id: "userHandle", name: "userHandle" }), _jsx("input", { type: "hidden", id: "error", name: "error" })] })), authenticators !== undefined &&
|
|
29
|
+
: msg("email") })), _jsx("input", { tabIndex: 2, id: "username", className: kcClsx("kcInputClass"), name: "username", defaultValue: (_a = login.username) !== null && _a !== void 0 ? _a : "", type: "text", autoFocus: true, autoComplete: "username", "aria-invalid": messagesPerField.existsError("username") }), messagesPerField.existsError("username") && (_jsx("span", Object.assign({ id: "input-error", className: kcClsx("kcInputErrorMessageClass"), "aria-live": "polite" }, { children: messagesPerField.getFirstError("username") })))] }))), _jsx("div", Object.assign({ className: kcClsx("kcFormGroupClass", "kcFormSettingClass") }, { children: _jsx("div", Object.assign({ id: "kc-form-options" }, { children: realm.rememberMe && !usernameHidden && (_jsx("div", Object.assign({ className: "checkbox" }, { children: _jsxs("label", { children: [_jsx("input", { tabIndex: 3, id: "rememberMe", name: "rememberMe", type: "checkbox", defaultChecked: !!login.rememberMe }), " ", msg("rememberMe")] }) }))) })) })), _jsx("div", Object.assign({ id: "kc-form-buttons", className: kcClsx("kcFormGroupClass") }, { children: _jsx("input", { tabIndex: 4, disabled: isLoginButtonDisabled, className: kcClsx("kcButtonClass", "kcButtonPrimaryClass", "kcButtonBlockClass", "kcButtonLargeClass"), name: "login", id: "kc-login", type: "submit", value: msgStr("doLogIn") }) }))] }))) })) })), enableWebAuthnConditionalUI && (_jsxs(_Fragment, { children: [_jsxs("form", Object.assign({ id: "webauth", action: url.loginAction, method: "post" }, { children: [_jsx("input", { type: "hidden", id: "clientDataJSON", name: "clientDataJSON" }), _jsx("input", { type: "hidden", id: "authenticatorData", name: "authenticatorData" }), _jsx("input", { type: "hidden", id: "signature", name: "signature" }), _jsx("input", { type: "hidden", id: "credentialId", name: "credentialId" }), _jsx("input", { type: "hidden", id: "userHandle", name: "userHandle" }), _jsx("input", { type: "hidden", id: "error", name: "error" })] })), authenticators !== undefined && authenticators.authenticators.length !== 0 && (_jsx(_Fragment, { children: _jsx("form", Object.assign({ id: "authn_select", className: kcClsx("kcFormClass") }, { children: authenticators.authenticators.map((authenticator, i) => (_jsx("input", { type: "hidden", name: "authn_use_chk", readOnly: true, value: authenticator.credentialId }, i))) })) })), _jsx("br", {}), _jsx("input", { id: webAuthnButtonId, type: "button", className: kcClsx("kcButtonClass", "kcButtonDefaultClass", "kcButtonBlockClass", "kcButtonLargeClass"), value: msgStr("passkey-doAuthenticate") })] }))] })));
|
|
30
30
|
}
|
|
31
31
|
//# sourceMappingURL=LoginUsername.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LoginUsername.js","sourceRoot":"","sources":["../../src/login/pages/LoginUsername.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAIzD,OAAO,EAAE,SAAS,EAAE,MAAM,iDAAiD,CAAC;AAE5E,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,KAA4E;;IAC9G,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;IAEtE,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;QACzB,eAAe;QACf,OAAO;KACV,CAAC,CAAC;IAEH,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,cAAc,EAAE,KAAK,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,2BAA2B,EAAE,cAAc,EAAE,GACpI,SAAS,CAAC;IAEd,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAE7B,MAAM,CAAC,qBAAqB,EAAE,wBAAwB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAE1E,MAAM,
|
|
1
|
+
{"version":3,"file":"LoginUsername.js","sourceRoot":"","sources":["../../src/login/pages/LoginUsername.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAIzD,OAAO,EAAE,SAAS,EAAE,MAAM,iDAAiD,CAAC;AAE5E,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,KAA4E;;IAC9G,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;IAEtE,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;QACzB,eAAe;QACf,OAAO;KACV,CAAC,CAAC;IAEH,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,cAAc,EAAE,KAAK,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,2BAA2B,EAAE,cAAc,EAAE,GACpI,SAAS,CAAC;IAEd,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAE7B,MAAM,CAAC,qBAAqB,EAAE,wBAAwB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAE1E,MAAM,gBAAgB,GAAG,4BAA4B,CAAC;IAEtD,SAAS,CAAC;QACN,gBAAgB;QAChB,SAAS;QACT,IAAI;KACP,CAAC,CAAC;IAEH,OAAO,CACH,MAAC,QAAQ,kBACL,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,IAAI,EACV,eAAe,EAAE,eAAe,EAChC,OAAO,EAAE,OAAO,EAChB,cAAc,EAAE,CAAC,gBAAgB,CAAC,WAAW,CAAC,UAAU,CAAC,EACzD,WAAW,EAAE,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,mBAAmB,IAAI,CAAC,oBAAoB,EACjF,QAAQ,EACJ,4BAAK,EAAE,EAAC,iBAAiB,gBACrB,2BACK,GAAG,CAAC,WAAW,CAAC,EACjB,0BAAG,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,eAAe,gBACpC,GAAG,CAAC,YAAY,CAAC,IAClB,IACD,IACL,EAEV,UAAU,EAAE,GAAG,CAAC,SAAS,CAAC,EAC1B,mBAAmB,EACf,4BACK,KAAK,CAAC,QAAQ,IAAI,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,SAAS,MAAK,SAAS,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,IAAI,CACnF,6BAAK,EAAE,EAAC,qBAAqB,EAAC,SAAS,EAAE,MAAM,CAAC,iCAAiC,CAAC,iBAC9E,cAAM,EACN,uBAAK,GAAG,CAAC,+BAA+B,CAAC,GAAM,EAC/C,2BAAI,SAAS,EAAE,MAAM,CAAC,8BAA8B,EAAE,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,kCAAkC,CAAC,gBACnH,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,AAAD,EAAG,SAAS,CAAC,EAAE,EAAE,CAAC,CAC3C,uBACI,2BACI,EAAE,EAAE,UAAU,CAAC,CAAC,KAAK,EAAE,EACvB,SAAS,EAAE,MAAM,CACb,oCAAoC,EACpC,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,6BAA6B,CACxD,EACD,IAAI,EAAC,QAAQ,EACb,IAAI,EAAE,CAAC,CAAC,QAAQ,iBAEf,CAAC,CAAC,WAAW,IAAI,YAAG,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,iBAAc,MAAM,GAAK,EACvG,6BAAM,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,8BAA8B,CAAC,EAAE,CAAC,CAAC,WAAW,IAAI,qBAAqB,CAAC,gBAChG,CAAC,CAAC,WAAW,IACX,KACP,IAdC,CAAC,CAAC,KAAK,CAeX,CACR,CAAC,IACD,KACH,CACT,GACF,iBAGP,4BAAK,EAAE,EAAC,SAAS,gBACb,4BAAK,EAAE,EAAC,iBAAiB,gBACpB,KAAK,CAAC,QAAQ,IAAI,CACf,8BACI,EAAE,EAAC,eAAe,EAClB,QAAQ,EAAE,GAAG,EAAE;4BACX,wBAAwB,CAAC,IAAI,CAAC,CAAC;4BAC/B,OAAO,IAAI,CAAC;wBAChB,CAAC,EACD,MAAM,EAAE,GAAG,CAAC,WAAW,EACvB,MAAM,EAAC,MAAM,iBAEZ,CAAC,cAAc,IAAI,CAChB,6BAAK,SAAS,EAAE,MAAM,CAAC,kBAAkB,CAAC,iBACtC,8BAAO,OAAO,EAAC,UAAU,EAAC,SAAS,EAAE,MAAM,CAAC,cAAc,CAAC,gBACtD,CAAC,KAAK,CAAC,qBAAqB;4CACzB,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC;4CACjB,CAAC,CAAC,CAAC,KAAK,CAAC,2BAA2B;gDAClC,CAAC,CAAC,GAAG,CAAC,iBAAiB,CAAC;gDACxB,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,IAChB,EACR,gBACI,QAAQ,EAAE,CAAC,EACX,EAAE,EAAC,UAAU,EACb,SAAS,EAAE,MAAM,CAAC,cAAc,CAAC,EACjC,IAAI,EAAC,UAAU,EACf,YAAY,EAAE,MAAA,KAAK,CAAC,QAAQ,mCAAI,EAAE,EAClC,IAAI,EAAC,MAAM,EACX,SAAS,QACT,YAAY,EAAC,UAAU,kBACT,gBAAgB,CAAC,WAAW,CAAC,UAAU,CAAC,GACxD,EACD,gBAAgB,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,CACzC,6BAAM,EAAE,EAAC,aAAa,EAAC,SAAS,EAAE,MAAM,CAAC,0BAA0B,CAAC,eAAY,QAAQ,gBACnF,gBAAgB,CAAC,aAAa,CAAC,UAAU,CAAC,IACxC,CACV,KACC,CACT,EAED,4BAAK,SAAS,EAAE,MAAM,CAAC,kBAAkB,EAAE,oBAAoB,CAAC,gBAC5D,4BAAK,EAAE,EAAC,iBAAiB,gBACpB,KAAK,CAAC,UAAU,IAAI,CAAC,cAAc,IAAI,CACpC,4BAAK,SAAS,EAAC,UAAU,gBACrB,4BACI,gBACI,QAAQ,EAAE,CAAC,EACX,EAAE,EAAC,YAAY,EACf,IAAI,EAAC,YAAY,EACjB,IAAI,EAAC,UAAU,EACf,cAAc,EAAE,CAAC,CAAC,KAAK,CAAC,UAAU,GACpC,EAAC,GAAG,EACL,GAAG,CAAC,YAAY,CAAC,IACd,IACN,CACT,IACC,IACJ,EAEN,4BAAK,EAAE,EAAC,iBAAiB,EAAC,SAAS,EAAE,MAAM,CAAC,kBAAkB,CAAC,gBAC3D,gBACI,QAAQ,EAAE,CAAC,EACX,QAAQ,EAAE,qBAAqB,EAC/B,SAAS,EAAE,MAAM,CAAC,eAAe,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,oBAAoB,CAAC,EACtG,IAAI,EAAC,OAAO,EACZ,EAAE,EAAC,UAAU,EACb,IAAI,EAAC,QAAQ,EACb,KAAK,EAAE,MAAM,CAAC,SAAS,CAAC,GAC1B,IACA,KACH,CACV,IACC,IACJ,EACL,2BAA2B,IAAI,CAC5B,8BACI,8BAAM,EAAE,EAAC,SAAS,EAAC,MAAM,EAAE,GAAG,CAAC,WAAW,EAAE,MAAM,EAAC,MAAM,iBACrD,gBAAO,IAAI,EAAC,QAAQ,EAAC,EAAE,EAAC,gBAAgB,EAAC,IAAI,EAAC,gBAAgB,GAAG,EACjE,gBAAO,IAAI,EAAC,QAAQ,EAAC,EAAE,EAAC,mBAAmB,EAAC,IAAI,EAAC,mBAAmB,GAAG,EACvE,gBAAO,IAAI,EAAC,QAAQ,EAAC,EAAE,EAAC,WAAW,EAAC,IAAI,EAAC,WAAW,GAAG,EACvD,gBAAO,IAAI,EAAC,QAAQ,EAAC,EAAE,EAAC,cAAc,EAAC,IAAI,EAAC,cAAc,GAAG,EAC7D,gBAAO,IAAI,EAAC,QAAQ,EAAC,EAAE,EAAC,YAAY,EAAC,IAAI,EAAC,YAAY,GAAG,EACzD,gBAAO,IAAI,EAAC,QAAQ,EAAC,EAAE,EAAC,OAAO,EAAC,IAAI,EAAC,OAAO,GAAG,KAC5C,EAEN,cAAc,KAAK,SAAS,IAAI,cAAc,CAAC,cAAc,CAAC,MAAM,KAAK,CAAC,IAAI,CAC3E,4BACI,6BAAM,EAAE,EAAC,cAAc,EAAC,SAAS,EAAE,MAAM,CAAC,aAAa,CAAC,gBACnD,cAAc,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,aAAa,EAAE,CAAC,EAAE,EAAE,CAAC,CACrD,gBAAe,IAAI,EAAC,QAAQ,EAAC,IAAI,EAAC,eAAe,EAAC,QAAQ,QAAC,KAAK,EAAE,aAAa,CAAC,YAAY,IAAhF,CAAC,CAAmF,CACnG,CAAC,IACC,GACR,CACN,EACD,cAAM,EAEN,gBACI,EAAE,EAAE,gBAAgB,EACpB,IAAI,EAAC,QAAQ,EACb,SAAS,EAAE,MAAM,CAAC,eAAe,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,oBAAoB,CAAC,EACtG,KAAK,EAAE,MAAM,CAAC,wBAAwB,CAAC,GACzC,IACH,CACN,KACM,CACd,CAAC;AACN,CAAC"}
|
|
@@ -5,7 +5,7 @@ import { waitForElementMountedOnDom } from "../../tools/waitForElementMountedOnD
|
|
|
5
5
|
assert();
|
|
6
6
|
assert();
|
|
7
7
|
export function useScript(params) {
|
|
8
|
-
const {
|
|
8
|
+
const { webAuthnButtonId, kcContext, i18n } = params;
|
|
9
9
|
const { url, isUserIdentified, challenge, userVerification, rpId, createTimeout } = kcContext;
|
|
10
10
|
const { msgStr, isFetchingTranslations } = i18n;
|
|
11
11
|
const { insertScriptTags } = useInsertScriptTags({
|
|
@@ -16,7 +16,7 @@ export function useScript(params) {
|
|
|
16
16
|
textContent: () => `
|
|
17
17
|
|
|
18
18
|
import { authenticateByWebAuthn } from "${url.resourcesPath}/js/webauthnAuthenticate.js";
|
|
19
|
-
const authButton = document.getElementById('${
|
|
19
|
+
const authButton = document.getElementById('${webAuthnButtonId}');
|
|
20
20
|
authButton.addEventListener("click", function() {
|
|
21
21
|
const input = {
|
|
22
22
|
isUserIdentified : ${isUserIdentified},
|
|
@@ -38,7 +38,7 @@ export function useScript(params) {
|
|
|
38
38
|
}
|
|
39
39
|
(async () => {
|
|
40
40
|
await waitForElementMountedOnDom({
|
|
41
|
-
elementId:
|
|
41
|
+
elementId: webAuthnButtonId
|
|
42
42
|
});
|
|
43
43
|
insertScriptTags();
|
|
44
44
|
})();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LoginUsername.useScript.js","sourceRoot":"","sources":["../../src/login/pages/LoginUsername.useScript.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EAAE,mBAAmB,EAAE,MAAM,uCAAuC,CAAC;AAC5E,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAElD,OAAO,EAAE,0BAA0B,EAAE,MAAM,8CAA8C,CAAC;AAa1F,MAAM,EAA4E,CAAC;AACnF,MAAM,EAAgE,CAAC;AAOvE,MAAM,UAAU,SAAS,CAAC,
|
|
1
|
+
{"version":3,"file":"LoginUsername.useScript.js","sourceRoot":"","sources":["../../src/login/pages/LoginUsername.useScript.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EAAE,mBAAmB,EAAE,MAAM,uCAAuC,CAAC;AAC5E,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAElD,OAAO,EAAE,0BAA0B,EAAE,MAAM,8CAA8C,CAAC;AAa1F,MAAM,EAA4E,CAAC;AACnF,MAAM,EAAgE,CAAC;AAOvE,MAAM,UAAU,SAAS,CAAC,MAA8E;IACpG,MAAM,EAAE,gBAAgB,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC;IAErD,MAAM,EAAE,GAAG,EAAE,gBAAgB,EAAE,SAAS,EAAE,gBAAgB,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,SAAS,CAAC;IAE9F,MAAM,EAAE,MAAM,EAAE,sBAAsB,EAAE,GAAG,IAAI,CAAC;IAEhD,MAAM,EAAE,gBAAgB,EAAE,GAAG,mBAAmB,CAAC;QAC7C,mBAAmB,EAAE,eAAe;QACpC,UAAU,EAAE;YACR;gBACI,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,GAAG,EAAE,CAAC;;8DAE2B,GAAG,CAAC,aAAa;kEACb,gBAAgB;;;iDAGjC,gBAAgB;2CACtB,SAAS;kDACF,gBAAgB;sCAC5B,IAAI;8CACI,aAAa;uCACpB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,mCAAmC,CAAC,CAAC;;;;iBAIjF;aACJ;SACJ;KACJ,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACX,IAAI,sBAAsB,EAAE;YACxB,OAAO;SACV;QAED,CAAC,KAAK,IAAI,EAAE;YACR,MAAM,0BAA0B,CAAC;gBAC7B,SAAS,EAAE,gBAAgB;aAC9B,CAAC,CAAC;YAEH,gBAAgB,EAAE,CAAC;QACvB,CAAC,CAAC,EAAE,CAAC;IACT,CAAC,EAAE,CAAC,sBAAsB,CAAC,CAAC,CAAC;AACjC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "keycloakify",
|
|
3
|
-
"version": "11.
|
|
3
|
+
"version": "11.12.0",
|
|
4
4
|
"description": "Framework to create custom Keycloak UIs",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -394,6 +394,9 @@
|
|
|
394
394
|
"login/pages/Login.d.ts",
|
|
395
395
|
"login/pages/Login.js",
|
|
396
396
|
"login/pages/Login.js.map",
|
|
397
|
+
"login/pages/Login.useScript.d.ts",
|
|
398
|
+
"login/pages/Login.useScript.js",
|
|
399
|
+
"login/pages/Login.useScript.js.map",
|
|
397
400
|
"login/pages/LoginConfigTotp.d.ts",
|
|
398
401
|
"login/pages/LoginConfigTotp.js",
|
|
399
402
|
"login/pages/LoginConfigTotp.js.map",
|
|
@@ -427,6 +430,9 @@
|
|
|
427
430
|
"login/pages/LoginPassword.d.ts",
|
|
428
431
|
"login/pages/LoginPassword.js",
|
|
429
432
|
"login/pages/LoginPassword.js.map",
|
|
433
|
+
"login/pages/LoginPassword.useScript.d.ts",
|
|
434
|
+
"login/pages/LoginPassword.useScript.js",
|
|
435
|
+
"login/pages/LoginPassword.useScript.js.map",
|
|
430
436
|
"login/pages/LoginRecoveryAuthnCodeConfig.d.ts",
|
|
431
437
|
"login/pages/LoginRecoveryAuthnCodeConfig.js",
|
|
432
438
|
"login/pages/LoginRecoveryAuthnCodeConfig.js.map",
|
|
@@ -842,6 +848,7 @@
|
|
|
842
848
|
"src/login/pages/IdpReviewUserProfile.tsx",
|
|
843
849
|
"src/login/pages/Info.tsx",
|
|
844
850
|
"src/login/pages/Login.tsx",
|
|
851
|
+
"src/login/pages/Login.useScript.tsx",
|
|
845
852
|
"src/login/pages/LoginConfigTotp.tsx",
|
|
846
853
|
"src/login/pages/LoginIdpLinkConfirm.tsx",
|
|
847
854
|
"src/login/pages/LoginIdpLinkConfirmOverride.tsx",
|
|
@@ -853,6 +860,7 @@
|
|
|
853
860
|
"src/login/pages/LoginPasskeysConditionalAuthenticate.tsx",
|
|
854
861
|
"src/login/pages/LoginPasskeysConditionalAuthenticate.useScript.tsx",
|
|
855
862
|
"src/login/pages/LoginPassword.tsx",
|
|
863
|
+
"src/login/pages/LoginPassword.useScript.tsx",
|
|
856
864
|
"src/login/pages/LoginRecoveryAuthnCodeConfig.tsx",
|
|
857
865
|
"src/login/pages/LoginRecoveryAuthnCodeConfig.useScript.tsx",
|
|
858
866
|
"src/login/pages/LoginRecoveryAuthnCodeInput.tsx",
|
|
@@ -85,6 +85,6 @@ export const KEYCLOAKIFY_SPA_DEV_SERVER_PORT = "KEYCLOAKIFY_SPA_DEV_SERVER_PORT"
|
|
|
85
85
|
|
|
86
86
|
export const KEYCLOAKIFY_LOGGING_VERSION = "1.0.3";
|
|
87
87
|
|
|
88
|
-
export const
|
|
88
|
+
export const KEYCLOAKIFY_LOGGING_JAR_BASENAME = `keycloakify-logging-${KEYCLOAKIFY_LOGGING_VERSION}.jar`;
|
|
89
89
|
|
|
90
90
|
export const TEST_APP_URL = "https://my-theme.keycloakify.dev";
|
|
@@ -3,7 +3,7 @@ import { exclude } from "tsafe/exclude";
|
|
|
3
3
|
import {
|
|
4
4
|
CONTAINER_NAME,
|
|
5
5
|
KEYCLOAKIFY_SPA_DEV_SERVER_PORT,
|
|
6
|
-
|
|
6
|
+
KEYCLOAKIFY_LOGGING_JAR_BASENAME,
|
|
7
7
|
TEST_APP_URL,
|
|
8
8
|
ThemeType
|
|
9
9
|
} from "../shared/constants";
|
|
@@ -346,7 +346,7 @@ export async function command(params: {
|
|
|
346
346
|
"src",
|
|
347
347
|
"bin",
|
|
348
348
|
"start-keycloak",
|
|
349
|
-
|
|
349
|
+
KEYCLOAKIFY_LOGGING_JAR_BASENAME
|
|
350
350
|
)
|
|
351
351
|
]),
|
|
352
352
|
...(await Promise.all(
|
|
@@ -205,6 +205,16 @@ export declare namespace KcContext {
|
|
|
205
205
|
iconClasses?: string;
|
|
206
206
|
}[];
|
|
207
207
|
};
|
|
208
|
+
enableWebAuthnConditionalUI?: boolean;
|
|
209
|
+
authenticators?: {
|
|
210
|
+
authenticators: WebauthnAuthenticate.WebauthnAuthenticator[];
|
|
211
|
+
};
|
|
212
|
+
challenge: string;
|
|
213
|
+
userVerification: WebauthnAuthenticate["userVerification"];
|
|
214
|
+
rpId: string;
|
|
215
|
+
createTimeout: number | string;
|
|
216
|
+
isUserIdentified: "true" | "false";
|
|
217
|
+
shouldDisplayAuthenticators?: boolean;
|
|
208
218
|
};
|
|
209
219
|
|
|
210
220
|
export type Register = Common & {
|
|
@@ -363,6 +373,16 @@ export declare namespace KcContext {
|
|
|
363
373
|
showTryAnotherWayLink?: boolean;
|
|
364
374
|
attemptedUsername?: string;
|
|
365
375
|
};
|
|
376
|
+
enableWebAuthnConditionalUI?: boolean;
|
|
377
|
+
authenticators?: {
|
|
378
|
+
authenticators: WebauthnAuthenticate.WebauthnAuthenticator[];
|
|
379
|
+
};
|
|
380
|
+
challenge: string;
|
|
381
|
+
userVerification: WebauthnAuthenticate["userVerification"];
|
|
382
|
+
rpId: string;
|
|
383
|
+
createTimeout: number | string;
|
|
384
|
+
isUserIdentified: "true" | "false";
|
|
385
|
+
shouldDisplayAuthenticators?: boolean;
|
|
366
386
|
};
|
|
367
387
|
|
|
368
388
|
export type WebauthnAuthenticate = Common & {
|
|
@@ -217,7 +217,17 @@ export const kcContextMocks = [
|
|
|
217
217
|
},
|
|
218
218
|
usernameHidden: false,
|
|
219
219
|
login: {},
|
|
220
|
-
registrationDisabled: false
|
|
220
|
+
registrationDisabled: false,
|
|
221
|
+
enableWebAuthnConditionalUI: false,
|
|
222
|
+
authenticators: {
|
|
223
|
+
authenticators: []
|
|
224
|
+
},
|
|
225
|
+
challenge: "",
|
|
226
|
+
userVerification: "not specified",
|
|
227
|
+
rpId: "",
|
|
228
|
+
createTimeout: "0",
|
|
229
|
+
isUserIdentified: "false",
|
|
230
|
+
shouldDisplayAuthenticators: false
|
|
221
231
|
}),
|
|
222
232
|
id<KcContext.Register>({
|
|
223
233
|
...kcContextCommonMock,
|
|
@@ -357,7 +367,17 @@ export const kcContextMocks = [
|
|
|
357
367
|
realm: {
|
|
358
368
|
...kcContextCommonMock.realm,
|
|
359
369
|
resetPasswordAllowed: true
|
|
360
|
-
}
|
|
370
|
+
},
|
|
371
|
+
enableWebAuthnConditionalUI: false,
|
|
372
|
+
authenticators: {
|
|
373
|
+
authenticators: []
|
|
374
|
+
},
|
|
375
|
+
challenge: "",
|
|
376
|
+
userVerification: "not specified",
|
|
377
|
+
rpId: "",
|
|
378
|
+
createTimeout: "0",
|
|
379
|
+
isUserIdentified: "false",
|
|
380
|
+
shouldDisplayAuthenticators: false
|
|
361
381
|
}),
|
|
362
382
|
id<KcContext.WebauthnAuthenticate>({
|
|
363
383
|
...kcContextCommonMock,
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Combined Username + Password login page (login.ftl) with optional WebAuthn passkey support.
|
|
3
|
+
* Renders standard login form plus conditional passkey authenticator section.
|
|
4
|
+
*/
|
|
1
5
|
import type { JSX } from "keycloakify/tools/JSX";
|
|
2
6
|
import { useState } from "react";
|
|
3
7
|
import { kcSanitize } from "keycloakify/lib/kcSanitize";
|
|
@@ -7,6 +11,7 @@ import type { PageProps } from "keycloakify/login/pages/PageProps";
|
|
|
7
11
|
import { getKcClsx, type KcClsx } from "keycloakify/login/lib/kcClsx";
|
|
8
12
|
import type { KcContext } from "../KcContext";
|
|
9
13
|
import type { I18n } from "../i18n";
|
|
14
|
+
import { useScript } from "keycloakify/login/pages/Login.useScript";
|
|
10
15
|
|
|
11
16
|
export default function Login(props: PageProps<Extract<KcContext, { pageId: "login.ftl" }>, I18n>) {
|
|
12
17
|
const { kcContext, i18n, doUseDefaultCss, Template, classes } = props;
|
|
@@ -16,12 +21,21 @@ export default function Login(props: PageProps<Extract<KcContext, { pageId: "log
|
|
|
16
21
|
classes
|
|
17
22
|
});
|
|
18
23
|
|
|
19
|
-
const { social, realm, url, usernameHidden, login, auth, registrationDisabled, messagesPerField } =
|
|
24
|
+
const { social, realm, url, usernameHidden, login, auth, registrationDisabled, messagesPerField, enableWebAuthnConditionalUI, authenticators } =
|
|
25
|
+
kcContext;
|
|
20
26
|
|
|
21
27
|
const { msg, msgStr } = i18n;
|
|
22
28
|
|
|
23
29
|
const [isLoginButtonDisabled, setIsLoginButtonDisabled] = useState(false);
|
|
24
30
|
|
|
31
|
+
const webAuthnButtonId = "authenticateWebAuthnButton";
|
|
32
|
+
|
|
33
|
+
useScript({
|
|
34
|
+
webAuthnButtonId,
|
|
35
|
+
kcContext,
|
|
36
|
+
i18n
|
|
37
|
+
});
|
|
38
|
+
|
|
25
39
|
return (
|
|
26
40
|
<Template
|
|
27
41
|
kcContext={kcContext}
|
|
@@ -191,6 +205,36 @@ export default function Login(props: PageProps<Extract<KcContext, { pageId: "log
|
|
|
191
205
|
)}
|
|
192
206
|
</div>
|
|
193
207
|
</div>
|
|
208
|
+
{enableWebAuthnConditionalUI && (
|
|
209
|
+
<>
|
|
210
|
+
<form id="webauth" action={url.loginAction} method="post">
|
|
211
|
+
<input type="hidden" id="clientDataJSON" name="clientDataJSON" />
|
|
212
|
+
<input type="hidden" id="authenticatorData" name="authenticatorData" />
|
|
213
|
+
<input type="hidden" id="signature" name="signature" />
|
|
214
|
+
<input type="hidden" id="credentialId" name="credentialId" />
|
|
215
|
+
<input type="hidden" id="userHandle" name="userHandle" />
|
|
216
|
+
<input type="hidden" id="error" name="error" />
|
|
217
|
+
</form>
|
|
218
|
+
|
|
219
|
+
{authenticators !== undefined && authenticators.authenticators.length !== 0 && (
|
|
220
|
+
<>
|
|
221
|
+
<form id="authn_select" className={kcClsx("kcFormClass")}>
|
|
222
|
+
{authenticators.authenticators.map((authenticator, i) => (
|
|
223
|
+
<input key={i} type="hidden" name="authn_use_chk" readOnly value={authenticator.credentialId} />
|
|
224
|
+
))}
|
|
225
|
+
</form>
|
|
226
|
+
</>
|
|
227
|
+
)}
|
|
228
|
+
<br />
|
|
229
|
+
|
|
230
|
+
<input
|
|
231
|
+
id={webAuthnButtonId}
|
|
232
|
+
type="button"
|
|
233
|
+
className={kcClsx("kcButtonClass", "kcButtonDefaultClass", "kcButtonBlockClass", "kcButtonLargeClass")}
|
|
234
|
+
value={msgStr("passkey-doAuthenticate")}
|
|
235
|
+
/>
|
|
236
|
+
</>
|
|
237
|
+
)}
|
|
194
238
|
</Template>
|
|
195
239
|
);
|
|
196
240
|
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { useEffect } from "react";
|
|
2
|
+
import { useInsertScriptTags } from "keycloakify/tools/useInsertScriptTags";
|
|
3
|
+
import { assert } from "keycloakify/tools/assert";
|
|
4
|
+
import { KcContext } from "keycloakify/login/KcContext/KcContext";
|
|
5
|
+
import { waitForElementMountedOnDom } from "keycloakify/tools/waitForElementMountedOnDom";
|
|
6
|
+
|
|
7
|
+
type KcContextLike = {
|
|
8
|
+
url: {
|
|
9
|
+
resourcesPath: string;
|
|
10
|
+
};
|
|
11
|
+
isUserIdentified: "true" | "false";
|
|
12
|
+
challenge: string;
|
|
13
|
+
userVerification: KcContext.WebauthnAuthenticate["userVerification"];
|
|
14
|
+
rpId: string;
|
|
15
|
+
createTimeout: number | string;
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
assert<keyof KcContextLike extends keyof KcContext.Login ? true : false>();
|
|
19
|
+
assert<KcContext.Login extends KcContextLike ? true : false>();
|
|
20
|
+
|
|
21
|
+
type I18nLike = {
|
|
22
|
+
msgStr: (key: "webauthn-unsupported-browser-text") => string;
|
|
23
|
+
isFetchingTranslations: boolean;
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
export function useScript(params: { webAuthnButtonId: string; kcContext: KcContextLike; i18n: I18nLike }) {
|
|
27
|
+
const { webAuthnButtonId, kcContext, i18n } = params;
|
|
28
|
+
|
|
29
|
+
const { url, isUserIdentified, challenge, userVerification, rpId, createTimeout } = kcContext;
|
|
30
|
+
|
|
31
|
+
const { msgStr, isFetchingTranslations } = i18n;
|
|
32
|
+
|
|
33
|
+
const { insertScriptTags } = useInsertScriptTags({
|
|
34
|
+
componentOrHookName: "Login",
|
|
35
|
+
scriptTags: [
|
|
36
|
+
{
|
|
37
|
+
type: "module",
|
|
38
|
+
textContent: () => `
|
|
39
|
+
|
|
40
|
+
import { authenticateByWebAuthn } from "${url.resourcesPath}/js/webauthnAuthenticate.js";
|
|
41
|
+
const authButton = document.getElementById('${webAuthnButtonId}');
|
|
42
|
+
authButton.addEventListener("click", function() {
|
|
43
|
+
const input = {
|
|
44
|
+
isUserIdentified : ${isUserIdentified},
|
|
45
|
+
challenge : '${challenge}',
|
|
46
|
+
userVerification : '${userVerification}',
|
|
47
|
+
rpId : '${rpId}',
|
|
48
|
+
createTimeout : ${createTimeout},
|
|
49
|
+
errmsg : ${JSON.stringify(msgStr("webauthn-unsupported-browser-text"))}
|
|
50
|
+
};
|
|
51
|
+
authenticateByWebAuthn(input);
|
|
52
|
+
});
|
|
53
|
+
`
|
|
54
|
+
}
|
|
55
|
+
]
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
useEffect(() => {
|
|
59
|
+
if (isFetchingTranslations) {
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
(async () => {
|
|
64
|
+
await waitForElementMountedOnDom({
|
|
65
|
+
elementId: webAuthnButtonId
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
insertScriptTags();
|
|
69
|
+
})();
|
|
70
|
+
}, [isFetchingTranslations]);
|
|
71
|
+
}
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Password step (login-password.ftl) for flows where username is already captured.
|
|
3
|
+
* Adds conditional WebAuthn passkey authenticate section when enabled.
|
|
4
|
+
*/
|
|
1
5
|
import type { JSX } from "keycloakify/tools/JSX";
|
|
2
6
|
import { useState } from "react";
|
|
3
7
|
import { kcSanitize } from "keycloakify/lib/kcSanitize";
|
|
@@ -7,6 +11,7 @@ import { getKcClsx, type KcClsx } from "keycloakify/login/lib/kcClsx";
|
|
|
7
11
|
import type { PageProps } from "keycloakify/login/pages/PageProps";
|
|
8
12
|
import type { KcContext } from "../KcContext";
|
|
9
13
|
import type { I18n } from "../i18n";
|
|
14
|
+
import { useScript } from "keycloakify/login/pages/LoginPassword.useScript";
|
|
10
15
|
|
|
11
16
|
export default function LoginPassword(props: PageProps<Extract<KcContext, { pageId: "login-password.ftl" }>, I18n>) {
|
|
12
17
|
const { kcContext, i18n, doUseDefaultCss, Template, classes } = props;
|
|
@@ -16,12 +21,20 @@ export default function LoginPassword(props: PageProps<Extract<KcContext, { page
|
|
|
16
21
|
classes
|
|
17
22
|
});
|
|
18
23
|
|
|
19
|
-
const { realm, url, messagesPerField } = kcContext;
|
|
24
|
+
const { realm, url, messagesPerField, enableWebAuthnConditionalUI, authenticators } = kcContext;
|
|
20
25
|
|
|
21
26
|
const { msg, msgStr } = i18n;
|
|
22
27
|
|
|
23
28
|
const [isLoginButtonDisabled, setIsLoginButtonDisabled] = useState(false);
|
|
24
29
|
|
|
30
|
+
const webAuthnButtonId = "authenticateWebAuthnButton";
|
|
31
|
+
|
|
32
|
+
useScript({
|
|
33
|
+
webAuthnButtonId,
|
|
34
|
+
kcContext,
|
|
35
|
+
i18n
|
|
36
|
+
});
|
|
37
|
+
|
|
25
38
|
return (
|
|
26
39
|
<Template
|
|
27
40
|
kcContext={kcContext}
|
|
@@ -98,6 +111,36 @@ export default function LoginPassword(props: PageProps<Extract<KcContext, { page
|
|
|
98
111
|
</form>
|
|
99
112
|
</div>
|
|
100
113
|
</div>
|
|
114
|
+
{enableWebAuthnConditionalUI && (
|
|
115
|
+
<>
|
|
116
|
+
<form id="webauth" action={url.loginAction} method="post">
|
|
117
|
+
<input type="hidden" id="clientDataJSON" name="clientDataJSON" />
|
|
118
|
+
<input type="hidden" id="authenticatorData" name="authenticatorData" />
|
|
119
|
+
<input type="hidden" id="signature" name="signature" />
|
|
120
|
+
<input type="hidden" id="credentialId" name="credentialId" />
|
|
121
|
+
<input type="hidden" id="userHandle" name="userHandle" />
|
|
122
|
+
<input type="hidden" id="error" name="error" />
|
|
123
|
+
</form>
|
|
124
|
+
|
|
125
|
+
{authenticators !== undefined && authenticators.authenticators.length !== 0 && (
|
|
126
|
+
<>
|
|
127
|
+
<form id="authn_select" className={kcClsx("kcFormClass")}>
|
|
128
|
+
{authenticators.authenticators.map((authenticator, i) => (
|
|
129
|
+
<input key={i} type="hidden" name="authn_use_chk" readOnly value={authenticator.credentialId} />
|
|
130
|
+
))}
|
|
131
|
+
</form>
|
|
132
|
+
</>
|
|
133
|
+
)}
|
|
134
|
+
<br />
|
|
135
|
+
|
|
136
|
+
<input
|
|
137
|
+
id={webAuthnButtonId}
|
|
138
|
+
type="button"
|
|
139
|
+
className={kcClsx("kcButtonClass", "kcButtonDefaultClass", "kcButtonBlockClass", "kcButtonLargeClass")}
|
|
140
|
+
value={msgStr("passkey-doAuthenticate")}
|
|
141
|
+
/>
|
|
142
|
+
</>
|
|
143
|
+
)}
|
|
101
144
|
</Template>
|
|
102
145
|
);
|
|
103
146
|
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { useEffect } from "react";
|
|
2
|
+
import { useInsertScriptTags } from "keycloakify/tools/useInsertScriptTags";
|
|
3
|
+
import { assert } from "keycloakify/tools/assert";
|
|
4
|
+
import { KcContext } from "keycloakify/login/KcContext/KcContext";
|
|
5
|
+
import { waitForElementMountedOnDom } from "keycloakify/tools/waitForElementMountedOnDom";
|
|
6
|
+
|
|
7
|
+
type KcContextLike = {
|
|
8
|
+
url: {
|
|
9
|
+
resourcesPath: string;
|
|
10
|
+
};
|
|
11
|
+
isUserIdentified: "true" | "false";
|
|
12
|
+
challenge: string;
|
|
13
|
+
userVerification: KcContext.WebauthnAuthenticate["userVerification"];
|
|
14
|
+
rpId: string;
|
|
15
|
+
createTimeout: number | string;
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
assert<keyof KcContextLike extends keyof KcContext.LoginPassword ? true : false>();
|
|
19
|
+
assert<KcContext.LoginPassword extends KcContextLike ? true : false>();
|
|
20
|
+
|
|
21
|
+
type I18nLike = {
|
|
22
|
+
msgStr: (key: "webauthn-unsupported-browser-text") => string;
|
|
23
|
+
isFetchingTranslations: boolean;
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
export function useScript(params: { webAuthnButtonId: string; kcContext: KcContextLike; i18n: I18nLike }) {
|
|
27
|
+
const { webAuthnButtonId, kcContext, i18n } = params;
|
|
28
|
+
|
|
29
|
+
const { url, isUserIdentified, challenge, userVerification, rpId, createTimeout } = kcContext;
|
|
30
|
+
|
|
31
|
+
const { msgStr, isFetchingTranslations } = i18n;
|
|
32
|
+
|
|
33
|
+
const { insertScriptTags } = useInsertScriptTags({
|
|
34
|
+
componentOrHookName: "LoginPassword",
|
|
35
|
+
scriptTags: [
|
|
36
|
+
{
|
|
37
|
+
type: "module",
|
|
38
|
+
textContent: () => `
|
|
39
|
+
|
|
40
|
+
import { authenticateByWebAuthn } from "${url.resourcesPath}/js/webauthnAuthenticate.js";
|
|
41
|
+
const authButton = document.getElementById('${webAuthnButtonId}');
|
|
42
|
+
authButton.addEventListener("click", function() {
|
|
43
|
+
const input = {
|
|
44
|
+
isUserIdentified : ${isUserIdentified},
|
|
45
|
+
challenge : '${challenge}',
|
|
46
|
+
userVerification : '${userVerification}',
|
|
47
|
+
rpId : '${rpId}',
|
|
48
|
+
createTimeout : ${createTimeout},
|
|
49
|
+
errmsg : ${JSON.stringify(msgStr("webauthn-unsupported-browser-text"))}
|
|
50
|
+
};
|
|
51
|
+
authenticateByWebAuthn(input);
|
|
52
|
+
});
|
|
53
|
+
`
|
|
54
|
+
}
|
|
55
|
+
]
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
useEffect(() => {
|
|
59
|
+
if (isFetchingTranslations) {
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
(async () => {
|
|
64
|
+
await waitForElementMountedOnDom({
|
|
65
|
+
elementId: webAuthnButtonId
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
insertScriptTags();
|
|
69
|
+
})();
|
|
70
|
+
}, [isFetchingTranslations]);
|
|
71
|
+
}
|
|
@@ -21,10 +21,10 @@ export default function LoginUsername(props: PageProps<Extract<KcContext, { page
|
|
|
21
21
|
|
|
22
22
|
const [isLoginButtonDisabled, setIsLoginButtonDisabled] = useState(false);
|
|
23
23
|
|
|
24
|
-
const
|
|
24
|
+
const webAuthnButtonId = "authenticateWebAuthnButton";
|
|
25
25
|
|
|
26
26
|
useScript({
|
|
27
|
-
|
|
27
|
+
webAuthnButtonId,
|
|
28
28
|
kcContext,
|
|
29
29
|
i18n
|
|
30
30
|
});
|
|
@@ -164,7 +164,7 @@ export default function LoginUsername(props: PageProps<Extract<KcContext, { page
|
|
|
164
164
|
<input type="hidden" id="error" name="error" />
|
|
165
165
|
</form>
|
|
166
166
|
|
|
167
|
-
{authenticators !== undefined &&
|
|
167
|
+
{authenticators !== undefined && authenticators.authenticators.length !== 0 && (
|
|
168
168
|
<>
|
|
169
169
|
<form id="authn_select" className={kcClsx("kcFormClass")}>
|
|
170
170
|
{authenticators.authenticators.map((authenticator, i) => (
|
|
@@ -174,13 +174,13 @@ export default function LoginUsername(props: PageProps<Extract<KcContext, { page
|
|
|
174
174
|
</>
|
|
175
175
|
)}
|
|
176
176
|
<br />
|
|
177
|
-
|
|
177
|
+
|
|
178
178
|
<input
|
|
179
|
-
id={
|
|
179
|
+
id={webAuthnButtonId}
|
|
180
180
|
type="button"
|
|
181
181
|
className={kcClsx("kcButtonClass", "kcButtonDefaultClass", "kcButtonBlockClass", "kcButtonLargeClass")}
|
|
182
182
|
value={msgStr("passkey-doAuthenticate")}
|
|
183
|
-
|
|
183
|
+
/>
|
|
184
184
|
</>
|
|
185
185
|
)}
|
|
186
186
|
</Template>
|
|
@@ -23,8 +23,8 @@ type I18nLike = {
|
|
|
23
23
|
isFetchingTranslations: boolean;
|
|
24
24
|
};
|
|
25
25
|
|
|
26
|
-
export function useScript(params: {
|
|
27
|
-
const {
|
|
26
|
+
export function useScript(params: { webAuthnButtonId: string; kcContext: KcContextLike; i18n: I18nLike }) {
|
|
27
|
+
const { webAuthnButtonId, kcContext, i18n } = params;
|
|
28
28
|
|
|
29
29
|
const { url, isUserIdentified, challenge, userVerification, rpId, createTimeout } = kcContext;
|
|
30
30
|
|
|
@@ -38,7 +38,7 @@ export function useScript(params: { authButtonId: string; kcContext: KcContextLi
|
|
|
38
38
|
textContent: () => `
|
|
39
39
|
|
|
40
40
|
import { authenticateByWebAuthn } from "${url.resourcesPath}/js/webauthnAuthenticate.js";
|
|
41
|
-
const authButton = document.getElementById('${
|
|
41
|
+
const authButton = document.getElementById('${webAuthnButtonId}');
|
|
42
42
|
authButton.addEventListener("click", function() {
|
|
43
43
|
const input = {
|
|
44
44
|
isUserIdentified : ${isUserIdentified},
|
|
@@ -62,7 +62,7 @@ export function useScript(params: { authButtonId: string; kcContext: KcContextLi
|
|
|
62
62
|
|
|
63
63
|
(async () => {
|
|
64
64
|
await waitForElementMountedOnDom({
|
|
65
|
-
elementId:
|
|
65
|
+
elementId: webAuthnButtonId
|
|
66
66
|
});
|
|
67
67
|
|
|
68
68
|
insertScriptTags();
|
package/vite-plugin/index.js
CHANGED
|
@@ -1018,8 +1018,8 @@ __nccwpck_require__.r(__webpack_exports__);
|
|
|
1018
1018
|
/* harmony export */ "CONTAINER_NAME": () => (/* binding */ CONTAINER_NAME),
|
|
1019
1019
|
/* harmony export */ "CUSTOM_HANDLER_ENV_NAMES": () => (/* binding */ CUSTOM_HANDLER_ENV_NAMES),
|
|
1020
1020
|
/* harmony export */ "FALLBACK_LANGUAGE_TAG": () => (/* binding */ FALLBACK_LANGUAGE_TAG),
|
|
1021
|
+
/* harmony export */ "KEYCLOAKIFY_LOGGING_JAR_BASENAME": () => (/* binding */ KEYCLOAKIFY_LOGGING_JAR_BASENAME),
|
|
1021
1022
|
/* harmony export */ "KEYCLOAKIFY_LOGGING_VERSION": () => (/* binding */ KEYCLOAKIFY_LOGGING_VERSION),
|
|
1022
|
-
/* harmony export */ "KEYCLOAKIFY_LOGIN_JAR_BASENAME": () => (/* binding */ KEYCLOAKIFY_LOGIN_JAR_BASENAME),
|
|
1023
1023
|
/* harmony export */ "KEYCLOAKIFY_SPA_DEV_SERVER_PORT": () => (/* binding */ KEYCLOAKIFY_SPA_DEV_SERVER_PORT),
|
|
1024
1024
|
/* harmony export */ "KEYCLOAK_THEME": () => (/* binding */ KEYCLOAK_THEME),
|
|
1025
1025
|
/* harmony export */ "LOGIN_THEME_PAGE_IDS": () => (/* binding */ LOGIN_THEME_PAGE_IDS),
|
|
@@ -1097,7 +1097,7 @@ const CUSTOM_HANDLER_ENV_NAMES = {
|
|
|
1097
1097
|
const KEYCLOAK_THEME = "keycloak-theme";
|
|
1098
1098
|
const KEYCLOAKIFY_SPA_DEV_SERVER_PORT = "KEYCLOAKIFY_SPA_DEV_SERVER_PORT";
|
|
1099
1099
|
const KEYCLOAKIFY_LOGGING_VERSION = "1.0.3";
|
|
1100
|
-
const
|
|
1100
|
+
const KEYCLOAKIFY_LOGGING_JAR_BASENAME = `keycloakify-logging-${KEYCLOAKIFY_LOGGING_VERSION}.jar`;
|
|
1101
1101
|
const TEST_APP_URL = "https://my-theme.keycloakify.dev";
|
|
1102
1102
|
//# sourceMappingURL=constants.js.map
|
|
1103
1103
|
|