You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@james.apache.org by rc...@apache.org on 2021/11/18 03:46:01 UTC

[james-project] branch master updated: JAMES-3670 : Configurable restore location for messages from the Deleted Messages Vault

This is an automated email from the ASF dual-hosted git repository.

rcordier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git


The following commit(s) were added to refs/heads/master by this push:
     new 900e0fd  JAMES-3670 : Configurable restore location for messages from the Deleted Messages Vault
900e0fd is described below

commit 900e0fd95c86d39f7c01fa3da6aed8bdea420212
Author: Karsten Otto <ka...@akquinet.de>
AuthorDate: Mon Nov 15 10:00:52 2021 +0100

    JAMES-3670 : Configurable restore location for messages from the Deleted Messages Vault
---
 ...nConfiguration.java => VaultConfiguration.java} | 34 ++++++++++++------
 .../vault/blob/BlobStoreDeletedMessageVault.java   | 10 +++---
 .../james/vault/DeletedMessageVaultHookTest.java   |  2 +-
 ...rationTest.java => VaultConfigurationTest.java} | 40 ++++++++++++++++------
 .../blob/BlobStoreDeletedMessageVaultTest.java     |  4 +--
 .../docs/modules/ROOT/pages/configure/vault.adoc   |  3 ++
 .../deletedMessageVault.properties                 |  6 +++-
 ...=> DeletedMessageVaultConfigurationModule.java} | 14 ++++----
 .../modules/vault/DeletedMessageVaultModule.java   |  2 +-
 .../webadmin/vault/routes/RestoreService.java      |  9 +++--
 .../routes/DeletedMessagesVaultRoutesTest.java     |  6 ++--
 src/site/xdoc/server/config-vault.xml              |  7 ++++
 12 files changed, 93 insertions(+), 44 deletions(-)

diff --git a/mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/RetentionConfiguration.java b/mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/VaultConfiguration.java
similarity index 61%
rename from mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/RetentionConfiguration.java
rename to mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/VaultConfiguration.java
index 38ea404..918daa8 100644
--- a/mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/RetentionConfiguration.java
+++ b/mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/VaultConfiguration.java
@@ -25,44 +25,56 @@ import java.util.Objects;
 import java.util.Optional;
 
 import org.apache.commons.configuration2.Configuration;
+import org.apache.james.mailbox.DefaultMailboxes;
 import org.apache.james.util.DurationParser;
 
 import com.google.common.base.Preconditions;
 
