From e46e745c5cc5b681fd6aee199f91eea70645b2c1 Mon Sep 17 00:00:00 2001 From: Alma Date: Wed, 9 Apr 2025 20:15:48 +0200 Subject: [PATCH] update api users and groups3 --- app/api/groups/[groupId]/route.ts | 63 +++++++++++++++++++++++++++++++ app/api/groups/[id]/route.ts | 6 +-- 2 files changed, 66 insertions(+), 3 deletions(-) create mode 100644 app/api/groups/[groupId]/route.ts diff --git a/app/api/groups/[groupId]/route.ts b/app/api/groups/[groupId]/route.ts new file mode 100644 index 00000000..9a668573 --- /dev/null +++ b/app/api/groups/[groupId]/route.ts @@ -0,0 +1,63 @@ +import { getServerSession } from "next-auth/next"; +import { authOptions } from "../../auth/[...nextauth]/route"; +import { NextResponse } from "next/server"; + +async function getAdminToken() { + 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 data = await tokenResponse.json(); + if (!tokenResponse.ok) { + throw new Error(data.error_description || 'Failed to get admin token'); + } + + return data.access_token; +} + +export async function DELETE( + req: Request, + { params }: { params: { groupId: string } } +) { + try { + const session = await getServerSession(authOptions); + if (!session) { + return NextResponse.json({ error: "Non autorisé" }, { status: 401 }); + } + + const token = await getAdminToken(); + + const response = await fetch( + `${process.env.KEYCLOAK_BASE_URL}/admin/realms/${process.env.KEYCLOAK_REALM}/groups/${params.groupId}`, + { + method: "DELETE", + headers: { + Authorization: `Bearer ${token}`, + }, + } + ); + + if (!response.ok) { + throw new Error('Failed to delete group'); + } + + return NextResponse.json({ success: true }); + } catch (error) { + console.error('Delete Group Error:', error); + return NextResponse.json( + { error: "Erreur lors de la suppression du groupe" }, + { status: 500 } + ); + } +} \ No newline at end of file diff --git a/app/api/groups/[id]/route.ts b/app/api/groups/[id]/route.ts index 9727dac1..414d6307 100644 --- a/app/api/groups/[id]/route.ts +++ b/app/api/groups/[id]/route.ts @@ -28,7 +28,7 @@ async function getAdminToken() { export async function DELETE( req: Request, - { params }: { params: { id: string } } + { params }: { params: { groupId: string } } ) { try { const session = await getServerSession(authOptions); @@ -39,7 +39,7 @@ export async function DELETE( const token = await getAdminToken(); const response = await fetch( - `${process.env.KEYCLOAK_BASE_URL}/admin/realms/${process.env.KEYCLOAK_REALM}/groups/${params.id}`, + `${process.env.KEYCLOAK_BASE_URL}/admin/realms/${process.env.KEYCLOAK_REALM}/groups/${params.groupId}`, { method: "DELETE", headers: { @@ -60,4 +60,4 @@ export async function DELETE( { status: 500 } ); } -} \ No newline at end of file +} \ No newline at end of file