diff --git a/apps/login/app/(login)/passkey/login/page.tsx b/apps/login/app/(login)/passkey/login/page.tsx deleted file mode 100644 index a48578e6596..00000000000 --- a/apps/login/app/(login)/passkey/login/page.tsx +++ /dev/null @@ -1,57 +0,0 @@ -import { getSession, server } from "#/lib/zitadel"; -import Alert, { AlertType } from "#/ui/Alert"; -import LoginPasskey from "#/ui/LoginPasskey"; -import RegisterPasskey from "#/ui/RegisterPasskey"; -import UserAvatar from "#/ui/UserAvatar"; -import { getMostRecentCookieWithLoginname } from "#/utils/cookies"; - -export default async function Page({ - searchParams, -}: { - searchParams: Record; -}) { - const { loginName, prompt } = searchParams; - - const sessionFactors = await loadSession(loginName); - - async function loadSession(loginName?: string) { - const recent = await getMostRecentCookieWithLoginname(loginName); - return getSession(server, recent.id, recent.token).then((response) => { - if (response?.session) { - return response.session; - } - }); - } - const title = !!prompt - ? "Authenticate with a passkey" - : "Use your passkey to confirm it's really you"; - const description = !!prompt - ? "When set up, you will be able to authenticate without a password." - : "Your device will ask for your fingerprint, face, or screen lock"; - - return ( -
-

{title}

- - {sessionFactors && ( - - )} -

{description}

- - {!sessionFactors && ( -
- - Could not get the context of the user. Make sure to enter the - username first or provide a loginName as searchParam. - -
- )} - - {sessionFactors?.id && } -
- ); -} diff --git a/apps/login/ui/LoginPasskey.tsx b/apps/login/ui/LoginPasskey.tsx deleted file mode 100644 index 3b067038eb9..00000000000 --- a/apps/login/ui/LoginPasskey.tsx +++ /dev/null @@ -1,153 +0,0 @@ -"use client"; - -import { useState } from "react"; -import { Button, ButtonVariants } from "./Button"; -import { useForm } from "react-hook-form"; -import { useRouter } from "next/navigation"; -import { Spinner } from "./Spinner"; -import Alert from "./Alert"; -import { RegisterPasskeyResponse } from "@zitadel/server"; -import { coerceToArrayBuffer, coerceToBase64Url } from "#/utils/base64"; -type Inputs = {}; - -type Props = { - sessionId: string; -}; - -export default function LoginPasskey({ sessionId }: Props) { - const { login, handleSubmit, formState } = useForm({ - mode: "onBlur", - }); - - const [error, setError] = useState(""); - - const [loading, setLoading] = useState(false); - - const router = useRouter(); - - async function submitLogin( - passkeyId: string, - passkeyName: string, - publicKeyCredential: any, - sessionId: string - ) { - setLoading(true); - const res = await fetch("/passkeys/verify", { - method: "POST", - headers: { - "Content-Type": "application/json", - }, - body: JSON.stringify({ - passkeyId, - passkeyName, - publicKeyCredential, - sessionId, - }), - }); - - const response = await res.json(); - - setLoading(false); - if (!res.ok) { - setError(response.details); - return Promise.reject(response.details); - } - return response; - } - - function submitLoginAndContinue(value: Inputs): Promise { - navigator.credentials - .get({ - publicKey: resp.publicKeyCredentialCreationOptions, - }) - .then((assertedCredential: any) => { - if (assertedCredential) { - let authData = new Uint8Array( - assertedCredential.response.authenticatorData - ); - let clientDataJSON = new Uint8Array( - assertedCredential.response.clientDataJSON - ); - let rawId = new Uint8Array(assertedCredential.rawId); - let sig = new Uint8Array(assertedCredential.response.signature); - let userHandle = new Uint8Array( - assertedCredential.response.userHandle - ); - - let data = JSON.stringify({ - id: assertedCredential.id, - rawId: coerceToBase64Url(rawId, "rawId"), - type: assertedCredential.type, - response: { - authenticatorData: coerceToBase64Url(authData, "authData"), - clientDataJSON: coerceToBase64Url( - clientDataJSON, - "clientDataJSON" - ), - signature: coerceToBase64Url(sig, "sig"), - userHandle: coerceToBase64Url(userHandle, "userHandle"), - }, - }); - - return submitLogin(passkeyId, "", data, sessionId); - } else { - setLoading(false); - setError("An error on retrieving passkey"); - return null; - } - }) - .catch((error) => { - console.error(error); - setLoading(false); - // setError(error); - - return null; - }); - } - // return router.push(`/accounts`); - } - - const { errors } = formState; - - return ( -
- {error && ( -
- {error} -
- )} - -
- {isPrompt ? ( - - ) : ( - - )} - - - -
-
- ); -}