import { getServerSession } from "next-auth/next"; import { authOptions } from "@/app/api/auth/[...nextauth]/route"; import { NextResponse } from "next/server"; export async function GET( req: Request, { params }: { params: { groupId: string } } ) { const session = await getServerSession(authOptions); if (!session) { return NextResponse.json({ error: "Non autorisé" }, { status: 401 }); } try { // Get client credentials token const tokenResponse = await fetch( `${process.env.KEYCLOAK_BASE_URL}/realms/${process.env.KEYCLOAK_REALM}/protocol/openid-connect/token`, { method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded', }, body: new URLSearchParams({ grant_type: 'client_credentials', client_id: process.env.KEYCLOAK_CLIENT_ID!, client_secret: process.env.KEYCLOAK_CLIENT_SECRET!, }), } ); const tokenData = await tokenResponse.json(); if (!tokenResponse.ok) { console.error("Failed to get token:", tokenData); return NextResponse.json({ error: "Failed to get token" }, { status: 500 }); } // Get group members const membersResponse = await fetch( `${process.env.KEYCLOAK_BASE_URL}/admin/realms/${process.env.KEYCLOAK_REALM}/groups/${params.groupId}/members`, { headers: { 'Authorization': `Bearer ${tokenData.access_token}`, }, } ); if (!membersResponse.ok) { const errorData = await membersResponse.json(); console.error("Failed to get group members:", errorData); return NextResponse.json({ error: "Failed to get group members" }, { status: membersResponse.status }); } const members = await membersResponse.json(); return NextResponse.json(members); } catch (error) { console.error("Error in get group members:", error); return NextResponse.json({ error: "Internal server error" }, { status: 500 }); } } export async function POST( req: Request, { params }: { params: { groupId: string } } ) { const session = await getServerSession(authOptions); if (!session) { return NextResponse.json({ error: "Non autorisé" }, { status: 401 }); } try { const { userId } = await req.json(); // Get client credentials token const tokenResponse = await fetch( `${process.env.KEYCLOAK_BASE_URL}/realms/${process.env.KEYCLOAK_REALM}/protocol/openid-connect/token`, { method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded', }, body: new URLSearchParams({ grant_type: 'client_credentials', client_id: process.env.KEYCLOAK_CLIENT_ID!, client_secret: process.env.KEYCLOAK_CLIENT_SECRET!, }), } ); const tokenData = await tokenResponse.json(); if (!tokenResponse.ok) { console.error("Failed to get token:", tokenData); return NextResponse.json({ error: "Failed to get token" }, { status: 500 }); } // Add user to group const addResponse = await fetch( `${process.env.KEYCLOAK_BASE_URL}/admin/realms/${process.env.KEYCLOAK_REALM}/users/${userId}/groups/${params.groupId}`, { method: 'PUT', headers: { 'Authorization': `Bearer ${tokenData.access_token}`, }, } ); if (!addResponse.ok) { const errorData = await addResponse.json(); console.error("Failed to add user to group:", errorData); return NextResponse.json({ error: "Failed to add user to group" }, { status: addResponse.status }); } return NextResponse.json({ success: true }); } catch (error) { console.error("Error in add user to group:", error); return NextResponse.json({ error: "Internal server error" }, { status: 500 }); } }