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 2019/05/16 08:48:20 UTC

[james-project] 05/23: JAMES-2149 When I remove a domain, the corresponding aliases are also deleted

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 4d86c003ff9c9772ab8869eec8d87c3365d9769f
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Tue May 14 17:26:44 2019 +0700

    JAMES-2149 When I remove a domain, the corresponding aliases are also deleted
---
 .../james/webadmin/routes/DomainsRoutes.java       | 12 +++++++-
 .../james/webadmin/routes/DomainsRoutesTest.java   | 36 ++++++++++++++++++++++
 2 files changed, 47 insertions(+), 1 deletion(-)

diff --git a/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/DomainsRoutes.java b/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/DomainsRoutes.java
index 8625498..cd047f9 100644
--- a/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/DomainsRoutes.java
+++ b/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/DomainsRoutes.java
@@ -48,6 +48,7 @@ import org.eclipse.jetty.http.HttpStatus;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.github.fge.lambdas.Throwing;
 import com.github.steveash.guavate.Guavate;
 import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableList;
@@ -228,10 +229,12 @@ public class DomainsRoutes implements Routes {
         service.put(SPECIFIC_ALIAS, this::addDomainAlias, jsonTransformer);
     }
 
-    private String removeDomain(Request request, Response response) {
+    private String removeDomain(Request request, Response response) throws RecipientRewriteTableException {
         try {
             Domain domain = checkValidDomain(request.params(DOMAIN_NAME));
             domainList.removeDomain(domain);
+
+            removeCorrespondingDomainAliases(domain);
         } catch (DomainListException e) {
             LOGGER.info("{} did not exists", request.params(DOMAIN_NAME));
         }
@@ -239,6 +242,13 @@ public class DomainsRoutes implements Routes {
         return Constants.EMPTY_BODY;
     }
 
+    private void removeCorrespondingDomainAliases(Domain domain) throws RecipientRewriteTableException {
+        MappingSource mappingSource = MappingSource.fromDomain(domain);
+        recipientRewriteTable.getStoredMappings(mappingSource)
+            .asStream()
+            .forEach(Throwing.<Mapping>consumer(mapping -> recipientRewriteTable.removeMapping(mappingSource, mapping)).sneakyThrow());
+    }
+
     private String addDomain(Request request, Response response) {
         Domain domain = checkValidDomain(request.params(DOMAIN_NAME));
         try {
diff --git a/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/DomainsRoutesTest.java b/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/DomainsRoutesTest.java
index d5f28bd..dea3fc9 100644
--- a/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/DomainsRoutesTest.java
+++ b/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/DomainsRoutesTest.java
@@ -62,6 +62,7 @@ public class DomainsRoutesTest {
     private static final String ALIAS_DOMAIN = "alias.domain";
     private static final String ALIAS_DOMAIN_2 = "alias.domain.bis";
     public static final String EXTERNAL_DOMAIN = "external.domain.tld";
+    public static final String DOMAIN_2 = "domain2";
 
     private WebAdminServer webAdminServer;
 
@@ -506,6 +507,41 @@ public class DomainsRoutesTest {
                     .body("type", is("InvalidArgument"))
                     .body("message", is("Invalid request for domain creation invalid@domain"));
             }
+
+            @Test
+            void deleteSourceDomainShouldRemoveTheCorrespondingAlias() {
+                with().put(ALIAS_DOMAIN_2);
+                with().put(ALIAS_DOMAIN);
+
+                with().put(DOMAIN + "/aliases/" + ALIAS_DOMAIN);
+                with().put(DOMAIN + "/aliases/" + ALIAS_DOMAIN_2);
+
+                with().delete(ALIAS_DOMAIN_2);
+
+                when()
+                    .get(DOMAIN + "/aliases")
+                    .then()
+                    .contentType(ContentType.JSON)
+                    .statusCode(HttpStatus.OK_200)
+                    .body("source", containsInAnyOrder(ALIAS_DOMAIN));
+            }
+
+            @Test
+            void deleteDestinationDomainShouldHaveNoImpactOnAliasesAliases() {
+                with().put(DOMAIN);
+                with().put(ALIAS_DOMAIN);
+
+                with().put(DOMAIN + "/aliases/" + ALIAS_DOMAIN);
+
+                with().delete(DOMAIN);
+
+                when()
+                    .get(DOMAIN + "/aliases")
+                    .then()
+                    .contentType(ContentType.JSON)
+                    .statusCode(HttpStatus.OK_200)
+                    .body("source", containsInAnyOrder(ALIAS_DOMAIN));
+            }
         }
 
     }


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