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]

Reply via email to