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 3164753d2cd5575bc897f816264f0e59213c5c93 Author: Benoit Tellier <[email protected]> AuthorDate: Thu Oct 31 09:43:21 2019 +0700 JAMES-2943 Forbid default domain removal as well --- .../james/domainlist/lib/AbstractDomainList.java | 13 +++++++++---- .../lib/AbstractDomainListPrivateMethodsTest.java | 9 +++++++++ .../james/webadmin/routes/DomainsRoutesTest.java | 20 ++++++++++++++++++-- src/site/markdown/server/manage-webadmin.md | 2 +- 4 files changed, 37 insertions(+), 7 deletions(-) diff --git a/server/data/data-library/src/main/java/org/apache/james/domainlist/lib/AbstractDomainList.java b/server/data/data-library/src/main/java/org/apache/james/domainlist/lib/AbstractDomainList.java index a723829..8be0ee5 100644 --- a/server/data/data-library/src/main/java/org/apache/james/domainlist/lib/AbstractDomainList.java +++ b/server/data/data-library/src/main/java/org/apache/james/domainlist/lib/AbstractDomainList.java @@ -23,6 +23,7 @@ import java.net.InetAddress; import java.net.UnknownHostException; import java.util.Collection; import java.util.List; +import java.util.Optional; import java.util.stream.Stream; import org.apache.commons.configuration2.HierarchicalConfiguration; @@ -55,6 +56,7 @@ public abstract class AbstractDomainList implements DomainList, Configurable { private static final Logger LOGGER = LoggerFactory.getLogger(AbstractDomainList.class); enum DomainType { + DefaultDomain, Internal, Detected, DetectedIp @@ -187,11 +189,13 @@ public abstract class AbstractDomainList implements DomainList, Configurable { .build(); ImmutableList<Domain> ips = detectIps(domainsWithoutIp); - return ImmutableMultimap.<DomainType, Domain>builder() + ImmutableMultimap.Builder<DomainType, Domain> result = ImmutableMultimap.<DomainType, Domain>builder() .putAll(DomainType.Internal, domains) .putAll(DomainType.Detected, detectedDomains) - .putAll(DomainType.DetectedIp, ips) - .build(); + .putAll(DomainType.DetectedIp, ips); + Optional.ofNullable(defaultDomain) + .ifPresent(domain -> result.put(DomainType.DefaultDomain, domain)); + return result.build(); } private ImmutableList<Domain> detectIps(Collection<Domain> domains) { @@ -281,7 +285,8 @@ public abstract class AbstractDomainList implements DomainList, Configurable { Multimap<DomainType, Domain> domainsWithType = getDomainsWithType(); return domainsWithType.get(DomainType.Detected).contains(domain) - || domainsWithType.get(DomainType.DetectedIp).contains(domain); + || domainsWithType.get(DomainType.DetectedIp).contains(domain) + || domainsWithType.get(DomainType.DefaultDomain).contains(domain); } /** diff --git a/server/data/data-library/src/test/java/org/apache/james/domainlist/lib/AbstractDomainListPrivateMethodsTest.java b/server/data/data-library/src/test/java/org/apache/james/domainlist/lib/AbstractDomainListPrivateMethodsTest.java index 2100ec1..9c48401 100644 --- a/server/data/data-library/src/test/java/org/apache/james/domainlist/lib/AbstractDomainListPrivateMethodsTest.java +++ b/server/data/data-library/src/test/java/org/apache/james/domainlist/lib/AbstractDomainListPrivateMethodsTest.java @@ -348,6 +348,15 @@ public class AbstractDomainListPrivateMethodsTest { } @Test + public void removeDomainShouldThrowWhenRemovingDefaultDomain() throws Exception { + Domain defaultDomain = Domain.of("default.tld"); + domainList.configureDefaultDomain(defaultDomain); + + assertThatThrownBy(() -> domainList.removeDomain(defaultDomain)) + .isInstanceOf(AutoDetectedDomainRemovalException.class); + } + + @Test public void configuredDomainShouldBeAddedUponConfiguration() throws Exception { Domain domain1 = Domain.of("conf1.tld"); Domain domain2 = Domain.of("conf2.tld"); 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 f57070a..8db07eb 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 @@ -40,6 +40,7 @@ import org.apache.james.core.Domain; import org.apache.james.dnsservice.api.DNSService; import org.apache.james.domainlist.api.DomainList; import org.apache.james.domainlist.api.DomainListException; +import org.apache.james.domainlist.lib.DomainListConfiguration; import org.apache.james.domainlist.memory.MemoryDomainList; import org.apache.james.rrt.memory.MemoryRecipientRewriteTable; import org.apache.james.webadmin.WebAdminServer; @@ -678,8 +679,11 @@ class DomainsRoutesTest { when(dnsService.getHostName(any())).thenReturn("james.local"); MemoryDomainList domainList = new MemoryDomainList(dnsService); - domainList.setAutoDetectIP(true); - domainList.setAutoDetect(true); + domainList.configure(DomainListConfiguration.builder() + .autoDetect(true) + .autoDetectIp(true) + .defaultDomain(Domain.of("default.tld")) + .build()); createServer(domainList); } @@ -706,6 +710,18 @@ class DomainsRoutesTest { .body("message", is("Can not remove domain")) .body("details", is("172.45.62.13 is autodetected and cannot be removed")); } + + @Test + void deleteShouldFailWhenDefaultDomain() { + when() + .delete("default.tld") + .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("default.tld is autodetected and cannot be removed")); + } } } diff --git a/src/site/markdown/server/manage-webadmin.md b/src/site/markdown/server/manage-webadmin.md index 12256ad..2fb39ba 100644 --- a/src/site/markdown/server/manage-webadmin.md +++ b/src/site/markdown/server/manage-webadmin.md @@ -182,7 +182,7 @@ Response codes: curl -XDELETE http://ip:port/domains/domainToBeDeleted ``` -Note: Deletion of an auto-detected domain or of an auto-detected ip is not supported. We encourage you instead to review +Note: Deletion of an auto-detected domain, default domain or of an auto-detected ip is not supported. We encourage you instead to review your [domain list configuration](https://james.apache.org/server/config-domainlist.html). Response codes: --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
