JAMES-2344 Domain routes only makes sens when virtual hosting is enabled

Otherwise users are attached to no domain in particular...


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/f258987f
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/f258987f
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/f258987f

Branch: refs/heads/master
Commit: f258987ff9edb0fd8f5cbacc51073c5a6d19ef07
Parents: 5191b5f
Author: benwa <[email protected]>
Authored: Tue Mar 13 11:08:44 2018 +0700
Committer: benwa <[email protected]>
Committed: Thu Mar 15 14:40:15 2018 +0700

----------------------------------------------------------------------
 .../webadmin/routes/DomainQuotaRoutes.java      |  23 +++-
 .../DomainQuotaRoutesNoVirtualHostingTest.java  | 138 +++++++++++++++++++
 .../webadmin/routes/DomainQuotaRoutesTest.java  |   4 +-
 3 files changed, 163 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/f258987f/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/routes/DomainQuotaRoutes.java
----------------------------------------------------------------------
diff --git 
a/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/routes/DomainQuotaRoutes.java
 
b/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/routes/DomainQuotaRoutes.java
index f8c0ace..4f6b359 100644
--- 
a/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/routes/DomainQuotaRoutes.java
+++ 
b/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/routes/DomainQuotaRoutes.java
@@ -34,6 +34,8 @@ import org.apache.james.domainlist.api.DomainList;
 import org.apache.james.domainlist.api.DomainListException;
 import org.apache.james.mailbox.quota.QuotaCount;
 import org.apache.james.mailbox.quota.QuotaSize;
+import org.apache.james.user.api.UsersRepository;
+import org.apache.james.user.api.UsersRepositoryException;
 import org.apache.james.webadmin.Routes;
 import org.apache.james.webadmin.dto.QuotaDTO;
 import org.apache.james.webadmin.utils.ErrorResponder;
@@ -45,6 +47,8 @@ import org.apache.james.webadmin.utils.JsonTransformerModule;
 import org.apache.james.webadmin.validation.Quotas;
 import org.eclipse.jetty.http.HttpStatus;
 
