From 9e0d9d6c468d8e40a131a07a7caffa65509aef59 Mon Sep 17 00:00:00 2001 From: peintnermax Date: Wed, 6 Mar 2024 13:35:21 +0100 Subject: [PATCH] session, login prompt, select account to callback --- apps/login/app/(login)/login/route.ts | 20 +++++++++++++++++-- apps/login/ui/SessionItem.tsx | 28 ++++++++++++++++++++++++++- 2 files changed, 45 insertions(+), 3 deletions(-) diff --git a/apps/login/app/(login)/login/route.ts b/apps/login/app/(login)/login/route.ts index 2c98bfe4dd3..a3a760d8a67 100644 --- a/apps/login/app/(login)/login/route.ts +++ b/apps/login/app/(login)/login/route.ts @@ -38,10 +38,25 @@ function findSession( export async function GET(request: NextRequest) { const searchParams = request.nextUrl.searchParams; const authRequestId = searchParams.get("authRequest"); + const sessionId = searchParams.get("sessionId"); + const sessionCookies: SessionCookie[] = await getAllSessions(); + + if (authRequestId && sessionId) { + const cookie = sessionCookies.find((cookie) => cookie.id === sessionId); + + const session = { + sessionId: cookie?.id, + sessionToken: cookie?.token, + }; + const { callbackUrl } = await createCallback(server, { + authRequestId, + session, + }); + return NextResponse.redirect(callbackUrl); + } if (authRequestId) { const { authRequest } = await getAuthRequest(server, { authRequestId }); - const sessionCookies: SessionCookie[] = await getAllSessions(); const ids = sessionCookies.map((s) => s.id); let sessions: Session[] = []; @@ -57,7 +72,8 @@ export async function GET(request: NextRequest) { // if some accounts are available for selection and select_account is set if ( authRequest && - authRequest.prompt.includes(Prompt.PROMPT_SELECT_ACCOUNT) + (authRequest.prompt.includes(Prompt.PROMPT_SELECT_ACCOUNT) || + authRequest.prompt.includes(Prompt.PROMPT_LOGIN)) ) { const accountsUrl = new URL("/accounts", request.url); if (authRequest?.id) { diff --git a/apps/login/ui/SessionItem.tsx b/apps/login/ui/SessionItem.tsx index e181343de58..1fa79f57ccc 100644 --- a/apps/login/ui/SessionItem.tsx +++ b/apps/login/ui/SessionItem.tsx @@ -40,6 +40,32 @@ export default function SessionItem({ } } + // async function loginSession(authRequestId: string, sessionId: string) { + // setLoading(true); + // const res = await fetch( + // "/api/login?" + new URLSearchParams({ sessionId, authRequestId }), + // { + // method: "DELETE", + // headers: { + // "Content-Type": "application/json", + // }, + // body: JSON.stringify({ + // id: id, + // }), + // } + // ); + + // const response = await res.json(); + + // setLoading(false); + // if (!res.ok) { + // // setError(response.details); + // return Promise.reject(response); + // } else { + // return response; + // } + // } + const validPassword = session?.factors?.password?.verifiedAt; const validPasskey = session?.factors?.webAuthN?.verifiedAt; @@ -49,7 +75,7 @@ export default function SessionItem({