import { NextRequest, NextResponse } from 'next/server'; /** * API Route pour déclencher la déconnexion Keycloak * Redirige directement vers Keycloak pour la déconnexion */ export async function GET(request: NextRequest) { try { // Configuration Keycloak depuis les variables d'environnement const keycloakUrl = process.env.NEXT_PUBLIC_KEYCLOAK_URL || 'https://security.lions.dev'; const realm = process.env.NEXT_PUBLIC_KEYCLOAK_REALM || 'btpxpress'; const clientId = process.env.NEXT_PUBLIC_KEYCLOAK_CLIENT_ID || 'btpxpress-frontend'; // URL de redirection après déconnexion const postLogoutRedirectUri = encodeURIComponent(`${request.nextUrl.origin}/`); // Construire l'URL de déconnexion Keycloak const logoutUrl = new URL(`${keycloakUrl}/realms/${realm}/protocol/openid-connect/logout`); logoutUrl.searchParams.set('client_id', clientId); logoutUrl.searchParams.set('post_logout_redirect_uri', decodeURIComponent(postLogoutRedirectUri)); // Supprimer les cookies d'authentification const response = NextResponse.redirect(logoutUrl.toString()); // Supprimer les cookies liés à l'authentification response.cookies.delete('keycloak-token'); response.cookies.delete('keycloak-refresh-token'); response.cookies.delete('keycloak-id-token'); return response; } catch (error) { console.error('Erreur lors de la déconnexion Keycloak:', error); // En cas d'erreur, rediriger vers la page d'accueil const response = NextResponse.redirect(new URL('/', request.url)); // Supprimer quand même les cookies en cas d'erreur response.cookies.delete('keycloak-token'); response.cookies.delete('keycloak-refresh-token'); response.cookies.delete('keycloak-id-token'); return response; } } /** * Gestion des autres méthodes HTTP (non supportées) */ export async function POST() { return NextResponse.json( { error: 'Méthode non supportée. Utilisez GET pour déclencher la déconnexion.' }, { status: 405 } ); }