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

Reply via email to