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 b223e6d501f44ac6151e86b0cdf263b17c3721e2 Author: Benoit Tellier <[email protected]> AuthorDate: Thu Oct 31 09:31:46 2019 +0700 JAMES-2943 Domain routes should fail upon auto-detected domain removal attempts --- .../james/webadmin/routes/DomainsRoutes.java | 8 ++++ .../james/webadmin/routes/DomainsRoutesTest.java | 46 ++++++++++++++++++++-- 2 files changed, 51 insertions(+), 3 deletions(-) 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 c8c0a0ed..1aee7e9 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 @@ -32,6 +32,7 @@ import javax.ws.rs.Path; import javax.ws.rs.Produces; import org.apache.james.core.Domain; +import org.apache.james.domainlist.api.AutoDetectedDomainRemovalException; import org.apache.james.domainlist.api.DomainList; import org.apache.james.domainlist.api.DomainListException; import org.apache.james.rrt.api.RecipientRewriteTableException; @@ -227,6 +228,13 @@ public class DomainsRoutes implements Routes { domainList.removeDomain(domain); domainAliasService.removeCorrespondingDomainAliases(domain); + } catch (AutoDetectedDomainRemovalException e) { + throw ErrorResponder.builder() + .statusCode(HttpStatus.BAD_REQUEST_400) + .type(ErrorType.INVALID_ARGUMENT) + .message("Can not remove domain") + .cause(e) + .haltError(); } catch (DomainListException e) { LOGGER.info("{} did not exists", request.params(DOMAIN_NAME)); } 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 063bc79..f57070a 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 @@ -52,10 +52,11 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; +import com.google.common.collect.ImmutableList; + import io.restassured.RestAssured; import io.restassured.http.ContentType; - class DomainsRoutesTest { private static final String DOMAIN = "domain"; private static final String ALIAS_DOMAIN = "alias.domain"; @@ -547,7 +548,7 @@ class DomainsRoutesTest { when() .get(DOMAIN + "/aliases") - .then() + .then() .contentType(ContentType.JSON) .statusCode(HttpStatus.OK_200) .body("source", containsInAnyOrder(ALIAS_DOMAIN)); @@ -564,7 +565,7 @@ class DomainsRoutesTest { when() .get(DOMAIN + "/aliases") - .then() + .then() .contentType(ContentType.JSON) .statusCode(HttpStatus.OK_200) .body("source", containsInAnyOrder(ALIAS_DOMAIN)); @@ -668,4 +669,43 @@ class DomainsRoutesTest { } + @Nested + class DetectedDomainHandling { + @BeforeEach + void setUp() throws Exception { + DNSService dnsService = mock(DNSService.class); + when(dnsService.getAllByName(any())).thenReturn(ImmutableList.of(InetAddress.getByName("172.45.62.13"))); + when(dnsService.getHostName(any())).thenReturn("james.local"); + + MemoryDomainList domainList = new MemoryDomainList(dnsService); + domainList.setAutoDetectIP(true); + domainList.setAutoDetect(true); + createServer(domainList); + } + + @Test + void deleteShouldFailWhenAutoDetectedDomain() { + when() + .delete("james.local") + .then() + .statusCode(HttpStatus.BAD_REQUEST_400) + .body("statusCode", is(HttpStatus.BAD_REQUEST_400)) + .body("type", is("InvalidArgument")) + .body("message", is("Can not remove domain")) + .body("details", is("james.local is autodetected and cannot be removed")); + } + + @Test + void deleteShouldFailWhenAutoDetectedIp() { + when() + .delete("172.45.62.13") + .then() + .statusCode(HttpStatus.BAD_REQUEST_400) + .body("statusCode", is(HttpStatus.BAD_REQUEST_400)) + .body("type", is("InvalidArgument")) + .body("message", is("Can not remove domain")) + .body("details", is("172.45.62.13 is autodetected and cannot be removed")); + } + } + } --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
