Files
keycloak_theme/src/login/pages/WebauthnRegister.tsx

90 lines
3.5 KiB
TypeScript
Raw Normal View History

2024-06-09 08:27:07 +02:00
import { getKcClsx, type KcClsx } from "keycloakify/login/lib/kcClsx";
2024-09-10 09:57:47 +02:00
import { useScript } from "keycloakify/login/pages/WebauthnRegister.useScript";
import type { PageProps } from "keycloakify/login/pages/PageProps";
import type { KcContext } from "../KcContext";
import type { I18n } from "../i18n";
2024-05-10 21:12:35 +02:00
export default function WebauthnRegister(props: PageProps<Extract<KcContext, { pageId: "webauthn-register.ftl" }>, I18n>) {
const { kcContext, i18n, doUseDefaultCss, Template, classes } = props;
2024-05-10 21:12:35 +02:00
2024-06-09 08:27:07 +02:00
const { kcClsx } = getKcClsx({ doUseDefaultCss, classes });
2024-05-10 21:12:35 +02:00
2024-09-10 09:57:47 +02:00
const { url, isSetRetry, isAppInitiatedAction } = kcContext;
2024-05-10 21:12:35 +02:00
const { msg, msgStr } = i18n;
2024-09-10 09:57:47 +02:00
const authButtonId = "authenticateWebAuthnButton";
2024-05-10 21:12:35 +02:00
2024-09-10 09:57:47 +02:00
useScript({
authButtonId,
kcContext,
i18n
2024-05-10 21:12:35 +02:00
});
return (
<Template
2024-06-09 08:27:07 +02:00
kcContext={kcContext}
i18n={i18n}
2024-06-09 08:27:07 +02:00
doUseDefaultCss={doUseDefaultCss}
classes={classes}
2024-05-10 21:12:35 +02:00
headerNode={
<>
2024-06-09 08:27:07 +02:00
<span className={kcClsx("kcWebAuthnKeyIcon")} />
2024-05-10 21:12:35 +02:00
{msg("webauthn-registration-title")}
</>
}
>
2024-06-09 08:27:07 +02:00
<form id="register" className={kcClsx("kcFormClass")} action={url.loginAction} method="post">
<div className={kcClsx("kcFormGroupClass")}>
2024-05-10 21:12:35 +02:00
<input type="hidden" id="clientDataJSON" name="clientDataJSON" />
<input type="hidden" id="attestationObject" name="attestationObject" />
<input type="hidden" id="publicKeyCredentialId" name="publicKeyCredentialId" />
<input type="hidden" id="authenticatorLabel" name="authenticatorLabel" />
<input type="hidden" id="transports" name="transports" />
<input type="hidden" id="error" name="error" />
2024-06-09 08:27:07 +02:00
<LogoutOtherSessions kcClsx={kcClsx} i18n={i18n} />
2024-05-10 21:12:35 +02:00
</div>
</form>
<input
type="submit"
2024-06-09 08:27:07 +02:00
className={kcClsx("kcButtonClass", "kcButtonPrimaryClass", "kcButtonBlockClass", "kcButtonLargeClass")}
2024-09-10 09:57:47 +02:00
id={authButtonId}
2024-05-10 21:12:35 +02:00
value={msgStr("doRegisterSecurityKey")}
/>
{!isSetRetry && isAppInitiatedAction && (
2024-06-09 08:27:07 +02:00
<form action={url.loginAction} className={kcClsx("kcFormClass")} id="kc-webauthn-settings-form" method="post">
2024-05-10 21:12:35 +02:00
<button
type="submit"
2024-06-09 08:27:07 +02:00
className={kcClsx("kcButtonClass", "kcButtonDefaultClass", "kcButtonBlockClass", "kcButtonLargeClass")}
2024-05-10 21:12:35 +02:00
id="cancelWebAuthnAIA"
name="cancel-aia"
value="true"
>
{msg("doCancel")}
</button>
</form>
)}
</Template>
);
}
2024-06-09 08:27:07 +02:00
function LogoutOtherSessions(props: { kcClsx: KcClsx; i18n: I18n }) {
const { kcClsx, i18n } = props;
2024-05-10 21:12:35 +02:00
const { msg } = i18n;
return (
2024-06-09 08:27:07 +02:00
<div id="kc-form-options" className={kcClsx("kcFormOptionsClass")}>
<div className={kcClsx("kcFormOptionsWrapperClass")}>
2024-05-10 21:12:35 +02:00
<div className="checkbox">
<label>
<input type="checkbox" id="logout-sessions" name="logout-sessions" value="on" defaultChecked={true} />
2024-05-10 21:12:35 +02:00
{msg("logoutOtherSessions")}
</label>
</div>
</div>
</div>
);
}