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 <rcord...@linagora.com> Authored: Wed Jan 9 17:32:57 2019 +0700 Committer: Benoit Tellier <btell...@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-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org