+import com.google.common.base.Throwables;
+
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
@@ -66,14 +70,16 @@ public class DomainQuotaRoutes implements Routes {
 
     private final DomainList domainList;
     private final DomainQuotaService domainQuotaService;
+    private final UsersRepository usersRepository;
     private final JsonTransformer jsonTransformer;
     private final JsonExtractor<QuotaDTO> jsonExtractor;
     private Service service;
 
     @Inject
-    public DomainQuotaRoutes(DomainList domainList, DomainQuotaService 
domainQuotaService, JsonTransformer jsonTransformer, Set<JsonTransformerModule> 
modules) {
+    public DomainQuotaRoutes(DomainList domainList, DomainQuotaService 
domainQuotaService, UsersRepository usersRepository, JsonTransformer 
jsonTransformer, Set<JsonTransformerModule> modules) {
         this.domainList = domainList;
         this.domainQuotaService = domainQuotaService;
+        this.usersRepository = usersRepository;
         this.jsonTransformer = jsonTransformer;
         this.jsonExtractor = new JsonExtractor<>(QuotaDTO.class, 
modules.stream().map(JsonTransformerModule::asJacksonModule).collect(Collectors.toList()));
     }
@@ -94,6 +100,14 @@ public class DomainQuotaRoutes implements Routes {
         defineUpdateQuota();
     }
 
+    public boolean isVirtualHostingSupported() {
+        try {
+            return usersRepository.supportVirtualHosting();
+        } catch (UsersRepositoryException e) {
+            throw Throwables.propagate(e);
+        }
+    }
+
     @PUT
     @ApiOperation(value = "Updating count and size at the same time")
     @ApiImplicitParams({
@@ -255,6 +269,13 @@ public class DomainQuotaRoutes implements Routes {
     }
 
     private String checkDomainExist(Request request) {
+        if (!isVirtualHostingSupported()) {
+            throw ErrorResponder.builder()
+                .statusCode(HttpStatus.METHOD_NOT_ALLOWED_405)
+                .type(ErrorType.WRONG_STATE)
+                .message("Domain Quota configuration not supported when 
virtual hosting is desactivated. Please use global quota configuration instead")
+                .haltError();
+        }
         String domain = request.params(DOMAIN);
         try {
             if (!domainList.containsDomain(domain)) {

http://git-wip-us.apache.org/repos/asf/james-project/blob/f258987f/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/DomainQuotaRoutesNoVirtualHostingTest.java
----------------------------------------------------------------------
diff --git 
a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/DomainQuotaRoutesNoVirtualHostingTest.java
 
b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/DomainQuotaRoutesNoVirtualHostingTest.java
new file mode 100644
index 0000000..17d0c21
--- /dev/null
+++ 
b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/DomainQuotaRoutesNoVirtualHostingTest.java
@@ -0,0 +1,138 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information        *
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the            *
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *                                                              *
+ *   http://www.apache.org/licenses/LICENSE-2.0                 *
+ *                                                              *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
+ * KIND, either express or implied.  See the License for the    *
+ * specific language governing permissions and limitations      *
+ * under the License.                                           *
+ ****************************************************************/
+
+package org.apache.james.webadmin.routes;
+
+import static com.jayway.restassured.RestAssured.given;
+import static org.apache.james.webadmin.WebAdminServer.NO_CONFIGURATION;
+
+import java.util.Collection;
+
+import org.apache.james.dnsservice.api.InMemoryDNSService;
+import org.apache.james.domainlist.memory.MemoryDomainList;
+import org.apache.james.mailbox.inmemory.quota.InMemoryPerUserMaxQuotaManager;
+import org.apache.james.metrics.api.NoopMetricFactory;
+import org.apache.james.user.memory.MemoryUsersRepository;
+import org.apache.james.webadmin.WebAdminServer;
+import org.apache.james.webadmin.WebAdminUtils;
+import org.apache.james.webadmin.jackson.QuotaModule;
+import org.apache.james.webadmin.utils.JsonTransformer;
+import org.eclipse.jetty.http.HttpStatus;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableSet;
+import com.jayway.restassured.RestAssured;
+
+@RunWith(Parameterized.class)
+public class DomainQuotaRoutesNoVirtualHostingTest {
+
+    private static final String QUOTA_DOMAINS = "/quota/domains";
+    private static final String FOUND_COM = "found.com";
+    private static final String COUNT = "count";
+    private static final String SIZE = "size";
+    private WebAdminServer webAdminServer;
+
+    @Parameters
+    public static Collection<Object[]> data() {
+        return ImmutableList.of(
+            new String[] {QUOTA_DOMAINS + "/" + FOUND_COM + "/" + COUNT},
+            new String[] {QUOTA_DOMAINS + "/" + FOUND_COM + "/" + SIZE});
+    }
+
+    private String endpoint;
+
+    public DomainQuotaRoutesNoVirtualHostingTest(String endpoint) {
+        this.endpoint = endpoint;
+    }
+
+    @Before
+    public void setUp() throws Exception {
+        InMemoryPerUserMaxQuotaManager maxQuotaManager = new 
InMemoryPerUserMaxQuotaManager();
+        MemoryDomainList memoryDomainList = new MemoryDomainList(new 
InMemoryDNSService());
+        memoryDomainList.setAutoDetect(false);
+        memoryDomainList.addDomain(FOUND_COM);
+        MemoryDomainList domainList = new MemoryDomainList(new 
InMemoryDNSService());
+        domainList.addDomain(FOUND_COM);
+        DomainQuotaService domainQuotaService = new 
DomainQuotaService(maxQuotaManager);
+        QuotaModule quotaModule = new QuotaModule();
+        MemoryUsersRepository usersRepository = 
MemoryUsersRepository.withoutVirtualHosting();
+        DomainQuotaRoutes domainQuotaRoutes = new 
DomainQuotaRoutes(domainList, domainQuotaService, usersRepository, new 
JsonTransformer(quotaModule), ImmutableSet.of(quotaModule));
+        webAdminServer = WebAdminUtils.createWebAdminServer(
+            new NoopMetricFactory(),
+            domainQuotaRoutes);
+        webAdminServer.configure(NO_CONFIGURATION);
+        webAdminServer.await();
+
+        RestAssured.requestSpecification = 
WebAdminUtils.buildRequestSpecification(webAdminServer)
+            .build();
+        RestAssured.enableLoggingOfRequestAndResponseIfValidationFails();
+    }
+
+    @After
+    public void stop() {
+        webAdminServer.destroy();
+    }
+
+    @Test
+    public void allGetEndpointsShouldReturnNotAllowed() {
+        given()
+            .get(endpoint)
+        .then()
+            .statusCode(HttpStatus.METHOD_NOT_ALLOWED_405);
+    }
+
+    @Test
+    public void allPutEndpointsShouldReturnNotAllowed() {
+        given()
+            .put(endpoint)
+        .then()
+            .statusCode(HttpStatus.METHOD_NOT_ALLOWED_405);
+    }
+
+    @Test
+    public void allDeleteEndpointsShouldReturnNotAllowed() {
+        given()
+            .delete(endpoint)
+        .then()
+            .statusCode(HttpStatus.METHOD_NOT_ALLOWED_405);
+    }
+
+    @Test
+    public void domainGetEndpointsShouldReturnNotAllowed() {
+        given()
+            .get(QUOTA_DOMAINS + "/" + FOUND_COM)
+        .then()
+            .statusCode(HttpStatus.METHOD_NOT_ALLOWED_405);
+    }
+
+    @Test
+    public void domainPutEndpointsShouldReturnNotAllowed() {
+        given()
+            .put(QUOTA_DOMAINS + "/" + FOUND_COM)
+        .then()
+            .statusCode(HttpStatus.METHOD_NOT_ALLOWED_405);
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/f258987f/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/DomainQuotaRoutesTest.java
----------------------------------------------------------------------
diff --git 
a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/DomainQuotaRoutesTest.java
 
b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/DomainQuotaRoutesTest.java
index 9f9cab7..d461bc4 100644
--- 
a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/DomainQuotaRoutesTest.java
+++ 
b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/DomainQuotaRoutesTest.java
@@ -32,6 +32,7 @@ import 
org.apache.james.mailbox.inmemory.quota.InMemoryPerUserMaxQuotaManager;
 import org.apache.james.mailbox.quota.QuotaCount;
 import org.apache.james.mailbox.quota.QuotaSize;
 import org.apache.james.metrics.api.NoopMetricFactory;
+import org.apache.james.user.memory.MemoryUsersRepository;
 import org.apache.james.webadmin.WebAdminServer;
 import org.apache.james.webadmin.WebAdminUtils;
 import org.apache.james.webadmin.jackson.QuotaModule;
@@ -66,7 +67,8 @@ public class DomainQuotaRoutesTest {
         domainList.addDomain(TROUVÉ_COM);
         DomainQuotaService domainQuotaService = new 
DomainQuotaService(maxQuotaManager);
         QuotaModule quotaModule = new QuotaModule();
-        DomainQuotaRoutes domainQuotaRoutes = new 
DomainQuotaRoutes(domainList, domainQuotaService, new 
JsonTransformer(quotaModule), ImmutableSet.of(quotaModule));
+        MemoryUsersRepository usersRepository = 
MemoryUsersRepository.withVirtualHosting();
+        DomainQuotaRoutes domainQuotaRoutes = new 
DomainQuotaRoutes(domainList, domainQuotaService, usersRepository, new 
JsonTransformer(quotaModule), ImmutableSet.of(quotaModule));
         webAdminServer = WebAdminUtils.createWebAdminServer(
             new NoopMetricFactory(),
             domainQuotaRoutes);


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to