-public class RetentionConfiguration {
-    public static final RetentionConfiguration DEFAULT = new RetentionConfiguration(ChronoUnit.YEARS.getDuration());
+public class VaultConfiguration {
+    public static final VaultConfiguration DEFAULT =
+        new VaultConfiguration(ChronoUnit.YEARS.getDuration(), DefaultMailboxes.RESTORED_MESSAGES);
 
-    public static RetentionConfiguration from(Configuration propertiesConfiguration) {
-        return Optional.ofNullable(propertiesConfiguration.getString("retentionPeriod"))
+    public static VaultConfiguration from(Configuration propertiesConfiguration) {
+        Duration retentionPeriod = Optional.ofNullable(propertiesConfiguration.getString("retentionPeriod"))
             .map(string -> DurationParser.parse(string, ChronoUnit.DAYS))
-            .map(RetentionConfiguration::new)
-            .orElse(DEFAULT);
+            .orElse(DEFAULT.getRetentionPeriod());
+        String restoreLocation = Optional.ofNullable(propertiesConfiguration.getString("restoreLocation"))
+            .orElse(DEFAULT.getRestoreLocation());
+        return new VaultConfiguration(retentionPeriod, restoreLocation);
     }
 
     private final Duration retentionPeriod;
+    private final String restoreLocation;
 
-    RetentionConfiguration(Duration retentionPeriod) {
+    VaultConfiguration(Duration retentionPeriod, String restoreLocation) {
         Preconditions.checkNotNull(retentionPeriod);
+        Preconditions.checkNotNull(restoreLocation);
 
         this.retentionPeriod = retentionPeriod;
+        this.restoreLocation = restoreLocation;
     }
 
     public Duration getRetentionPeriod() {
         return retentionPeriod;
     }
 
+    public String getRestoreLocation() {
+        return restoreLocation;
+    }
+
     @Override
     public final boolean equals(Object o) {
-        if (o instanceof RetentionConfiguration) {
-            RetentionConfiguration that = (RetentionConfiguration) o;
+        if (o instanceof VaultConfiguration) {
+            VaultConfiguration that = (VaultConfiguration) o;
 
-            return Objects.equals(this.retentionPeriod, that.retentionPeriod);
+            return Objects.equals(this.retentionPeriod, that.retentionPeriod)
+                && Objects.equals(this.restoreLocation, that.restoreLocation);
         }
         return false;
     }
 
     @Override
     public final int hashCode() {
-        return Objects.hash(retentionPeriod);
+        return Objects.hash(retentionPeriod, restoreLocation);
     }
 }
diff --git a/mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/blob/BlobStoreDeletedMessageVault.java b/mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/blob/BlobStoreDeletedMessageVault.java
index a9b5ed4..07216a3 100644
--- a/mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/blob/BlobStoreDeletedMessageVault.java
+++ b/mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/blob/BlobStoreDeletedMessageVault.java
@@ -40,7 +40,7 @@ import org.apache.james.task.Task;
 import org.apache.james.vault.DeletedMessage;
 import org.apache.james.vault.DeletedMessageContentNotFoundException;
 import org.apache.james.vault.DeletedMessageVault;
-import org.apache.james.vault.RetentionConfiguration;
+import org.apache.james.vault.VaultConfiguration;
 import org.apache.james.vault.metadata.DeletedMessageMetadataVault;
 import org.apache.james.vault.metadata.DeletedMessageWithStorageInformation;
 import org.apache.james.vault.metadata.StorageInformation;
@@ -72,21 +72,21 @@ public class BlobStoreDeletedMessageVault implements DeletedMessageVault {
     private final BlobStoreDAO blobStoreDAO;
     private final BucketNameGenerator nameGenerator;
     private final Clock clock;
-    private final RetentionConfiguration retentionConfiguration;
+    private final VaultConfiguration vaultConfiguration;
     private final BlobStoreVaultGarbageCollectionTask.Factory taskFactory;
 
     @Inject
     public BlobStoreDeletedMessageVault(MetricFactory metricFactory, DeletedMessageMetadataVault messageMetadataVault,
                                         BlobStore blobStore, BlobStoreDAO blobStoreDAO, BucketNameGenerator nameGenerator,
                                         Clock clock,
-                                        RetentionConfiguration retentionConfiguration) {
+                                        VaultConfiguration vaultConfiguration) {
         this.metricFactory = metricFactory;
         this.messageMetadataVault = messageMetadataVault;
         this.blobStore = blobStore;
         this.blobStoreDAO = blobStoreDAO;
         this.nameGenerator = nameGenerator;
         this.clock = clock;
-        this.retentionConfiguration = retentionConfiguration;
+        this.vaultConfiguration = vaultConfiguration;
         this.taskFactory = new BlobStoreVaultGarbageCollectionTask.Factory(this);
     }
 
@@ -181,7 +181,7 @@ public class BlobStoreDeletedMessageVault implements DeletedMessageVault {
 
     ZonedDateTime getBeginningOfRetentionPeriod() {
         ZonedDateTime now = ZonedDateTime.now(clock);
-        return now.minus(retentionConfiguration.getRetentionPeriod());
+        return now.minus(vaultConfiguration.getRetentionPeriod());
     }
 
     @VisibleForTesting
diff --git a/mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/DeletedMessageVaultHookTest.java b/mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/DeletedMessageVaultHookTest.java
index 5701c7f..315d289 100644
--- a/mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/DeletedMessageVaultHookTest.java
+++ b/mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/DeletedMessageVaultHookTest.java
@@ -120,7 +120,7 @@ class DeletedMessageVaultHookTest {
                 .blobIdFactory(new HashBlobId.Factory())
                 .defaultBucketName()
                 .passthrough(), blobStoreDAO, new BucketNameGenerator(clock), clock,
-            RetentionConfiguration.DEFAULT);
+            VaultConfiguration.DEFAULT);
 
         DeletedMessageConverter deletedMessageConverter = new DeletedMessageConverter();
 
diff --git a/mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/RetentionConfigurationTest.java b/mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/VaultConfigurationTest.java
similarity index 59%
rename from mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/RetentionConfigurationTest.java
rename to mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/VaultConfigurationTest.java
index d77516a..de34851 100644
--- a/mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/RetentionConfigurationTest.java
+++ b/mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/VaultConfigurationTest.java
@@ -23,37 +23,55 @@ import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
 
 import java.time.Duration;
+import java.time.temporal.ChronoUnit;
 
 import org.apache.commons.configuration2.PropertiesConfiguration;
+import org.apache.james.mailbox.DefaultMailboxes;
 import org.junit.jupiter.api.Test;
 
 import nl.jqno.equalsverifier.EqualsVerifier;
 
-class RetentionConfigurationTest {
+class VaultConfigurationTest {
     @Test
     void shouldMatchBeanContract() {
-        EqualsVerifier.forClass(RetentionConfiguration.class)
+        EqualsVerifier.forClass(VaultConfiguration.class)
             .verify();
     }
 
     @Test
-    void constructorShouldThrowWhenNull() {
-        assertThatThrownBy(() -> new RetentionConfiguration(null))
+    void constructorShouldThrowWhenRetentionPeriodIsNull() {
+        assertThatThrownBy(() -> new VaultConfiguration(null, DefaultMailboxes.RESTORED_MESSAGES))
+            .isInstanceOf(NullPointerException.class);
+    }
+
+    @Test
+    void constructorShouldThrowWhenRestoreLocationIsNull() {
+        assertThatThrownBy(() -> new VaultConfiguration(ChronoUnit.YEARS.getDuration(), null))
             .isInstanceOf(NullPointerException.class);
     }
 
     @Test
     void fromShouldThrowWhenNull() {
-        assertThatThrownBy(() -> RetentionConfiguration.from(null))
+        assertThatThrownBy(() -> VaultConfiguration.from(null))
             .isInstanceOf(NullPointerException.class);
     }
 
     @Test
+    void fromShouldReturnConfiguredRestoreLocation() {
+        PropertiesConfiguration configuration = new PropertiesConfiguration();
+        configuration.addProperty("restoreLocation", "INBOX");
+
+        assertThat(VaultConfiguration.from(configuration)).isEqualTo(
+            new VaultConfiguration(ChronoUnit.YEARS.getDuration(), DefaultMailboxes.INBOX));
+    }
+
+    @Test
     void fromShouldReturnConfiguredRetentionTime() {
         PropertiesConfiguration configuration = new PropertiesConfiguration();
         configuration.addProperty("retentionPeriod", "15d");
 
-        assertThat(RetentionConfiguration.from(configuration)).isEqualTo(new RetentionConfiguration(Duration.ofDays(15)));
+        assertThat(VaultConfiguration.from(configuration)).isEqualTo(
+            new VaultConfiguration(Duration.ofDays(15), DefaultMailboxes.RESTORED_MESSAGES));
     }
 
     @Test
@@ -61,7 +79,8 @@ class RetentionConfigurationTest {
         PropertiesConfiguration configuration = new PropertiesConfiguration();
         configuration.addProperty("retentionPeriod", "15h");
 
-        assertThat(RetentionConfiguration.from(configuration)).isEqualTo(new RetentionConfiguration(Duration.ofHours(15)));
+        assertThat(VaultConfiguration.from(configuration)).isEqualTo(
+            new VaultConfiguration(Duration.ofHours(15), DefaultMailboxes.RESTORED_MESSAGES));
     }
 
     @Test
@@ -69,13 +88,14 @@ class RetentionConfigurationTest {
         PropertiesConfiguration configuration = new PropertiesConfiguration();
         configuration.addProperty("retentionPeriod", "15");
 
-        assertThat(RetentionConfiguration.from(configuration)).isEqualTo(new RetentionConfiguration(Duration.ofDays(15)));
+        assertThat(VaultConfiguration.from(configuration)).isEqualTo(
+            new VaultConfiguration(Duration.ofDays(15), DefaultMailboxes.RESTORED_MESSAGES));
     }
 
     @Test
-    void fromShouldReturnDefaultWhenNoRetentionTime() {
+    void fromShouldReturnDefaultWhenNoConfigurationOptions() {
         PropertiesConfiguration configuration = new PropertiesConfiguration();
 
-        assertThat(RetentionConfiguration.from(configuration)).isEqualTo(RetentionConfiguration.DEFAULT);
+        assertThat(VaultConfiguration.from(configuration)).isEqualTo(VaultConfiguration.DEFAULT);
     }
 }
\ No newline at end of file
diff --git a/mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/blob/BlobStoreDeletedMessageVaultTest.java b/mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/blob/BlobStoreDeletedMessageVaultTest.java
index 6b58ffd..fe6f137 100644
--- a/mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/blob/BlobStoreDeletedMessageVaultTest.java
+++ b/mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/blob/BlobStoreDeletedMessageVaultTest.java
@@ -47,7 +47,7 @@ import org.apache.james.utils.UpdatableTickingClock;
 import org.apache.james.vault.DeletedMessageVault;
 import org.apache.james.vault.DeletedMessageVaultContract;
 import org.apache.james.vault.DeletedMessageVaultSearchContract;
-import org.apache.james.vault.RetentionConfiguration;
+import org.apache.james.vault.VaultConfiguration;
 import org.apache.james.vault.memory.metadata.MemoryDeletedMessageMetadataVault;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
@@ -71,7 +71,7 @@ class BlobStoreDeletedMessageVaultTest implements DeletedMessageVaultContract, D
                 .blobIdFactory(new HashBlobId.Factory())
                 .defaultBucketName()
                 .passthrough(),
-            blobStoreDAO, new BucketNameGenerator(clock), clock, RetentionConfiguration.DEFAULT);
+            blobStoreDAO, new BucketNameGenerator(clock), clock, VaultConfiguration.DEFAULT);
     }
 
     @Override
diff --git a/server/apps/distributed-app/docs/modules/ROOT/pages/configure/vault.adoc b/server/apps/distributed-app/docs/modules/ROOT/pages/configure/vault.adoc
index ab8d6c0..4a6ccae 100644
--- a/server/apps/distributed-app/docs/modules/ROOT/pages/configure/vault.adoc
+++ b/server/apps/distributed-app/docs/modules/ROOT/pages/configure/vault.adoc
@@ -29,4 +29,7 @@ to get some examples and hints.
 
 | retentionPeriod
 | Deleted messages stored in the Deleted Messages Vault are expired after this period (default: 1 year). It can be expressed in *y* years, *d* days, *h* hours, ...
+
+| restoreLocation
+| Messages restored from the Deleted Messages Vault are placed in a mailbox with this name (default: ``Restored-Messages``). The mailbox will be created if it does not exist yet.
 |===
diff --git a/server/apps/distributed-pop3-app/sample-configuration/deletedMessageVault.properties b/server/apps/distributed-pop3-app/sample-configuration/deletedMessageVault.properties
index ab1e3ee..ff0869f 100644
--- a/server/apps/distributed-pop3-app/sample-configuration/deletedMessageVault.properties
+++ b/server/apps/distributed-pop3-app/sample-configuration/deletedMessageVault.properties
@@ -1,4 +1,8 @@
 # ============================================= Deleted Messages Vault Configuration ==================================
 # Retention period for your deleted messages into the vault, after which they expire and can be potentially cleaned up
 # Optional, default 1y
-# retentionPeriod=1y
\ No newline at end of file
+# retentionPeriod=1y
+
+# Mailbox that will contain messages restored from the vault, will be created if it does not exist yet
+# Optional, default 'Restored-Messages' ; must be set to INBOX for POP3
+restoreLocation=INBOX
diff --git a/server/container/guice/mailbox-plugin-deleted-messages-vault/src/main/java/org/apache/james/modules/vault/DeletedMessageVaultRetentionModule.java b/server/container/guice/mailbox-plugin-deleted-messages-vault/src/main/java/org/apache/james/modules/vault/DeletedMessageVaultConfigurationModule.java
similarity index 79%
rename from server/container/guice/mailbox-plugin-deleted-messages-vault/src/main/java/org/apache/james/modules/vault/DeletedMessageVaultRetentionModule.java
rename to server/container/guice/mailbox-plugin-deleted-messages-vault/src/main/java/org/apache/james/modules/vault/DeletedMessageVaultConfigurationModule.java
index 95a420d..c25787f 100644
--- a/server/container/guice/mailbox-plugin-deleted-messages-vault/src/main/java/org/apache/james/modules/vault/DeletedMessageVaultRetentionModule.java
+++ b/server/container/guice/mailbox-plugin-deleted-messages-vault/src/main/java/org/apache/james/modules/vault/DeletedMessageVaultConfigurationModule.java
@@ -25,7 +25,7 @@ import javax.inject.Singleton;
 
 import org.apache.commons.configuration2.Configuration;
 import org.apache.james.utils.PropertiesProvider;
-import org.apache.james.vault.RetentionConfiguration;
+import org.apache.james.vault.VaultConfiguration;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -33,8 +33,8 @@ import com.google.inject.AbstractModule;
 import com.google.inject.ConfigurationException;
 import com.google.inject.Provides;
 
-public class DeletedMessageVaultRetentionModule extends AbstractModule {
-    private static final Logger LOGGER = LoggerFactory.getLogger(DeletedMessageVaultRetentionModule.class);
+public class DeletedMessageVaultConfigurationModule extends AbstractModule {
+    private static final Logger LOGGER = LoggerFactory.getLogger(DeletedMessageVaultConfigurationModule.class);
 
     @Override
     protected void configure() {
@@ -43,13 +43,13 @@ public class DeletedMessageVaultRetentionModule extends AbstractModule {
 
     @Provides
     @Singleton
-    RetentionConfiguration providesRetentionConfiguration(PropertiesProvider propertiesProvider) throws ConfigurationException, org.apache.commons.configuration2.ex.ConfigurationException {
+    VaultConfiguration providesVaultConfiguration(PropertiesProvider propertiesProvider) throws ConfigurationException, org.apache.commons.configuration2.ex.ConfigurationException {
         try {
             Configuration configuration = propertiesProvider.getConfiguration("deletedMessageVault");
-            return RetentionConfiguration.from(configuration);
+            return VaultConfiguration.from(configuration);
         } catch (FileNotFoundException e) {
-            LOGGER.warn("Error encountered while retrieving Deleted message vault configuration. Using default RetentionTime (1 year) instead.");
-            return RetentionConfiguration.DEFAULT;
+            LOGGER.warn("Error encountered while retrieving Deleted message vault configuration. Using default RetentionTime (1 year) and RestoreLocation (Restored-Messages) instead.");
+            return VaultConfiguration.DEFAULT;
         }
     }
 }
diff --git a/server/container/guice/mailbox-plugin-deleted-messages-vault/src/main/java/org/apache/james/modules/vault/DeletedMessageVaultModule.java b/server/container/guice/mailbox-plugin-deleted-messages-vault/src/main/java/org/apache/james/modules/vault/DeletedMessageVaultModule.java
index c6ac334..ad002a5 100644
--- a/server/container/guice/mailbox-plugin-deleted-messages-vault/src/main/java/org/apache/james/modules/vault/DeletedMessageVaultModule.java
+++ b/server/container/guice/mailbox-plugin-deleted-messages-vault/src/main/java/org/apache/james/modules/vault/DeletedMessageVaultModule.java
@@ -29,7 +29,7 @@ import com.google.inject.Scopes;
 public class DeletedMessageVaultModule extends AbstractModule {
     @Override
     protected void configure() {
-        install(new DeletedMessageVaultRetentionModule());
+        install(new DeletedMessageVaultConfigurationModule());
         install(new VaultTaskSerializationModule());
 
         bind(BucketNameGenerator.class).in(Scopes.SINGLETON);
diff --git a/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/RestoreService.java b/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/RestoreService.java
index 00cf49d..ead4dde 100644
--- a/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/RestoreService.java
+++ b/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/RestoreService.java
@@ -30,7 +30,6 @@ import java.util.function.Predicate;
 import javax.inject.Inject;
 
 import org.apache.james.core.Username;
-import org.apache.james.mailbox.DefaultMailboxes;
 import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.MessageManager;
@@ -42,6 +41,7 @@ import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.vault.DeletedMessage;
 import org.apache.james.vault.DeletedMessageContentNotFoundException;
 import org.apache.james.vault.DeletedMessageVault;
+import org.apache.james.vault.VaultConfiguration;
 import org.apache.james.vault.search.Query;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -64,11 +64,14 @@ class RestoreService {
 
     private final DeletedMessageVault deletedMessageVault;
     private final MailboxManager mailboxManager;
+    private final VaultConfiguration vaultConfiguration;
 
     @Inject
-    RestoreService(DeletedMessageVault deletedMessageVault, MailboxManager mailboxManager) {
+    RestoreService(DeletedMessageVault deletedMessageVault, MailboxManager mailboxManager,
+                   VaultConfiguration vaultConfiguration) {
         this.deletedMessageVault = deletedMessageVault;
         this.mailboxManager = mailboxManager;
+        this.vaultConfiguration = vaultConfiguration;
     }
 
     Flux<RestoreResult> restore(Username usernameToRestore, Query searchQuery) throws MailboxException {
@@ -109,7 +112,7 @@ class RestoreService {
     }
 
     private MessageManager restoreMailboxManager(MailboxSession session) throws MailboxException {
-        MailboxPath restoreMailbox = MailboxPath.forUser(session.getUser(), DefaultMailboxes.RESTORED_MESSAGES);
+        MailboxPath restoreMailbox = MailboxPath.forUser(session.getUser(), vaultConfiguration.getRestoreLocation());
         try {
             return mailboxManager.getMailbox(restoreMailbox, session);
         } catch (MailboxNotFoundException e) {
diff --git a/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/test/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRoutesTest.java b/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/test/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRoutesTest.java
index f9c906a..a7b574b 100644
--- a/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/test/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRoutesTest.java
+++ b/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/test/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRoutesTest.java
@@ -111,7 +111,7 @@ import org.apache.james.utils.UpdatableTickingClock;
 import org.apache.james.vault.DeletedMessage;
 import org.apache.james.vault.DeletedMessageVault;
 import org.apache.james.vault.DeletedMessageZipper;
-import org.apache.james.vault.RetentionConfiguration;
+import org.apache.james.vault.VaultConfiguration;
 import org.apache.james.vault.blob.BlobStoreDeletedMessageVault;
 import org.apache.james.vault.blob.BlobStoreVaultGarbageCollectionTaskAdditionalInformationDTO;
 import org.apache.james.vault.blob.BucketNameGenerator;
@@ -191,14 +191,14 @@ class DeletedMessagesVaultRoutesTest {
         clock = new UpdatableTickingClock(OLD_DELETION_DATE.toInstant());
         vault = spy(new BlobStoreDeletedMessageVault(new RecordingMetricFactory(), new MemoryDeletedMessageMetadataVault(),
             blobStore, blobStoreDAO, new BucketNameGenerator(clock), clock,
-            RetentionConfiguration.DEFAULT));
+            VaultConfiguration.DEFAULT));
         InMemoryIntegrationResources inMemoryResource = InMemoryIntegrationResources.defaultResources();
         mailboxManager = spy(inMemoryResource.getMailboxManager());
 
         taskManager = new MemoryTaskManager(new Hostname("foo"));
         JsonTransformer jsonTransformer = new JsonTransformer();
 
-        RestoreService vaultRestore = new RestoreService(vault, mailboxManager);
+        RestoreService vaultRestore = new RestoreService(vault, mailboxManager, VaultConfiguration.DEFAULT);
         blobExporting = spy(new NoopBlobExporting());
         zipper = new DeletedMessageZipper();
         exportService = new ExportService(blobExporting, blobStore, zipper, vault);
diff --git a/src/site/xdoc/server/config-vault.xml b/src/site/xdoc/server/config-vault.xml
index d0c1aee..fb5bcb9 100644
--- a/src/site/xdoc/server/config-vault.xml
+++ b/src/site/xdoc/server/config-vault.xml
@@ -57,6 +57,13 @@
                         It can be expressed in <b>y</b> years, <b>d</b> days, <b>h</b> hours, ...
                     </dd>
                 </dl>
+                <dl>
+                    <dt><strong>restoreLocation</strong></dt>
+                    <dd>
+                        Messages restored from the Deleted Messages Vault are placed in a mailbox with this name (default: <code>Restored-Messages</code>>).
+                        The mailbox will be created if it does not exist yet.
+                    </dd>
+                </dl>
 
             </subsection>
         </section>

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