keycloakify 10.1.0-rc.1 → 10.1.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/PUBLIC_URL.js +2 -2
- package/PUBLIC_URL.js.map +1 -1
- package/account/KcContext/kcContextMocks.js +3 -3
- package/account/KcContext/kcContextMocks.js.map +1 -1
- package/bin/193.index.js +198 -62
- package/bin/{365.index.js → 20.index.js} +302 -263
- package/bin/31.index.js +15 -23
- package/bin/{430.index.js → 33.index.js} +579 -4
- package/bin/{678.index.js → 36.index.js} +2 -577
- package/bin/{440.index.js → 499.index.js} +259 -181
- package/bin/526.index.js +12 -793
- package/bin/599.index.js +4 -1
- package/bin/780.index.js +1 -1
- package/bin/{525.index.js → 903.index.js} +4840 -97
- package/bin/932.index.js +115 -886
- package/bin/main.js +4 -4
- package/bin/shared/buildContext.d.ts +0 -2
- package/bin/shared/buildContext.js.map +1 -1
- package/bin/shared/constants.d.ts +5 -6
- package/bin/shared/constants.js +5 -6
- package/bin/shared/constants.js.map +1 -1
- package/bin/shared/copyKeycloakResourcesToPublic.d.ts +2 -4
- package/bin/shared/copyKeycloakResourcesToPublic.js.map +1 -1
- package/login/KcContext/KcContext.d.ts +9 -18
- package/login/KcContext/KcContext.js.map +1 -1
- package/login/KcContext/kcContextMocks.js +6 -10
- package/login/KcContext/kcContextMocks.js.map +1 -1
- package/login/Template.js +4 -59
- package/login/Template.js.map +1 -1
- package/login/Template.useStylesAndScripts.d.ts +17 -0
- package/login/Template.useStylesAndScripts.js +69 -0
- package/login/Template.useStylesAndScripts.js.map +1 -0
- package/login/pages/Login.js +1 -1
- package/login/pages/Login.js.map +1 -1
- package/login/pages/LoginIdpLinkConfirmOverride.js +0 -1
- package/login/pages/LoginIdpLinkConfirmOverride.js.map +1 -1
- package/login/pages/LoginPasskeysConditionalAuthenticate.js +6 -49
- package/login/pages/LoginPasskeysConditionalAuthenticate.js.map +1 -1
- package/login/pages/LoginPasskeysConditionalAuthenticate.useScript.d.ts +20 -0
- package/login/pages/LoginPasskeysConditionalAuthenticate.useScript.js +49 -0
- package/login/pages/LoginPasskeysConditionalAuthenticate.useScript.js.map +1 -0
- package/login/pages/LoginRecoveryAuthnCodeConfig.js +4 -126
- package/login/pages/LoginRecoveryAuthnCodeConfig.js.map +1 -1
- package/login/pages/LoginRecoveryAuthnCodeConfig.useScript.d.ts +9 -0
- package/login/pages/LoginRecoveryAuthnCodeConfig.useScript.js +133 -0
- package/login/pages/LoginRecoveryAuthnCodeConfig.useScript.js.map +1 -0
- package/login/pages/LoginUsername.js +1 -1
- package/login/pages/LoginUsername.js.map +1 -1
- package/login/pages/Register.js +6 -3
- package/login/pages/Register.js.map +1 -1
- package/login/pages/WebauthnAuthenticate.js +13 -116
- package/login/pages/WebauthnAuthenticate.js.map +1 -1
- package/login/pages/WebauthnAuthenticate.useScript.d.ts +21 -0
- package/login/pages/WebauthnAuthenticate.useScript.js +41 -0
- package/login/pages/WebauthnAuthenticate.useScript.js.map +1 -0
- package/login/pages/WebauthnRegister.js +8 -178
- package/login/pages/WebauthnRegister.js.map +1 -1
- package/login/pages/WebauthnRegister.useScript.d.ts +27 -0
- package/login/pages/WebauthnRegister.useScript.js +49 -0
- package/login/pages/WebauthnRegister.useScript.js.map +1 -0
- package/package.json +125 -15
- package/res/account-v1/account.ftl +70 -0
- package/res/account-v1/applications.ftl +76 -0
- package/res/account-v1/federatedIdentity.ftl +42 -0
- package/res/account-v1/log.ftl +35 -0
- package/res/account-v1/messages/messages_ar.properties +406 -0
- package/res/account-v1/messages/messages_ca.properties +147 -0
- package/res/account-v1/messages/messages_cs.properties +171 -0
- package/res/account-v1/messages/messages_da.properties +339 -0
- package/res/account-v1/messages/messages_de.properties +353 -0
- package/res/account-v1/messages/messages_en.properties +404 -0
- package/res/account-v1/messages/messages_es.properties +147 -0
- package/res/account-v1/messages/messages_fi.properties +400 -0
- package/res/account-v1/messages/messages_fr.properties +180 -0
- package/res/account-v1/messages/messages_hu.properties +334 -0
- package/res/account-v1/messages/messages_it.properties +336 -0
- package/res/account-v1/messages/messages_ja.properties +335 -0
- package/res/account-v1/messages/messages_lt.properties +154 -0
- package/res/account-v1/messages/messages_lv.properties +197 -0
- package/res/account-v1/messages/messages_nl.properties +371 -0
- package/res/account-v1/messages/messages_no.properties +152 -0
- package/res/account-v1/messages/messages_pl.properties +248 -0
- package/res/account-v1/messages/messages_pt_BR.properties +349 -0
- package/res/account-v1/messages/messages_ru.properties +235 -0
- package/res/account-v1/messages/messages_sk.properties +196 -0
- package/res/account-v1/messages/messages_sv.properties +150 -0
- package/res/account-v1/messages/messages_tr.properties +315 -0
- package/res/account-v1/messages/messages_zh_CN.properties +153 -0
- package/res/account-v1/password.ftl +59 -0
- package/res/account-v1/resource-detail.ftl +277 -0
- package/res/account-v1/resources/css/account.css +277 -0
- package/res/account-v1/resources/img/icon-sidebar-active.png +0 -0
- package/res/account-v1/resources/img/keycloak-logo.png +0 -0
- package/res/account-v1/resources/img/logo.png +0 -0
- package/res/account-v1/resources/resources-common/img/favicon.ico +0 -0
- package/res/account-v1/resources/resources-common/node_modules/patternfly/dist/css/patternfly-additions.min.css +5 -0
- package/res/account-v1/resources/resources-common/node_modules/patternfly/dist/css/patternfly.min.css +8 -0
- package/res/account-v1/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-Bold-webfont.woff2 +0 -0
- package/res/account-v1/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-Light-webfont.woff2 +0 -0
- package/res/account-v1/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-Regular-webfont.woff2 +0 -0
- package/res/account-v1/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-Semibold-webfont.woff2 +0 -0
- package/res/account-v1/resources/resources-common/node_modules/patternfly/dist/fonts/PatternFlyIcons-webfont.ttf +0 -0
- package/res/account-v1/resources/resources-common/node_modules/patternfly/dist/fonts/PatternFlyIcons-webfont.woff +0 -0
- package/res/account-v1/resources.ftl +403 -0
- package/res/account-v1/sessions.ftl +44 -0
- package/res/account-v1/template.ftl +88 -0
- package/res/account-v1/theme.properties +14 -0
- package/res/account-v1/totp.ftl +141 -0
- package/res/public/.keycloakify/account/css/account.css +277 -0
- package/res/public/.keycloakify/account/img/icon-sidebar-active.png +0 -0
- package/res/public/.keycloakify/account/img/keycloak-logo.png +0 -0
- package/res/public/.keycloakify/account/img/logo.png +0 -0
- package/res/public/.keycloakify/account/resources-common/img/favicon.ico +0 -0
- package/res/public/.keycloakify/account/resources-common/node_modules/patternfly/dist/css/patternfly-additions.min.css +5 -0
- package/res/public/.keycloakify/account/resources-common/node_modules/patternfly/dist/css/patternfly.min.css +8 -0
- package/res/public/.keycloakify/account/resources-common/node_modules/patternfly/dist/fonts/OpenSans-Bold-webfont.woff2 +0 -0
- package/res/public/.keycloakify/account/resources-common/node_modules/patternfly/dist/fonts/OpenSans-Light-webfont.woff2 +0 -0
- package/res/public/.keycloakify/account/resources-common/node_modules/patternfly/dist/fonts/OpenSans-Regular-webfont.woff2 +0 -0
- package/res/public/.keycloakify/account/resources-common/node_modules/patternfly/dist/fonts/OpenSans-Semibold-webfont.woff2 +0 -0
- package/res/public/.keycloakify/account/resources-common/node_modules/patternfly/dist/fonts/PatternFlyIcons-webfont.ttf +0 -0
- package/res/public/.keycloakify/account/resources-common/node_modules/patternfly/dist/fonts/PatternFlyIcons-webfont.woff +0 -0
- package/res/public/.keycloakify/login/css/login.css +629 -0
- package/res/public/.keycloakify/login/img/feedback-error-arrow-down.png +0 -0
- package/res/public/.keycloakify/login/img/feedback-error-sign.png +0 -0
- package/res/public/.keycloakify/login/img/feedback-success-arrow-down.png +0 -0
- package/res/public/.keycloakify/login/img/feedback-success-sign.png +0 -0
- package/res/public/.keycloakify/login/img/feedback-warning-arrow-down.png +0 -0
- package/res/public/.keycloakify/login/img/feedback-warning-sign.png +0 -0
- package/res/public/.keycloakify/login/img/keycloak-bg.png +0 -0
- package/res/public/.keycloakify/login/img/keycloak-logo-text.png +0 -0
- package/res/public/.keycloakify/login/img/keycloak-logo.png +0 -0
- package/res/public/.keycloakify/login/js/authChecker.js +49 -0
- package/res/public/.keycloakify/login/js/common.js +48 -0
- package/res/public/.keycloakify/login/js/kcMultivalued.js +106 -0
- package/res/public/.keycloakify/login/js/kcNumberFormat.js +21 -0
- package/res/public/.keycloakify/login/js/kcNumberUnFormat.js +19 -0
- package/res/public/.keycloakify/login/js/menu-button-links.js +315 -0
- package/{src/bin/shared/downloadKeycloakDefaultTheme/extra-assets → res/public/.keycloakify/login/js}/passkeysConditionalAuth.js +1 -1
- package/res/public/.keycloakify/login/js/passwordVisibility.js +15 -0
- package/res/public/.keycloakify/login/js/userProfile.js +71 -0
- package/res/public/.keycloakify/login/js/webauthnRegister.js +140 -0
- package/res/public/.keycloakify/login/resources-common/img/favicon.ico +0 -0
- package/res/public/.keycloakify/login/resources-common/lib/pficon/pficon.css +22 -0
- package/res/public/.keycloakify/login/resources-common/lib/pficon/pficon.woff2 +0 -0
- package/res/public/.keycloakify/login/resources-common/node_modules/@patternfly/patternfly/patternfly.min.css +2 -0
- package/res/public/.keycloakify/login/resources-common/node_modules/jquery/dist/jquery.min.js +2 -0
- package/res/public/.keycloakify/login/resources-common/node_modules/patternfly/dist/css/patternfly-additions.min.css +5 -0
- package/res/public/.keycloakify/login/resources-common/node_modules/patternfly/dist/css/patternfly.min.css +8 -0
- package/res/public/.keycloakify/login/resources-common/node_modules/patternfly/dist/fonts/OpenSans-Bold-webfont.ttf +0 -0
- package/res/public/.keycloakify/login/resources-common/node_modules/patternfly/dist/fonts/OpenSans-Bold-webfont.woff +0 -0
- package/res/public/.keycloakify/login/resources-common/node_modules/patternfly/dist/fonts/OpenSans-Bold-webfont.woff2 +0 -0
- package/res/public/.keycloakify/login/resources-common/node_modules/patternfly/dist/fonts/OpenSans-Light-webfont.woff2 +0 -0
- package/res/public/.keycloakify/login/resources-common/node_modules/patternfly/dist/fonts/OpenSans-Regular-webfont.woff2 +0 -0
- package/res/public/.keycloakify/login/resources-common/node_modules/patternfly/dist/fonts/OpenSans-Semibold-webfont.woff2 +0 -0
- package/res/public/.keycloakify/login/resources-common/node_modules/patternfly/dist/fonts/PatternFlyIcons-webfont.ttf +0 -0
- package/res/public/.keycloakify/login/resources-common/node_modules/patternfly/dist/fonts/PatternFlyIcons-webfont.woff +0 -0
- package/res/public/.keycloakify/login/resources-common/node_modules/patternfly/dist/fonts/fontawesome-webfont.woff2 +0 -0
- package/res/public/.keycloakify/login/resources-common/node_modules/patternfly/dist/img/bg-login.jpg +0 -0
- package/res/public/.keycloakify/login/resources-common/node_modules/rfc4648/lib/rfc4648.js +178 -0
- package/src/PUBLIC_URL.ts +5 -3
- package/src/account/KcContext/kcContextMocks.ts +3 -3
- package/src/bin/copy-keycloak-resources-to-public.ts +1 -1
- package/src/bin/initialize-account-theme/initializeAccountTheme_singlePage.ts +4 -1
- package/src/bin/initialize-email-theme.ts +28 -8
- package/src/bin/keycloakify/buildJars/buildJar.ts +3 -7
- package/src/bin/keycloakify/generateFtl/generateFtl.ts +3 -7
- package/src/bin/keycloakify/generateResources/generateResourcesForMainTheme.ts +65 -90
- package/src/bin/keycloakify/keycloakify.ts +38 -21
- package/src/bin/keycloakify/replacers/replaceImportsInCssCode.ts +2 -2
- package/src/bin/keycloakify/replacers/replaceImportsInJsCode/vite.ts +3 -3
- package/src/bin/keycloakify/replacers/replaceImportsInJsCode/webpack.ts +3 -3
- package/src/bin/shared/buildContext.ts +1 -8
- package/src/bin/shared/constants.ts +5 -7
- package/src/bin/shared/copyKeycloakResourcesToPublic.ts +30 -40
- package/src/bin/start-keycloak/start-keycloak.ts +10 -12
- package/src/login/KcContext/KcContext.ts +9 -18
- package/src/login/KcContext/kcContextMocks.ts +5 -13
- package/src/login/Template.tsx +4 -67
- package/src/login/Template.useStylesAndScripts.ts +94 -0
- package/src/login/pages/Login.tsx +1 -1
- package/src/login/pages/LoginIdpLinkConfirmOverride.tsx +0 -1
- package/src/login/pages/LoginPasskeysConditionalAuthenticate.tsx +6 -81
- package/src/login/pages/LoginPasskeysConditionalAuthenticate.useScript.tsx +72 -0
- package/src/login/pages/LoginRecoveryAuthnCodeConfig.tsx +4 -126
- package/src/login/pages/LoginRecoveryAuthnCodeConfig.useScript.tsx +142 -0
- package/src/login/pages/LoginUsername.tsx +1 -1
- package/src/login/pages/Register.tsx +35 -13
- package/src/login/pages/WebauthnAuthenticate.tsx +20 -133
- package/src/login/pages/WebauthnAuthenticate.useScript.tsx +64 -0
- package/src/login/pages/WebauthnRegister.tsx +8 -195
- package/src/login/pages/WebauthnRegister.useScript.tsx +93 -0
- package/src/tools/useInsertScriptTags.ts +14 -4
- package/src/vite-plugin/vite-plugin.ts +11 -15
- package/tools/useInsertScriptTags.d.ts +2 -2
- package/tools/useInsertScriptTags.js +8 -2
- package/tools/useInsertScriptTags.js.map +1 -1
- package/vite-plugin/index.js +3357 -47132
- package/bin/697.index.js +0 -4749
- package/bin/shared/downloadKeycloakStaticResources.d.ts +0 -9
- package/bin/shared/downloadKeycloakStaticResources.js.map +0 -1
- package/src/bin/keycloakify/generateResources/bringInAccountV1.ts +0 -89
- package/src/bin/shared/downloadKeycloakDefaultTheme/downloadKeycloakDefaultTheme.ts +0 -338
- package/src/bin/shared/downloadKeycloakDefaultTheme/index.ts +0 -1
- package/src/bin/shared/downloadKeycloakStaticResources.ts +0 -53
- /package/{src/bin/shared/downloadKeycloakDefaultTheme/extra-assets → res/public/.keycloakify/login/js}/webauthnAuthenticate.js +0 -0
@@ -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;AAKzD,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,GAAG,SAAS,CAAC;IAExG,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAE7B,MAAM,CAAC,qBAAqB,EAAE,wBAAwB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAE1E,OAAO,CACH,KAAC,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,MAAM,
|
1
|
+
{"version":3,"file":"LoginUsername.js","sourceRoot":"","sources":["../../src/login/pages/LoginUsername.tsx"],"names":[],"mappings":"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"}
|
package/login/pages/Register.js
CHANGED
@@ -1,17 +1,20 @@
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
2
2
|
import { useState } from "react";
|
3
3
|
import { getKcClsx } from "../../login/lib/kcClsx";
|
4
|
+
import { clsx } from "../../tools/clsx";
|
4
5
|
export default function Register(props) {
|
5
6
|
const { kcContext, i18n, doUseDefaultCss, Template, classes, UserProfileFormFields, doMakeUserConfirmPassword } = props;
|
6
7
|
const { kcClsx } = getKcClsx({
|
7
8
|
doUseDefaultCss,
|
8
9
|
classes
|
9
10
|
});
|
10
|
-
const { url, messagesPerField, recaptchaRequired, recaptchaSiteKey, termsAcceptanceRequired } = kcContext;
|
11
|
-
const { msg, msgStr } = i18n;
|
11
|
+
const { messageHeader, url, messagesPerField, recaptchaRequired, recaptchaVisible, recaptchaSiteKey, recaptchaAction, termsAcceptanceRequired } = kcContext;
|
12
|
+
const { msg, msgStr, advancedMsg } = i18n;
|
12
13
|
const [isFormSubmittable, setIsFormSubmittable] = useState(false);
|
13
14
|
const [areTermsAccepted, setAreTermsAccepted] = useState(false);
|
14
|
-
return (_jsx(Template, Object.assign({ kcContext: kcContext, i18n: i18n, doUseDefaultCss: doUseDefaultCss, classes: classes, headerNode: msg("registerTitle"), displayMessage: messagesPerField.exists("global"), displayRequiredFields: true }, { children: _jsxs("form", Object.assign({ id: "kc-register-form", className: kcClsx("kcFormClass"), action: url.registrationAction, method: "post" }, { children: [_jsx(UserProfileFormFields, { kcContext: kcContext, i18n: i18n, kcClsx: kcClsx, onIsFormSubmittableValueChange: setIsFormSubmittable, doMakeUserConfirmPassword: doMakeUserConfirmPassword }), termsAcceptanceRequired && (_jsx(TermsAcceptance, { i18n: i18n, kcClsx: kcClsx, messagesPerField: messagesPerField, areTermsAccepted: areTermsAccepted, onAreTermsAcceptedValueChange: setAreTermsAccepted })), recaptchaRequired && (_jsx("div", Object.assign({ className: "form-group" }, { children: _jsx("div", Object.assign({ className: kcClsx("kcInputWrapperClass") }, { children: _jsx("div", { className: "g-recaptcha", "data-size": "compact", "data-sitekey": recaptchaSiteKey }) })) }))), _jsxs("div", Object.assign({ className: kcClsx("kcFormGroupClass") }, { children: [_jsx("div", Object.assign({ id: "kc-form-options", className: kcClsx("kcFormOptionsClass") }, { children: _jsx("div", Object.assign({ className: kcClsx("kcFormOptionsWrapperClass") }, { children: _jsx("span", { children: _jsx("a", Object.assign({ href: url.loginUrl }, { children: msg("backToLogin") })) }) })) })), _jsx("div", Object.assign({ id: "kc-form-buttons", className: kcClsx("kcFormButtonsClass") }, { children: _jsx("
|
15
|
+
return (_jsx(Template, Object.assign({ kcContext: kcContext, i18n: i18n, doUseDefaultCss: doUseDefaultCss, classes: classes, headerNode: messageHeader !== undefined ? advancedMsg(messageHeader) : msg("registerTitle"), displayMessage: messagesPerField.exists("global"), displayRequiredFields: true }, { children: _jsxs("form", Object.assign({ id: "kc-register-form", className: kcClsx("kcFormClass"), action: url.registrationAction, method: "post" }, { children: [_jsx(UserProfileFormFields, { kcContext: kcContext, i18n: i18n, kcClsx: kcClsx, onIsFormSubmittableValueChange: setIsFormSubmittable, doMakeUserConfirmPassword: doMakeUserConfirmPassword }), termsAcceptanceRequired && (_jsx(TermsAcceptance, { i18n: i18n, kcClsx: kcClsx, messagesPerField: messagesPerField, areTermsAccepted: areTermsAccepted, onAreTermsAcceptedValueChange: setAreTermsAccepted })), recaptchaRequired && (recaptchaVisible || recaptchaAction === undefined) && (_jsx("div", Object.assign({ className: "form-group" }, { children: _jsx("div", Object.assign({ className: kcClsx("kcInputWrapperClass") }, { children: _jsx("div", { className: "g-recaptcha", "data-size": "compact", "data-sitekey": recaptchaSiteKey, "data-action": recaptchaAction }) })) }))), _jsxs("div", Object.assign({ className: kcClsx("kcFormGroupClass") }, { children: [_jsx("div", Object.assign({ id: "kc-form-options", className: kcClsx("kcFormOptionsClass") }, { children: _jsx("div", Object.assign({ className: kcClsx("kcFormOptionsWrapperClass") }, { children: _jsx("span", { children: _jsx("a", Object.assign({ href: url.loginUrl }, { children: msg("backToLogin") })) }) })) })), recaptchaRequired && !recaptchaVisible && recaptchaAction !== undefined ? (_jsx("div", Object.assign({ id: "kc-form-buttons", className: kcClsx("kcFormButtonsClass") }, { children: _jsx("button", Object.assign({ className: clsx(kcClsx("kcButtonClass", "kcButtonPrimaryClass", "kcButtonBlockClass", "kcButtonLargeClass"), "g-recaptcha"), "data-sitekey": recaptchaSiteKey, "data-callback": () => {
|
16
|
+
document.getElementById("kc-register-form").submit();
|
17
|
+
}, "data-action": recaptchaAction, type: "submit" }, { children: msg("doRegister") })) }))) : (_jsx("div", Object.assign({ id: "kc-form-buttons", className: kcClsx("kcFormButtonsClass") }, { children: _jsx("input", { disabled: !isFormSubmittable || (termsAcceptanceRequired && !areTermsAccepted), className: kcClsx("kcButtonClass", "kcButtonPrimaryClass", "kcButtonBlockClass", "kcButtonLargeClass"), type: "submit", value: msgStr("doRegister") }) })))] }))] })) })));
|
15
18
|
}
|
16
19
|
function TermsAcceptance(props) {
|
17
20
|
const { i18n, kcClsx, messagesPerField, areTermsAccepted, onAreTermsAcceptedValueChange } = props;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"Register.js","sourceRoot":"","sources":["../../src/login/pages/Register.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEjC,OAAO,EAAE,SAAS,EAAe,MAAM,8BAA8B,CAAC;
|
1
|
+
{"version":3,"file":"Register.js","sourceRoot":"","sources":["../../src/login/pages/Register.tsx"],"names":[],"mappings":"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"}
|
@@ -1,136 +1,33 @@
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
2
|
-
import {
|
3
|
-
import { assert } from "../../tools/assert";
|
2
|
+
import { Fragment } from "react";
|
4
3
|
import { clsx } from "../../tools/clsx";
|
5
|
-
import { useInsertScriptTags } from "../../tools/useInsertScriptTags";
|
6
4
|
import { getKcClsx } from "../../login/lib/kcClsx";
|
5
|
+
import { useScript } from "../../login/pages/WebauthnAuthenticate.useScript";
|
7
6
|
export default function WebauthnAuthenticate(props) {
|
8
7
|
const { kcContext, i18n, doUseDefaultCss, Template, classes } = props;
|
9
8
|
const { kcClsx } = getKcClsx({ doUseDefaultCss, classes });
|
10
|
-
const { url,
|
9
|
+
const { url, realm, registrationDisabled, authenticators, shouldDisplayAuthenticators } = kcContext;
|
11
10
|
const { msg, msgStr, advancedMsg } = i18n;
|
12
|
-
const
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
src: `${url.resourcesCommonPath}/node_modules/jquery/dist/jquery.min.js`
|
18
|
-
},
|
19
|
-
{
|
20
|
-
type: "text/javascript",
|
21
|
-
src: `${url.resourcesPath}/js/base64url.js`
|
22
|
-
},
|
23
|
-
{
|
24
|
-
type: "text/javascript",
|
25
|
-
textContent: `
|
26
|
-
|
27
|
-
function webAuthnAuthenticate() {
|
28
|
-
let isUserIdentified = ${isUserIdentified};
|
29
|
-
if (!isUserIdentified) {
|
30
|
-
doAuthenticate([]);
|
31
|
-
return;
|
32
|
-
}
|
33
|
-
checkAllowCredentials();
|
34
|
-
}
|
35
|
-
|
36
|
-
function checkAllowCredentials() {
|
37
|
-
let allowCredentials = [];
|
38
|
-
let authn_use = document.forms['authn_select'].authn_use_chk;
|
39
|
-
|
40
|
-
if (authn_use !== undefined) {
|
41
|
-
if (authn_use.length === undefined) {
|
42
|
-
allowCredentials.push({
|
43
|
-
id: base64url.decode(authn_use.value, {loose: true}),
|
44
|
-
type: 'public-key',
|
45
|
-
});
|
46
|
-
} else {
|
47
|
-
for (let i = 0; i < authn_use.length; i++) {
|
48
|
-
allowCredentials.push({
|
49
|
-
id: base64url.decode(authn_use[i].value, {loose: true}),
|
50
|
-
type: 'public-key',
|
51
|
-
});
|
52
|
-
}
|
53
|
-
}
|
54
|
-
}
|
55
|
-
doAuthenticate(allowCredentials);
|
56
|
-
}
|
57
|
-
|
58
|
-
|
59
|
-
function doAuthenticate(allowCredentials) {
|
60
|
-
|
61
|
-
// Check if WebAuthn is supported by this browser
|
62
|
-
if (!window.PublicKeyCredential) {
|
63
|
-
$("#error").val("${msgStr("webauthn-unsupported-browser-text")}");
|
64
|
-
$("#webauth").submit();
|
65
|
-
return;
|
66
|
-
}
|
67
|
-
|
68
|
-
let challenge = "${challenge}";
|
69
|
-
let userVerification = "${userVerification}";
|
70
|
-
let rpId = "${rpId}";
|
71
|
-
let publicKey = {
|
72
|
-
rpId : rpId,
|
73
|
-
challenge: base64url.decode(challenge, { loose: true })
|
74
|
-
};
|
75
|
-
|
76
|
-
let createTimeout = ${createTimeout};
|
77
|
-
if (createTimeout !== 0) publicKey.timeout = createTimeout * 1000;
|
78
|
-
|
79
|
-
if (allowCredentials.length) {
|
80
|
-
publicKey.allowCredentials = allowCredentials;
|
81
|
-
}
|
82
|
-
|
83
|
-
if (userVerification !== 'not specified') publicKey.userVerification = userVerification;
|
84
|
-
|
85
|
-
navigator.credentials.get({publicKey})
|
86
|
-
.then((result) => {
|
87
|
-
window.result = result;
|
88
|
-
|
89
|
-
let clientDataJSON = result.response.clientDataJSON;
|
90
|
-
let authenticatorData = result.response.authenticatorData;
|
91
|
-
let signature = result.response.signature;
|
92
|
-
|
93
|
-
$("#clientDataJSON").val(base64url.encode(new Uint8Array(clientDataJSON), { pad: false }));
|
94
|
-
$("#authenticatorData").val(base64url.encode(new Uint8Array(authenticatorData), { pad: false }));
|
95
|
-
$("#signature").val(base64url.encode(new Uint8Array(signature), { pad: false }));
|
96
|
-
$("#credentialId").val(result.id);
|
97
|
-
if(result.response.userHandle) {
|
98
|
-
$("#userHandle").val(base64url.encode(new Uint8Array(result.response.userHandle), { pad: false }));
|
99
|
-
}
|
100
|
-
$("#webauth").submit();
|
101
|
-
})
|
102
|
-
.catch((err) => {
|
103
|
-
$("#error").val(err);
|
104
|
-
$("#webauth").submit();
|
105
|
-
})
|
106
|
-
;
|
107
|
-
}
|
108
|
-
|
109
|
-
`
|
110
|
-
}
|
111
|
-
]
|
11
|
+
const authButtonId = "authenticateWebAuthnButton";
|
12
|
+
useScript({
|
13
|
+
authButtonId,
|
14
|
+
kcContext,
|
15
|
+
i18n
|
112
16
|
});
|
113
|
-
|
114
|
-
insertScriptTags();
|
115
|
-
}, []);
|
116
|
-
return (_jsx(Template, Object.assign({ kcContext: kcContext, i18n: i18n, doUseDefaultCss: doUseDefaultCss, classes: classes, displayMessage: !messagesPerField.existsError("username"), displayInfo: realm.password && realm.registrationAllowed && !registrationDisabled, infoNode: _jsx("div", Object.assign({ id: "kc-registration" }, { children: _jsxs("span", { children: [msg("noAccount"), " ", _jsx("a", Object.assign({ tabIndex: 6, href: url.registrationUrl }, { children: msg("doRegister") }))] }) })), headerNode: msg("webauthn-login-title") }, { children: _jsxs("div", Object.assign({ id: "kc-form-webauthn", className: kcClsx("kcFormClass") }, { 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" })] })), _jsxs("div", Object.assign({ className: clsx(kcClsx("kcFormGroupClass"), "no-bottom-margin") }, { children: [authenticators && (_jsxs(_Fragment, { children: [_jsx("form", Object.assign({ id: "authn_select", className: kcClsx("kcFormClass") }, { children: authenticators.authenticators.map(authenticator => (_jsx("input", { type: "hidden", name: "authn_use_chk", value: authenticator.credentialId }))) })), shouldDisplayAuthenticators && (_jsxs(_Fragment, { children: [authenticators.authenticators.length > 1 && (_jsx("p", Object.assign({ className: kcClsx("kcSelectAuthListItemTitle") }, { children: msg("webauthn-available-authenticators") }))), _jsx("div", Object.assign({ className: kcClsx("kcFormOptionsClass") }, { children: authenticators.authenticators.map((authenticator, i) => {
|
17
|
+
return (_jsx(Template, Object.assign({ kcContext: kcContext, i18n: i18n, doUseDefaultCss: doUseDefaultCss, classes: classes, displayInfo: realm.registrationAllowed && !registrationDisabled, infoNode: _jsx("div", Object.assign({ id: "kc-registration" }, { children: _jsxs("span", { children: [msg("noAccount"), " ", _jsx("a", Object.assign({ tabIndex: 6, href: url.registrationUrl }, { children: msg("doRegister") }))] }) })), headerNode: msg("webauthn-login-title") }, { children: _jsxs("div", Object.assign({ id: "kc-form-webauthn", className: kcClsx("kcFormClass") }, { 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" })] })), _jsxs("div", Object.assign({ className: clsx(kcClsx("kcFormGroupClass"), "no-bottom-margin") }, { children: [authenticators && (_jsxs(_Fragment, { children: [_jsx("form", Object.assign({ id: "authn_select", className: kcClsx("kcFormClass") }, { children: authenticators.authenticators.map(authenticator => (_jsx("input", { type: "hidden", name: "authn_use_chk", value: authenticator.credentialId }))) })), shouldDisplayAuthenticators && (_jsxs(_Fragment, { children: [authenticators.authenticators.length > 1 && (_jsx("p", Object.assign({ className: kcClsx("kcSelectAuthListItemTitle") }, { children: msg("webauthn-available-authenticators") }))), _jsx("div", Object.assign({ className: kcClsx("kcFormOptionsClass") }, { children: authenticators.authenticators.map((authenticator, i) => {
|
117
18
|
var _a;
|
118
|
-
return (_jsxs("div", Object.assign({ id:
|
19
|
+
return (_jsxs("div", Object.assign({ id: `kc-webauthn-authenticator-item-${i}`, className: kcClsx("kcSelectAuthListItemClass") }, { children: [_jsx("div", Object.assign({ className: kcClsx("kcSelectAuthListItemIconClass") }, { children: _jsx("i", { className: clsx((() => {
|
119
20
|
const className = kcClsx(authenticator.transports.iconClass);
|
120
21
|
if (className === authenticator.transports.iconClass) {
|
121
22
|
return kcClsx("kcWebAuthnDefaultIcon");
|
122
23
|
}
|
123
24
|
return className;
|
124
|
-
})(), kcClsx("kcSelectAuthListItemIconPropertyClass")) }) })), _jsxs("div", Object.assign({ className: kcClsx("kcSelectAuthListItemArrowIconClass") }, { children: [_jsx("div", Object.assign({ id:
|
25
|
+
})(), kcClsx("kcSelectAuthListItemIconPropertyClass")) }) })), _jsxs("div", Object.assign({ className: kcClsx("kcSelectAuthListItemArrowIconClass") }, { children: [_jsx("div", Object.assign({ id: `kc-webauthn-authenticator-label-${i}`, className: kcClsx("kcSelectAuthListItemHeadingClass") }, { children: advancedMsg(authenticator.label) })), ((_a = authenticator.transports.displayNameProperties) === null || _a === void 0 ? void 0 : _a.length) && (_jsx("div", Object.assign({ id: `kc-webauthn-authenticator-transport-${i}`, className: kcClsx("kcSelectAuthListItemDescriptionClass") }, { children: authenticator.transports.displayNameProperties
|
125
26
|
.map((displayNameProperty, i, arr) => ({
|
126
27
|
displayNameProperty,
|
127
28
|
hasNext: i !== arr.length - 1
|
128
29
|
}))
|
129
|
-
.map(({ displayNameProperty, hasNext }) => (_jsxs(Fragment, { children: [advancedMsg(displayNameProperty), hasNext && _jsx("span", { children: ", " })] }, displayNameProperty))) }))), _jsxs("div", Object.assign({ className: kcClsx("kcSelectAuthListItemDescriptionClass") }, { children: [_jsx("span", Object.assign({ id:
|
130
|
-
}) }))] }))] })), _jsx("div", Object.assign({ id: "kc-form-buttons", className: kcClsx("kcFormButtonsClass") }, { children: _jsx("input", { id:
|
131
|
-
assert("webAuthnAuthenticate" in window);
|
132
|
-
assert(typeof window.webAuthnAuthenticate === "function");
|
133
|
-
window.webAuthnAuthenticate();
|
134
|
-
}, autoFocus: true, value: msgStr("webauthn-doAuthenticate"), className: kcClsx("kcButtonClass", "kcButtonPrimaryClass", "kcButtonBlockClass", "kcButtonLargeClass") }) }))] }))] })) })));
|
30
|
+
.map(({ displayNameProperty, hasNext }) => (_jsxs(Fragment, { children: [advancedMsg(displayNameProperty), hasNext && _jsx("span", { children: ", " })] }, displayNameProperty))) }))), _jsxs("div", Object.assign({ className: kcClsx("kcSelectAuthListItemDescriptionClass") }, { children: [_jsx("span", Object.assign({ id: `kc-webauthn-authenticator-createdlabel-${i}` }, { children: msg("webauthn-createdAt-label") })), _jsx("span", Object.assign({ id: `kc-webauthn-authenticator-created-${i}` }, { children: authenticator.createdAt }))] })), _jsx("div", { className: kcClsx("kcSelectAuthListItemFillClass") })] }))] }), i));
|
31
|
+
}) }))] }))] })), _jsx("div", Object.assign({ id: "kc-form-buttons", className: kcClsx("kcFormButtonsClass") }, { children: _jsx("input", { id: authButtonId, type: "button", autoFocus: true, value: msgStr("webauthn-doAuthenticate"), className: kcClsx("kcButtonClass", "kcButtonPrimaryClass", "kcButtonBlockClass", "kcButtonLargeClass") }) }))] }))] })) })));
|
135
32
|
}
|
136
33
|
//# sourceMappingURL=WebauthnAuthenticate.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"WebauthnAuthenticate.js","sourceRoot":"","sources":["../../src/login/pages/WebauthnAuthenticate.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,
|
1
|
+
{"version":3,"file":"WebauthnAuthenticate.js","sourceRoot":"","sources":["../../src/login/pages/WebauthnAuthenticate.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
|
+
authButtonId: string;
|
18
|
+
kcContext: KcContextLike;
|
19
|
+
i18n: I18nLike;
|
20
|
+
}): void;
|
21
|
+
export {};
|
@@ -0,0 +1,41 @@
|
|
1
|
+
import { useEffect } from "react";
|
2
|
+
import { useInsertScriptTags } from "../../tools/useInsertScriptTags";
|
3
|
+
import { assert } from "../../tools/assert";
|
4
|
+
assert();
|
5
|
+
assert();
|
6
|
+
export function useScript(params) {
|
7
|
+
const { authButtonId, kcContext, i18n } = params;
|
8
|
+
const { url, isUserIdentified, challenge, userVerification, rpId, createTimeout } = kcContext;
|
9
|
+
const { msgStr, isFetchingTranslations } = i18n;
|
10
|
+
const { insertScriptTags } = useInsertScriptTags({
|
11
|
+
componentOrHookName: "WebauthnAuthenticate",
|
12
|
+
scriptTags: [
|
13
|
+
{
|
14
|
+
type: "module",
|
15
|
+
textContent: () => `
|
16
|
+
|
17
|
+
import { authenticateByWebAuthn } from "${url.resourcesPath}/js/webauthnAuthenticate.js";
|
18
|
+
const authButton = document.getElementById('${authButtonId}');
|
19
|
+
authButton.addEventListener("click", function() {
|
20
|
+
const input = {
|
21
|
+
isUserIdentified : ${isUserIdentified},
|
22
|
+
challenge : '${challenge}',
|
23
|
+
userVerification : '${userVerification}',
|
24
|
+
rpId : '${rpId}',
|
25
|
+
createTimeout : ${createTimeout},
|
26
|
+
errmsg : ${JSON.stringify(msgStr("webauthn-unsupported-browser-text"))}
|
27
|
+
};
|
28
|
+
authenticateByWebAuthn(input);
|
29
|
+
});
|
30
|
+
`
|
31
|
+
}
|
32
|
+
]
|
33
|
+
});
|
34
|
+
useEffect(() => {
|
35
|
+
if (isFetchingTranslations) {
|
36
|
+
return;
|
37
|
+
}
|
38
|
+
insertScriptTags();
|
39
|
+
}, [isFetchingTranslations]);
|
40
|
+
}
|
41
|
+
//# sourceMappingURL=WebauthnAuthenticate.useScript.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"WebauthnAuthenticate.useScript.js","sourceRoot":"","sources":["../../src/login/pages/WebauthnAuthenticate.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;AAclD,MAAM,EAAmF,CAAC;AAC1F,MAAM,EAAuE,CAAC;AAO9E,MAAM,UAAU,SAAS,CAAC,MAA0E;IAChG,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC;IAEjD,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,sBAAsB;QAC3C,UAAU,EAAE;YACR;gBACI,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,GAAG,EAAE,CAAC;;8DAE2B,GAAG,CAAC,aAAa;kEACb,YAAY;;;iDAG7B,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,gBAAgB,EAAE,CAAC;IACvB,CAAC,EAAE,CAAC,sBAAsB,CAAC,CAAC,CAAC;AACjC,CAAC"}
|
@@ -1,188 +1,18 @@
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
2
|
-
import { useEffect } from "react";
|
3
|
-
import { assert } from "../../tools/assert";
|
4
2
|
import { getKcClsx } from "../../login/lib/kcClsx";
|
5
|
-
import {
|
3
|
+
import { useScript } from "../../login/pages/WebauthnRegister.useScript";
|
6
4
|
export default function WebauthnRegister(props) {
|
7
5
|
const { kcContext, i18n, doUseDefaultCss, Template, classes } = props;
|
8
6
|
const { kcClsx } = getKcClsx({ doUseDefaultCss, classes });
|
9
|
-
const { url,
|
7
|
+
const { url, isSetRetry, isAppInitiatedAction } = kcContext;
|
10
8
|
const { msg, msgStr } = i18n;
|
11
|
-
const
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
src: `${url.resourcesCommonPath}/node_modules/jquery/dist/jquery.min.js`
|
17
|
-
},
|
18
|
-
{
|
19
|
-
type: "text/javascript",
|
20
|
-
src: `${url.resourcesPath}/js/base64url.js`
|
21
|
-
},
|
22
|
-
{
|
23
|
-
type: "text/javascript",
|
24
|
-
textContent: `
|
25
|
-
function registerSecurityKey() {
|
26
|
-
|
27
|
-
// Check if WebAuthn is supported by this browser
|
28
|
-
if (!window.PublicKeyCredential) {
|
29
|
-
$("#error").val("${msgStr("webauthn-unsupported-browser-text")}");
|
30
|
-
$("#register").submit();
|
31
|
-
return;
|
32
|
-
}
|
33
|
-
|
34
|
-
// mandatory parameters
|
35
|
-
let challenge = "${challenge}";
|
36
|
-
let userid = "${userid}";
|
37
|
-
let username = "${username}";
|
38
|
-
|
39
|
-
let signatureAlgorithms =${JSON.stringify(signatureAlgorithms)};
|
40
|
-
let pubKeyCredParams = getPubKeyCredParams(signatureAlgorithms);
|
41
|
-
|
42
|
-
let rpEntityName = "${rpEntityName}";
|
43
|
-
let rp = {name: rpEntityName};
|
44
|
-
|
45
|
-
let publicKey = {
|
46
|
-
challenge: base64url.decode(challenge, {loose: true}),
|
47
|
-
rp: rp,
|
48
|
-
user: {
|
49
|
-
id: base64url.decode(userid, {loose: true}),
|
50
|
-
name: username,
|
51
|
-
displayName: username
|
52
|
-
},
|
53
|
-
pubKeyCredParams: pubKeyCredParams,
|
54
|
-
};
|
55
|
-
|
56
|
-
// optional parameters
|
57
|
-
let rpId = "${rpId}";
|
58
|
-
publicKey.rp.id = rpId;
|
59
|
-
|
60
|
-
let attestationConveyancePreference = "${attestationConveyancePreference}";
|
61
|
-
if (attestationConveyancePreference !== 'not specified') publicKey.attestation = attestationConveyancePreference;
|
62
|
-
|
63
|
-
let authenticatorSelection = {};
|
64
|
-
let isAuthenticatorSelectionSpecified = false;
|
65
|
-
|
66
|
-
let authenticatorAttachment = "${authenticatorAttachment}";
|
67
|
-
if (authenticatorAttachment !== 'not specified') {
|
68
|
-
authenticatorSelection.authenticatorAttachment = authenticatorAttachment;
|
69
|
-
isAuthenticatorSelectionSpecified = true;
|
70
|
-
}
|
71
|
-
|
72
|
-
let requireResidentKey = "${requireResidentKey}";
|
73
|
-
if (requireResidentKey !== 'not specified') {
|
74
|
-
if (requireResidentKey === 'Yes')
|
75
|
-
authenticatorSelection.requireResidentKey = true;
|
76
|
-
else
|
77
|
-
authenticatorSelection.requireResidentKey = false;
|
78
|
-
isAuthenticatorSelectionSpecified = true;
|
79
|
-
}
|
80
|
-
|
81
|
-
let userVerificationRequirement = "${userVerificationRequirement}";
|
82
|
-
if (userVerificationRequirement !== 'not specified') {
|
83
|
-
authenticatorSelection.userVerification = userVerificationRequirement;
|
84
|
-
isAuthenticatorSelectionSpecified = true;
|
85
|
-
}
|
86
|
-
|
87
|
-
if (isAuthenticatorSelectionSpecified) publicKey.authenticatorSelection = authenticatorSelection;
|
88
|
-
|
89
|
-
let createTimeout = ${createTimeout};
|
90
|
-
if (createTimeout !== 0) publicKey.timeout = createTimeout * 1000;
|
91
|
-
|
92
|
-
let excludeCredentialIds = "${excludeCredentialIds}";
|
93
|
-
let excludeCredentials = getExcludeCredentials(excludeCredentialIds);
|
94
|
-
if (excludeCredentials.length > 0) publicKey.excludeCredentials = excludeCredentials;
|
95
|
-
|
96
|
-
navigator.credentials.create({publicKey})
|
97
|
-
.then(function (result) {
|
98
|
-
window.result = result;
|
99
|
-
let clientDataJSON = result.response.clientDataJSON;
|
100
|
-
let attestationObject = result.response.attestationObject;
|
101
|
-
let publicKeyCredentialId = result.rawId;
|
102
|
-
|
103
|
-
$("#clientDataJSON").val(base64url.encode(new Uint8Array(clientDataJSON), {pad: false}));
|
104
|
-
$("#attestationObject").val(base64url.encode(new Uint8Array(attestationObject), {pad: false}));
|
105
|
-
$("#publicKeyCredentialId").val(base64url.encode(new Uint8Array(publicKeyCredentialId), {pad: false}));
|
106
|
-
|
107
|
-
if (typeof result.response.getTransports === "function") {
|
108
|
-
let transports = result.response.getTransports();
|
109
|
-
if (transports) {
|
110
|
-
$("#transports").val(getTransportsAsString(transports));
|
111
|
-
}
|
112
|
-
} else {
|
113
|
-
console.log("Your browser is not able to recognize supported transport media for the authenticator.");
|
114
|
-
}
|
115
|
-
|
116
|
-
let initLabel = "WebAuthn Authenticator (Default Label)";
|
117
|
-
let labelResult = window.prompt("Please input your registered authenticator's label", initLabel);
|
118
|
-
if (labelResult === null) labelResult = initLabel;
|
119
|
-
$("#authenticatorLabel").val(labelResult);
|
120
|
-
|
121
|
-
$("#register").submit();
|
122
|
-
|
123
|
-
})
|
124
|
-
.catch(function (err) {
|
125
|
-
$("#error").val(err);
|
126
|
-
$("#register").submit();
|
127
|
-
|
128
|
-
});
|
129
|
-
}
|
130
|
-
|
131
|
-
function getPubKeyCredParams(signatureAlgorithmsList) {
|
132
|
-
let pubKeyCredParams = [];
|
133
|
-
if (signatureAlgorithmsList.length === 0) {
|
134
|
-
pubKeyCredParams.push({type: "public-key", alg: -7});
|
135
|
-
return pubKeyCredParams;
|
136
|
-
}
|
137
|
-
|
138
|
-
for (let i = 0; i < signatureAlgorithmsList.length; i++) {
|
139
|
-
pubKeyCredParams.push({
|
140
|
-
type: "public-key",
|
141
|
-
alg: signatureAlgorithmsList[i]
|
142
|
-
});
|
143
|
-
}
|
144
|
-
return pubKeyCredParams;
|
145
|
-
}
|
146
|
-
|
147
|
-
function getExcludeCredentials(excludeCredentialIds) {
|
148
|
-
let excludeCredentials = [];
|
149
|
-
if (excludeCredentialIds === "") return excludeCredentials;
|
150
|
-
|
151
|
-
let excludeCredentialIdsList = excludeCredentialIds.split(',');
|
152
|
-
|
153
|
-
for (let i = 0; i < excludeCredentialIdsList.length; i++) {
|
154
|
-
excludeCredentials.push({
|
155
|
-
type: "public-key",
|
156
|
-
id: base64url.decode(excludeCredentialIdsList[i],
|
157
|
-
{loose: true})
|
158
|
-
});
|
159
|
-
}
|
160
|
-
return excludeCredentials;
|
161
|
-
}
|
162
|
-
|
163
|
-
function getTransportsAsString(transportsList) {
|
164
|
-
if (transportsList === '' || Array.isArray(transportsList)) return "";
|
165
|
-
|
166
|
-
let transportsString = "";
|
167
|
-
|
168
|
-
for (let i = 0; i < transportsList.length; i++) {
|
169
|
-
transportsString += transportsList[i] + ",";
|
170
|
-
}
|
171
|
-
|
172
|
-
return transportsString.slice(0, -1);
|
173
|
-
}
|
174
|
-
`
|
175
|
-
}
|
176
|
-
]
|
9
|
+
const authButtonId = "authenticateWebAuthnButton";
|
10
|
+
useScript({
|
11
|
+
authButtonId,
|
12
|
+
kcContext,
|
13
|
+
i18n
|
177
14
|
});
|
178
|
-
|
179
|
-
insertScriptTags();
|
180
|
-
}, []);
|
181
|
-
return (_jsxs(Template, Object.assign({ kcContext: kcContext, i18n: i18n, doUseDefaultCss: doUseDefaultCss, classes: classes, headerNode: _jsxs(_Fragment, { children: [_jsx("span", { className: kcClsx("kcWebAuthnKeyIcon") }), msg("webauthn-registration-title")] }) }, { children: [_jsx("form", Object.assign({ id: "register", className: kcClsx("kcFormClass"), action: url.loginAction, method: "post" }, { children: _jsxs("div", Object.assign({ className: kcClsx("kcFormGroupClass") }, { children: [_jsx("input", { type: "hidden", id: "clientDataJSON", name: "clientDataJSON" }), _jsx("input", { type: "hidden", id: "attestationObject", name: "attestationObject" }), _jsx("input", { type: "hidden", id: "publicKeyCredentialId", name: "publicKeyCredentialId" }), _jsx("input", { type: "hidden", id: "authenticatorLabel", name: "authenticatorLabel" }), _jsx("input", { type: "hidden", id: "transports", name: "transports" }), _jsx("input", { type: "hidden", id: "error", name: "error" }), _jsx(LogoutOtherSessions, { kcClsx: kcClsx, i18n: i18n })] })) })), _jsx("input", { type: "submit", className: kcClsx("kcButtonClass", "kcButtonPrimaryClass", "kcButtonBlockClass", "kcButtonLargeClass"), id: "registerWebAuthn", value: msgStr("doRegisterSecurityKey"), onClick: () => {
|
182
|
-
assert("registerSecurityKey" in window);
|
183
|
-
assert(typeof window.registerSecurityKey === "function");
|
184
|
-
window.registerSecurityKey();
|
185
|
-
} }), !isSetRetry && isAppInitiatedAction && (_jsx("form", Object.assign({ action: url.loginAction, className: kcClsx("kcFormClass"), id: "kc-webauthn-settings-form", method: "post" }, { children: _jsx("button", Object.assign({ type: "submit", className: kcClsx("kcButtonClass", "kcButtonDefaultClass", "kcButtonBlockClass", "kcButtonLargeClass"), id: "cancelWebAuthnAIA", name: "cancel-aia", value: "true" }, { children: msg("doCancel") })) })))] })));
|
15
|
+
return (_jsxs(Template, Object.assign({ kcContext: kcContext, i18n: i18n, doUseDefaultCss: doUseDefaultCss, classes: classes, headerNode: _jsxs(_Fragment, { children: [_jsx("span", { className: kcClsx("kcWebAuthnKeyIcon") }), msg("webauthn-registration-title")] }) }, { children: [_jsx("form", Object.assign({ id: "register", className: kcClsx("kcFormClass"), action: url.loginAction, method: "post" }, { children: _jsxs("div", Object.assign({ className: kcClsx("kcFormGroupClass") }, { children: [_jsx("input", { type: "hidden", id: "clientDataJSON", name: "clientDataJSON" }), _jsx("input", { type: "hidden", id: "attestationObject", name: "attestationObject" }), _jsx("input", { type: "hidden", id: "publicKeyCredentialId", name: "publicKeyCredentialId" }), _jsx("input", { type: "hidden", id: "authenticatorLabel", name: "authenticatorLabel" }), _jsx("input", { type: "hidden", id: "transports", name: "transports" }), _jsx("input", { type: "hidden", id: "error", name: "error" }), _jsx(LogoutOtherSessions, { kcClsx: kcClsx, i18n: i18n })] })) })), _jsx("input", { type: "submit", className: kcClsx("kcButtonClass", "kcButtonPrimaryClass", "kcButtonBlockClass", "kcButtonLargeClass"), id: authButtonId, value: msgStr("doRegisterSecurityKey") }), !isSetRetry && isAppInitiatedAction && (_jsx("form", Object.assign({ action: url.loginAction, className: kcClsx("kcFormClass"), id: "kc-webauthn-settings-form", method: "post" }, { children: _jsx("button", Object.assign({ type: "submit", className: kcClsx("kcButtonClass", "kcButtonDefaultClass", "kcButtonBlockClass", "kcButtonLargeClass"), id: "cancelWebAuthnAIA", name: "cancel-aia", value: "true" }, { children: msg("doCancel") })) })))] })));
|
186
16
|
}
|
187
17
|
function LogoutOtherSessions(props) {
|
188
18
|
const { kcClsx, i18n } = props;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"WebauthnRegister.js","sourceRoot":"","sources":["../../src/login/pages/WebauthnRegister.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,
|
1
|
+
{"version":3,"file":"WebauthnRegister.js","sourceRoot":"","sources":["../../src/login/pages/WebauthnRegister.tsx"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,27 @@
|
|
1
|
+
type KcContextLike = {
|
2
|
+
url: {
|
3
|
+
resourcesPath: string;
|
4
|
+
};
|
5
|
+
challenge: string;
|
6
|
+
userid: string;
|
7
|
+
username: string;
|
8
|
+
signatureAlgorithms: string[];
|
9
|
+
rpEntityName: string;
|
10
|
+
rpId: string;
|
11
|
+
attestationConveyancePreference: string;
|
12
|
+
authenticatorAttachment: string;
|
13
|
+
requireResidentKey: string;
|
14
|
+
userVerificationRequirement: string;
|
15
|
+
createTimeout: number | string;
|
16
|
+
excludeCredentialIds: string;
|
17
|
+
};
|
18
|
+
type I18nLike = {
|
19
|
+
msgStr: (key: "webauthn-registration-init-label" | "webauthn-registration-init-label-prompt" | "webauthn-unsupported-browser-text") => string;
|
20
|
+
isFetchingTranslations: boolean;
|
21
|
+
};
|
22
|
+
export declare function useScript(params: {
|
23
|
+
authButtonId: string;
|
24
|
+
kcContext: KcContextLike;
|
25
|
+
i18n: I18nLike;
|
26
|
+
}): void;
|
27
|
+
export {};
|