You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by bt...@apache.org on 2018/07/06 09:27:31 UTC

[05/21] james-project git commit: JAMES-2455 Avoid recursive resolution when getting group members

JAMES-2455 Avoid recursive resolution when getting group members

For instance if a group member has forwards, he was not displayed in the group.


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/161019dd
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/161019dd
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/161019dd

Branch: refs/heads/master
Commit: 161019ddfa4eb1863fc72e61fbee061b4a4da91e
Parents: ca12082
Author: benwa <bt...@linagora.com>
Authored: Thu Jul 5 12:47:58 2018 +0700
Committer: benwa <bt...@linagora.com>
Committed: Thu Jul 5 12:55:22 2018 +0700

----------------------------------------------------------------------
 .../org/apache/james/rrt/lib/MappingSource.java |  4 +++
 server/protocols/webadmin/webadmin-data/pom.xml |  4 +++
 .../james/webadmin/routes/GroupsRoutes.java     |  6 +++--
 .../james/webadmin/routes/GroupsRoutesTest.java | 28 +++++++++++++++++---
 4 files changed, 37 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/161019dd/server/data/data-api/src/main/java/org/apache/james/rrt/lib/MappingSource.java
----------------------------------------------------------------------
diff --git a/server/data/data-api/src/main/java/org/apache/james/rrt/lib/MappingSource.java b/server/data/data-api/src/main/java/org/apache/james/rrt/lib/MappingSource.java
index 5539089..7bd6298 100644
--- a/server/data/data-api/src/main/java/org/apache/james/rrt/lib/MappingSource.java
+++ b/server/data/data-api/src/main/java/org/apache/james/rrt/lib/MappingSource.java
@@ -48,6 +48,10 @@ public class MappingSource implements Serializable {
         return new MappingSource(Optional.of(domain), Optional.empty(), Optional.empty());
     }
 
+    public static MappingSource fromMailAddress(MailAddress address) {
+        return fromUser(User.fromMailAddress(address));
+    }
+
     public static MappingSource fromUser(String localPart, String domain) {
         return fromUser(localPart, Domain.of(domain));
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/161019dd/server/protocols/webadmin/webadmin-data/pom.xml
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-data/pom.xml b/server/protocols/webadmin/webadmin-data/pom.xml
index c007063..12757d0 100644
--- a/server/protocols/webadmin/webadmin-data/pom.xml
+++ b/server/protocols/webadmin/webadmin-data/pom.xml
@@ -47,6 +47,10 @@
         </dependency>
         <dependency>
             <groupId>${project.groupId}</groupId>
+            <artifactId>james-server-data-library</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
             <artifactId>james-server-data-memory</artifactId>
             <scope>test</scope>
         </dependency>

http://git-wip-us.apache.org/repos/asf/james-project/blob/161019dd/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/GroupsRoutes.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/GroupsRoutes.java b/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/GroupsRoutes.java
index 7f7a6ed..24ac5ec 100644
--- a/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/GroupsRoutes.java
+++ b/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/GroupsRoutes.java
@@ -49,6 +49,7 @@ import org.apache.james.rrt.api.RecipientRewriteTableException;
 import org.apache.james.rrt.lib.Mapping;
 import org.apache.james.rrt.lib.MappingSource;
 import org.apache.james.rrt.lib.Mappings;
+import org.apache.james.rrt.lib.MappingsImpl;
 import org.apache.james.user.api.UsersRepository;
 import org.apache.james.user.api.UsersRepositoryException;
 import org.apache.james.util.OptionalUtils;
@@ -234,9 +235,10 @@ public class GroupsRoutes implements Routes {
         @ApiResponse(code = HttpStatus.INTERNAL_SERVER_ERROR_500,
             message = "Internal server error - Something went bad on the server side.")
     })
-    public ImmutableSortedSet<String> listGroupMembers(Request request, Response response) throws RecipientRewriteTable.ErrorMappingException, RecipientRewriteTableException {
+    public ImmutableSortedSet<String> listGroupMembers(Request request, Response response) throws RecipientRewriteTableException {
         MailAddress groupAddress = parseMailAddress(request.params(GROUP_ADDRESS));
-        Mappings mappings = recipientRewriteTable.getMappings(groupAddress.getLocalPart(), groupAddress.getDomain())
+        Mappings mappings = Optional.ofNullable(recipientRewriteTable.getUserDomainMappings(MappingSource.fromMailAddress(groupAddress)))
+            .orElse(MappingsImpl.empty())
             .select(Mapping.Type.Group);
 
         ensureNonEmptyMappings(mappings);

http://git-wip-us.apache.org/repos/asf/james-project/blob/161019dd/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/GroupsRoutesTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/GroupsRoutesTest.java b/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/GroupsRoutesTest.java
index 805aa43..09ae779 100644
--- a/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/GroupsRoutesTest.java
+++ b/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/GroupsRoutesTest.java
@@ -35,6 +35,7 @@ import java.util.List;
 import java.util.Map;
 
 import org.apache.james.core.Domain;
+import org.apache.james.core.User;
 import org.apache.james.dnsservice.api.DNSService;
 import org.apache.james.domainlist.api.DomainList;
 import org.apache.james.domainlist.memory.MemoryDomainList;
@@ -121,6 +122,27 @@ class GroupsRoutesTest {
                 .body(is("[]"));
         }
 
+
+        @Test
+        void getShouldNotResolveRecurseGroups() throws Exception {
+            when().put(GROUP1 + SEPARATOR + USER_A);
+
+            memoryRecipientRewriteTable.addForwardMapping(MappingSource.fromUser(User.fromUsername(USER_A)),
+                "b@" + DOMAIN.name());
+
+            List<String> addresses =
+                when()
+                    .get(GROUP1)
+                .then()
+                    .contentType(ContentType.JSON)
+                    .statusCode(HttpStatus.OK_200)
+                    .extract()
+                    .body()
+                    .jsonPath()
+                    .getList(".");
+            assertThat(addresses).containsExactly(USER_A);
+        }
+
         @Test
         void getGroupsShouldListExistingGroupsInAlphabeticOrder() {
             given()
@@ -686,7 +708,7 @@ class GroupsRoutesTest {
         void getShouldReturnErrorWhenRecipientRewriteTableExceptionIsThrown() throws Exception {
             doThrow(RecipientRewriteTableException.class)
                 .when(memoryRecipientRewriteTable)
-                .getMappings(anyString(), any());
+                .getUserDomainMappings(any());
 
             when()
                 .get(GROUP1)
@@ -698,7 +720,7 @@ class GroupsRoutesTest {
         void getShouldReturnErrorWhenErrorMappingExceptionIsThrown() throws Exception {
             doThrow(RecipientRewriteTable.ErrorMappingException.class)
                 .when(memoryRecipientRewriteTable)
-                .getMappings(anyString(), any());
+                .getUserDomainMappings(any());
 
             when()
                 .get(GROUP1)
@@ -710,7 +732,7 @@ class GroupsRoutesTest {
         void getShouldReturnErrorWhenRuntimeExceptionIsThrown() throws Exception {
             doThrow(RuntimeException.class)
                 .when(memoryRecipientRewriteTable)
-                .getMappings(anyString(), any());
+                .getUserDomainMappings(any());
 
             when()
                 .get(GROUP1)


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org