Improve MineGeo exploration and mapping features
This commit is contained in:
@@ -1,13 +1,53 @@
|
||||
import { NextRequest, NextResponse } from "next/server";
|
||||
import { authClient } from "@/lib/supabase";
|
||||
import { requestOrigin } from "@/lib/request-origin";
|
||||
import { authDestination } from "@/shared/account";
|
||||
import { createRecoveryGrant, recoveryCookie } from "@/lib/password-recovery";
|
||||
import { accountProfile } from "@/lib/profile";
|
||||
export async function GET(request: NextRequest) {
|
||||
const origin = requestOrigin(request, process.env.MINEGEO_URL);
|
||||
const code = request.nextUrl.searchParams.get("code");
|
||||
if (code) {
|
||||
const tokenHash = request.nextUrl.searchParams.get("token_hash");
|
||||
const type = request.nextUrl.searchParams.get("type");
|
||||
const next = authDestination(request.nextUrl.searchParams.get("next"));
|
||||
if (
|
||||
code ||
|
||||
(tokenHash &&
|
||||
(type === "email" || type === "recovery" || type === "magiclink"))
|
||||
) {
|
||||
const client = await authClient();
|
||||
const { error } = await client.auth.exchangeCodeForSession(code);
|
||||
if (!error) return NextResponse.redirect(new URL("/dashboard", origin));
|
||||
const { data, error } = code
|
||||
? await client.auth.exchangeCodeForSession(code)
|
||||
: await client.auth.verifyOtp({
|
||||
token_hash: tokenHash!,
|
||||
type: type as "email" | "recovery" | "magiclink",
|
||||
});
|
||||
if (!error && data.user) {
|
||||
await accountProfile(data.user);
|
||||
const destination = type === "recovery" ? "/auth/reset-password" : next;
|
||||
const response = NextResponse.redirect(new URL(destination, origin));
|
||||
if (destination === "/auth/reset-password") {
|
||||
const { data: claims } = await client.auth.getClaims();
|
||||
const sessionId = claims?.claims.session_id;
|
||||
if (typeof sessionId === "string")
|
||||
response.cookies.set(
|
||||
recoveryCookie,
|
||||
createRecoveryGrant(
|
||||
data.user.id,
|
||||
sessionId,
|
||||
process.env.SUPABASE_SECRET_KEY!,
|
||||
),
|
||||
{
|
||||
httpOnly: true,
|
||||
sameSite: "lax",
|
||||
secure: new URL(origin).protocol === "https:",
|
||||
path: "/",
|
||||
maxAge: 600,
|
||||
},
|
||||
);
|
||||
}
|
||||
return response;
|
||||
}
|
||||
}
|
||||
return NextResponse.redirect(new URL("/dashboard?auth=failed", origin));
|
||||
return NextResponse.redirect(new URL("/log-in?auth=failed", origin));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user