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 <[email protected]> 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: [email protected] For additional commands, e-mail: [email protected]
