import { NextRequest, NextResponse } from "next/server"; import { Redis } from "ioredis"; import { getToken } from "next-auth/jwt"; export async function POST(request: NextRequest) { const token = await getToken({ req: request, secret: process.env.NEXTAUTH_SECRET, }); const allCookies = request.cookies.getAll(); const zammadURL = process.env.ZAMMAD_URL ?? "http://zammad-nginx:8080"; const signOutURL = `${zammadURL}/api/v1/signout`; const headers = { "Content-Type": "application/json", Accept: "application/json", Cookie: allCookies .map((cookie) => `${cookie.name}=${cookie.value}`) .join("; "), }; await fetch(signOutURL, { headers }); const cookiePrefixesToRemove = ["_zammad"]; const response = NextResponse.json({ message: "ok" }); for (const cookie of allCookies) { if ( cookiePrefixesToRemove.some((prefix) => cookie.name.startsWith(prefix)) ) { response.cookies.set(cookie.name, "", { path: "/", maxAge: 0 }); } } const redis = new Redis(process.env.REDIS_URL); await redis.setex(`invalidated:${token.sub}`, 24 * 60 * 60, "1"); return response; }