44 lines
1.1 KiB
TypeScript
44 lines
1.1 KiB
TypeScript
import { type NextRequest, NextResponse } from "next/server";
|
|
|
|
import {
|
|
CAREGIVER_SESSION_COOKIE,
|
|
createCaregiverSessionCookieValue,
|
|
getCaregiverSession,
|
|
} from "@/lib/session";
|
|
import { prisma } from "@/lib/prisma";
|
|
|
|
function normalizeRedirectPath(redirectTo?: string | null) {
|
|
if (!redirectTo || !redirectTo.startsWith("/") || redirectTo.startsWith("//")) {
|
|
return "/";
|
|
}
|
|
|
|
return redirectTo;
|
|
}
|
|
|
|
export async function GET(request: NextRequest) {
|
|
const redirectTo = normalizeRedirectPath(
|
|
request.nextUrl.searchParams.get("redirectTo"),
|
|
);
|
|
const existingCaregiver = await getCaregiverSession();
|
|
const response = NextResponse.redirect(new URL(redirectTo, request.url));
|
|
|
|
if (existingCaregiver) {
|
|
return response;
|
|
}
|
|
|
|
const { sessionToken, options } = createCaregiverSessionCookieValue();
|
|
|
|
await prisma.caregiverAccount.upsert({
|
|
where: { sessionToken },
|
|
update: {},
|
|
create: { sessionToken },
|
|
});
|
|
|
|
response.cookies.set({
|
|
name: CAREGIVER_SESSION_COOKIE,
|
|
value: sessionToken,
|
|
...options,
|
|
});
|
|
|
|
return response;
|
|
} |