src/app/api/auth/logout/route.ts

route·app·1.5 KB · 39 lignes· Voir l'itinéraire
Annotation non disponible

Lance npm run annotate (nécessite ANTHROPIC_API_KEY dans .env.local) pour générer une annotation française par Claude Haiku 4.5.

2 exports

POSTGET

Code source· typescript

import { getSession } from "@/lib/auth/session";
import { NextRequest, NextResponse } from "next/server";

async function handleLogout(req: NextRequest) {
  const session = await getSession();
  const role = session?.role ?? null;
  const baseDomain = process.env.DOMAIN || "wari.pro";
  const isProduction = process.env.NODE_ENV === "production";

  let redirectUrl = "https://" + baseDomain;
  if (role === "CLIENT") {
    const redirect = req.nextUrl.searchParams.get("redirect");
    if (redirect && /^[a-z0-9-]+$/.test(redirect)) {
      redirectUrl = "https://" + redirect + "." + baseDomain;
    }
  } else if (role === "TENANT_ADMIN") {
    redirectUrl = "https://" + baseDomain + "/admin/login";
  } else if (role === "SUPER_ADMIN") {
    redirectUrl = "https://" + baseDomain + "/superadmin/login";
  }

  const cookieValue = isProduction
    ? "superapp_session=; Path=/; Max-Age=0; HttpOnly; SameSite=Lax; Secure; Domain=.wari.pro"
    : "superapp_session=; Path=/; Max-Age=0; HttpOnly; SameSite=Lax";

  const html = `<!DOCTYPE html><html><head><meta charset="utf-8"><script>window.location.replace("${redirectUrl}")</script></head><body></body></html>`;
  
  const response = new NextResponse(html, {
    status: 200,
    headers: { "Content-Type": "text/html" },
  });
  
  response.headers.set("Set-Cookie", cookieValue);
  return response;
}

export async function POST(req: NextRequest) { return handleLogout(req); }
export async function GET(req: NextRequest) { return handleLogout(req); }