This is an automated email from the ASF dual-hosted git repository. btellier pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git
commit 1baee47628621729c0e9da5e1a2f2724e1ef86fe Author: Quan Tran <hqt...@linagora.com> AuthorDate: Mon May 22 10:58:23 2023 +0700 JAMES-3909 Add UsersRepository::listUsersOfADomainReactive The user listing + filtering by domain is not really optimized. Therefore, it is a default method for now, and people can optimize/override it later. --- .../java/org/apache/james/user/api/UsersRepository.java | 10 ++++++++++ .../apache/james/user/lib/UsersRepositoryContract.java | 16 ++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/server/data/data-api/src/main/java/org/apache/james/user/api/UsersRepository.java b/server/data/data-api/src/main/java/org/apache/james/user/api/UsersRepository.java index 34c99decef..4a3e67523b 100644 --- a/server/data/data-api/src/main/java/org/apache/james/user/api/UsersRepository.java +++ b/server/data/data-api/src/main/java/org/apache/james/user/api/UsersRepository.java @@ -21,11 +21,14 @@ package org.apache.james.user.api; import java.util.Iterator; +import org.apache.james.core.Domain; import org.apache.james.core.MailAddress; import org.apache.james.core.Username; import org.apache.james.user.api.model.User; import org.reactivestreams.Publisher; +import reactor.core.publisher.Flux; + /** * Interface for a repository of users. A repository represents a logical * grouping of users, typically by common purpose. E.g. the users served by an @@ -170,4 +173,11 @@ public interface UsersRepository { throw new UsersRepositoryException(username.asString() + " username candidate do not match the virtualHosting strategy"); } } + + default Publisher<Username> listUsersOfADomainReactive(Domain domain) { + return Flux.from(listReactive()) + .filter(username -> username.getDomainPart() + .map(domain::equals) + .orElse(false)); + } } diff --git a/server/data/data-library/src/test/java/org/apache/james/user/lib/UsersRepositoryContract.java b/server/data/data-library/src/test/java/org/apache/james/user/lib/UsersRepositoryContract.java index 8fe9e17c71..f13dfa473f 100644 --- a/server/data/data-library/src/test/java/org/apache/james/user/lib/UsersRepositoryContract.java +++ b/server/data/data-library/src/test/java/org/apache/james/user/lib/UsersRepositoryContract.java @@ -50,6 +50,8 @@ import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; +import reactor.core.publisher.Flux; + public interface UsersRepositoryContract { class UserRepositoryExtension implements BeforeEachCallback, ParameterResolver { @@ -551,6 +553,20 @@ public interface UsersRepositoryContract { assertThat(actual).isTrue(); } + @Test + default void listUsersOfADomainShouldNotListOtherDomainUsers(TestSystem testSystem) throws Exception { + testSystem.domainList.addDomain(Domain.of("domain1.tld")); + testee().addUser(Username.of("us...@domain1.tld"), "password"); + + testSystem.domainList.addDomain(Domain.of("domain2.tld")); + testee().addUser(Username.of("us...@domain2.tld"), "password"); + + assertThat(Flux.from(testee().listUsersOfADomainReactive(Domain.of("domain1.tld"))) + .collectList() + .block()) + .containsOnly(Username.of("us...@domain1.tld")); + } + @Test default void addUserShouldThrowWhenUserDoesNotBelongToDomainList(TestSystem testSystem) { assertThatThrownBy(() -> testee().addUser(testSystem.userWithUnknownDomain, "password")) --------------------------------------------------------------------- To unsubscribe, e-mail: notifications-unsubscr...@james.apache.org For additional commands, e-mail: notifications-h...@james.apache.org