mirror of
https://github.com/norandom/OpenUltraSAST.git
synced 2026-10-19 04:59:28 +00:00
32 lines
1.2 KiB
TypeScript
32 lines
1.2 KiB
TypeScript
// Provenance: navaneethbv/market-cap (fixed).
|
|||
|
|
// repo: navaneethbv/market-cap
|
||
|
|
// commit: 4f8ae9be5519ced5a975f1190e3e4bc43f84e4d6
|
||
|
|
// parent: fec6f024ce72c9c47b61cbac6ce7a35cb2280602
|
||
|
|
// commit_url: https://github.com/navaneethbv/market-cap/commit/4f8ae9be5519ced5a975f1190e3e4bc43f84e4d6
|
||
|
|
// cve:
|
||
|
|
// license: MIT
|
||
|
|
// function: GET
|
||
|
|
// relpath: app/auth/confirm/route.ts
|
||
|
|
// provenance: agent
|
||
|
|
// mechanism: source_reaches_sink
|
||
|
|
|
||
|
|
export async function GET(request: NextRequest) {
|
||
|
|
const { searchParams } = new URL(request.url);
|
||
|
|
const token_hash = searchParams.get("token_hash");
|
||
|
|
const type = searchParams.get("type") as EmailOtpType | null;
|
||
|
|
const nextParam = searchParams.get("next") ?? "/";
|
||
|
|
// Only allow same-origin relative paths to prevent open redirects
|
||
|
|
const next =
|
||
|
|
nextParam.startsWith("/") && !nextParam.startsWith("//") ? nextParam : "/";
|
||
|
|
|
||
|
|
if (token_hash && type) {
|
||
|
|
const supabase = await createClient();
|
||
|
|
const { error } = await supabase.auth.verifyOtp({ type, token_hash });
|
||
|
|
if (!error) {
|
||
|
|
return NextResponse.redirect(new URL(next, request.url));
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
return NextResponse.redirect(new URL("/login?error=confirm", request.url));
|
||
|
|
}
|