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 2020/04/03 02:09:45 UTC

[james-project] 02/04: JAMES-3058 Add a confirmation header to call SolveMailboxInconsistency task

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 d58d7e9c72511165b3974e85ecf4d3b528cef878
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Fri Mar 27 18:08:55 2020 +0700

    JAMES-3058 Add a confirmation header to call SolveMailboxInconsistency task
---
 .../rabbitmq/RabbitMQWebAdminServerIntegrationTest.java      |  1 +
 .../routes/SolveMailboxInconsistenciesRequestToTask.java     | 12 +++++++++++-
 src/site/markdown/server/manage-webadmin.md                  |  3 +++
 3 files changed, 15 insertions(+), 1 deletion(-)

diff --git a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQWebAdminServerIntegrationTest.java b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQWebAdminServerIntegrationTest.java
index dcf26ba..0f7b1e8 100644
--- a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQWebAdminServerIntegrationTest.java
+++ b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQWebAdminServerIntegrationTest.java
@@ -178,6 +178,7 @@ class RabbitMQWebAdminServerIntegrationTest extends WebAdminServerIntegrationTes
             .body("status", is("completed"));
 
         taskId = with()
+            .header("I-KNOW-WHAT-I-M-DOING", "ALL-SERVICES-ARE-OFFLINE")
             .queryParam("task", "SolveInconsistencies")
         .post("/mailboxes")
             .jsonPath()
diff --git a/server/protocols/webadmin/webadmin-cassandra/src/main/java/org/apache/james/webadmin/routes/SolveMailboxInconsistenciesRequestToTask.java b/server/protocols/webadmin/webadmin-cassandra/src/main/java/org/apache/james/webadmin/routes/SolveMailboxInconsistenciesRequestToTask.java
index 7418226..064dca5 100644
--- a/server/protocols/webadmin/webadmin-cassandra/src/main/java/org/apache/james/webadmin/routes/SolveMailboxInconsistenciesRequestToTask.java
+++ b/server/protocols/webadmin/webadmin-cassandra/src/main/java/org/apache/james/webadmin/routes/SolveMailboxInconsistenciesRequestToTask.java
@@ -26,12 +26,22 @@ import org.apache.james.mailbox.cassandra.mail.task.SolveMailboxInconsistenciesT
 import org.apache.james.webadmin.tasks.TaskFromRequestRegistry;
 import org.apache.james.webadmin.tasks.TaskRegistrationKey;
 
+import com.google.common.base.Preconditions;
+
 public class SolveMailboxInconsistenciesRequestToTask extends TaskFromRequestRegistry.TaskRegistration {
     private static final TaskRegistrationKey REGISTRATION_KEY = TaskRegistrationKey.of("SolveInconsistencies");
 
     @Inject
     public SolveMailboxInconsistenciesRequestToTask(SolveMailboxInconsistenciesService service) {
         super(REGISTRATION_KEY,
-            request -> new SolveMailboxInconsistenciesTask(service));
+            request -> {
+                Preconditions.checkArgument(request.headers("I-KNOW-WHAT-I-M-DOING")
+                        .equalsIgnoreCase("ALL-SERVICES-ARE-OFFLINE"),
+                    "Due to concurrency risks, a `I-KNOW-WHAT-I-M-DOING` header should be positioned to " +
+                        "`ALL-SERVICES-ARE-OFFLINE` in order to prevent accidental calls. " +
+                        "Check the documentation for details.");
+
+                return new SolveMailboxInconsistenciesTask(service);
+            });
     }
 }
diff --git a/src/site/markdown/server/manage-webadmin.md b/src/site/markdown/server/manage-webadmin.md
index 042752b..e88532e 100644
--- a/src/site/markdown/server/manage-webadmin.md
+++ b/src/site/markdown/server/manage-webadmin.md
@@ -453,6 +453,9 @@ A dirty read is when data is read between the two writes of the denormalization
 In order to ensure being offline, stop the traffic on SMTP, JMAP and IMAP ports, for example via re-configuration or 
 firewall rules.
 
+Due to all of those risks, a `I-KNOW-WHAT-I-M-DOING` header should be positioned to `ALL-SERVICES-ARE-OFFLINE` in order 
+to prevent accidental calls.
+
 #### Recomputing mailbox counters
 
 This task is only available on top of Guice Cassandra products.


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