Groups
This commit is contained in:
parent
35b8d707d3
commit
17cb689753
@ -83,27 +83,71 @@ export async function GET() {
|
||||
const groupsWithCounts = await Promise.all(
|
||||
groups.map(async (group: any) => {
|
||||
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}`,
|
||||
},
|
||||
}
|
||||
);
|
||||
// Récupérer tous les membres du groupe avec pagination pour gérer les grands groupes
|
||||
// L'endpoint /members/count ne fonctionne pas correctement, on récupère donc la liste
|
||||
let totalCount = 0;
|
||||
let first = 0;
|
||||
const max = 100; // Taille de page pour la pagination
|
||||
let hasMore = true;
|
||||
|
||||
let count = 0;
|
||||
if (countResponse.ok) {
|
||||
count = await countResponse.json();
|
||||
while (hasMore) {
|
||||
const membersResponse = await fetch(
|
||||
`${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 {
|
||||
id: group.id,
|
||||
name: group.name,
|
||||
path: group.path,
|
||||
membersCount: count,
|
||||
membersCount: totalCount,
|
||||
};
|
||||
} catch (error) {
|
||||
logger.error('Error getting group members count', {
|
||||
groupId: group.id,
|
||||
groupName: group.name,
|
||||
error: error instanceof Error ? error.message : String(error)
|
||||
});
|
||||
|
||||
return {
|
||||
id: group.id,
|
||||
name: group.name,
|
||||
|
||||
Loading…
Reference in New Issue
Block a user