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/11/04 11:23:53 UTC
[james-project] 17/30: JAMES-2943 Forbid default domain removal as
well
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 <bt...@linagora.com>
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: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org