You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@james.apache.org by bt...@apache.org on 2023/05/25 05:45:22 UTC
[james-project] 02/03: JAMES-3909 Add UsersRepository::listUsersOfADomainReactive
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 <hq...@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("user1@domain1.tld"), "password");
+
+ testSystem.domainList.addDomain(Domain.of("domain2.tld"));
+ testee().addUser(Username.of("user2@domain2.tld"), "password");
+
+ assertThat(Flux.from(testee().listUsersOfADomainReactive(Domain.of("domain1.tld")))
+ .collectList()
+ .block())
+ .containsOnly(Username.of("user1@domain1.tld"));
+ }
+
@Test
default void addUserShouldThrowWhenUserDoesNotBelongToDomainList(TestSystem testSystem) {
assertThatThrownBy(() -> testee().addUser(testSystem.userWithUnknownDomain, "password"))
---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@james.apache.org
For additional commands, e-mail: notifications-help@james.apache.org