keycloakify 9.6.7 → 10.0.0-rc.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/account/Template.js +34 -14
- package/account/Template.js.map +1 -1
- package/account/i18n/baseMessages/de.d.ts +1 -1
- package/account/i18n/baseMessages/de.js +1 -1
- package/account/i18n/baseMessages/de.js.map +1 -1
- package/account/i18n/baseMessages/en.d.ts +2 -0
- package/account/i18n/baseMessages/en.js +2 -0
- package/account/i18n/baseMessages/en.js.map +1 -1
- package/account/i18n/baseMessages/es.d.ts +230 -0
- package/account/i18n/baseMessages/es.js +231 -1
- package/account/i18n/baseMessages/es.js.map +1 -1
- package/account/i18n/baseMessages/index.d.ts +353 -407
- package/account/i18n/baseMessages/index.js +1 -0
- package/account/i18n/baseMessages/index.js.map +1 -1
- package/account/i18n/baseMessages/pl.d.ts +115 -1
- package/account/i18n/baseMessages/pl.js +115 -1
- package/account/i18n/baseMessages/pl.js.map +1 -1
- package/account/i18n/baseMessages/tr.d.ts +1 -1
- package/account/i18n/baseMessages/tr.js +1 -1
- package/account/i18n/baseMessages/tr.js.map +1 -1
- package/account/i18n/baseMessages/uk.d.ts +337 -0
- package/account/i18n/baseMessages/uk.js +342 -0
- package/account/i18n/baseMessages/uk.js.map +1 -0
- package/account/i18n/baseMessages/zh-CN.d.ts +10 -0
- package/account/i18n/baseMessages/zh-CN.js +10 -0
- package/account/i18n/baseMessages/zh-CN.js.map +1 -1
- package/bin/constants.d.ts +0 -1
- package/bin/constants.js +1 -2
- package/bin/constants.js.map +1 -1
- package/bin/keycloakify/buildJars/buildJar.d.ts +14 -0
- package/bin/keycloakify/buildJars/buildJar.js +224 -0
- package/bin/keycloakify/buildJars/buildJar.js.map +1 -0
- package/bin/keycloakify/buildJars/buildJars.d.ts +10 -0
- package/bin/keycloakify/buildJars/buildJars.js +95 -0
- package/bin/keycloakify/buildJars/buildJars.js.map +1 -0
- package/bin/keycloakify/buildJars/extensionVersions.d.ts +12 -0
- package/bin/keycloakify/buildJars/extensionVersions.js +7 -0
- package/bin/keycloakify/buildJars/extensionVersions.js.map +1 -0
- package/bin/keycloakify/buildJars/generatePom.d.ts +13 -0
- package/bin/keycloakify/buildJars/generatePom.js +95 -0
- package/bin/keycloakify/buildJars/generatePom.js.map +1 -0
- package/bin/keycloakify/buildJars/getKeycloakVersionRangeForJar.d.ts +6 -0
- package/bin/keycloakify/buildJars/getKeycloakVersionRangeForJar.js +35 -0
- package/bin/keycloakify/buildJars/getKeycloakVersionRangeForJar.js.map +1 -0
- package/bin/keycloakify/buildJars/index.d.ts +1 -0
- package/bin/keycloakify/buildJars/index.js +18 -0
- package/bin/keycloakify/buildJars/index.js.map +1 -0
- package/bin/keycloakify/buildOptions/UserProvidedBuildOptions.d.ts +0 -8
- package/bin/keycloakify/buildOptions/UserProvidedBuildOptions.js +1 -3
- package/bin/keycloakify/buildOptions/UserProvidedBuildOptions.js.map +1 -1
- package/bin/keycloakify/buildOptions/buildOptions.d.ts +0 -2
- package/bin/keycloakify/buildOptions/buildOptions.js +3 -5
- package/bin/keycloakify/buildOptions/buildOptions.js.map +1 -1
- package/bin/keycloakify/generateFtl/ftl_object_to_js_code_declaring_an_object.ftl +105 -234
- package/bin/keycloakify/generateFtl/generateFtl.js +17 -39
- package/bin/keycloakify/generateFtl/generateFtl.js.map +1 -1
- package/bin/keycloakify/generateFtl/pageId.d.ts +1 -1
- package/bin/keycloakify/generateFtl/pageId.js +11 -3
- package/bin/keycloakify/generateFtl/pageId.js.map +1 -1
- package/bin/keycloakify/generateStartKeycloakTestingContainer.d.ts +0 -1
- package/bin/keycloakify/generateStartKeycloakTestingContainer.js +3 -6
- package/bin/keycloakify/generateStartKeycloakTestingContainer.js.map +1 -1
- package/bin/keycloakify/generateTheme/bringInAccountV1.d.ts +1 -1
- package/bin/keycloakify/generateTheme/bringInAccountV1.js +5 -9
- package/bin/keycloakify/generateTheme/bringInAccountV1.js.map +1 -1
- package/bin/keycloakify/generateTheme/generateSrcMainResources.d.ts +21 -0
- package/bin/keycloakify/generateTheme/generateSrcMainResources.js +340 -0
- package/bin/keycloakify/generateTheme/generateSrcMainResources.js.map +1 -0
- package/bin/keycloakify/generateTheme/generateTheme.d.ts +5 -13
- package/bin/keycloakify/generateTheme/generateTheme.js +30 -293
- package/bin/keycloakify/generateTheme/generateTheme.js.map +1 -1
- package/bin/keycloakify/generateTheme/generateThemeVariants.d.ts +5 -0
- package/bin/keycloakify/generateTheme/generateThemeVariants.js +67 -0
- package/bin/keycloakify/generateTheme/generateThemeVariants.js.map +1 -0
- package/bin/keycloakify/generateTheme/readFieldNameUsage.js +53 -18
- package/bin/keycloakify/generateTheme/readFieldNameUsage.js.map +1 -1
- package/bin/keycloakify/keycloakify.js +28 -104
- package/bin/keycloakify/keycloakify.js.map +1 -1
- package/lib/useGetClassName.js +2 -2
- package/lib/useGetClassName.js.map +1 -1
- package/login/Fallback.d.ts +7 -1
- package/login/Fallback.js +32 -8
- package/login/Fallback.js.map +1 -1
- package/login/Template.js +76 -20
- package/login/Template.js.map +1 -1
- package/login/TemplateProps.d.ts +4 -2
- package/login/UserProfileFormFields.d.ts +22 -0
- package/login/UserProfileFormFields.js +327 -0
- package/login/UserProfileFormFields.js.map +1 -0
- package/login/i18n/baseMessages/ar.d.ts +3 -0
- package/login/i18n/baseMessages/ar.js +3 -0
- package/login/i18n/baseMessages/ar.js.map +1 -1
- package/login/i18n/baseMessages/ca.d.ts +1 -0
- package/login/i18n/baseMessages/ca.js +1 -0
- package/login/i18n/baseMessages/ca.js.map +1 -1
- package/login/i18n/baseMessages/cs.d.ts +3 -0
- package/login/i18n/baseMessages/cs.js +3 -0
- package/login/i18n/baseMessages/cs.js.map +1 -1
- package/login/i18n/baseMessages/da.d.ts +1 -0
- package/login/i18n/baseMessages/da.js +1 -0
- package/login/i18n/baseMessages/da.js.map +1 -1
- package/login/i18n/baseMessages/de.d.ts +1 -0
- package/login/i18n/baseMessages/de.js +1 -0
- package/login/i18n/baseMessages/de.js.map +1 -1
- package/login/i18n/baseMessages/el.d.ts +1 -0
- package/login/i18n/baseMessages/el.js +1 -0
- package/login/i18n/baseMessages/el.js.map +1 -1
- package/login/i18n/baseMessages/en.d.ts +7 -0
- package/login/i18n/baseMessages/en.js +23 -16
- package/login/i18n/baseMessages/en.js.map +1 -1
- package/login/i18n/baseMessages/es.d.ts +239 -0
- package/login/i18n/baseMessages/es.js +240 -1
- package/login/i18n/baseMessages/es.js.map +1 -1
- package/login/i18n/baseMessages/fa.d.ts +1 -0
- package/login/i18n/baseMessages/fa.js +1 -0
- package/login/i18n/baseMessages/fa.js.map +1 -1
- package/login/i18n/baseMessages/fi.d.ts +1 -0
- package/login/i18n/baseMessages/fi.js +1 -0
- package/login/i18n/baseMessages/fi.js.map +1 -1
- package/login/i18n/baseMessages/fr.d.ts +1 -0
- package/login/i18n/baseMessages/fr.js +2 -1
- package/login/i18n/baseMessages/fr.js.map +1 -1
- package/login/i18n/baseMessages/hu.d.ts +1 -0
- package/login/i18n/baseMessages/hu.js +1 -0
- package/login/i18n/baseMessages/hu.js.map +1 -1
- package/login/i18n/baseMessages/index.d.ts +211 -416
- package/login/i18n/baseMessages/index.js +1 -0
- package/login/i18n/baseMessages/index.js.map +1 -1
- package/login/i18n/baseMessages/it.d.ts +1 -0
- package/login/i18n/baseMessages/it.js +1 -0
- package/login/i18n/baseMessages/it.js.map +1 -1
- package/login/i18n/baseMessages/ja.d.ts +1 -0
- package/login/i18n/baseMessages/ja.js +1 -0
- package/login/i18n/baseMessages/ja.js.map +1 -1
- package/login/i18n/baseMessages/lt.d.ts +1 -0
- package/login/i18n/baseMessages/lt.js +1 -0
- package/login/i18n/baseMessages/lt.js.map +1 -1
- package/login/i18n/baseMessages/lv.d.ts +1 -0
- package/login/i18n/baseMessages/lv.js +1 -0
- package/login/i18n/baseMessages/lv.js.map +1 -1
- package/login/i18n/baseMessages/nl.d.ts +1 -0
- package/login/i18n/baseMessages/nl.js +1 -0
- package/login/i18n/baseMessages/nl.js.map +1 -1
- package/login/i18n/baseMessages/no.d.ts +1 -0
- package/login/i18n/baseMessages/no.js +1 -0
- package/login/i18n/baseMessages/no.js.map +1 -1
- package/login/i18n/baseMessages/pl.d.ts +1 -0
- package/login/i18n/baseMessages/pl.js +1 -0
- package/login/i18n/baseMessages/pl.js.map +1 -1
- package/login/i18n/baseMessages/pt-BR.d.ts +1 -0
- package/login/i18n/baseMessages/pt-BR.js +1 -0
- package/login/i18n/baseMessages/pt-BR.js.map +1 -1
- package/login/i18n/baseMessages/ru.d.ts +1 -0
- package/login/i18n/baseMessages/ru.js +1 -0
- package/login/i18n/baseMessages/ru.js.map +1 -1
- package/login/i18n/baseMessages/sk.d.ts +2 -0
- package/login/i18n/baseMessages/sk.js +3 -1
- package/login/i18n/baseMessages/sk.js.map +1 -1
- package/login/i18n/baseMessages/sv.d.ts +1 -0
- package/login/i18n/baseMessages/sv.js +1 -0
- package/login/i18n/baseMessages/sv.js.map +1 -1
- package/login/i18n/baseMessages/th.d.ts +1 -0
- package/login/i18n/baseMessages/th.js +1 -0
- package/login/i18n/baseMessages/th.js.map +1 -1
- package/login/i18n/baseMessages/tr.d.ts +1 -0
- package/login/i18n/baseMessages/tr.js +1 -0
- package/login/i18n/baseMessages/tr.js.map +1 -1
- package/login/i18n/baseMessages/uk.d.ts +433 -0
- package/login/i18n/baseMessages/uk.js +438 -0
- package/login/i18n/baseMessages/uk.js.map +1 -0
- package/login/i18n/baseMessages/zh-CN.d.ts +273 -3
- package/login/i18n/baseMessages/zh-CN.js +325 -55
- package/login/i18n/baseMessages/zh-CN.js.map +1 -1
- package/login/i18n/i18n.d.ts +4 -0
- package/login/i18n/i18n.js +6 -2
- package/login/i18n/i18n.js.map +1 -1
- package/login/kcContext/KcContext.d.ts +181 -105
- package/login/kcContext/KcContext.js +1 -1
- package/login/kcContext/KcContext.js.map +1 -1
- package/login/kcContext/createGetKcContext.js +3 -9
- package/login/kcContext/createGetKcContext.js.map +1 -1
- package/login/kcContext/kcContextMocks.d.ts +1 -1
- package/login/kcContext/kcContextMocks.js +92 -198
- package/login/kcContext/kcContextMocks.js.map +1 -1
- package/login/lib/useDownloadTerms.d.ts +4 -1
- package/login/lib/useDownloadTerms.js +9 -4
- package/login/lib/useDownloadTerms.js.map +1 -1
- package/login/lib/useGetClassName.js +112 -73
- package/login/lib/useGetClassName.js.map +1 -1
- package/login/lib/useUserProfileForm.d.ts +74 -0
- package/login/lib/useUserProfileForm.js +868 -0
- package/login/lib/useUserProfileForm.js.map +1 -0
- package/login/pages/{UpdateUserProfile.d.ts → Code.d.ts} +2 -2
- package/login/pages/Code.js +13 -0
- package/login/pages/Code.js.map +1 -0
- package/login/pages/DeleteAccountConfirm.d.ts +7 -0
- package/login/pages/DeleteAccountConfirm.js +14 -0
- package/login/pages/DeleteAccountConfirm.js.map +1 -0
- package/login/pages/{RegisterUserProfile.d.ts → DeleteCredential.d.ts} +2 -2
- package/login/pages/DeleteCredential.js +14 -0
- package/login/pages/DeleteCredential.js.map +1 -0
- package/login/pages/Error.js +2 -2
- package/login/pages/Error.js.map +1 -1
- package/login/pages/FrontchannelLogout.d.ts +7 -0
- package/login/pages/FrontchannelLogout.js +14 -0
- package/login/pages/FrontchannelLogout.js.map +1 -0
- package/login/pages/IdpReviewUserProfile.d.ts +8 -2
- package/login/pages/IdpReviewUserProfile.js +3 -4
- package/login/pages/IdpReviewUserProfile.js.map +1 -1
- package/login/pages/Info.js +14 -1
- package/login/pages/Info.js.map +1 -1
- package/login/pages/Login.js +24 -38
- package/login/pages/Login.js.map +1 -1
- package/login/pages/LoginConfigTotp.js +8 -1
- package/login/pages/LoginConfigTotp.js.map +1 -1
- package/login/pages/{LoginDeviceVerifyUserCode.d.ts → LoginOauth2DeviceVerifyUserCode.d.ts} +1 -1
- package/login/pages/{LoginDeviceVerifyUserCode.js → LoginOauth2DeviceVerifyUserCode.js} +2 -2
- package/login/pages/LoginOauth2DeviceVerifyUserCode.js.map +1 -0
- package/login/pages/LoginOauthGrant.js +3 -2
- package/login/pages/LoginOauthGrant.js.map +1 -1
- package/login/pages/LoginOtp.js +4 -6
- package/login/pages/LoginOtp.js.map +1 -1
- package/login/pages/LoginPageExpired.js +1 -1
- package/login/pages/LoginPageExpired.js.map +1 -1
- package/login/pages/LoginPassword.d.ts +1 -1
- package/login/pages/LoginPassword.js +18 -11
- package/login/pages/LoginPassword.js.map +1 -1
- package/login/pages/LoginRecoveryAuthnCodeConfig.d.ts +7 -0
- package/login/pages/LoginRecoveryAuthnCodeConfig.js +147 -0
- package/login/pages/LoginRecoveryAuthnCodeConfig.js.map +1 -0
- package/login/pages/LoginRecoveryAuthnCodeInput.d.ts +7 -0
- package/login/pages/LoginRecoveryAuthnCodeInput.js +14 -0
- package/login/pages/LoginRecoveryAuthnCodeInput.js.map +1 -0
- package/login/pages/LoginResetOtp.d.ts +7 -0
- package/login/pages/LoginResetOtp.js +15 -0
- package/login/pages/LoginResetOtp.js.map +1 -0
- package/login/pages/LoginResetPassword.js +4 -3
- package/login/pages/LoginResetPassword.js.map +1 -1
- package/login/pages/LoginUpdatePassword.js +21 -3
- package/login/pages/LoginUpdatePassword.js.map +1 -1
- package/login/pages/LoginUpdateProfile.d.ts +8 -2
- package/login/pages/LoginUpdateProfile.js +11 -5
- package/login/pages/LoginUpdateProfile.js.map +1 -1
- package/login/pages/LoginUsername.js +11 -35
- package/login/pages/LoginUsername.js.map +1 -1
- package/login/pages/LoginVerifyEmail.js +1 -1
- package/login/pages/LoginVerifyEmail.js.map +1 -1
- package/login/pages/LoginX509Info.d.ts +7 -0
- package/login/pages/LoginX509Info.js +14 -0
- package/login/pages/LoginX509Info.js.map +1 -0
- package/login/pages/LogoutConfirm.js +1 -1
- package/login/pages/LogoutConfirm.js.map +1 -1
- package/login/pages/Register.d.ts +8 -2
- package/login/pages/Register.js +26 -4
- package/login/pages/Register.js.map +1 -1
- package/login/pages/SamlPostForm.js +1 -1
- package/login/pages/SamlPostForm.js.map +1 -1
- package/login/pages/SelectAuthenticator.js +5 -21
- package/login/pages/SelectAuthenticator.js.map +1 -1
- package/login/pages/Terms.js +4 -6
- package/login/pages/Terms.js.map +1 -1
- package/login/pages/UpdateEmail.d.ts +8 -2
- package/login/pages/UpdateEmail.js +16 -5
- package/login/pages/UpdateEmail.js.map +1 -1
- package/login/pages/WebauthnAuthenticate.js +121 -83
- package/login/pages/WebauthnAuthenticate.js.map +1 -1
- package/login/pages/WebauthnError.d.ts +7 -0
- package/login/pages/WebauthnError.js +21 -0
- package/login/pages/WebauthnError.js.map +1 -0
- package/login/pages/WebauthnRegister.d.ts +7 -0
- package/login/pages/WebauthnRegister.js +193 -0
- package/login/pages/WebauthnRegister.js.map +1 -0
- package/package.json +138 -43
- package/src/account/Template.tsx +41 -14
- package/src/account/i18n/baseMessages/de.ts +1 -1
- package/src/account/i18n/baseMessages/en.ts +2 -0
- package/src/account/i18n/baseMessages/es.ts +231 -1
- package/src/account/i18n/baseMessages/index.ts +1 -0
- package/src/account/i18n/baseMessages/pl.ts +115 -1
- package/src/account/i18n/baseMessages/tr.ts +1 -1
- package/src/account/i18n/baseMessages/uk.ts +343 -0
- package/src/account/i18n/baseMessages/zh-CN.ts +10 -0
- package/src/bin/constants.ts +0 -1
- package/src/bin/keycloakify/buildJars/buildJar.ts +174 -0
- package/src/bin/keycloakify/buildJars/buildJars.ts +62 -0
- package/src/bin/keycloakify/buildJars/extensionVersions.ts +16 -0
- package/src/bin/keycloakify/buildJars/generatePom.ts +86 -0
- package/src/bin/keycloakify/buildJars/getKeycloakVersionRangeForJar.ts +37 -0
- package/src/bin/keycloakify/buildJars/index.ts +1 -0
- package/src/bin/keycloakify/buildOptions/UserProvidedBuildOptions.ts +1 -5
- package/src/bin/keycloakify/buildOptions/buildOptions.ts +1 -5
- package/src/bin/keycloakify/generateFtl/ftl_object_to_js_code_declaring_an_object.ftl +105 -234
- package/src/bin/keycloakify/generateFtl/generateFtl.ts +15 -31
- package/src/bin/keycloakify/generateFtl/pageId.ts +11 -3
- package/src/bin/keycloakify/generateStartKeycloakTestingContainer.ts +4 -8
- package/src/bin/keycloakify/generateTheme/bringInAccountV1.ts +5 -11
- package/src/bin/keycloakify/generateTheme/generateSrcMainResources.ts +267 -0
- package/src/bin/keycloakify/generateTheme/generateTheme.ts +22 -309
- package/src/bin/keycloakify/generateTheme/generateThemeVariants.ts +50 -0
- package/src/bin/keycloakify/generateTheme/readFieldNameUsage.ts +31 -8
- package/src/bin/keycloakify/keycloakify.ts +23 -56
- package/src/lib/useGetClassName.ts +2 -2
- package/src/login/Fallback.tsx +39 -9
- package/src/login/Template.tsx +160 -61
- package/src/login/TemplateProps.ts +113 -63
- package/src/login/UserProfileFormFields.tsx +750 -0
- package/src/login/i18n/baseMessages/ar.ts +3 -0
- package/src/login/i18n/baseMessages/ca.ts +1 -0
- package/src/login/i18n/baseMessages/cs.ts +3 -0
- package/src/login/i18n/baseMessages/da.ts +1 -0
- package/src/login/i18n/baseMessages/de.ts +1 -0
- package/src/login/i18n/baseMessages/el.ts +1 -0
- package/src/login/i18n/baseMessages/en.ts +23 -16
- package/src/login/i18n/baseMessages/es.ts +240 -1
- package/src/login/i18n/baseMessages/fa.ts +1 -0
- package/src/login/i18n/baseMessages/fi.ts +1 -0
- package/src/login/i18n/baseMessages/fr.ts +2 -1
- package/src/login/i18n/baseMessages/hu.ts +1 -0
- package/src/login/i18n/baseMessages/index.ts +1 -0
- package/src/login/i18n/baseMessages/it.ts +1 -0
- package/src/login/i18n/baseMessages/ja.ts +1 -0
- package/src/login/i18n/baseMessages/lt.ts +1 -0
- package/src/login/i18n/baseMessages/lv.ts +1 -0
- package/src/login/i18n/baseMessages/nl.ts +1 -0
- package/src/login/i18n/baseMessages/no.ts +1 -0
- package/src/login/i18n/baseMessages/pl.ts +1 -0
- package/src/login/i18n/baseMessages/pt-BR.ts +1 -0
- package/src/login/i18n/baseMessages/ru.ts +1 -0
- package/src/login/i18n/baseMessages/sk.ts +3 -1
- package/src/login/i18n/baseMessages/sv.ts +1 -0
- package/src/login/i18n/baseMessages/th.ts +1 -0
- package/src/login/i18n/baseMessages/tr.ts +1 -0
- package/src/login/i18n/baseMessages/uk.ts +439 -0
- package/src/login/i18n/baseMessages/zh-CN.ts +325 -55
- package/src/login/i18n/i18n.tsx +6 -2
- package/src/login/kcContext/KcContext.ts +216 -103
- package/src/login/kcContext/createGetKcContext.ts +11 -19
- package/src/login/kcContext/kcContextMocks.ts +165 -226
- package/src/login/lib/useDownloadTerms.ts +15 -7
- package/src/login/lib/useGetClassName.ts +112 -83
- package/src/login/lib/useUserProfileForm.tsx +1227 -0
- package/src/login/pages/Code.tsx +35 -0
- package/src/login/pages/DeleteAccountConfirm.tsx +53 -0
- package/src/login/pages/DeleteCredential.tsx +45 -0
- package/src/login/pages/Error.tsx +2 -2
- package/src/login/pages/FrontchannelLogout.tsx +41 -0
- package/src/login/pages/IdpReviewUserProfile.tsx +15 -5
- package/src/login/pages/Info.tsx +29 -19
- package/src/login/pages/Login.tsx +156 -117
- package/src/login/pages/LoginConfigTotp.tsx +26 -1
- package/src/login/pages/{LoginDeviceVerifyUserCode.tsx → LoginOauth2DeviceVerifyUserCode.tsx} +3 -1
- package/src/login/pages/LoginOauthGrant.tsx +38 -2
- package/src/login/pages/LoginOtp.tsx +73 -65
- package/src/login/pages/LoginPageExpired.tsx +1 -1
- package/src/login/pages/LoginPassword.tsx +77 -28
- package/src/login/pages/LoginRecoveryAuthnCodeConfig.tsx +260 -0
- package/src/login/pages/LoginRecoveryAuthnCodeInput.tsx +73 -0
- package/src/login/pages/LoginResetOtp.tsx +70 -0
- package/src/login/pages/LoginResetPassword.tsx +11 -4
- package/src/login/pages/LoginUpdatePassword.tsx +120 -81
- package/src/login/pages/LoginUpdateProfile.tsx +41 -115
- package/src/login/pages/LoginUsername.tsx +93 -101
- package/src/login/pages/LoginVerifyEmail.tsx +14 -8
- package/src/login/pages/LoginX509Info.tsx +94 -0
- package/src/login/pages/LogoutConfirm.tsx +2 -2
- package/src/login/pages/Register.tsx +83 -131
- package/src/login/pages/SamlPostForm.tsx +1 -1
- package/src/login/pages/SelectAuthenticator.tsx +29 -52
- package/src/login/pages/Terms.tsx +4 -7
- package/src/login/pages/UpdateEmail.tsx +69 -54
- package/src/login/pages/WebauthnAuthenticate.tsx +205 -165
- package/src/login/pages/WebauthnError.tsx +66 -0
- package/src/login/pages/WebauthnRegister.tsx +285 -0
- package/src/tools/formatNumber.ts +48 -0
- package/src/tools/useInsertLinkTags.ts +82 -0
- package/src/tools/useInsertScriptTags.ts +106 -0
- package/src/tools/useSetClassName.ts +21 -0
- package/tools/formatNumber.d.ts +1 -0
- package/tools/formatNumber.js +37 -0
- package/tools/formatNumber.js.map +1 -0
- package/tools/useInsertLinkTags.d.ts +7 -0
- package/tools/useInsertLinkTags.js +57 -0
- package/tools/useInsertLinkTags.js.map +1 -0
- package/tools/useInsertScriptTags.d.ts +20 -0
- package/tools/useInsertScriptTags.js +75 -0
- package/tools/useInsertScriptTags.js.map +1 -0
- package/tools/useSetClassName.d.ts +4 -0
- package/tools/useSetClassName.js +16 -0
- package/tools/useSetClassName.js.map +1 -0
- package/vite-plugin/tsconfig.tsbuildinfo +1 -1
- package/bin/keycloakify/generatePom.d.ts +0 -12
- package/bin/keycloakify/generatePom.js +0 -59
- package/bin/keycloakify/generatePom.js.map +0 -1
- package/lib/usePrepareTemplate.d.ts +0 -11
- package/lib/usePrepareTemplate.js +0 -80
- package/lib/usePrepareTemplate.js.map +0 -1
- package/login/lib/useFormValidation.d.ts +0 -47
- package/login/lib/useFormValidation.js +0 -316
- package/login/lib/useFormValidation.js.map +0 -1
- package/login/pages/LoginDeviceVerifyUserCode.js.map +0 -1
- package/login/pages/RegisterUserProfile.js +0 -18
- package/login/pages/RegisterUserProfile.js.map +0 -1
- package/login/pages/UpdateUserProfile.js +0 -17
- package/login/pages/UpdateUserProfile.js.map +0 -1
- package/login/pages/shared/UserProfileFormFields.d.ts +0 -18
- package/login/pages/shared/UserProfileFormFields.js +0 -58
- package/login/pages/shared/UserProfileFormFields.js.map +0 -1
- package/src/bin/keycloakify/generatePom.ts +0 -70
- package/src/lib/usePrepareTemplate.ts +0 -113
- package/src/login/lib/useFormValidation.tsx +0 -474
- package/src/login/pages/RegisterUserProfile.tsx +0 -72
- package/src/login/pages/UpdateUserProfile.tsx +0 -82
- package/src/login/pages/shared/UserProfileFormFields.tsx +0 -177
- package/src/tools/headInsert.ts +0 -73
- package/tools/headInsert.d.ts +0 -12
- package/tools/headInsert.js +0 -50
- package/tools/headInsert.js.map +0 -1
@@ -1,204 +1,244 @@
|
|
1
|
-
import {
|
1
|
+
import { useEffect, Fragment } from "react";
|
2
2
|
import { clsx } from "keycloakify/tools/clsx";
|
3
3
|
import type { MessageKey } from "keycloakify/login/i18n/i18n";
|
4
|
-
import { base64url } from "rfc4648";
|
5
|
-
import { useConstCallback } from "keycloakify/tools/useConstCallback";
|
6
4
|
import type { PageProps } from "keycloakify/login/pages/PageProps";
|
7
5
|
import { useGetClassName } from "keycloakify/login/lib/useGetClassName";
|
6
|
+
import { assert } from "tsafe/assert";
|
7
|
+
import { createUseInsertScriptTags } from "keycloakify/tools/useInsertScriptTags";
|
8
8
|
import type { KcContext } from "../kcContext";
|
9
9
|
import type { I18n } from "../i18n";
|
10
|
-
|
11
|
-
|
12
|
-
import { typeGuard } from "tsafe/typeGuard";
|
10
|
+
|
11
|
+
const { useInsertScriptTags } = createUseInsertScriptTags();
|
13
12
|
|
14
13
|
export default function WebauthnAuthenticate(props: PageProps<Extract<KcContext, { pageId: "webauthn-authenticate.ftl" }>, I18n>) {
|
15
14
|
const { kcContext, i18n, doUseDefaultCss, Template, classes } = props;
|
16
15
|
|
17
16
|
const { getClassName } = useGetClassName({ doUseDefaultCss, classes });
|
18
17
|
|
19
|
-
const {
|
18
|
+
const {
|
19
|
+
url,
|
20
|
+
isUserIdentified,
|
21
|
+
challenge,
|
22
|
+
userVerification,
|
23
|
+
rpId,
|
24
|
+
createTimeout,
|
25
|
+
messagesPerField,
|
26
|
+
realm,
|
27
|
+
registrationDisabled,
|
28
|
+
authenticators,
|
29
|
+
shouldDisplayAuthenticators
|
30
|
+
} = kcContext;
|
20
31
|
|
21
32
|
const { msg, msgStr } = i18n;
|
22
33
|
|
23
|
-
const {
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
34
|
+
const { insertScriptTags } = useInsertScriptTags({
|
35
|
+
"scriptTags": [
|
36
|
+
{
|
37
|
+
"type": "text/javascript",
|
38
|
+
"src": `${url.resourcesCommonPath}/node_modules/jquery/dist/jquery.min.js`
|
39
|
+
},
|
40
|
+
{
|
41
|
+
"type": "text/javascript",
|
42
|
+
"src": `${url.resourcesPath}/js/base64url.js`
|
43
|
+
},
|
44
|
+
{
|
45
|
+
"type": "text/javascript",
|
46
|
+
"textContent": `
|
47
|
+
|
48
|
+
function webAuthnAuthenticate() {
|
49
|
+
let isUserIdentified = ${isUserIdentified};
|
50
|
+
if (!isUserIdentified) {
|
51
|
+
doAuthenticate([]);
|
52
|
+
return;
|
53
|
+
}
|
54
|
+
checkAllowCredentials();
|
55
|
+
}
|
56
|
+
|
57
|
+
function checkAllowCredentials() {
|
58
|
+
let allowCredentials = [];
|
59
|
+
let authn_use = document.forms['authn_select'].authn_use_chk;
|
60
|
+
|
61
|
+
if (authn_use !== undefined) {
|
62
|
+
if (authn_use.length === undefined) {
|
63
|
+
allowCredentials.push({
|
64
|
+
id: base64url.decode(authn_use.value, {loose: true}),
|
65
|
+
type: 'public-key',
|
66
|
+
});
|
67
|
+
} else {
|
68
|
+
for (let i = 0; i < authn_use.length; i++) {
|
69
|
+
allowCredentials.push({
|
70
|
+
id: base64url.decode(authn_use[i].value, {loose: true}),
|
71
|
+
type: 'public-key',
|
72
|
+
});
|
73
|
+
}
|
74
|
+
}
|
75
|
+
}
|
76
|
+
doAuthenticate(allowCredentials);
|
77
|
+
}
|
78
|
+
|
79
|
+
|
80
|
+
function doAuthenticate(allowCredentials) {
|
81
|
+
|
82
|
+
// Check if WebAuthn is supported by this browser
|
83
|
+
if (!window.PublicKeyCredential) {
|
84
|
+
$("#error").val("${msgStr("webauthn-unsupported-browser-text")}");
|
85
|
+
$("#webauth").submit();
|
86
|
+
return;
|
87
|
+
}
|
88
|
+
|
89
|
+
let challenge = "${challenge}";
|
90
|
+
let userVerification = "${userVerification}";
|
91
|
+
let rpId = "${rpId}";
|
92
|
+
let publicKey = {
|
93
|
+
rpId : rpId,
|
94
|
+
challenge: base64url.decode(challenge, { loose: true })
|
95
|
+
};
|
96
|
+
|
97
|
+
let createTimeout = ${createTimeout};
|
98
|
+
if (createTimeout !== 0) publicKey.timeout = createTimeout * 1000;
|
99
|
+
|
100
|
+
if (allowCredentials.length) {
|
101
|
+
publicKey.allowCredentials = allowCredentials;
|
102
|
+
}
|
103
|
+
|
104
|
+
if (userVerification !== 'not specified') publicKey.userVerification = userVerification;
|
105
|
+
|
106
|
+
navigator.credentials.get({publicKey})
|
107
|
+
.then((result) => {
|
108
|
+
window.result = result;
|
109
|
+
|
110
|
+
let clientDataJSON = result.response.clientDataJSON;
|
111
|
+
let authenticatorData = result.response.authenticatorData;
|
112
|
+
let signature = result.response.signature;
|
113
|
+
|
114
|
+
$("#clientDataJSON").val(base64url.encode(new Uint8Array(clientDataJSON), { pad: false }));
|
115
|
+
$("#authenticatorData").val(base64url.encode(new Uint8Array(authenticatorData), { pad: false }));
|
116
|
+
$("#signature").val(base64url.encode(new Uint8Array(signature), { pad: false }));
|
117
|
+
$("#credentialId").val(result.id);
|
118
|
+
if(result.response.userHandle) {
|
119
|
+
$("#userHandle").val(base64url.encode(new Uint8Array(result.response.userHandle), { pad: false }));
|
120
|
+
}
|
121
|
+
$("#webauth").submit();
|
122
|
+
})
|
123
|
+
.catch((err) => {
|
124
|
+
$("#error").val(err);
|
125
|
+
$("#webauth").submit();
|
126
|
+
})
|
127
|
+
;
|
128
|
+
}
|
129
|
+
|
130
|
+
`
|
40
131
|
}
|
41
|
-
|
42
|
-
formElement.submit();
|
43
|
-
};
|
44
|
-
|
45
|
-
const allowCredentials = authenticators.authenticators.map(
|
46
|
-
authenticator =>
|
47
|
-
({
|
48
|
-
id: base64url.parse(authenticator.credentialId, { loose: true }),
|
49
|
-
type: "public-key"
|
50
|
-
} as PublicKeyCredentialDescriptor)
|
51
|
-
);
|
52
|
-
// Check if WebAuthn is supported by this browser
|
53
|
-
if (!window.PublicKeyCredential) {
|
54
|
-
setError(msgStr("webauthn-unsupported-browser-text"));
|
55
|
-
submitForm();
|
56
|
-
return;
|
57
|
-
}
|
58
|
-
|
59
|
-
const publicKey: PublicKeyCredentialRequestOptions = {
|
60
|
-
rpId,
|
61
|
-
challenge: base64url.parse(challenge, { loose: true })
|
62
|
-
};
|
63
|
-
|
64
|
-
if (createTimeout !== 0) {
|
65
|
-
publicKey.timeout = createTimeout * 1000;
|
66
|
-
}
|
67
|
-
|
68
|
-
if (allowCredentials.length) {
|
69
|
-
publicKey.allowCredentials = allowCredentials;
|
70
|
-
}
|
71
|
-
|
72
|
-
if (userVerification !== "not specified") {
|
73
|
-
publicKey.userVerification = userVerification;
|
74
|
-
}
|
75
|
-
|
76
|
-
try {
|
77
|
-
const result = await navigator.credentials.get({ publicKey });
|
78
|
-
if (!result || result.type != "public-key") {
|
79
|
-
return;
|
80
|
-
}
|
81
|
-
assert(is<PublicKeyCredential>(result));
|
82
|
-
if (!("authenticatorData" in result.response)) {
|
83
|
-
return;
|
84
|
-
}
|
85
|
-
const response = result.response;
|
86
|
-
|
87
|
-
const clientDataJSON = response.clientDataJSON;
|
88
|
-
|
89
|
-
assert(
|
90
|
-
typeGuard<AuthenticatorAssertionResponse>(response, "signature" in response && response.authenticatorData instanceof ArrayBuffer),
|
91
|
-
"response not an AuthenticatorAssertionResponse"
|
92
|
-
);
|
93
|
-
|
94
|
-
const authenticatorData = response.authenticatorData;
|
95
|
-
const signature = response.signature;
|
96
|
-
|
97
|
-
setClientDataJSON(base64url.stringify(new Uint8Array(clientDataJSON), { "pad": false }));
|
98
|
-
setAuthenticatorData(base64url.stringify(new Uint8Array(authenticatorData), { "pad": false }));
|
99
|
-
setSignature(base64url.stringify(new Uint8Array(signature), { "pad": false }));
|
100
|
-
setCredentialId(result.id);
|
101
|
-
setUserHandle(base64url.stringify(new Uint8Array(response.userHandle!), { "pad": false }));
|
102
|
-
} catch (err) {
|
103
|
-
setError(String(err));
|
104
|
-
}
|
105
|
-
|
106
|
-
submitForm();
|
132
|
+
]
|
107
133
|
});
|
108
134
|
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
const [credentialId, setCredentialId] = useState("");
|
113
|
-
const [userHandle, setUserHandle] = useState("");
|
114
|
-
const [error, setError] = useState("");
|
135
|
+
useEffect(() => {
|
136
|
+
insertScriptTags();
|
137
|
+
}, []);
|
115
138
|
|
116
139
|
return (
|
117
|
-
<Template
|
140
|
+
<Template
|
141
|
+
{...{ kcContext, i18n, doUseDefaultCss, classes }}
|
142
|
+
displayMessage={!messagesPerField.existsError("username")}
|
143
|
+
displayInfo={realm.password && realm.registrationAllowed && !registrationDisabled}
|
144
|
+
infoNode={
|
145
|
+
<div id="kc-registration">
|
146
|
+
<span>
|
147
|
+
{msg("noAccount")}{" "}
|
148
|
+
<a tabIndex={6} href={url.registrationUrl}>
|
149
|
+
{msg("doRegister")}
|
150
|
+
</a>
|
151
|
+
</span>
|
152
|
+
</div>
|
153
|
+
}
|
154
|
+
headerNode={msg("webauthn-login-title")}
|
155
|
+
>
|
118
156
|
<div id="kc-form-webauthn" className={getClassName("kcFormClass")}>
|
119
|
-
<form id="webauth" action={url.loginAction}
|
120
|
-
<input type="hidden" id="clientDataJSON" name="clientDataJSON"
|
121
|
-
<input type="hidden" id="authenticatorData" name="authenticatorData"
|
122
|
-
<input type="hidden" id="signature" name="signature"
|
123
|
-
<input type="hidden" id="credentialId" name="credentialId"
|
124
|
-
<input type="hidden" id="userHandle" name="userHandle"
|
125
|
-
<input type="hidden" id="error" name="error"
|
157
|
+
<form id="webauth" action={url.loginAction} method="post">
|
158
|
+
<input type="hidden" id="clientDataJSON" name="clientDataJSON" />
|
159
|
+
<input type="hidden" id="authenticatorData" name="authenticatorData" />
|
160
|
+
<input type="hidden" id="signature" name="signature" />
|
161
|
+
<input type="hidden" id="credentialId" name="credentialId" />
|
162
|
+
<input type="hidden" id="userHandle" name="userHandle" />
|
163
|
+
<input type="hidden" id="error" name="error" />
|
126
164
|
</form>
|
127
|
-
<div className={getClassName("kcFormGroupClass")}>
|
128
|
-
{authenticators &&
|
129
|
-
|
165
|
+
<div className={clsx(getClassName("kcFormGroupClass"), "no-bottom-margin")}>
|
166
|
+
{authenticators && (
|
167
|
+
<>
|
130
168
|
<form id="authn_select" className={getClassName("kcFormClass")}>
|
131
169
|
{authenticators.authenticators.map(authenticator => (
|
132
|
-
<input type="hidden" name="authn_use_chk" value={authenticator.credentialId}
|
170
|
+
<input type="hidden" name="authn_use_chk" value={authenticator.credentialId} />
|
133
171
|
))}
|
134
172
|
</form>
|
135
|
-
))()}
|
136
|
-
{authenticators &&
|
137
|
-
shouldDisplayAuthenticators &&
|
138
|
-
(() => (
|
139
|
-
<>
|
140
|
-
{authenticators.authenticators.length > 1 && (
|
141
|
-
<p className={getClassName("kcSelectAuthListItemTitle")}>{msg("webauthn-available-authenticators")}</p>
|
142
|
-
)}
|
143
|
-
<div className={getClassName("kcFormClass")}>
|
144
|
-
{authenticators.authenticators.map(authenticator => (
|
145
|
-
<div id="kc-webauthn-authenticator" className={getClassName("kcSelectAuthListItemClass")}>
|
146
|
-
<div className={getClassName("kcSelectAuthListItemIconClass")}>
|
147
|
-
<i
|
148
|
-
className={clsx(
|
149
|
-
(() => {
|
150
|
-
const className = getClassName(authenticator.transports.iconClass as any);
|
151
|
-
return className.includes(" ")
|
152
|
-
? className
|
153
|
-
: [className, getClassName("kcWebAuthnDefaultIcon")];
|
154
|
-
})(),
|
155
|
-
getClassName("kcSelectAuthListItemIconPropertyClass")
|
156
|
-
)}
|
157
|
-
/>
|
158
|
-
</div>
|
159
|
-
<div className={getClassName("kcSelectAuthListItemBodyClass")}>
|
160
|
-
<div
|
161
|
-
id="kc-webauthn-authenticator-label"
|
162
|
-
className={getClassName("kcSelectAuthListItemHeadingClass")}
|
163
|
-
>
|
164
|
-
{authenticator.label}
|
165
|
-
</div>
|
166
173
|
|
167
|
-
|
174
|
+
{shouldDisplayAuthenticators && (
|
175
|
+
<>
|
176
|
+
{authenticators.authenticators.length > 1 && (
|
177
|
+
<p className={getClassName("kcSelectAuthListItemTitle")}>{msg("webauthn-available-authenticators")}</p>
|
178
|
+
)}
|
179
|
+
<div className={getClassName("kcFormOptionsClass")}>
|
180
|
+
{authenticators.authenticators.map((authenticator, i) => (
|
181
|
+
<div key={i} id="kc-webauthn-authenticator" className={getClassName("kcSelectAuthListItemClass")}>
|
182
|
+
<div className={getClassName("kcSelectAuthListItemIconClass")}>
|
183
|
+
<i
|
184
|
+
className={clsx(
|
185
|
+
(() => {
|
186
|
+
const className = getClassName(authenticator.transports.iconClass as any);
|
187
|
+
if (className === authenticator.transports.iconClass) {
|
188
|
+
return getClassName("kcWebAuthnDefaultIcon");
|
189
|
+
}
|
190
|
+
return className;
|
191
|
+
})(),
|
192
|
+
getClassName("kcSelectAuthListItemIconPropertyClass")
|
193
|
+
)}
|
194
|
+
/>
|
195
|
+
</div>
|
196
|
+
<div className={getClassName("kcSelectAuthListItemArrowIconClass")}>
|
168
197
|
<div
|
169
|
-
id="kc-webauthn-authenticator-
|
170
|
-
className={getClassName("
|
198
|
+
id="kc-webauthn-authenticator-label"
|
199
|
+
className={getClassName("kcSelectAuthListItemHeadingClass")}
|
171
200
|
>
|
172
|
-
{authenticator.
|
173
|
-
(transport: MessageKey, index: number) => (
|
174
|
-
<>
|
175
|
-
<span>{msg(transport)}</span>
|
176
|
-
{index < authenticator.transports.displayNameProperties.length - 1 && (
|
177
|
-
<span>{", "}</span>
|
178
|
-
)}
|
179
|
-
</>
|
180
|
-
)
|
181
|
-
)}
|
201
|
+
{msg(authenticator.label as MessageKey)}
|
182
202
|
</div>
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
203
|
+
{authenticator.transports.displayNameProperties?.length && (
|
204
|
+
<div
|
205
|
+
id="kc-webauthn-authenticator-transport"
|
206
|
+
className={getClassName("kcSelectAuthListItemDescriptionClass")}
|
207
|
+
>
|
208
|
+
{authenticator.transports.displayNameProperties
|
209
|
+
.map((nameProperty, i, arr) => ({ nameProperty, "hasNext": i !== arr.length - 1 }))
|
210
|
+
.map(({ nameProperty, hasNext }) => (
|
211
|
+
<Fragment key={nameProperty}>
|
212
|
+
<span>{msg(nameProperty)}</span>
|
213
|
+
{hasNext && <span>, </span>}
|
214
|
+
</Fragment>
|
215
|
+
))}
|
216
|
+
</div>
|
217
|
+
)}
|
218
|
+
<div className={getClassName("kcSelectAuthListItemDescriptionClass")}>
|
219
|
+
<span id="kc-webauthn-authenticator-created-label">{msg("webauthn-createdAt-label")}</span>
|
220
|
+
<span id="kc-webauthn-authenticator-created">{authenticator.createdAt}</span>
|
221
|
+
</div>
|
222
|
+
<div className={getClassName("kcSelectAuthListItemFillClass")} />
|
188
223
|
</div>
|
189
224
|
</div>
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
225
|
+
))}
|
226
|
+
</div>
|
227
|
+
</>
|
228
|
+
)}
|
229
|
+
</>
|
230
|
+
)}
|
231
|
+
|
196
232
|
<div id="kc-form-buttons" className={getClassName("kcFormButtonsClass")}>
|
197
233
|
<input
|
198
234
|
id="authenticateWebAuthnButton"
|
199
235
|
type="button"
|
200
|
-
onClick={
|
201
|
-
|
236
|
+
onClick={() => {
|
237
|
+
assert("webAuthnAuthenticate" in window);
|
238
|
+
assert(typeof window.webAuthnAuthenticate === "function");
|
239
|
+
window.webAuthnAuthenticate();
|
240
|
+
}}
|
241
|
+
autoFocus
|
202
242
|
value={msgStr("webauthn-doAuthenticate")}
|
203
243
|
className={clsx(
|
204
244
|
getClassName("kcButtonClass"),
|
@@ -0,0 +1,66 @@
|
|
1
|
+
import type { PageProps } from "keycloakify/login/pages/PageProps";
|
2
|
+
import { clsx } from "keycloakify/tools/clsx";
|
3
|
+
import { useGetClassName } from "keycloakify/login/lib/useGetClassName";
|
4
|
+
import type { KcContext } from "../kcContext";
|
5
|
+
import type { I18n } from "../i18n";
|
6
|
+
|
7
|
+
export default function WebauthnError(props: PageProps<Extract<KcContext, { pageId: "webauthn-error.ftl" }>, I18n>) {
|
8
|
+
const { kcContext, i18n, doUseDefaultCss, Template, classes } = props;
|
9
|
+
|
10
|
+
const { url, isAppInitiatedAction } = kcContext;
|
11
|
+
|
12
|
+
const { msg, msgStr } = i18n;
|
13
|
+
|
14
|
+
const { getClassName } = useGetClassName({
|
15
|
+
doUseDefaultCss,
|
16
|
+
classes
|
17
|
+
});
|
18
|
+
|
19
|
+
return (
|
20
|
+
<Template {...{ kcContext, i18n, doUseDefaultCss, classes }} displayMessage headerNode={msg("webauthn-error-title")}>
|
21
|
+
<form id="kc-error-credential-form" className={getClassName("kcFormClass")} action={url.loginAction} method="post">
|
22
|
+
<input type="hidden" id="executionValue" name="authenticationExecution" />
|
23
|
+
<input type="hidden" id="isSetRetry" name="isSetRetry" />
|
24
|
+
</form>
|
25
|
+
<input
|
26
|
+
tabIndex={4}
|
27
|
+
onClick={() => {
|
28
|
+
// @ts-expect-error: Trusted Keycloak's code
|
29
|
+
document.getElementById("isSetRetry").value = "retry";
|
30
|
+
// @ts-expect-error: Trusted Keycloak's code
|
31
|
+
document.getElementById("executionValue").value = "${execution}";
|
32
|
+
// @ts-expect-error: Trusted Keycloak's code
|
33
|
+
document.getElementById("kc-error-credential-form").submit();
|
34
|
+
}}
|
35
|
+
type="button"
|
36
|
+
className={clsx(
|
37
|
+
getClassName("kcButtonClass"),
|
38
|
+
getClassName("kcButtonPrimaryClass"),
|
39
|
+
getClassName("kcButtonBlockClass"),
|
40
|
+
getClassName("kcButtonLargeClass")
|
41
|
+
)}
|
42
|
+
name="try-again"
|
43
|
+
id="kc-try-again"
|
44
|
+
value={msgStr("doTryAgain")}
|
45
|
+
/>
|
46
|
+
{isAppInitiatedAction && (
|
47
|
+
<form action={url.loginAction} className={getClassName("kcFormClass")} id="kc-webauthn-settings-form" method="post">
|
48
|
+
<button
|
49
|
+
type="submit"
|
50
|
+
className={clsx(
|
51
|
+
getClassName("kcButtonClass"),
|
52
|
+
getClassName("kcButtonDefaultClass"),
|
53
|
+
getClassName("kcButtonBlockClass"),
|
54
|
+
getClassName("kcButtonLargeClass")
|
55
|
+
)}
|
56
|
+
id="cancelWebAuthnAIA"
|
57
|
+
name="cancel-aia"
|
58
|
+
value="true"
|
59
|
+
>
|
60
|
+
{msgStr("doCancel")}
|
61
|
+
</button>
|
62
|
+
</form>
|
63
|
+
)}
|
64
|
+
</Template>
|
65
|
+
);
|
66
|
+
}
|