Finish merge

This commit is contained in:
Stefan Bethke 2026-07-18 15:25:13 +02:00
commit a540e63bf3
4 changed files with 77 additions and 42 deletions

View file

@ -3,13 +3,6 @@ package de.ccc.hamburg.keycloak.attribute_endpoints;
import jakarta.ws.rs.*;
import jakarta.ws.rs.core.MediaType;
import jakarta.ws.rs.core.Response;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Stream;
import org.jboss.logging.Logger;
import org.keycloak.component.ComponentModel;
import org.keycloak.models.*;
@ -138,7 +131,6 @@ public class AttributeEndpointsResourceProvider implements RealmResourceProvider
Boolean regexIsBlank;
UserModel authUser;
List<String> attributeNames;
UserProvider userProvider;
Stream<UserModel> users;
AttributeExportContext(String slug) {
@ -196,6 +188,7 @@ public class AttributeEndpointsResourceProvider implements RealmResourceProvider
authUser = auth.getUser();
if (!authUser.hasRole(authRole)) {
LOG.info("User " + authUser.getUsername() + " does not have required role " + authRole.getName());
throw new ForbiddenException("User does not have required auth role.");
}
@ -205,33 +198,10 @@ public class AttributeEndpointsResourceProvider implements RealmResourceProvider
.map(a -> a.getName())
.toList();
UserProvider userProvider = session.users();
Stream<UserModel> users = userProvider.searchForUserStream(realm, Map.of())
.filter(user -> user.hasRole(matchRole));
List<String> attribute_list = users
.map(user -> {
Stream<String> attributeStream = attributeNames.stream()
.map(attributeName -> user.getAttributeStream(attributeName).toList())
.flatMap(Collection::stream);
return attributeStream
.filter(attribute -> !attribute.isEmpty())
.toList();
})
.flatMap(List::stream)
.filter(attribute -> {
if (regexIsBlank) {
return true;
}
final Pattern pattern = Pattern.compile(configAttributeRegex);
final Matcher matcher = pattern.matcher(attribute);
return matcher.find();
})
.toList();
return Response.ok(attribute_list).build();
UserProvider userProvider = session.users();
users = userProvider.searchForUserStream(realm, Map.of())
.filter(user -> user.hasRole(matchRole));
}
}
private static Auth getAuth(KeycloakSession session) {