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/01/11 03:01:20 UTC
[10/10] james-project git commit: JAMES-2637 refactoring group and
forward routes
JAMES-2637 refactoring group and forward routes
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/2b5c162e
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/2b5c162e
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/2b5c162e
Branch: refs/heads/master
Commit: 2b5c162ef5b681a4bb691de160d17df7ed1e98fa
Parents: de15eaa
Author: Rene Cordier <rc...@linagora.com>
Authored: Wed Jan 9 17:32:57 2019 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Fri Jan 11 09:48:34 2019 +0700
----------------------------------------------------------------------
.../james/webadmin/routes/ForwardRoutes.java | 47 ++++----------------
.../james/webadmin/routes/GroupsRoutes.java | 41 +++--------------
2 files changed, 14 insertions(+), 74 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/2b5c162e/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/ForwardRoutes.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/ForwardRoutes.java b/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/ForwardRoutes.java
index f75a34b..d69a568 100644
--- a/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/ForwardRoutes.java
+++ b/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/ForwardRoutes.java
@@ -22,16 +22,12 @@ package org.apache.james.webadmin.routes;
import static org.apache.james.webadmin.Constants.SEPARATOR;
import static spark.Spark.halt;
-import java.io.UnsupportedEncodingException;
-import java.net.URLDecoder;
-import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
import javax.inject.Inject;
-import javax.mail.internet.AddressException;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.PUT;
@@ -40,7 +36,6 @@ import javax.ws.rs.Produces;
import org.apache.james.core.MailAddress;
import org.apache.james.core.User;
-import org.apache.james.domainlist.api.DomainListException;
import org.apache.james.rrt.api.MappingAlreadyExistsException;
import org.apache.james.rrt.api.RecipientRewriteTable;
import org.apache.james.rrt.api.RecipientRewriteTableException;
@@ -55,11 +50,8 @@ import org.apache.james.webadmin.Routes;
import org.apache.james.webadmin.dto.ForwardDestinationResponse;
import org.apache.james.webadmin.utils.ErrorResponder;
import org.apache.james.webadmin.utils.ErrorResponder.ErrorType;
-import org.apache.james.webadmin.utils.JsonExtractException;
import org.apache.james.webadmin.utils.JsonTransformer;
import org.eclipse.jetty.http.HttpStatus;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import com.github.steveash.guavate.Guavate;
import com.google.common.annotations.VisibleForTesting;
@@ -84,8 +76,6 @@ public class ForwardRoutes implements Routes {
public static final String ROOT_PATH = "address/forwards";
- private static final Logger LOGGER = LoggerFactory.getLogger(ForwardRoutes.class);
-
private static final String FORWARD_BASE_ADDRESS = "forwardBaseAddress";
private static final String FORWARD_ADDRESS_PATH = ROOT_PATH + SEPARATOR + ":" + FORWARD_BASE_ADDRESS;
private static final String FORWARD_DESTINATION_ADDRESS = "forwardDestinationAddress";
@@ -93,6 +83,7 @@ public class ForwardRoutes implements Routes {
"targets" + SEPARATOR + ":" + FORWARD_DESTINATION_ADDRESS;
private static final String MAILADDRESS_ASCII_DISCLAIMER = "Note that email addresses are restricted to ASCII character set. " +
"Mail addresses not matching this criteria will be rejected.";
+ private static final String ADDRESS_TYPE = "forward";
private final UsersRepository usersRepository;
private final JsonTransformer jsonTransformer;
@@ -168,10 +159,10 @@ public class ForwardRoutes implements Routes {
@ApiResponse(code = HttpStatus.INTERNAL_SERVER_ERROR_500,
message = "Internal server error - Something went bad on the server side.")
})
- public HaltException addToForwardDestinations(Request request, Response response) throws JsonExtractException, AddressException, RecipientRewriteTableException, UsersRepositoryException, DomainListException {
- MailAddress forwardBaseAddress = parseMailAddress(request.params(FORWARD_BASE_ADDRESS));
+ public HaltException addToForwardDestinations(Request request, Response response) throws RecipientRewriteTableException, UsersRepositoryException {
+ MailAddress forwardBaseAddress = MailAddressParser.parseMailAddress(request.params(FORWARD_BASE_ADDRESS), ADDRESS_TYPE);
ensureUserExist(forwardBaseAddress);
- MailAddress destinationAddress = parseMailAddress(request.params(FORWARD_DESTINATION_ADDRESS));
+ MailAddress destinationAddress = MailAddressParser.parseMailAddress(request.params(FORWARD_DESTINATION_ADDRESS), ADDRESS_TYPE);
MappingSource source = MappingSource.fromUser(User.fromLocalPartWithDomain(forwardBaseAddress.getLocalPart(), forwardBaseAddress.getDomain()));
addForward(source, destinationAddress);
return halt(HttpStatus.NO_CONTENT_204);
@@ -210,9 +201,9 @@ public class ForwardRoutes implements Routes {
@ApiResponse(code = HttpStatus.INTERNAL_SERVER_ERROR_500,
message = "Internal server error - Something went bad on the server side.")
})
- public HaltException removeFromForwardDestination(Request request, Response response) throws JsonExtractException, AddressException, RecipientRewriteTableException {
- MailAddress baseAddress = parseMailAddress(request.params(FORWARD_BASE_ADDRESS));
- MailAddress destinationAddressToBeRemoved = parseMailAddress(request.params(FORWARD_DESTINATION_ADDRESS));
+ public HaltException removeFromForwardDestination(Request request, Response response) throws RecipientRewriteTableException {
+ MailAddress baseAddress = MailAddressParser.parseMailAddress(request.params(FORWARD_BASE_ADDRESS), ADDRESS_TYPE);
+ MailAddress destinationAddressToBeRemoved = MailAddressParser.parseMailAddress(request.params(FORWARD_DESTINATION_ADDRESS), ADDRESS_TYPE);
MappingSource source = MappingSource.fromUser(User.fromLocalPartWithDomain(baseAddress.getLocalPart(), baseAddress.getDomain()));
recipientRewriteTable.removeForwardMapping(source, destinationAddressToBeRemoved.asString());
return halt(HttpStatus.NO_CONTENT_204);
@@ -232,7 +223,7 @@ public class ForwardRoutes implements Routes {
message = "Internal server error - Something went bad on the server side.")
})
public ImmutableSet<ForwardDestinationResponse> listForwardDestinations(Request request, Response response) throws RecipientRewriteTableException {
- MailAddress baseAddress = parseMailAddress(request.params(FORWARD_BASE_ADDRESS));
+ MailAddress baseAddress = MailAddressParser.parseMailAddress(request.params(FORWARD_BASE_ADDRESS), ADDRESS_TYPE);
Mappings mappings = recipientRewriteTable.getStoredMappings(MappingSource.fromMailAddress(baseAddress))
.select(Mapping.Type.Forward);
@@ -247,28 +238,6 @@ public class ForwardRoutes implements Routes {
.collect(Guavate.toImmutableSet());
}
- private MailAddress parseMailAddress(String address) {
- try {
- String decodedAddress = URLDecoder.decode(address, StandardCharsets.UTF_8.displayName());
- return new MailAddress(decodedAddress);
- } catch (AddressException e) {
- throw ErrorResponder.builder()
- .statusCode(HttpStatus.BAD_REQUEST_400)
- .type(ErrorType.INVALID_ARGUMENT)
- .message("The forward is not an email address")
- .cause(e)
- .haltError();
- } catch (UnsupportedEncodingException e) {
- LOGGER.error("UTF-8 should be a valid encoding");
- throw ErrorResponder.builder()
- .statusCode(HttpStatus.INTERNAL_SERVER_ERROR_500)
- .type(ErrorType.SERVER_ERROR)
- .message("Internal server error - Something went bad on the server side.")
- .cause(e)
- .haltError();
- }
- }
-
private void ensureNonEmptyMappings(Mappings mappings) {
if (mappings == null || mappings.isEmpty()) {
throw ErrorResponder.builder()
http://git-wip-us.apache.org/repos/asf/james-project/blob/2b5c162e/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/GroupsRoutes.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/GroupsRoutes.java b/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/GroupsRoutes.java
index 492b7be..3ce454e 100644
--- a/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/GroupsRoutes.java
+++ b/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/GroupsRoutes.java
@@ -22,16 +22,12 @@ package org.apache.james.webadmin.routes;
import static org.apache.james.webadmin.Constants.SEPARATOR;
import static spark.Spark.halt;
-import java.io.UnsupportedEncodingException;
-import java.net.URLDecoder;
-import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
import javax.inject.Inject;
-import javax.mail.internet.AddressException;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.PUT;
@@ -58,8 +54,6 @@ import org.apache.james.webadmin.utils.ErrorResponder;
import org.apache.james.webadmin.utils.ErrorResponder.ErrorType;
import org.apache.james.webadmin.utils.JsonTransformer;
import org.eclipse.jetty.http.HttpStatus;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import com.github.steveash.guavate.Guavate;
import com.google.common.annotations.VisibleForTesting;
@@ -83,14 +77,13 @@ public class GroupsRoutes implements Routes {
public static final String ROOT_PATH = "address/groups";
- private static final Logger LOGGER = LoggerFactory.getLogger(GroupsRoutes.class);
-
private static final String GROUP_ADDRESS = "groupAddress";
private static final String GROUP_ADDRESS_PATH = ROOT_PATH + SEPARATOR + ":" + GROUP_ADDRESS;
private static final String USER_ADDRESS = "userAddress";
private static final String USER_IN_GROUP_ADDRESS_PATH = GROUP_ADDRESS_PATH + SEPARATOR + ":" + USER_ADDRESS;
private static final String MAILADDRESS_ASCII_DISCLAIMER = "Note that email addresses are restricted to ASCII character set. " +
"Mail addresses not matching this criteria will be rejected.";
+ private static final String ADDRESS_TYPE = "group";
private final UsersRepository usersRepository;
private final DomainList domainList;
@@ -163,11 +156,11 @@ public class GroupsRoutes implements Routes {
message = "Internal server error - Something went bad on the server side.")
})
public HaltException addToGroup(Request request, Response response) throws RecipientRewriteTableException, UsersRepositoryException, DomainListException {
- MailAddress groupAddress = parseMailAddress(request.params(GROUP_ADDRESS));
+ MailAddress groupAddress = MailAddressParser.parseMailAddress(request.params(GROUP_ADDRESS), ADDRESS_TYPE);
Domain domain = groupAddress.getDomain();
ensureRegisteredDomain(domain);
ensureNotShadowingAnotherAddress(groupAddress);
- MailAddress userAddress = parseMailAddress(request.params(USER_ADDRESS));
+ MailAddress userAddress = MailAddressParser.parseMailAddress(request.params(USER_ADDRESS), ADDRESS_TYPE);
MappingSource source = MappingSource.fromUser(User.fromLocalPartWithDomain(groupAddress.getLocalPart(), domain));
addGroupMember(source, userAddress);
return halt(HttpStatus.NO_CONTENT_204);
@@ -217,8 +210,8 @@ public class GroupsRoutes implements Routes {
message = "Internal server error - Something went bad on the server side.")
})
public HaltException removeFromGroup(Request request, Response response) throws RecipientRewriteTableException {
- MailAddress groupAddress = parseMailAddress(request.params(GROUP_ADDRESS));
- MailAddress userAddress = parseMailAddress(request.params(USER_ADDRESS));
+ MailAddress groupAddress = MailAddressParser.parseMailAddress(request.params(GROUP_ADDRESS), ADDRESS_TYPE);
+ MailAddress userAddress = MailAddressParser.parseMailAddress(request.params(USER_ADDRESS), ADDRESS_TYPE);
MappingSource source = MappingSource
.fromUser(
User.fromLocalPartWithDomain(groupAddress.getLocalPart(), groupAddress.getDomain()));
@@ -240,7 +233,7 @@ public class GroupsRoutes implements Routes {
message = "Internal server error - Something went bad on the server side.")
})
public ImmutableSortedSet<String> listGroupMembers(Request request, Response response) throws RecipientRewriteTableException {
- MailAddress groupAddress = parseMailAddress(request.params(GROUP_ADDRESS));
+ MailAddress groupAddress = MailAddressParser.parseMailAddress(request.params(GROUP_ADDRESS), ADDRESS_TYPE);
Mappings mappings = recipientRewriteTable.getStoredMappings(MappingSource.fromMailAddress(groupAddress))
.select(Mapping.Type.Group);
@@ -254,28 +247,6 @@ public class GroupsRoutes implements Routes {
.collect(Guavate.toImmutableSortedSet());
}
- private MailAddress parseMailAddress(String address) {
- try {
- String decodedAddress = URLDecoder.decode(address, StandardCharsets.UTF_8.displayName());
- return new MailAddress(decodedAddress);
- } catch (AddressException e) {
- throw ErrorResponder.builder()
- .statusCode(HttpStatus.BAD_REQUEST_400)
- .type(ErrorType.INVALID_ARGUMENT)
- .message("The group is not an email address")
- .cause(e)
- .haltError();
- } catch (UnsupportedEncodingException e) {
- LOGGER.error("UTF-8 should be a valid encoding");
- throw ErrorResponder.builder()
- .statusCode(HttpStatus.INTERNAL_SERVER_ERROR_500)
- .type(ErrorType.SERVER_ERROR)
- .message("Internal server error - Something went bad on the server side.")
- .cause(e)
- .haltError();
- }
- }
-
private void ensureNonEmptyMappings(Mappings mappings) {
if (mappings == null || mappings.isEmpty()) {
throw ErrorResponder.builder()
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org