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/05/23 03:37:59 UTC
[james-project] 11/14: JAMES-2776 DomainsRoutes should not accept
same source & destination
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 df4677c36aa70e02fba61bf79433c1ba11cd583c
Author: Tran Tien Duc <dt...@linagora.com>
AuthorDate: Tue May 21 11:27:31 2019 +0700
JAMES-2776 DomainsRoutes should not accept same source & destination
---
.../james/webadmin/routes/DomainsRoutes.java | 13 ++++++++++
.../james/webadmin/service/DomainAliasService.java | 7 ++++++
.../james/webadmin/routes/DomainsRoutesTest.java | 28 ++++++++++++++++++++++
src/site/markdown/server/manage-webadmin.md | 2 ++
4 files changed, 50 insertions(+)
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 de7300d..77ed8a6 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
@@ -35,6 +35,7 @@ import org.apache.james.core.Domain;
import org.apache.james.domainlist.api.DomainList;
import org.apache.james.domainlist.api.DomainListException;
import org.apache.james.rrt.api.RecipientRewriteTableException;
+import org.apache.james.rrt.api.SameSourceAndDestinationException;
import org.apache.james.webadmin.Routes;
import org.apache.james.webadmin.dto.DomainAliasResponse;
import org.apache.james.webadmin.service.DomainAliasService;
@@ -303,6 +304,8 @@ public class DomainsRoutes implements Routes {
return Responses.returnNoContent(response);
} catch (DomainAliasService.DomainNotFound e) {
throw domainNotFound(e.getDomain());
+ } catch (SameSourceAndDestinationException e) {
+ throw sameSourceAndDestination(sourceDomain);
}
}
@@ -315,6 +318,8 @@ public class DomainsRoutes implements Routes {
return Responses.returnNoContent(response);
} catch (DomainAliasService.DomainNotFound e) {
throw domainNotFound(e.getDomain());
+ } catch (SameSourceAndDestinationException e) {
+ throw sameSourceAndDestination(sourceDomain);
}
}
@@ -333,4 +338,12 @@ public class DomainsRoutes implements Routes {
.message("The following domain is not in the domain list and has no registered local aliases: " + domain.name())
.haltError();
}
+
+ private HaltException sameSourceAndDestination(Domain sameDomain) {
+ return ErrorResponder.builder()
+ .statusCode(HttpStatus.BAD_REQUEST_400)
+ .type(ErrorType.INVALID_ARGUMENT)
+ .message("Source domain and destination domain can not have same value(" + sameDomain.name() + ")")
+ .haltError();
+ }
}
diff --git a/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/service/DomainAliasService.java b/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/service/DomainAliasService.java
index afbc093..bc8e10d 100644
--- a/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/service/DomainAliasService.java
+++ b/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/service/DomainAliasService.java
@@ -26,6 +26,7 @@ import org.apache.james.domainlist.api.DomainList;
import org.apache.james.domainlist.api.DomainListException;
import org.apache.james.rrt.api.RecipientRewriteTable;
import org.apache.james.rrt.api.RecipientRewriteTableException;
+import org.apache.james.rrt.api.SameSourceAndDestinationException;
import org.apache.james.rrt.lib.Mapping;
import org.apache.james.rrt.lib.MappingSource;
import org.apache.james.webadmin.dto.DomainAliasResponse;
@@ -92,7 +93,13 @@ public class DomainAliasService {
throw new DomainNotFound(sourceDomain);
}
+ checkSameSourceAndDestination(sourceDomain, destinationDomain);
operation.perform(MappingSource.fromDomain(sourceDomain), Mapping.domain(destinationDomain));
}
+ private void checkSameSourceAndDestination(Domain source, Domain destination) throws RecipientRewriteTableException {
+ if (source.equals(destination)) {
+ throw new SameSourceAndDestinationException("Source and destination domain can't be the same!");
+ }
+ }
}
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 01dbe7e..e68ddc3 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
@@ -398,6 +398,20 @@ class DomainsRoutesTest {
}
@Test
+ void putShouldReturnBadRequestWhenSourceAndDestinationAreTheSame() {
+ with().put(DOMAIN);
+
+ when()
+ .put(DOMAIN + "/aliases/" + DOMAIN)
+ .then()
+ .contentType(ContentType.JSON)
+ .statusCode(HttpStatus.BAD_REQUEST_400)
+ .body("statusCode", is(HttpStatus.BAD_REQUEST_400))
+ .body("type", is("InvalidArgument"))
+ .body("message", is("Source domain and destination domain can not have same value(" + DOMAIN + ")"));
+ }
+
+ @Test
void putShouldNotFailOnExternalDomainAlias() {
with().put(DOMAIN);
@@ -510,6 +524,20 @@ class DomainsRoutesTest {
}
@Test
+ void deleteShouldReturnBadRequestWhenSourceAndDestinationAreTheSame() {
+ with().put(DOMAIN);
+
+ when()
+ .delete(DOMAIN + "/aliases/" + DOMAIN)
+ .then()
+ .contentType(ContentType.JSON)
+ .statusCode(HttpStatus.BAD_REQUEST_400)
+ .body("statusCode", is(HttpStatus.BAD_REQUEST_400))
+ .body("type", is("InvalidArgument"))
+ .body("message", is("Source domain and destination domain can not have same value(" + DOMAIN + ")"));
+ }
+
+ @Test
void deleteSourceDomainShouldRemoveTheCorrespondingAlias() {
with().put(ALIAS_DOMAIN_2);
with().put(ALIAS_DOMAIN);
diff --git a/src/site/markdown/server/manage-webadmin.md b/src/site/markdown/server/manage-webadmin.md
index 5217042..3d8bb5b 100644
--- a/src/site/markdown/server/manage-webadmin.md
+++ b/src/site/markdown/server/manage-webadmin.md
@@ -223,6 +223,7 @@ Response codes:
- 204: The redirection now exists
- 400: source.domain.tld or destination.domain.tld have an invalid syntax
+ - 400: source domain and destination domain are the same
- 404: source.domain.tld are not part of handled domains.
### Delete an alias for a domain
@@ -242,6 +243,7 @@ Response codes:
- 204: The redirection now exists
- 400: source.domain.tld or destination.domain.tld have an invalid syntax
+ - 400: source domain and destination domain are the same
- 404: source.domain.tld are not part of handled domains.
## Administrating users
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org