From 4a9bfebecfc6924875995a6eb37c78435a509912 Mon Sep 17 00:00:00 2001 From: Alma Date: Wed, 9 Apr 2025 21:41:27 +0200 Subject: [PATCH] update api users and groups and users 12 --- app/api/users/[userId]/[id]/route.ts | 76 ------------------------- app/api/users/[userId]/roles/route.ts | 4 +- app/api/users/[userId]/route.ts | 2 +- components/groups/groups-table.tsx | 81 +++++++++++++-------------- components/users/users-table.tsx | 22 +++----- 5 files changed, 51 insertions(+), 134 deletions(-) delete mode 100644 app/api/users/[userId]/[id]/route.ts diff --git a/app/api/users/[userId]/[id]/route.ts b/app/api/users/[userId]/[id]/route.ts deleted file mode 100644 index c30f043c..00000000 --- a/app/api/users/[userId]/[id]/route.ts +++ /dev/null @@ -1,76 +0,0 @@ -import { getServerSession } from "next-auth"; -import { authOptions } from "../../auth/[...nextauth]/route"; -import { NextResponse } from "next/server"; - -//TODO: Ajouter la suppression automatique du compte Nextcloud -export async function DELETE( - req: Request, - { params }: { params: { userId: string } } -) { - const session = await getServerSession(authOptions); - - if (!session) { - return NextResponse.json({ error: "Non autorisé" }, { status: 401 }); - } - - try { - // First get an admin token using client credentials - 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 admin token:", tokenData); - return NextResponse.json( - { error: "Erreur d'authentification" }, - { status: 401 } - ); - } - - // Delete user using admin token - const response = await fetch( - `${process.env.KEYCLOAK_BASE_URL}/admin/realms/${process.env.KEYCLOAK_REALM}/users/${params.userId}`, - { - method: "DELETE", - headers: { - Authorization: `Bearer ${tokenData.access_token}`, - }, - } - ); - - console.log("Delete response:", { - status: response.status, - ok: response.ok - }); - - if (!response.ok) { - const errorText = await response.text(); - console.error("Delete error:", errorText); - return NextResponse.json( - { error: "Erreur lors de la suppression", details: errorText }, - { status: response.status } - ); - } - - return NextResponse.json({ success: true }); - } catch (error) { - console.error("Error deleting user:", error); - return NextResponse.json( - { error: "Erreur serveur", details: error }, - { status: 500 } - ); - } -} \ No newline at end of file diff --git a/app/api/users/[userId]/roles/route.ts b/app/api/users/[userId]/roles/route.ts index a52f1474..5f98de49 100644 --- a/app/api/users/[userId]/roles/route.ts +++ b/app/api/users/[userId]/roles/route.ts @@ -62,9 +62,9 @@ export async function PUT( // Find roles to add and remove const rolesToAdd = roles.filter( - (role: string) => !currentRoles.clientMappings?.some((r: RoleRepresentation) => r.name === role) + (role: string) => !currentRoles.realmMappings?.some((r: RoleRepresentation) => r.name === role) ); - const rolesToRemove = currentRoles.clientMappings?.filter( + const rolesToRemove = currentRoles.realmMappings?.filter( (role: RoleRepresentation) => !roles.includes(role.name) ); diff --git a/app/api/users/[userId]/route.ts b/app/api/users/[userId]/route.ts index 0379f928..e5273307 100644 --- a/app/api/users/[userId]/route.ts +++ b/app/api/users/[userId]/route.ts @@ -1,5 +1,5 @@ import { getServerSession } from "next-auth"; -import { authOptions } from "../../auth/[...nextauth]/route"; +import { authOptions } from "@/app/api/auth/[...nextauth]/route"; import { NextResponse } from "next/server"; //TODO: Ajouter la suppression automatique du compte Nextcloud diff --git a/components/groups/groups-table.tsx b/components/groups/groups-table.tsx index d5693ead..02fc4b98 100644 --- a/components/groups/groups-table.tsx +++ b/components/groups/groups-table.tsx @@ -432,64 +432,61 @@ export function GroupsTable({ userRole = [] }: GroupsTableProps) { - { - if (!open) { - setSelectedGroup(null); - setGroupMembers([]); - setAvailableUsers([]); - } - setManageMembersDialog(open); - }}> - + + Gérer les membres du groupe {selectedGroup?.name}
-
+
{groupMembers.length === 0 ? ( -

Aucun membre

+

Aucun membre

) : ( - groupMembers.map(member => ( -
-
-

{member.username}

-

{member.email}

+
+ {groupMembers.map((member) => ( +
+
+

{member.username}

+

{member.email}

+
+
- -
- )) + ))} +
)}
- -
+ +
{availableUsers.length === 0 ? ( -

Aucun utilisateur disponible

+

Aucun utilisateur disponible

) : ( - availableUsers.map(user => ( -
-
-

{user.username}

-

{user.email}

+
+ {availableUsers.map((user) => ( +
+
+

{user.username}

+

{user.email}

+
+
- -
- )) + ))} +
)}
diff --git a/components/users/users-table.tsx b/components/users/users-table.tsx index 6f0393b9..5b71caff 100644 --- a/components/users/users-table.tsx +++ b/components/users/users-table.tsx @@ -223,11 +223,7 @@ export function UsersTable({ userRole = [] }: UsersTableProps) { throw new Error("Erreur lors de la mise à jour des rôles"); } - setUsers(prevUsers => prevUsers.map(user => - user.id === selectedUser.id - ? { ...user, roles: formData.roles } - : user - )); + await fetchUsers(); setManageRolesDialog(false); setSelectedUser(null); @@ -650,14 +646,6 @@ export function UsersTable({ userRole = [] }: UsersTableProps) { Modifier l'utilisateur
-
- - setFormData(prev => ({ ...prev, lastName: e.target.value }))} - /> -
setFormData(prev => ({ ...prev, firstName: e.target.value }))} />
+
+ + setFormData(prev => ({ ...prev, lastName: e.target.value }))} + /> +