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