This commit is contained in:
alma 2026-01-11 21:38:48 +01:00
parent 35b8d707d3
commit 17cb689753

View File

@ -83,27 +83,71 @@ export async function GET() {
const groupsWithCounts = await Promise.all( const groupsWithCounts = await Promise.all(
groups.map(async (group: any) => { groups.map(async (group: any) => {
try { try {
const countResponse = await fetch( // Récupérer tous les membres du groupe avec pagination pour gérer les grands groupes
`${process.env.KEYCLOAK_BASE_URL}/admin/realms/${process.env.KEYCLOAK_REALM}/groups/${group.id}/members/count`, // L'endpoint /members/count ne fonctionne pas correctement, on récupère donc la liste
{ let totalCount = 0;
headers: { let first = 0;
Authorization: `Bearer ${token}`, const max = 100; // Taille de page pour la pagination
}, let hasMore = true;
}
);
let count = 0; while (hasMore) {
if (countResponse.ok) { const membersResponse = await fetch(
count = await countResponse.json(); `${process.env.KEYCLOAK_BASE_URL}/admin/realms/${process.env.KEYCLOAK_REALM}/groups/${group.id}/members?briefRepresentation=true&first=${first}&max=${max}`,
{
headers: {
Authorization: `Bearer ${token}`,
},
}
);
if (membersResponse.ok) {
const members = await membersResponse.json();
const membersArray = Array.isArray(members) ? members : [];
totalCount += membersArray.length;
// Si on a récupéré moins que max, on a tout récupéré
if (membersArray.length < max) {
hasMore = false;
} else {
first += max;
}
} else {
// Si l'endpoint échoue, essayer l'endpoint count en fallback
try {
const countResponse = await fetch(
`${process.env.KEYCLOAK_BASE_URL}/admin/realms/${process.env.KEYCLOAK_REALM}/groups/${group.id}/members/count`,
{
headers: {
Authorization: `Bearer ${token}`,
},
}
);
if (countResponse.ok) {
totalCount = await countResponse.json();
}
} catch (countError) {
logger.debug('Failed to get member count for group', {
groupId: group.id,
groupName: group.name
});
}
hasMore = false;
}
} }
return { return {
id: group.id, id: group.id,
name: group.name, name: group.name,
path: group.path, path: group.path,
membersCount: count, membersCount: totalCount,
}; };
} catch (error) { } catch (error) {
logger.error('Error getting group members count', {
groupId: group.id,
groupName: group.name,
error: error instanceof Error ? error.message : String(error)
});
return { return {
id: group.id, id: group.id,
name: group.name, name: group.name,