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 <[email protected]>
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: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to