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/05 09:02:16 UTC

[james-project] 01/05: JAMES-2946 Return InvalidArgument when a MailRepository is tried to be created with an unsupported protocol

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 982c4309a910e634e420e635a7c9c8a18d3c8f7d
Author: Gautier DI FOLCO <gd...@linagora.com>
AuthorDate: Wed Oct 30 12:48:47 2019 +0100

    JAMES-2946 Return InvalidArgument when a MailRepository is tried to be created with an unsupported protocol
---
 .../james/modules/server/GuiceMailRepositoryLoader.java  |  2 +-
 .../MailRepositoryStoreBeanFactory.java                  |  2 +-
 .../james/mailrepository/api/MailRepositoryStore.java    | 10 ++++++++++
 .../mailrepository/memory/MemoryMailRepositoryStore.java |  4 ++--
 .../memory/MemoryMailRepositoryStoreTest.java            |  2 +-
 .../memory/TestingMailRepositoryLoader.java              |  2 +-
 .../james/webadmin/routes/MailRepositoriesRoutes.java    |  7 +++++++
 .../webadmin/routes/MailRepositoriesRoutesTest.java      | 16 ++++++++++++++++
 8 files changed, 39 insertions(+), 6 deletions(-)

diff --git a/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/GuiceMailRepositoryLoader.java b/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/GuiceMailRepositoryLoader.java
index ef70d35..2c62334 100644
--- a/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/GuiceMailRepositoryLoader.java
+++ b/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/GuiceMailRepositoryLoader.java
@@ -45,7 +45,7 @@ public class GuiceMailRepositoryLoader implements MailRepositoryLoader {
             return genericLoader.<MailRepository>withChildModule(urlModule)
                 .instantiate(new ClassName(fullyQualifiedClassName));
         } catch (ClassNotFoundException e) {
-            throw new MailRepositoryStore.MailRepositoryStoreException("No Mail Repository found with class name " + fullyQualifiedClassName);
+            throw new MailRepositoryStore.UnsupportedRepositoryStoreException("No Mail Repository found with class name " + fullyQualifiedClassName);
         } catch (ClassCastException e) {
             throw new MailRepositoryStore.MailRepositoryStoreException(fullyQualifiedClassName + " is not a MailRepository");
         }
diff --git a/server/container/spring/src/main/java/org/apache/james/container/spring/bean/factory/mailrepositorystore/MailRepositoryStoreBeanFactory.java b/server/container/spring/src/main/java/org/apache/james/container/spring/bean/factory/mailrepositorystore/MailRepositoryStoreBeanFactory.java
index 3f529af..91002ba 100644
--- a/server/container/spring/src/main/java/org/apache/james/container/spring/bean/factory/mailrepositorystore/MailRepositoryStoreBeanFactory.java
+++ b/server/container/spring/src/main/java/org/apache/james/container/spring/bean/factory/mailrepositorystore/MailRepositoryStoreBeanFactory.java
@@ -206,7 +206,7 @@ public class MailRepositoryStoreBeanFactory extends AbstractBeanFactory implemen
                 return reply;
             } catch (Exception e) {
                 LOGGER.warn("Exception while creating repository: {}", e.getMessage(), e);
-                throw new MailRepositoryStoreException("Cannot find or init repository", e);
+                throw new UnsupportedRepositoryStoreException("Cannot find or init repository", e);
             }
         }
 
diff --git a/server/data/data-api/src/main/java/org/apache/james/mailrepository/api/MailRepositoryStore.java b/server/data/data-api/src/main/java/org/apache/james/mailrepository/api/MailRepositoryStore.java
index 7d0c520..f220775 100644
--- a/server/data/data-api/src/main/java/org/apache/james/mailrepository/api/MailRepositoryStore.java
+++ b/server/data/data-api/src/main/java/org/apache/james/mailrepository/api/MailRepositoryStore.java
@@ -92,4 +92,14 @@ public interface MailRepositoryStore {
             super(msg);
         }
     }
+
+    class UnsupportedRepositoryStoreException extends MailRepositoryStoreException {
+        public UnsupportedRepositoryStoreException(String msg, Throwable t) {
+            super(msg, t);
+        }
+
+        public UnsupportedRepositoryStoreException(String msg) {
+            super(msg);
+        }
+    }
 }
diff --git a/server/data/data-memory/src/main/java/org/apache/james/mailrepository/memory/MemoryMailRepositoryStore.java b/server/data/data-memory/src/main/java/org/apache/james/mailrepository/memory/MemoryMailRepositoryStore.java
index 61c1069..da5d546 100644
--- a/server/data/data-memory/src/main/java/org/apache/james/mailrepository/memory/MemoryMailRepositoryStore.java
+++ b/server/data/data-memory/src/main/java/org/apache/james/mailrepository/memory/MemoryMailRepositoryStore.java
@@ -133,7 +133,7 @@ public class MemoryMailRepositoryStore implements MailRepositoryStore, Startable
                 ((Initializable) mailRepository).init();
             }
         } catch (Exception e) {
-            throw new MailRepositoryStoreException("Cannot init mail repository", e);
+            throw new UnsupportedRepositoryStoreException("Cannot init mail repository", e);
         }
     }
 
