diff --git a/src/main/java/org/akhq/configs/Group.java b/src/main/java/org/akhq/configs/Group.java index 8d1bcff1e..ed88d345a 100644 --- a/src/main/java/org/akhq/configs/Group.java +++ b/src/main/java/org/akhq/configs/Group.java @@ -9,5 +9,5 @@ public class Group { String name; List roles; - Map attributes; + Map> attributes; } diff --git a/src/main/java/org/akhq/utils/UserGroupUtils.java b/src/main/java/org/akhq/utils/UserGroupUtils.java index 3bde6443d..f34d1aac8 100644 --- a/src/main/java/org/akhq/utils/UserGroupUtils.java +++ b/src/main/java/org/akhq/utils/UserGroupUtils.java @@ -53,7 +53,7 @@ public Map getUserAttributes(List groups) { .flatMap(group -> (group.getAttributes() != null) ? group.getAttributes().entrySet().stream() : null) .collect(Collectors.toMap( Map.Entry::getKey, - item -> new ArrayList<>(Collections.singletonList(item.getValue())), + item -> new ArrayList<>(item.getValue()), (e1, e2) -> { ((List) e1).addAll((List) e2); return e1; } diff --git a/src/test/java/org/akhq/configs/UserGroupUtilsTest.java b/src/test/java/org/akhq/configs/UserGroupUtilsTest.java new file mode 100644 index 000000000..58dfa0f4d --- /dev/null +++ b/src/test/java/org/akhq/configs/UserGroupUtilsTest.java @@ -0,0 +1,73 @@ +package org.akhq.configs; + +import io.micronaut.context.ApplicationContext; +import org.akhq.utils.UserGroupUtils; +import org.junit.jupiter.api.Test; + +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertIterableEquals; + +public class UserGroupUtilsTest { + @Test + void testTopicRegexpAsString() { + ApplicationContext ctx = ApplicationContext.run(ApplicationContext.class,"filterregex"); + + UserGroupUtils userGroupUtils = ctx.getBean(UserGroupUtils.class); + + List actual = (List)userGroupUtils.getUserAttributes(List.of("as-string")).get("topicsFilterRegexp"); + + assertEquals( + 1, + actual.size() + ); + assertIterableEquals( + List.of("test.*"), + actual + ); + + ctx.close(); + } + + @Test + void testTopicRegexpAsList() { + + ApplicationContext ctx = ApplicationContext.run(ApplicationContext.class,"filterregex"); + + UserGroupUtils userGroupUtils = ctx.getBean(UserGroupUtils.class); + + List actual = (List)userGroupUtils.getUserAttributes(List.of("as-list")).get("topicsFilterRegexp"); + + assertEquals( + 2, + actual.size() + ); + assertIterableEquals( + List.of("item1","item2"), + actual + ); + + ctx.close(); + } + @Test + void testTopicRegexpAsMixed() { + + ApplicationContext ctx = ApplicationContext.run(ApplicationContext.class,"filterregex"); + + UserGroupUtils userGroupUtils = ctx.getBean(UserGroupUtils.class); + + List actual = (List)userGroupUtils.getUserAttributes(List.of("as-string","as-list")).get("topicsFilterRegexp"); + + assertEquals( + 3, + actual.size() + ); + assertIterableEquals( + List.of("test.*","item1","item2"), + actual + ); + + ctx.close(); + } +} diff --git a/src/test/resources/application-filterregex.yml b/src/test/resources/application-filterregex.yml new file mode 100644 index 000000000..085ea0b05 --- /dev/null +++ b/src/test/resources/application-filterregex.yml @@ -0,0 +1,15 @@ +akhq: + security: + groups: + as-string: + roles: + - topic/read + attributes: + topics-filter-regexp: "test.*" + as-list: + roles: + - topic/read + attributes: + topics-filter-regexp: + - "item1" + - "item2"