UNPKG

keycloakify

Version:

Framework to create custom Keycloak UIs

68 lines (64 loc) 2.92 kB
import { useEffect } from "react"; import { useInsertScriptTags } from "../../tools/useInsertScriptTags"; import { assert } from "../../tools/assert"; import { waitForElementMountedOnDom } from "../../tools/waitForElementMountedOnDom"; assert(); assert(); export function useScript(params) { const { authButtonId, kcContext, i18n } = params; const { url, isUserIdentified, challenge, userVerification, rpId, createTimeout } = kcContext; const { msgStr, isFetchingTranslations } = i18n; const { insertScriptTags } = useInsertScriptTags({ componentOrHookName: "LoginPasskeysConditionalAuthenticate", scriptTags: [ { type: "module", textContent: () => ` import { authenticateByWebAuthn } from "${url.resourcesPath}/js/webauthnAuthenticate.js"; import { initAuthenticate } from "${url.resourcesPath}/js/passkeysConditionalAuth.js"; const authButton = document.getElementById("${authButtonId}"); const input = { isUserIdentified : ${isUserIdentified}, challenge : ${JSON.stringify(challenge)}, userVerification : ${JSON.stringify(userVerification)}, rpId : ${JSON.stringify(rpId)}, createTimeout : ${createTimeout} }; authButton.addEventListener("click", () => { authenticateByWebAuthn({ ...input, errmsg : ${JSON.stringify(msgStr("webauthn-unsupported-browser-text"))} }); }, { once: true }); initAuthenticate({ ...input, errmsg : ${JSON.stringify(msgStr("passkey-unsupported-browser-text"))} }, available => { const loginForm = document.getElementById("kc-form-login"); const passkeyButton = document.getElementById("kc-form-passkey-button"); if (!loginForm || !passkeyButton) { return; } if (available) { loginForm.style.display = "block"; } else { passkeyButton.style.display = "block"; } }); ` } ] }); useEffect(() => { if (isFetchingTranslations) { return; } (async () => { await waitForElementMountedOnDom({ elementId: authButtonId }); insertScriptTags(); })(); }, [isFetchingTranslations]); } //# sourceMappingURL=LoginPasskeysConditionalAuthenticate.useScript.js.map