@@ -145,6 +145,6 @@ public class MemoryMailRepositoryStore implements MailRepositoryStore, Startable
 
         return fullyQualifiedClass
             .map(Throwing.function(fqcnToMailRepository).sneakyThrow())
-            .orElseThrow(() -> new MailRepositoryStoreException("No Mail Repository associated with " + protocol.getValue()));
+            .orElseThrow(() -> new UnsupportedRepositoryStoreException("No Mail Repository associated with " + protocol.getValue()));
     }
 }
diff --git a/server/data/data-memory/src/test/java/org/apache/james/mailrepository/memory/MemoryMailRepositoryStoreTest.java b/server/data/data-memory/src/test/java/org/apache/james/mailrepository/memory/MemoryMailRepositoryStoreTest.java
index b430595..ffb36e2 100644
--- a/server/data/data-memory/src/test/java/org/apache/james/mailrepository/memory/MemoryMailRepositoryStoreTest.java
+++ b/server/data/data-memory/src/test/java/org/apache/james/mailrepository/memory/MemoryMailRepositoryStoreTest.java
@@ -69,7 +69,7 @@ public class MemoryMailRepositoryStoreTest {
         repositoryStore.init();
     }
 
-    @Test(expected = MailRepositoryStore.MailRepositoryStoreException.class)
+    @Test(expected = MailRepositoryStore.UnsupportedRepositoryStoreException.class)
     public void selectingANonRegisteredProtocolShouldFail() {
         repositoryStore.select(MailRepositoryUrl.from("proto://repo"));
     }
diff --git a/server/data/data-memory/src/test/java/org/apache/james/mailrepository/memory/TestingMailRepositoryLoader.java b/server/data/data-memory/src/test/java/org/apache/james/mailrepository/memory/TestingMailRepositoryLoader.java
index 93db1f9..025d5a6 100644
--- a/server/data/data-memory/src/test/java/org/apache/james/mailrepository/memory/TestingMailRepositoryLoader.java
+++ b/server/data/data-memory/src/test/java/org/apache/james/mailrepository/memory/TestingMailRepositoryLoader.java
@@ -29,6 +29,6 @@ public class TestingMailRepositoryLoader implements MailRepositoryLoader {
         if (fullyQualifiedClassName.equals(MemoryMailRepository.class.getCanonicalName())) {
             return new MemoryMailRepository();
         }
-        throw new MailRepositoryStore.MailRepositoryStoreException(fullyQualifiedClassName + " is not supported");
+        throw new MailRepositoryStore.UnsupportedRepositoryStoreException(fullyQualifiedClassName + " is not supported");
     }
 }
diff --git a/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/routes/MailRepositoriesRoutes.java b/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/routes/MailRepositoriesRoutes.java
index c9fc45e..4bd881f 100644
--- a/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/routes/MailRepositoriesRoutes.java
+++ b/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/routes/MailRepositoriesRoutes.java
@@ -151,6 +151,13 @@ public class MailRepositoriesRoutes implements Routes {
             try {
                 repositoryStoreService.createMailRepository(path, protocol);
                 return Responses.returnNoContent(response);
+            } catch (MailRepositoryStore.UnsupportedRepositoryStoreException e) {
+                throw ErrorResponder.builder()
+                    .statusCode(HttpStatus.BAD_REQUEST_400)
+                    .type(ErrorType.INVALID_ARGUMENT)
+                    .cause(e)
+                    .message(String.format("'%s' is an unsupported protocol", protocol))
+                    .haltError();
             } catch (MailRepositoryStore.MailRepositoryStoreException e) {
                 throw ErrorResponder.builder()
                     .statusCode(HttpStatus.INTERNAL_SERVER_ERROR_500)
diff --git a/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/routes/MailRepositoriesRoutesTest.java b/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/routes/MailRepositoriesRoutesTest.java
index 967b260..00aeef4 100644
--- a/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/routes/MailRepositoriesRoutesTest.java
+++ b/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/routes/MailRepositoriesRoutesTest.java
@@ -177,6 +177,22 @@ public class MailRepositoriesRoutesTest {
     }
 
     @Test
+    public void putMailRepositoryShouldReturnInvalidArgumentWhenProtocolIsUnsupported() {
+        given()
+            .params("protocol", "unsupported")
+        .when()
+            .put(PATH_ESCAPED_MY_REPO)
+        .then()
+            .statusCode(HttpStatus.BAD_REQUEST_400)
+            .body("statusCode", is(400))
+            .body("type", is(ErrorResponder.ErrorType.INVALID_ARGUMENT.getType()))
+            .body("message", is("'unsupported' is an unsupported protocol"));
+
+        assertThat(mailRepositoryStore.get(URL_MY_REPO))
+            .isEmpty();
+    }
+
+    @Test
     public void getMailRepositoriesShouldReturnEmptyWhenEmpty() {
         List<Object> mailRepositories =
             when()


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org