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
commit f4b1864c42cc3da06d78fd30e7d2884a7f67f2fe Author: Benoit TELLIER <btell...@linagora.com> AuthorDate: Wed Oct 9 11:24:22 2024 +0200 JAMES-2182 PathConverter: transform into an interface and inject This will allow customization of the IMAP folder naming strategy. --- .../org/apache/james/imap/main/PathConverter.java | 108 ++++++++++++--------- .../imap/processor/AbstractAuthProcessor.java | 22 +++-- .../processor/AbstractMessageRangeProcessor.java | 7 +- .../imap/processor/AbstractSelectionProcessor.java | 7 +- .../james/imap/processor/AppendProcessor.java | 7 +- .../imap/processor/AuthenticateProcessor.java | 5 +- .../apache/james/imap/processor/CopyProcessor.java | 5 +- .../james/imap/processor/CreateProcessor.java | 7 +- .../james/imap/processor/DefaultProcessor.java | 50 +++++----- .../james/imap/processor/DeleteACLProcessor.java | 6 +- .../james/imap/processor/DeleteProcessor.java | 7 +- .../james/imap/processor/ExamineProcessor.java | 5 +- .../james/imap/processor/GetACLProcessor.java | 7 +- .../james/imap/processor/GetMetadataProcessor.java | 8 +- .../imap/processor/GetQuotaRootProcessor.java | 6 +- .../apache/james/imap/processor/ListProcessor.java | 11 ++- .../james/imap/processor/ListRightsProcessor.java | 7 +- .../james/imap/processor/LoginProcessor.java | 5 +- .../apache/james/imap/processor/MoveProcessor.java | 5 +- .../james/imap/processor/MyRightsProcessor.java | 7 +- .../james/imap/processor/RenameProcessor.java | 7 +- .../james/imap/processor/ReplaceProcessor.java | 7 +- .../james/imap/processor/SelectProcessor.java | 5 +- .../james/imap/processor/SetACLProcessor.java | 7 +- .../james/imap/processor/SetMetadataProcessor.java | 7 +- .../james/imap/processor/StatusProcessor.java | 7 +- .../james/imap/processor/SubscribeProcessor.java | 7 +- .../james/imap/processor/UnsubscribeProcessor.java | 7 +- .../james/imap/processor/XListProcessor.java | 9 +- .../apache/james/imap/main/PathConverterTest.java | 2 +- .../processor/AbstractSelectionProcessorTest.java | 3 +- .../james/imap/processor/CopyProcessorTest.java | 3 +- .../imap/processor/DeleteACLProcessorTest.java | 3 +- .../james/imap/processor/GetACLProcessorTest.java | 3 +- .../imap/processor/GetAnnotationProcessorTest.java | 3 +- .../imap/processor/GetQuotaRootProcessorTest.java | 3 +- .../imap/processor/ListRightsProcessorTest.java | 3 +- .../james/imap/processor/MoveProcessorTest.java | 5 +- .../james/imap/processor/SelectProcessorTest.java | 4 +- .../james/imap/processor/SetACLProcessorTest.java | 3 +- .../imap/processor/SetMetadataProcessorTest.java | 3 +- .../james/modules/protocols/IMAPServerModule.java | 2 + .../james/imapserver/netty/IMAPServerTest.java | 1 + 43 files changed, 246 insertions(+), 150 deletions(-) diff --git a/protocols/imap/src/main/java/org/apache/james/imap/main/PathConverter.java b/protocols/imap/src/main/java/org/apache/james/imap/main/PathConverter.java index ca5a7cbfd9..4e7828b62c 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/main/PathConverter.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/main/PathConverter.java @@ -32,69 +32,83 @@ import com.google.common.base.Splitter; import com.google.common.base.Strings; import com.google.common.collect.Iterables; -public class PathConverter { - - private static final int NAMESPACE = 0; +public interface PathConverter { + interface Factory { + PathConverter.Factory DEFAULT = new PathConverter.Factory.Default(); + + class Default implements Factory { + public PathConverter forSession(ImapSession session) { + return new PathConverter.Default(session); + } + } - public static PathConverter forSession(ImapSession session) { - return new PathConverter(session); + PathConverter forSession(ImapSession session); } - private final ImapSession session; + class Default implements PathConverter{ + private static final int NAMESPACE = 0; - private PathConverter(ImapSession session) { - this.session = session; - } - - public MailboxPath buildFullPath(String mailboxName) { - if (Strings.isNullOrEmpty(mailboxName)) { - return buildRelativePath(""); + public static PathConverter forSession(ImapSession session) { + return new PathConverter.Default(session); } - if (isAbsolute(mailboxName)) { - return buildAbsolutePath(mailboxName); - } else { - return buildRelativePath(mailboxName); + + private final ImapSession session; + + private Default(ImapSession session) { + this.session = session; } - } - private boolean isAbsolute(String mailboxName) { - Preconditions.checkArgument(!Strings.isNullOrEmpty(mailboxName)); - return mailboxName.charAt(0) == MailboxConstants.NAMESPACE_PREFIX_CHAR; - } + public MailboxPath buildFullPath(String mailboxName) { + if (Strings.isNullOrEmpty(mailboxName)) { + return buildRelativePath(""); + } + if (isAbsolute(mailboxName)) { + return buildAbsolutePath(mailboxName); + } else { + return buildRelativePath(mailboxName); + } + } - private MailboxPath buildRelativePath(String mailboxName) { - return buildMailboxPath(MailboxConstants.USER_NAMESPACE, session.getUserName(), mailboxName); - } + private boolean isAbsolute(String mailboxName) { + Preconditions.checkArgument(!Strings.isNullOrEmpty(mailboxName)); + return mailboxName.charAt(0) == MailboxConstants.NAMESPACE_PREFIX_CHAR; + } - private MailboxPath buildAbsolutePath(String absolutePath) { - char pathDelimiter = session.getMailboxSession().getPathDelimiter(); - List<String> mailboxPathParts = Splitter.on(pathDelimiter).splitToList(absolutePath); - String namespace = mailboxPathParts.get(NAMESPACE); - String mailboxName = Joiner.on(pathDelimiter).join(Iterables.skip(mailboxPathParts, 1)); - return buildMailboxPath(namespace, retrieveUserName(namespace), mailboxName); - } + private MailboxPath buildRelativePath(String mailboxName) { + return buildMailboxPath(MailboxConstants.USER_NAMESPACE, session.getUserName(), mailboxName); + } - private Username retrieveUserName(String namespace) { - if (namespace.equals(MailboxConstants.USER_NAMESPACE)) { - return session.getUserName(); + private MailboxPath buildAbsolutePath(String absolutePath) { + char pathDelimiter = session.getMailboxSession().getPathDelimiter(); + List<String> mailboxPathParts = Splitter.on(pathDelimiter).splitToList(absolutePath); + String namespace = mailboxPathParts.get(NAMESPACE); + String mailboxName = Joiner.on(pathDelimiter).join(Iterables.skip(mailboxPathParts, 1)); + return buildMailboxPath(namespace, retrieveUserName(namespace), mailboxName); } - throw new DeniedAccessOnSharedMailboxException(); - } - private MailboxPath buildMailboxPath(String namespace, Username user, String mailboxName) { - if (!namespace.equals(MailboxConstants.USER_NAMESPACE)) { + private Username retrieveUserName(String namespace) { + if (namespace.equals(MailboxConstants.USER_NAMESPACE)) { + return session.getUserName(); + } throw new DeniedAccessOnSharedMailboxException(); } - return new MailboxPath(namespace, user, sanitizeMailboxName(mailboxName)); - } - private String sanitizeMailboxName(String mailboxName) { - // use uppercase for INBOX - // See IMAP-349 - if (mailboxName.equalsIgnoreCase(MailboxConstants.INBOX)) { - return MailboxConstants.INBOX; + private MailboxPath buildMailboxPath(String namespace, Username user, String mailboxName) { + if (!namespace.equals(MailboxConstants.USER_NAMESPACE)) { + throw new DeniedAccessOnSharedMailboxException(); + } + return new MailboxPath(namespace, user, sanitizeMailboxName(mailboxName)); + } + + private String sanitizeMailboxName(String mailboxName) { + // use uppercase for INBOX + // See IMAP-349 + if (mailboxName.equalsIgnoreCase(MailboxConstants.INBOX)) { + return MailboxConstants.INBOX; + } + return mailboxName; } - return mailboxName; } + MailboxPath buildFullPath(String mailboxName); } diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/AbstractAuthProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/AbstractAuthProcessor.java index 508198c34a..17ac2f13c6 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/processor/AbstractAuthProcessor.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/AbstractAuthProcessor.java @@ -56,14 +56,17 @@ public abstract class AbstractAuthProcessor<R extends ImapRequest> extends Abstr private static final int MAX_FAILURES = 3; private ImapConfiguration imapConfiguration; + private final PathConverter.Factory pathConverterFactory; + @FunctionalInterface protected interface MailboxSessionAuthWithDelegationSupplier { MailboxSession get() throws MailboxException; } public AbstractAuthProcessor(Class<R> acceptableClass, MailboxManager mailboxManager, StatusResponseFactory factory, - MetricFactory metricFactory) { + MetricFactory metricFactory, PathConverter.Factory pathConverterFactory) { super(acceptableClass, mailboxManager, factory, metricFactory); + this.pathConverterFactory = pathConverterFactory; } @Override @@ -81,14 +84,13 @@ public abstract class AbstractAuthProcessor<R extends ImapRequest> extends Abstr authFailure = true; } if (!authFailure) { - final MailboxManager mailboxManager = getMailboxManager(); try { - final MailboxSession mailboxSession = mailboxManager.authenticate(authenticationAttempt.getAuthenticationId(), + final MailboxSession mailboxSession = getMailboxManager().authenticate(authenticationAttempt.getAuthenticationId(), authenticationAttempt.getPassword()) .withoutDelegation(); session.authenticated(); session.setMailboxSession(mailboxSession); - provisionInbox(session, mailboxManager, mailboxSession); + provisionInbox(session, getMailboxManager(), mailboxSession); AuditTrail.entry() .username(() -> mailboxSession.getUser().asString()) .sessionId(() -> session.sessionId().asString()) @@ -135,8 +137,8 @@ public abstract class AbstractAuthProcessor<R extends ImapRequest> extends Abstr ImapSession session, ImapRequest request, Responder responder, Username authenticateUser, Username delegatorUser) { try { - final MailboxManager mailboxManager = getMailboxManager(); - final MailboxSession mailboxSession = mailboxSessionSupplier.get(); + MailboxManager mailboxManager = getMailboxManager(); + MailboxSession mailboxSession = mailboxSessionSupplier.get(); session.authenticated(); session.setMailboxSession(mailboxSession); AuditTrail.entry() @@ -179,7 +181,7 @@ public abstract class AbstractAuthProcessor<R extends ImapRequest> extends Abstr } protected void provisionInbox(ImapSession session, MailboxManager mailboxManager, MailboxSession mailboxSession) throws MailboxException { - final MailboxPath inboxPath = PathConverter.forSession(session).buildFullPath(MailboxConstants.INBOX); + MailboxPath inboxPath = pathConverterFactory.forSession(session).buildFullPath(MailboxConstants.INBOX); if (Mono.from(mailboxManager.mailboxExists(inboxPath, mailboxSession)).block()) { LOGGER.debug("INBOX exists. No need to create it."); } else { @@ -194,7 +196,7 @@ public abstract class AbstractAuthProcessor<R extends ImapRequest> extends Abstr private void provisionMailbox(String mailbox, ImapSession session, MailboxManager mailboxManager, MailboxSession mailboxSession) throws MailboxException { - var mailboxPath = PathConverter.forSession(session).buildFullPath(mailbox); + MailboxPath mailboxPath = pathConverterFactory.forSession(session).buildFullPath(mailbox); if (Mono.from(mailboxManager.mailboxExists(mailboxPath, mailboxSession)).block()) { LOGGER.debug("{} exists. No need to create it.", mailbox); return; @@ -215,8 +217,8 @@ public abstract class AbstractAuthProcessor<R extends ImapRequest> extends Abstr } protected void manageFailureCount(ImapSession session, ImapRequest request, Responder responder, HumanReadableText failed) { - final Integer currentNumberOfFailures = (Integer) session.getAttribute(ATTRIBUTE_NUMBER_OF_FAILURES); - final int failures; + Integer currentNumberOfFailures = (Integer) session.getAttribute(ATTRIBUTE_NUMBER_OF_FAILURES); + int failures; if (currentNumberOfFailures == null) { failures = 1; } else { diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/AbstractMessageRangeProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/AbstractMessageRangeProcessor.java index 5a36239ba1..4fac7fc59f 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/processor/AbstractMessageRangeProcessor.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/AbstractMessageRangeProcessor.java @@ -52,9 +52,12 @@ import reactor.core.publisher.Mono; public abstract class AbstractMessageRangeProcessor<R extends AbstractMessageRangeRequest> extends AbstractMailboxProcessor<R> { private static final Logger LOGGER = LoggerFactory.getLogger(AbstractMessageRangeProcessor.class); + private final PathConverter.Factory pathConverterFactory; + public AbstractMessageRangeProcessor(Class<R> acceptableClass, MailboxManager mailboxManager, StatusResponseFactory factory, - MetricFactory metricFactory) { + MetricFactory metricFactory, PathConverter.Factory pathConverterFactory) { super(acceptableClass, mailboxManager, factory, metricFactory); + this.pathConverterFactory = pathConverterFactory; } protected abstract Flux<MessageRange> process(MailboxId targetMailbox, @@ -66,7 +69,7 @@ public abstract class AbstractMessageRangeProcessor<R extends AbstractMessageRan @Override protected Mono<Void> processRequestReactive(R request, ImapSession session, Responder responder) { - MailboxPath targetMailbox = PathConverter.forSession(session).buildFullPath(request.getMailboxName()); + MailboxPath targetMailbox = pathConverterFactory.forSession(session).buildFullPath(request.getMailboxName()); MailboxSession mailboxSession = session.getMailboxSession(); return Mono.from(getMailboxManager().mailboxExists(targetMailbox, mailboxSession)) diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/AbstractSelectionProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/AbstractSelectionProcessor.java index fb5153ff08..6655204291 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/processor/AbstractSelectionProcessor.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/AbstractSelectionProcessor.java @@ -82,13 +82,16 @@ abstract class AbstractSelectionProcessor<R extends AbstractMailboxSelectionRequ private static final List<Capability> CAPS = ImmutableList.of(ImapConstants.SUPPORTS_QRESYNC, ImapConstants.SUPPORTS_CONDSTORE); private final StatusResponseFactory statusResponseFactory; + + private final PathConverter.Factory pathConverterFactory; private final boolean openReadOnly; private final EventBus eventBus; - public AbstractSelectionProcessor(Class<R> acceptableClass, MailboxManager mailboxManager, StatusResponseFactory statusResponseFactory, boolean openReadOnly, + public AbstractSelectionProcessor(Class<R> acceptableClass, MailboxManager mailboxManager, StatusResponseFactory statusResponseFactory, PathConverter.Factory pathConverterFactory, boolean openReadOnly, MetricFactory metricFactory, EventBus eventBus) { super(acceptableClass, mailboxManager, statusResponseFactory, metricFactory); this.statusResponseFactory = statusResponseFactory; + this.pathConverterFactory = pathConverterFactory; this.openReadOnly = openReadOnly; this.eventBus = eventBus; @@ -97,7 +100,7 @@ abstract class AbstractSelectionProcessor<R extends AbstractMailboxSelectionRequ @Override protected Mono<Void> processRequestReactive(R request, ImapSession session, Responder responder) { String mailboxName = request.getMailboxName(); - MailboxPath fullMailboxPath = PathConverter.forSession(session).buildFullPath(mailboxName); + MailboxPath fullMailboxPath = pathConverterFactory.forSession(session).buildFullPath(mailboxName); return respond(session, fullMailboxPath, request, responder) .onErrorResume(MailboxNotFoundException.class, e -> { diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/AppendProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/AppendProcessor.java index ce0ce416ea..494ed0e18c 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/processor/AppendProcessor.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/AppendProcessor.java @@ -63,9 +63,12 @@ public class AppendProcessor extends AbstractMailboxProcessor<AppendRequest> imp private ImmutableList<Capability> capabilities = ImmutableList.of(); + private final PathConverter.Factory pathConverterFactory; + @Inject - public AppendProcessor(MailboxManager mailboxManager, StatusResponseFactory statusResponseFactory, MetricFactory metricFactory) { + public AppendProcessor(MailboxManager mailboxManager, StatusResponseFactory statusResponseFactory, MetricFactory metricFactory, PathConverter.Factory pathConverterFactory) { super(AppendRequest.class, mailboxManager, statusResponseFactory, metricFactory); + this.pathConverterFactory = pathConverterFactory; } @Override @@ -88,7 +91,7 @@ public class AppendProcessor extends AbstractMailboxProcessor<AppendRequest> imp final Content messageIn = request.getMessage().asMailboxContent(); final Date datetime = request.getDatetime(); final Flags flags = request.getFlags(); - final MailboxPath mailboxPath = PathConverter.forSession(session).buildFullPath(mailboxName); + final MailboxPath mailboxPath = pathConverterFactory.forSession(session).buildFullPath(mailboxName); final MailboxManager mailboxManager = getMailboxManager(); session.stopDetectingCommandInjection(); diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/AuthenticateProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/AuthenticateProcessor.java index df500fe0bb..89eaa5877c 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/processor/AuthenticateProcessor.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/AuthenticateProcessor.java @@ -36,6 +36,7 @@ import org.apache.james.imap.api.message.Capability; import org.apache.james.imap.api.message.request.ImapRequest; import org.apache.james.imap.api.message.response.StatusResponseFactory; import org.apache.james.imap.api.process.ImapSession; +import org.apache.james.imap.main.PathConverter; import org.apache.james.imap.message.request.AuthenticateRequest; import org.apache.james.imap.message.request.IRAuthenticateRequest; import org.apache.james.imap.message.response.AuthenticateResponse; @@ -70,8 +71,8 @@ public class AuthenticateProcessor extends AbstractAuthProcessor<AuthenticateReq @Inject public AuthenticateProcessor(MailboxManager mailboxManager, StatusResponseFactory factory, - MetricFactory metricFactory) { - super(AuthenticateRequest.class, mailboxManager, factory, metricFactory); + MetricFactory metricFactory, PathConverter.Factory pathConverterFactory) { + super(AuthenticateRequest.class, mailboxManager, factory, metricFactory, pathConverterFactory); } @Override diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/CopyProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/CopyProcessor.java index 8b3298fe6e..bde419a541 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/processor/CopyProcessor.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/CopyProcessor.java @@ -24,6 +24,7 @@ import jakarta.inject.Inject; import org.apache.james.imap.api.message.IdRange; import org.apache.james.imap.api.message.response.StatusResponseFactory; import org.apache.james.imap.api.process.SelectedMailbox; +import org.apache.james.imap.main.PathConverter; import org.apache.james.imap.message.request.CopyRequest; import org.apache.james.mailbox.MailboxManager; import org.apache.james.mailbox.MailboxSession; @@ -38,8 +39,8 @@ public class CopyProcessor extends AbstractMessageRangeProcessor<CopyRequest> { @Inject public CopyProcessor(MailboxManager mailboxManager, StatusResponseFactory factory, - MetricFactory metricFactory) { - super(CopyRequest.class, mailboxManager, factory, metricFactory); + MetricFactory metricFactory, PathConverter.Factory pathConverterFactory) { + super(CopyRequest.class, mailboxManager, factory, metricFactory, pathConverterFactory); } @Override diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/CreateProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/CreateProcessor.java index e4a4c24883..99fc531c35 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/processor/CreateProcessor.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/CreateProcessor.java @@ -41,17 +41,20 @@ import reactor.core.publisher.Mono; public class CreateProcessor extends AbstractMailboxProcessor<CreateRequest> { private static final Logger LOGGER = LoggerFactory.getLogger(CreateProcessor.class); + private final PathConverter.Factory pathConverterFactory; + @Inject public CreateProcessor(MailboxManager mailboxManager, StatusResponseFactory factory, - MetricFactory metricFactory) { + MetricFactory metricFactory, PathConverter.Factory pathConverterFactory) { super(CreateRequest.class, mailboxManager, factory, metricFactory); + this.pathConverterFactory = pathConverterFactory; } @Override protected Mono<Void> processRequestReactive(CreateRequest request, ImapSession session, Responder responder) { MailboxManager mailboxManager = getMailboxManager(); - return Mono.fromCallable(() -> PathConverter.forSession(session).buildFullPath(request.getMailboxName())) + return Mono.fromCallable(() -> pathConverterFactory.forSession(session).buildFullPath(request.getMailboxName())) .flatMap(mailboxPath -> Mono.from(mailboxManager.createMailboxReactive(mailboxPath, session.getMailboxSession())) .flatMap(mailboxId -> unsolicitedResponses(session, responder, false) .then(Mono.fromRunnable(() -> okComplete(request, StatusResponse.ResponseCode.mailboxId(mailboxId), responder)))) diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/DefaultProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/DefaultProcessor.java index 08a87d0dc9..f96689a2e4 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/processor/DefaultProcessor.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/DefaultProcessor.java @@ -30,6 +30,7 @@ import org.apache.james.imap.api.message.response.StatusResponseFactory; import org.apache.james.imap.api.process.ImapProcessor; import org.apache.james.imap.api.process.ImapSession; import org.apache.james.imap.api.process.MailboxTyper; +import org.apache.james.imap.main.PathConverter; import org.apache.james.imap.processor.base.AbstractProcessor; import org.apache.james.imap.processor.base.ImapResponseMessageProcessor; import org.apache.james.imap.processor.fetch.FetchProcessor; @@ -55,6 +56,7 @@ public class DefaultProcessor implements ImapProcessor { QuotaManager quotaManager, QuotaRootResolver quotaRootResolver, MetricFactory metricFactory) { + PathConverter.Factory pathConverterFactory = PathConverter.Factory.DEFAULT; ImmutableList.Builder<AbstractProcessor> builder = ImmutableList.builder(); CapabilityProcessor capabilityProcessor = new CapabilityProcessor(mailboxManager, statusResponseFactory, metricFactory); @@ -63,51 +65,51 @@ public class DefaultProcessor implements ImapProcessor { builder.add(capabilityProcessor); builder.add(new IdProcessor(mailboxManager, statusResponseFactory, metricFactory)); builder.add(new CheckProcessor(mailboxManager, statusResponseFactory, metricFactory)); - builder.add(new LoginProcessor(mailboxManager, statusResponseFactory, metricFactory)); - builder.add(new RenameProcessor(mailboxManager, statusResponseFactory, metricFactory)); - builder.add(new DeleteProcessor(mailboxManager, statusResponseFactory, metricFactory)); - builder.add(new CreateProcessor(mailboxManager, statusResponseFactory, metricFactory)); + builder.add(new LoginProcessor(mailboxManager, statusResponseFactory, metricFactory, pathConverterFactory)); + builder.add(new RenameProcessor(mailboxManager, statusResponseFactory, metricFactory, pathConverterFactory)); + builder.add(new DeleteProcessor(mailboxManager, statusResponseFactory, metricFactory, pathConverterFactory)); + builder.add(new CreateProcessor(mailboxManager, statusResponseFactory, metricFactory, pathConverterFactory)); builder.add(new CloseProcessor(mailboxManager, statusResponseFactory, metricFactory)); - builder.add(new UnsubscribeProcessor(mailboxManager, subscriptionManager, statusResponseFactory, metricFactory)); - builder.add(new SubscribeProcessor(mailboxManager, subscriptionManager, statusResponseFactory, metricFactory)); - builder.add(new CopyProcessor(mailboxManager, statusResponseFactory, metricFactory)); - builder.add(new AuthenticateProcessor(mailboxManager, statusResponseFactory, metricFactory)); + builder.add(new UnsubscribeProcessor(mailboxManager, subscriptionManager, statusResponseFactory, metricFactory, pathConverterFactory)); + builder.add(new SubscribeProcessor(mailboxManager, subscriptionManager, statusResponseFactory, metricFactory, pathConverterFactory)); + builder.add(new CopyProcessor(mailboxManager, statusResponseFactory, metricFactory, pathConverterFactory)); + builder.add(new AuthenticateProcessor(mailboxManager, statusResponseFactory, metricFactory, pathConverterFactory)); builder.add(new ExpungeProcessor(mailboxManager, statusResponseFactory, metricFactory)); - builder.add(new ReplaceProcessor(mailboxManager, statusResponseFactory, metricFactory)); - builder.add(new ExamineProcessor(mailboxManager, eventBus, statusResponseFactory, metricFactory)); - builder.add(new AppendProcessor(mailboxManager, statusResponseFactory, metricFactory)); + builder.add(new ReplaceProcessor(mailboxManager, statusResponseFactory, metricFactory, pathConverterFactory)); + builder.add(new ExamineProcessor(mailboxManager, eventBus, statusResponseFactory, metricFactory, pathConverterFactory)); + builder.add(new AppendProcessor(mailboxManager, statusResponseFactory, metricFactory, pathConverterFactory)); builder.add(new StoreProcessor(mailboxManager, statusResponseFactory, metricFactory)); builder.add(new NoopProcessor(mailboxManager, statusResponseFactory, metricFactory)); builder.add(new IdleProcessor(mailboxManager, statusResponseFactory, metricFactory)); - StatusProcessor statusProcessor = new StatusProcessor(mailboxManager, statusResponseFactory, metricFactory); + StatusProcessor statusProcessor = new StatusProcessor(mailboxManager, statusResponseFactory, metricFactory, pathConverterFactory); builder.add(statusProcessor); builder.add(new LSubProcessor(mailboxManager, subscriptionManager, statusResponseFactory, metricFactory)); - builder.add(new XListProcessor(mailboxManager, statusResponseFactory, mailboxTyper, metricFactory, subscriptionManager)); - builder.add(new ListProcessor<>(mailboxManager, statusResponseFactory, metricFactory, subscriptionManager, statusProcessor, mailboxTyper)); + builder.add(new XListProcessor(mailboxManager, statusResponseFactory, mailboxTyper, metricFactory, subscriptionManager, pathConverterFactory)); + builder.add(new ListProcessor<>(mailboxManager, statusResponseFactory, metricFactory, subscriptionManager, statusProcessor, mailboxTyper, pathConverterFactory)); builder.add(new SearchProcessor(mailboxManager, statusResponseFactory, metricFactory)); - builder.add(new SelectProcessor(mailboxManager, eventBus, statusResponseFactory, metricFactory)); + builder.add(new SelectProcessor(mailboxManager, eventBus, statusResponseFactory, metricFactory, pathConverterFactory)); builder.add(new NamespaceProcessor(mailboxManager, statusResponseFactory, metricFactory, new NamespaceSupplier.Default())); builder.add(new FetchProcessor(mailboxManager, statusResponseFactory, metricFactory)); builder.add(new StartTLSProcessor(statusResponseFactory)); builder.add(new UnselectProcessor(mailboxManager, statusResponseFactory, metricFactory)); builder.add(new CompressProcessor(statusResponseFactory)); - builder.add(new GetACLProcessor(mailboxManager, statusResponseFactory, metricFactory)); - builder.add(new SetACLProcessor(mailboxManager, statusResponseFactory, metricFactory)); - builder.add(new DeleteACLProcessor(mailboxManager, statusResponseFactory, metricFactory)); - builder.add(new ListRightsProcessor(mailboxManager, statusResponseFactory, metricFactory)); - builder.add(new MyRightsProcessor(mailboxManager, statusResponseFactory, metricFactory)); + builder.add(new GetACLProcessor(mailboxManager, statusResponseFactory, metricFactory, pathConverterFactory)); + builder.add(new SetACLProcessor(mailboxManager, statusResponseFactory, metricFactory, pathConverterFactory)); + builder.add(new DeleteACLProcessor(mailboxManager, statusResponseFactory, metricFactory, pathConverterFactory)); + builder.add(new ListRightsProcessor(mailboxManager, statusResponseFactory, metricFactory, pathConverterFactory)); + builder.add(new MyRightsProcessor(mailboxManager, statusResponseFactory, metricFactory, pathConverterFactory)); EnableProcessor enableProcessor = new EnableProcessor(mailboxManager, statusResponseFactory, metricFactory, capabilityProcessor); builder.add(enableProcessor); builder.add(new GetQuotaProcessor(mailboxManager, statusResponseFactory, quotaManager, quotaRootResolver, metricFactory)); builder.add(new SetQuotaProcessor(mailboxManager, statusResponseFactory, metricFactory)); - builder.add(new GetQuotaRootProcessor(mailboxManager, statusResponseFactory, quotaRootResolver, quotaManager, metricFactory)); + builder.add(new GetQuotaRootProcessor(mailboxManager, statusResponseFactory, quotaRootResolver, quotaManager, metricFactory, pathConverterFactory)); builder.add(new ImapResponseMessageProcessor()); if (mailboxManager.hasCapability(MailboxManager.MailboxCapabilities.Move)) { - builder.add(new MoveProcessor(mailboxManager, statusResponseFactory, metricFactory)); + builder.add(new MoveProcessor(mailboxManager, statusResponseFactory, metricFactory, pathConverterFactory)); } if (mailboxManager.hasCapability(MailboxManager.MailboxCapabilities.Annotation)) { - builder.add(new SetMetadataProcessor(mailboxManager, statusResponseFactory, metricFactory)); - builder.add(new GetMetadataProcessor(mailboxManager, statusResponseFactory, metricFactory)); + builder.add(new SetMetadataProcessor(mailboxManager, statusResponseFactory, metricFactory, pathConverterFactory)); + builder.add(new GetMetadataProcessor(mailboxManager, statusResponseFactory, metricFactory, pathConverterFactory)); } ImmutableList<AbstractProcessor> processors = builder.build(); diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/DeleteACLProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/DeleteACLProcessor.java index d0c0f33cb8..f34624337d 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/processor/DeleteACLProcessor.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/DeleteACLProcessor.java @@ -57,10 +57,12 @@ public class DeleteACLProcessor extends AbstractMailboxProcessor<DeleteACLReques private static final Logger LOGGER = LoggerFactory.getLogger(DeleteACLProcessor.class); private static final List<Capability> CAPABILITIES = ImmutableList.of(ImapConstants.SUPPORTS_ACL); + private final PathConverter.Factory pathConverterFactory; @Inject - public DeleteACLProcessor(MailboxManager mailboxManager, StatusResponseFactory factory, MetricFactory metricFactory) { + public DeleteACLProcessor(MailboxManager mailboxManager, StatusResponseFactory factory, MetricFactory metricFactory, PathConverter.Factory pathConverterFactory) { super(DeleteACLRequest.class, mailboxManager, factory, metricFactory); + this.pathConverterFactory = pathConverterFactory; } @Override @@ -69,7 +71,7 @@ public class DeleteACLProcessor extends AbstractMailboxProcessor<DeleteACLReques final MailboxSession mailboxSession = session.getMailboxSession(); MailboxName mailboxName = request.getMailboxName(); MailboxACL.EntryKey entryKey = request.getEntryKey(); - MailboxPath mailboxPath = PathConverter.forSession(session).buildFullPath(mailboxName.asString()); + MailboxPath mailboxPath = pathConverterFactory.forSession(session).buildFullPath(mailboxName.asString()); return checkLookupRight(request, responder, mailboxManager, mailboxSession, mailboxPath) .filter(FunctionalUtils.identityPredicate()) diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/DeleteProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/DeleteProcessor.java index 2007ffdd17..040d8c3f2b 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/processor/DeleteProcessor.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/DeleteProcessor.java @@ -43,15 +43,18 @@ import reactor.core.publisher.Mono; public class DeleteProcessor extends AbstractMailboxProcessor<DeleteRequest> { private static final Logger LOGGER = LoggerFactory.getLogger(DeleteProcessor.class); + private final PathConverter.Factory pathConverterFactory; + @Inject - public DeleteProcessor(MailboxManager mailboxManager, StatusResponseFactory factory, MetricFactory metricFactory) { + public DeleteProcessor(MailboxManager mailboxManager, StatusResponseFactory factory, MetricFactory metricFactory, PathConverter.Factory pathConverterFactory) { super(DeleteRequest.class, mailboxManager, factory, metricFactory); + this.pathConverterFactory = pathConverterFactory; } @Override protected Mono<Void> processRequestReactive(DeleteRequest request, ImapSession session, Responder responder) { MailboxManager mailboxManager = getMailboxManager(); - MailboxPath mailboxPath = PathConverter.forSession(session).buildFullPath(request.getMailboxName()); + MailboxPath mailboxPath = pathConverterFactory.forSession(session).buildFullPath(request.getMailboxName()); SelectedMailbox selected = session.getSelected(); return deselect(session, selected, mailboxPath) diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/ExamineProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/ExamineProcessor.java index d765c6f9eb..6a03f55db8 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/processor/ExamineProcessor.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/ExamineProcessor.java @@ -28,6 +28,7 @@ import org.apache.james.events.EventBus; import org.apache.james.imap.api.message.IdRange; import org.apache.james.imap.api.message.UidRange; import org.apache.james.imap.api.message.response.StatusResponseFactory; +import org.apache.james.imap.main.PathConverter; import org.apache.james.imap.message.request.ExamineRequest; import org.apache.james.mailbox.MailboxManager; import org.apache.james.metrics.api.MetricFactory; @@ -37,8 +38,8 @@ public class ExamineProcessor extends AbstractSelectionProcessor<ExamineRequest> @Inject public ExamineProcessor(MailboxManager mailboxManager, EventBus eventBus, StatusResponseFactory statusResponseFactory, - MetricFactory metricFactory) { - super(ExamineRequest.class, mailboxManager, statusResponseFactory, true, metricFactory, eventBus); + MetricFactory metricFactory, PathConverter.Factory pathConverterFactory) { + super(ExamineRequest.class, mailboxManager, statusResponseFactory, pathConverterFactory, true, metricFactory, eventBus); } @Override diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/GetACLProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/GetACLProcessor.java index 11badd0c4f..0b770ab3be 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/processor/GetACLProcessor.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/GetACLProcessor.java @@ -61,10 +61,13 @@ public class GetACLProcessor extends AbstractMailboxProcessor<GetACLRequest> imp private static final List<Capability> CAPABILITIES = ImmutableList.of(ImapConstants.SUPPORTS_ACL); + private final PathConverter.Factory pathConverterFactory; + @Inject public GetACLProcessor(MailboxManager mailboxManager, StatusResponseFactory factory, - MetricFactory metricFactory) { + MetricFactory metricFactory, PathConverter.Factory pathConverterFactory) { super(GetACLRequest.class, mailboxManager, factory, metricFactory); + this.pathConverterFactory = pathConverterFactory; } @Override @@ -73,7 +76,7 @@ public class GetACLProcessor extends AbstractMailboxProcessor<GetACLRequest> imp MailboxSession mailboxSession = session.getMailboxSession(); MailboxName mailboxName = request.getMailboxName(); - MailboxPath mailboxPath = PathConverter.forSession(session).buildFullPath(mailboxName.asString()); + MailboxPath mailboxPath = pathConverterFactory.forSession(session).buildFullPath(mailboxName.asString()); return Mono.from(mailboxManager.getMailboxReactive(mailboxPath, mailboxSession)) .flatMap(Throwing.function(mailbox -> { diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/GetMetadataProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/GetMetadataProcessor.java index 22fda73572..d8218a5a6d 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/processor/GetMetadataProcessor.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/GetMetadataProcessor.java @@ -65,10 +65,13 @@ public class GetMetadataProcessor extends AbstractMailboxProcessor<GetMetadataRe private static final Logger LOGGER = LoggerFactory.getLogger(GetMetadataProcessor.class); private final ImmutableList<Capability> capabilities; + private final PathConverter.Factory pathConverterFactory; + @Inject public GetMetadataProcessor(MailboxManager mailboxManager, StatusResponseFactory factory, - MetricFactory metricFactory) { + MetricFactory metricFactory, PathConverter.Factory pathConverterFactory) { super(GetMetadataRequest.class, mailboxManager, factory, metricFactory); + this.pathConverterFactory = pathConverterFactory; this.capabilities = computeCapabilities(); } @@ -89,7 +92,8 @@ public class GetMetadataProcessor extends AbstractMailboxProcessor<GetMetadataRe String mailboxName = request.getMailboxName(); Optional<Integer> maxsize = request.getMaxsize(); - return getMailboxAnnotations(session, request.getKeys(), request.getDepth(), PathConverter.forSession(session).buildFullPath(mailboxName)) + MailboxPath mailboxPath = pathConverterFactory.forSession(session).buildFullPath(mailboxName); + return getMailboxAnnotations(session, request.getKeys(), request.getDepth(), mailboxPath) .collectList() .flatMap(mailboxAnnotations -> Mono.fromCallable(() -> getMaxSizeValue(mailboxAnnotations, maxsize)) .flatMap(maximumOversizedSize -> Mono.fromRunnable(() -> respond(request, responder, mailboxName, mailboxAnnotations, maxsize, maximumOversizedSize))) diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/GetQuotaRootProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/GetQuotaRootProcessor.java index d176577f88..79bd8e75b3 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/processor/GetQuotaRootProcessor.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/GetQuotaRootProcessor.java @@ -60,13 +60,15 @@ public class GetQuotaRootProcessor extends AbstractMailboxProcessor<GetQuotaRoot private final QuotaRootResolver quotaRootResolver; private final QuotaManager quotaManager; + private final PathConverter.Factory pathConverterFactory; @Inject public GetQuotaRootProcessor(MailboxManager mailboxManager, StatusResponseFactory factory, QuotaRootResolver quotaRootResolver, QuotaManager quotaManager, - MetricFactory metricFactory) { + MetricFactory metricFactory, PathConverter.Factory pathConverterFactory) { super(GetQuotaRootRequest.class, mailboxManager, factory, metricFactory); this.quotaRootResolver = quotaRootResolver; this.quotaManager = quotaManager; + this.pathConverterFactory = pathConverterFactory; } @Override @@ -79,7 +81,7 @@ public class GetQuotaRootProcessor extends AbstractMailboxProcessor<GetQuotaRoot final MailboxSession mailboxSession = session.getMailboxSession(); final MailboxManager mailboxManager = getMailboxManager(); - final MailboxPath mailboxPath = PathConverter.forSession(session).buildFullPath(request.getMailboxName()); + final MailboxPath mailboxPath = pathConverterFactory.forSession(session).buildFullPath(request.getMailboxName()); // First check mailbox exists return Mono.from(mailboxManager.getMailboxReactive(mailboxPath, mailboxSession)) diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/ListProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/ListProcessor.java index 2875497ce4..bc2e347ad8 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/processor/ListProcessor.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/ListProcessor.java @@ -90,20 +90,23 @@ public class ListProcessor<T extends ListRequest> extends AbstractMailboxProcess private final StatusProcessor statusProcessor; protected final MailboxTyper mailboxTyper; + private final PathConverter.Factory pathConverterFactory; + @Inject public ListProcessor(MailboxManager mailboxManager, StatusResponseFactory factory, MetricFactory metricFactory, SubscriptionManager subscriptionManager, - StatusProcessor statusProcessor, MailboxTyper mailboxTyper) { - this((Class<T>) ListRequest.class, mailboxManager, factory, metricFactory, subscriptionManager, statusProcessor, mailboxTyper); + StatusProcessor statusProcessor, MailboxTyper mailboxTyper, PathConverter.Factory pathConverterFactory) { + this((Class<T>) ListRequest.class, mailboxManager, factory, metricFactory, subscriptionManager, statusProcessor, mailboxTyper, pathConverterFactory); } public ListProcessor(Class<T> clazz, MailboxManager mailboxManager, StatusResponseFactory factory, MetricFactory metricFactory, SubscriptionManager subscriptionManager, - StatusProcessor statusProcessor, MailboxTyper mailboxTyper) { + StatusProcessor statusProcessor, MailboxTyper mailboxTyper, PathConverter.Factory pathConverterFactory) { super(clazz, mailboxManager, factory, metricFactory); this.subscriptionManager = subscriptionManager; this.statusProcessor = statusProcessor; this.mailboxTyper = mailboxTyper; + this.pathConverterFactory = pathConverterFactory; } @Override @@ -360,7 +363,7 @@ public class ListProcessor<T extends ListRequest> extends AbstractMailboxProcess if (isRelative) { return MailboxPath.forUser(session.getUserName(), decodedName); } else { - return PathConverter.forSession(session).buildFullPath(decodedName); + return pathConverterFactory.forSession(session).buildFullPath(decodedName); } } diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/ListRightsProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/ListRightsProcessor.java index 7c2c599006..a4d750ab7e 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/processor/ListRightsProcessor.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/ListRightsProcessor.java @@ -59,10 +59,13 @@ public class ListRightsProcessor extends AbstractMailboxProcessor<ListRightsRequ private static final List<Capability> CAPABILITIES = ImmutableList.of(ImapConstants.SUPPORTS_ACL); + private final PathConverter.Factory pathConverterFactory; + @Inject public ListRightsProcessor(MailboxManager mailboxManager, StatusResponseFactory factory, - MetricFactory metricFactory) { + MetricFactory metricFactory, PathConverter.Factory pathConverterFactory) { super(ListRightsRequest.class, mailboxManager, factory, metricFactory); + this.pathConverterFactory = pathConverterFactory; } @Override @@ -70,7 +73,7 @@ public class ListRightsProcessor extends AbstractMailboxProcessor<ListRightsRequ MailboxManager mailboxManager = getMailboxManager(); MailboxSession mailboxSession = session.getMailboxSession(); MailboxName mailboxName = request.getMailboxName(); - MailboxPath mailboxPath = PathConverter.forSession(session).buildFullPath(mailboxName.asString()); + MailboxPath mailboxPath = pathConverterFactory.forSession(session).buildFullPath(mailboxName.asString()); return Mono.from(mailboxManager.getMailboxReactive(mailboxPath, mailboxSession)) .doOnNext(Throwing.<MessageManager>consumer(mailbox -> { diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/LoginProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/LoginProcessor.java index f435d8ec97..b4d20915f9 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/processor/LoginProcessor.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/LoginProcessor.java @@ -28,6 +28,7 @@ import org.apache.james.imap.api.display.HumanReadableText; import org.apache.james.imap.api.message.Capability; import org.apache.james.imap.api.message.response.StatusResponseFactory; import org.apache.james.imap.api.process.ImapSession; +import org.apache.james.imap.main.PathConverter; import org.apache.james.imap.message.request.LoginRequest; import org.apache.james.mailbox.MailboxManager; import org.apache.james.metrics.api.MetricFactory; @@ -45,8 +46,8 @@ public class LoginProcessor extends AbstractAuthProcessor<LoginRequest> implemen private static final Logger LOGGER = LoggerFactory.getLogger(LoginProcessor.class); @Inject - public LoginProcessor(MailboxManager mailboxManager, StatusResponseFactory factory, MetricFactory metricFactory) { - super(LoginRequest.class, mailboxManager, factory, metricFactory); + public LoginProcessor(MailboxManager mailboxManager, StatusResponseFactory factory, MetricFactory metricFactory, PathConverter.Factory pathConverterFactory) { + super(LoginRequest.class, mailboxManager, factory, metricFactory, pathConverterFactory); } @Override diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/MoveProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/MoveProcessor.java index 018264cead..6b66e9f937 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/processor/MoveProcessor.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/MoveProcessor.java @@ -29,6 +29,7 @@ import org.apache.james.imap.api.message.IdRange; import org.apache.james.imap.api.message.response.StatusResponseFactory; import org.apache.james.imap.api.process.ImapSession; import org.apache.james.imap.api.process.SelectedMailbox; +import org.apache.james.imap.main.PathConverter; import org.apache.james.imap.message.request.MoveRequest; import org.apache.james.mailbox.MailboxManager; import org.apache.james.mailbox.MailboxSession; @@ -47,8 +48,8 @@ public class MoveProcessor extends AbstractMessageRangeProcessor<MoveRequest> im @Inject public MoveProcessor(MailboxManager mailboxManager, StatusResponseFactory factory, - MetricFactory metricFactory) { - super(MoveRequest.class, mailboxManager, factory, metricFactory); + MetricFactory metricFactory, PathConverter.Factory pathConverterFactory) { + super(MoveRequest.class, mailboxManager, factory, metricFactory, pathConverterFactory); moveCapabilitySupported = mailboxManager.hasCapability(MailboxManager.MailboxCapabilities.Move); } diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/MyRightsProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/MyRightsProcessor.java index ea2fc84d61..5baa4d9d6b 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/processor/MyRightsProcessor.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/MyRightsProcessor.java @@ -58,9 +58,12 @@ public class MyRightsProcessor extends AbstractMailboxProcessor<MyRightsRequest> private static final List<Capability> CAPABILITIES = Collections.singletonList(ImapConstants.SUPPORTS_ACL); + private final PathConverter.Factory pathConverterFactory; + @Inject - public MyRightsProcessor(MailboxManager mailboxManager, StatusResponseFactory factory, MetricFactory metricFactory) { + public MyRightsProcessor(MailboxManager mailboxManager, StatusResponseFactory factory, MetricFactory metricFactory, PathConverter.Factory pathConverterFactory) { super(MyRightsRequest.class, mailboxManager, factory, metricFactory); + this.pathConverterFactory = pathConverterFactory; } @Override @@ -69,7 +72,7 @@ public class MyRightsProcessor extends AbstractMailboxProcessor<MyRightsRequest> MailboxSession mailboxSession = session.getMailboxSession(); MailboxName mailboxName = request.getMailboxName(); - MailboxPath mailboxPath = PathConverter.forSession(session).buildFullPath(mailboxName.asString()); + MailboxPath mailboxPath = pathConverterFactory.forSession(session).buildFullPath(mailboxName.asString()); return Mono.from(mailboxManager.getMailboxReactive(mailboxPath, mailboxSession)) .doOnNext(Throwing.consumer(mailbox -> { Rfc4314Rights myRights = mailboxManager.myRights(mailbox.getMailboxEntity(), mailboxSession); diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/RenameProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/RenameProcessor.java index 30b4c05043..eb61e4bcd1 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/processor/RenameProcessor.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/RenameProcessor.java @@ -45,16 +45,19 @@ import reactor.core.publisher.Mono; public class RenameProcessor extends AbstractMailboxProcessor<RenameRequest> { private static final Logger LOGGER = LoggerFactory.getLogger(RenameProcessor.class); + private final PathConverter.Factory pathConverterFactory; + @Inject public RenameProcessor(MailboxManager mailboxManager, StatusResponseFactory factory, - MetricFactory metricFactory) { + MetricFactory metricFactory, PathConverter.Factory pathConverterFactory) { super(RenameRequest.class, mailboxManager, factory, metricFactory); + this.pathConverterFactory = pathConverterFactory; } @Override protected Mono<Void> processRequestReactive(RenameRequest request, ImapSession session, Responder responder) { try { - PathConverter pathConverter = PathConverter.forSession(session); + PathConverter pathConverter = pathConverterFactory.forSession(session); MailboxPath existingPath = pathConverter.buildFullPath(request.getExistingName()); MailboxPath newPath = pathConverter.buildFullPath(request.getNewName()); MailboxManager mailboxManager = getMailboxManager(); diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/ReplaceProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/ReplaceProcessor.java index 74db0d3f14..757aea38a3 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/processor/ReplaceProcessor.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/ReplaceProcessor.java @@ -68,8 +68,11 @@ public class ReplaceProcessor extends AbstractMailboxProcessor<ReplaceRequest> i private static final Logger LOGGER = LoggerFactory.getLogger(ReplaceProcessor.class); private static final ImmutableList<Capability> CAPABILITIES = ImmutableList.of(Capability.of("REPLACE")); - public ReplaceProcessor(MailboxManager mailboxManager, StatusResponseFactory statusResponseFactory, MetricFactory metricFactory) { + private final PathConverter.Factory pathConverterFactory; + + public ReplaceProcessor(MailboxManager mailboxManager, StatusResponseFactory statusResponseFactory, MetricFactory metricFactory, PathConverter.Factory pathConverterFactory) { super(ReplaceRequest.class, mailboxManager, statusResponseFactory, metricFactory); + this.pathConverterFactory = pathConverterFactory; } @Override @@ -83,7 +86,7 @@ public class ReplaceProcessor extends AbstractMailboxProcessor<ReplaceRequest> i final Content messageIn = request.getMessage().asMailboxContent(); final Date datetime = request.getDatetime(); final Flags flags = request.getFlags(); - final MailboxPath mailboxPath = PathConverter.forSession(session).buildFullPath(mailboxName); + final MailboxPath mailboxPath = pathConverterFactory.forSession(session).buildFullPath(mailboxName); final MailboxManager mailboxManager = getMailboxManager(); session.stopDetectingCommandInjection(); diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/SelectProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/SelectProcessor.java index 721932fce1..fdfd4960e6 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/processor/SelectProcessor.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/SelectProcessor.java @@ -28,6 +28,7 @@ import org.apache.james.events.EventBus; import org.apache.james.imap.api.message.IdRange; import org.apache.james.imap.api.message.UidRange; import org.apache.james.imap.api.message.response.StatusResponseFactory; +import org.apache.james.imap.main.PathConverter; import org.apache.james.imap.message.request.SelectRequest; import org.apache.james.mailbox.MailboxManager; import org.apache.james.metrics.api.MetricFactory; @@ -37,8 +38,8 @@ public class SelectProcessor extends AbstractSelectionProcessor<SelectRequest> { @Inject public SelectProcessor(MailboxManager mailboxManager, EventBus eventBus, StatusResponseFactory statusResponseFactory, - MetricFactory metricFactory) { - super(SelectRequest.class, mailboxManager, statusResponseFactory, false, metricFactory, eventBus); + MetricFactory metricFactory, PathConverter.Factory pathConverterFactory) { + super(SelectRequest.class, mailboxManager, statusResponseFactory, pathConverterFactory, false, metricFactory, eventBus); } @Override diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/SetACLProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/SetACLProcessor.java index ace668d01a..660686c288 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/processor/SetACLProcessor.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/SetACLProcessor.java @@ -58,10 +58,13 @@ public class SetACLProcessor extends AbstractMailboxProcessor<SetACLRequest> imp private static final List<Capability> CAPABILITIES = ImmutableList.of(ImapConstants.SUPPORTS_ACL); + private final PathConverter.Factory pathConverterFactory; + @Inject public SetACLProcessor(MailboxManager mailboxManager, StatusResponseFactory factory, - MetricFactory metricFactory) { + MetricFactory metricFactory, PathConverter.Factory pathConverterFactory) { super(SetACLRequest.class, mailboxManager, factory, metricFactory); + this.pathConverterFactory = pathConverterFactory; } @Override @@ -69,7 +72,7 @@ public class SetACLProcessor extends AbstractMailboxProcessor<SetACLRequest> imp final MailboxManager mailboxManager = getMailboxManager(); final MailboxSession mailboxSession = session.getMailboxSession(); MailboxName mailboxName = request.getMailboxName(); - MailboxPath mailboxPath = PathConverter.forSession(session).buildFullPath(mailboxName.asString()); + MailboxPath mailboxPath = pathConverterFactory.forSession(session).buildFullPath(mailboxName.asString()); return checkLookupRight(request, responder, mailboxManager, mailboxSession, mailboxPath) .filter(FunctionalUtils.identityPredicate()) diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/SetMetadataProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/SetMetadataProcessor.java index d47f87c097..a3249960f5 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/processor/SetMetadataProcessor.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/SetMetadataProcessor.java @@ -57,10 +57,13 @@ public class SetMetadataProcessor extends AbstractMailboxProcessor<SetMetadataRe private static final Logger LOGGER = LoggerFactory.getLogger(SetMetadataProcessor.class); private final ImmutableList<Capability> capabilities; + private final PathConverter.Factory pathConverterFactory; + @Inject public SetMetadataProcessor(MailboxManager mailboxManager, StatusResponseFactory factory, - MetricFactory metricFactory) { + MetricFactory metricFactory, PathConverter.Factory pathConverterFactory) { super(SetMetadataRequest.class, mailboxManager, factory, metricFactory); + this.pathConverterFactory = pathConverterFactory; this.capabilities = computeCapabilities(); } @@ -83,7 +86,7 @@ public class SetMetadataProcessor extends AbstractMailboxProcessor<SetMetadataRe final String mailboxName = request.getMailboxName(); return Mono.from(mailboxManager.updateAnnotationsReactive( - PathConverter.forSession(session).buildFullPath(mailboxName), + pathConverterFactory.forSession(session).buildFullPath(mailboxName), mailboxSession, request.getMailboxAnnotations())) .then(Mono.fromRunnable(() -> okComplete(request, responder)).then()) .doOnEach(logOnError(MailboxException.class, diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/StatusProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/StatusProcessor.java index 59314fcd68..a4aafb278e 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/processor/StatusProcessor.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/StatusProcessor.java @@ -75,12 +75,15 @@ import reactor.core.publisher.Mono; public class StatusProcessor extends AbstractMailboxProcessor<StatusRequest> implements CapabilityImplementingProcessor { private static final Logger LOGGER = LoggerFactory.getLogger(StatusProcessor.class); + + private final PathConverter.Factory pathConverterFactory; private ImapConfiguration imapConfiguration; @Inject public StatusProcessor(MailboxManager mailboxManager, StatusResponseFactory factory, - MetricFactory metricFactory) { + MetricFactory metricFactory, PathConverter.Factory pathConverterFactory) { super(StatusRequest.class, mailboxManager, factory, metricFactory); + this.pathConverterFactory = pathConverterFactory; } @Override @@ -96,7 +99,7 @@ public class StatusProcessor extends AbstractMailboxProcessor<StatusRequest> imp @Override protected Mono<Void> processRequestReactive(StatusRequest request, ImapSession session, Responder responder) { - MailboxPath mailboxPath = PathConverter.forSession(session).buildFullPath(request.getMailboxName()); + MailboxPath mailboxPath = pathConverterFactory.forSession(session).buildFullPath(request.getMailboxName()); MailboxSession mailboxSession = session.getMailboxSession(); StatusDataItems statusDataItems = request.getStatusDataItems(); diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/SubscribeProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/SubscribeProcessor.java index 096beefee1..eb52896edd 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/processor/SubscribeProcessor.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/SubscribeProcessor.java @@ -42,15 +42,18 @@ import reactor.core.publisher.Mono; public class SubscribeProcessor extends AbstractSubscriptionProcessor<SubscribeRequest> { private static final Logger LOGGER = LoggerFactory.getLogger(SubscribeProcessor.class); + private final PathConverter.Factory pathConverterFactory; + @Inject public SubscribeProcessor(MailboxManager mailboxManager, SubscriptionManager subscriptionManager, StatusResponseFactory factory, - MetricFactory metricFactory) { + MetricFactory metricFactory, PathConverter.Factory pathConverterFactory) { super(SubscribeRequest.class, mailboxManager, subscriptionManager, factory, metricFactory); + this.pathConverterFactory = pathConverterFactory; } @Override protected Mono<Void> doProcessRequest(SubscribeRequest request, ImapSession session, Responder responder) { - MailboxPath mailboxPath = PathConverter.forSession(session).buildFullPath(request.getMailboxName()); + MailboxPath mailboxPath = pathConverterFactory.forSession(session).buildFullPath(request.getMailboxName()); MailboxSession mailboxSession = session.getMailboxSession(); return Mono.from(getSubscriptionManager().subscribeReactive(mailboxPath, mailboxSession)) diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/UnsubscribeProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/UnsubscribeProcessor.java index c39ab1b263..8f6ffdcdf3 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/processor/UnsubscribeProcessor.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/UnsubscribeProcessor.java @@ -43,15 +43,18 @@ import reactor.core.publisher.Mono; public class UnsubscribeProcessor extends AbstractSubscriptionProcessor<UnsubscribeRequest> { private static final Logger LOGGER = LoggerFactory.getLogger(UnsubscribeProcessor.class); + private final PathConverter.Factory pathConverterFactory; + @Inject public UnsubscribeProcessor(MailboxManager mailboxManager, SubscriptionManager subscriptionManager, StatusResponseFactory factory, - MetricFactory metricFactory) { + MetricFactory metricFactory, PathConverter.Factory pathConverterFactory) { super(UnsubscribeRequest.class, mailboxManager, subscriptionManager, factory, metricFactory); + this.pathConverterFactory = pathConverterFactory; } @Override protected Mono<Void> doProcessRequest(UnsubscribeRequest request, ImapSession session, Responder responder) { - MailboxPath mailboxPath = PathConverter.forSession(session).buildFullPath(request.getMailboxName()); + MailboxPath mailboxPath = pathConverterFactory.forSession(session).buildFullPath(request.getMailboxName()); MailboxSession mailboxSession = session.getMailboxSession(); return Mono.from(getSubscriptionManager().unsubscribeReactive(mailboxPath, mailboxSession)) diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/XListProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/XListProcessor.java index 3ec8b19b2c..a7eddc25e3 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/processor/XListProcessor.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/XListProcessor.java @@ -31,6 +31,7 @@ import org.apache.james.imap.api.message.response.StatusResponseFactory; import org.apache.james.imap.api.process.ImapSession; import org.apache.james.imap.api.process.MailboxType; import org.apache.james.imap.api.process.MailboxTyper; +import org.apache.james.imap.main.PathConverter; import org.apache.james.imap.message.request.ListRequest; import org.apache.james.imap.message.request.XListRequest; import org.apache.james.imap.message.response.XListResponse; @@ -51,13 +52,13 @@ public class XListProcessor extends ListProcessor<XListRequest> implements Capab @Inject public XListProcessor(MailboxManager mailboxManager, StatusResponseFactory factory, MetricFactory metricFactory, - SubscriptionManager subscriptionManager) { - this(mailboxManager, factory, null, metricFactory, subscriptionManager); + SubscriptionManager subscriptionManager, PathConverter.Factory pathConverterFactory) { + this(mailboxManager, factory, null, metricFactory, subscriptionManager, pathConverterFactory); } public XListProcessor(MailboxManager mailboxManager, StatusResponseFactory factory, MailboxTyper mailboxTyper, - MetricFactory metricFactory, SubscriptionManager subscriptionManager) { - super(XListRequest.class, mailboxManager, factory, metricFactory, subscriptionManager, null, mailboxTyper); + MetricFactory metricFactory, SubscriptionManager subscriptionManager, PathConverter.Factory pathConverterFactory) { + super(XListRequest.class, mailboxManager, factory, metricFactory, subscriptionManager, null, mailboxTyper, pathConverterFactory); } @Override diff --git a/protocols/imap/src/test/java/org/apache/james/imap/main/PathConverterTest.java b/protocols/imap/src/test/java/org/apache/james/imap/main/PathConverterTest.java index e6bc9b75c4..93d2970bd9 100644 --- a/protocols/imap/src/test/java/org/apache/james/imap/main/PathConverterTest.java +++ b/protocols/imap/src/test/java/org/apache/james/imap/main/PathConverterTest.java @@ -44,7 +44,7 @@ class PathConverterTest { void setUp() { imapSession = new FakeImapSession(); mailboxSession = MailboxSessionUtil.create(USERNAME); - pathConverter = PathConverter.forSession(imapSession); + pathConverter = PathConverter.Factory.DEFAULT.forSession(imapSession); imapSession.setMailboxSession(mailboxSession); } diff --git a/protocols/imap/src/test/java/org/apache/james/imap/processor/AbstractSelectionProcessorTest.java b/protocols/imap/src/test/java/org/apache/james/imap/processor/AbstractSelectionProcessorTest.java index 314a37f9dd..67f886a2fe 100644 --- a/protocols/imap/src/test/java/org/apache/james/imap/processor/AbstractSelectionProcessorTest.java +++ b/protocols/imap/src/test/java/org/apache/james/imap/processor/AbstractSelectionProcessorTest.java @@ -30,6 +30,7 @@ import org.apache.james.imap.api.message.IdRange; import org.apache.james.imap.api.message.UidRange; import org.apache.james.imap.api.message.response.StatusResponseFactory; import org.apache.james.imap.api.process.SelectedMailbox; +import org.apache.james.imap.main.PathConverter; import org.apache.james.mailbox.MailboxManager; import org.apache.james.mailbox.MessageUid; import org.apache.james.metrics.api.MetricFactory; @@ -45,7 +46,7 @@ public class AbstractSelectionProcessorTest { EventBus eventBus = null; StatusResponseFactory statusResponseFactory = null; MetricFactory metricFactory = null; - testee = new SelectProcessor(mailboxManager, eventBus, statusResponseFactory, metricFactory); + testee = new SelectProcessor(mailboxManager, eventBus, statusResponseFactory, metricFactory, PathConverter.Factory.DEFAULT); } @Test diff --git a/protocols/imap/src/test/java/org/apache/james/imap/processor/CopyProcessorTest.java b/protocols/imap/src/test/java/org/apache/james/imap/processor/CopyProcessorTest.java index 0fd12e9445..66a18ba397 100644 --- a/protocols/imap/src/test/java/org/apache/james/imap/processor/CopyProcessorTest.java +++ b/protocols/imap/src/test/java/org/apache/james/imap/processor/CopyProcessorTest.java @@ -40,6 +40,7 @@ import org.apache.james.imap.api.message.response.StatusResponseFactory; import org.apache.james.imap.api.process.ImapProcessor; import org.apache.james.imap.api.process.SelectedMailbox; import org.apache.james.imap.encode.FakeImapSession; +import org.apache.james.imap.main.PathConverter; import org.apache.james.imap.message.request.CopyRequest; import org.apache.james.mailbox.MailboxManager; import org.apache.james.mailbox.MailboxSession; @@ -86,7 +87,7 @@ class CopyProcessorTest { imapSession = new FakeImapSession(); mailboxSession = MailboxSessionUtil.create(USERNAME); - testee = new CopyProcessor(mockMailboxManager, mockStatusResponseFactory, new RecordingMetricFactory()); + testee = new CopyProcessor(mockMailboxManager, mockStatusResponseFactory, new RecordingMetricFactory(), PathConverter.Factory.DEFAULT); imapSession.authenticated(); imapSession.setMailboxSession(mailboxSession); diff --git a/protocols/imap/src/test/java/org/apache/james/imap/processor/DeleteACLProcessorTest.java b/protocols/imap/src/test/java/org/apache/james/imap/processor/DeleteACLProcessorTest.java index 88233e5a50..4f3a1dbdb6 100644 --- a/protocols/imap/src/test/java/org/apache/james/imap/processor/DeleteACLProcessorTest.java +++ b/protocols/imap/src/test/java/org/apache/james/imap/processor/DeleteACLProcessorTest.java @@ -33,6 +33,7 @@ import org.apache.james.imap.api.ImapConstants; import org.apache.james.imap.api.message.response.ImapResponseMessage; import org.apache.james.imap.api.process.ImapProcessor.Responder; import org.apache.james.imap.encode.FakeImapSession; +import org.apache.james.imap.main.PathConverter; import org.apache.james.imap.message.MailboxName; import org.apache.james.imap.message.request.DeleteACLRequest; import org.apache.james.imap.message.response.UnpooledStatusResponseFactory; @@ -81,7 +82,7 @@ class DeleteACLProcessorTest { Object[] args = invocation.getArguments(); return (Mono) args[0]; }); - subject = new DeleteACLProcessor(mailboxManager, statusResponseFactory, new RecordingMetricFactory()); + subject = new DeleteACLProcessor(mailboxManager, statusResponseFactory, new RecordingMetricFactory(), PathConverter.Factory.DEFAULT); imapSession = new FakeImapSession(); mailboxSession = MailboxSessionUtil.create(USER_1); diff --git a/protocols/imap/src/test/java/org/apache/james/imap/processor/GetACLProcessorTest.java b/protocols/imap/src/test/java/org/apache/james/imap/processor/GetACLProcessorTest.java index 7968cea29b..339cb3369c 100644 --- a/protocols/imap/src/test/java/org/apache/james/imap/processor/GetACLProcessorTest.java +++ b/protocols/imap/src/test/java/org/apache/james/imap/processor/GetACLProcessorTest.java @@ -36,6 +36,7 @@ import org.apache.james.imap.api.ImapConstants; import org.apache.james.imap.api.message.response.ImapResponseMessage; import org.apache.james.imap.api.process.ImapProcessor.Responder; import org.apache.james.imap.encode.FakeImapSession; +import org.apache.james.imap.main.PathConverter; import org.apache.james.imap.message.MailboxName; import org.apache.james.imap.message.request.GetACLRequest; import org.apache.james.imap.message.response.ACLResponse; @@ -83,7 +84,7 @@ class GetACLProcessorTest { Object[] args = invocation.getArguments(); return (Mono) args[0]; }); - subject = new GetACLProcessor(mailboxManager, statusResponseFactory, new RecordingMetricFactory()); + subject = new GetACLProcessor(mailboxManager, statusResponseFactory, new RecordingMetricFactory(), PathConverter.Factory.DEFAULT); imapSession = new FakeImapSession(); mailboxSession = MailboxSessionUtil.create(USER_1); MessageManager messageManager = mock(MessageManager.class); diff --git a/protocols/imap/src/test/java/org/apache/james/imap/processor/GetAnnotationProcessorTest.java b/protocols/imap/src/test/java/org/apache/james/imap/processor/GetAnnotationProcessorTest.java index 9d15f391b3..4a1453b3e3 100644 --- a/protocols/imap/src/test/java/org/apache/james/imap/processor/GetAnnotationProcessorTest.java +++ b/protocols/imap/src/test/java/org/apache/james/imap/processor/GetAnnotationProcessorTest.java @@ -43,6 +43,7 @@ import org.apache.james.imap.api.message.response.StatusResponse.ResponseCode; import org.apache.james.imap.api.message.response.StatusResponseFactory; import org.apache.james.imap.api.process.ImapProcessor; import org.apache.james.imap.encode.FakeImapSession; +import org.apache.james.imap.main.PathConverter; import org.apache.james.imap.message.request.GetMetadataRequest; import org.apache.james.imap.message.request.GetMetadataRequest.Depth; import org.apache.james.imap.message.response.MetadataResponse; @@ -126,7 +127,7 @@ class GetAnnotationProcessorTest { MockitoAnnotations.initMocks(this); initAndMockData(); - processor = new GetMetadataProcessor(mockMailboxManager, mockStatusResponseFactory, new RecordingMetricFactory()); + processor = new GetMetadataProcessor(mockMailboxManager, mockStatusResponseFactory, new RecordingMetricFactory(), PathConverter.Factory.DEFAULT); } @Test diff --git a/protocols/imap/src/test/java/org/apache/james/imap/processor/GetQuotaRootProcessorTest.java b/protocols/imap/src/test/java/org/apache/james/imap/processor/GetQuotaRootProcessorTest.java index be0fa6b84c..131360dd24 100644 --- a/protocols/imap/src/test/java/org/apache/james/imap/processor/GetQuotaRootProcessorTest.java +++ b/protocols/imap/src/test/java/org/apache/james/imap/processor/GetQuotaRootProcessorTest.java @@ -42,6 +42,7 @@ import org.apache.james.imap.api.message.response.ImapResponseMessage; import org.apache.james.imap.api.message.response.StatusResponse; import org.apache.james.imap.api.process.ImapProcessor; import org.apache.james.imap.encode.FakeImapSession; +import org.apache.james.imap.main.PathConverter; import org.apache.james.imap.message.request.GetQuotaRootRequest; import org.apache.james.imap.message.response.QuotaResponse; import org.apache.james.imap.message.response.QuotaRootResponse; @@ -103,7 +104,7 @@ class GetQuotaRootProcessorTest { .thenReturn(Mono.just(messageManager)); when(messageManager.getMailboxEntity()).thenReturn(mock(Mailbox.class)); testee = new GetQuotaRootProcessor(mockedMailboxManager, - statusResponseFactory, mockedQuotaRootResolver, mockedQuotaManager, new RecordingMetricFactory()); + statusResponseFactory, mockedQuotaRootResolver, mockedQuotaManager, new RecordingMetricFactory(), PathConverter.Factory.DEFAULT); } @Test diff --git a/protocols/imap/src/test/java/org/apache/james/imap/processor/ListRightsProcessorTest.java b/protocols/imap/src/test/java/org/apache/james/imap/processor/ListRightsProcessorTest.java index 839efe4d6f..c069d7b4e3 100644 --- a/protocols/imap/src/test/java/org/apache/james/imap/processor/ListRightsProcessorTest.java +++ b/protocols/imap/src/test/java/org/apache/james/imap/processor/ListRightsProcessorTest.java @@ -37,6 +37,7 @@ import org.apache.james.imap.api.ImapConstants; import org.apache.james.imap.api.message.response.ImapResponseMessage; import org.apache.james.imap.api.process.ImapProcessor.Responder; import org.apache.james.imap.encode.FakeImapSession; +import org.apache.james.imap.main.PathConverter; import org.apache.james.imap.message.MailboxName; import org.apache.james.imap.message.request.ListRightsRequest; import org.apache.james.imap.message.response.ListRightsResponse; @@ -90,7 +91,7 @@ class ListRightsProcessorTest { Object[] args = invocation.getArguments(); return (Mono) args[0]; }); - subject = new ListRightsProcessor(mailboxManager, statusResponseFactory, new RecordingMetricFactory()); + subject = new ListRightsProcessor(mailboxManager, statusResponseFactory, new RecordingMetricFactory(), PathConverter.Factory.DEFAULT); imapSession = new FakeImapSession(); mailboxSession = MailboxSessionUtil.create(USER_1); MessageManager messageManager = mock(MessageManager.class); diff --git a/protocols/imap/src/test/java/org/apache/james/imap/processor/MoveProcessorTest.java b/protocols/imap/src/test/java/org/apache/james/imap/processor/MoveProcessorTest.java index d5d315c67d..9e7f4cf9f3 100644 --- a/protocols/imap/src/test/java/org/apache/james/imap/processor/MoveProcessorTest.java +++ b/protocols/imap/src/test/java/org/apache/james/imap/processor/MoveProcessorTest.java @@ -41,6 +41,7 @@ import org.apache.james.imap.api.message.response.StatusResponseFactory; import org.apache.james.imap.api.process.ImapProcessor; import org.apache.james.imap.api.process.SelectedMailbox; import org.apache.james.imap.encode.FakeImapSession; +import org.apache.james.imap.main.PathConverter; import org.apache.james.imap.message.request.MoveRequest; import org.apache.james.mailbox.MailboxManager; import org.apache.james.mailbox.MailboxManager.MailboxCapabilities; @@ -88,7 +89,7 @@ public class MoveProcessorTest { mailboxSession = MailboxSessionUtil.create(USERNAME); when(mockMailboxManager.hasCapability(eq(MailboxCapabilities.Move))).thenReturn(true); - testee = new MoveProcessor(mockMailboxManager, mockStatusResponseFactory, new RecordingMetricFactory()); + testee = new MoveProcessor(mockMailboxManager, mockStatusResponseFactory, new RecordingMetricFactory(), PathConverter.Factory.DEFAULT); verify(mockMailboxManager).hasCapability(MailboxCapabilities.Move); imapSession.authenticated(); @@ -103,7 +104,7 @@ public class MoveProcessorTest { @Test void getImplementedCapabilitiesShouldNotContainMoveWhenUnSupportedByMailboxManager() { when(mockMailboxManager.hasCapability(eq(MailboxCapabilities.Move))).thenReturn(false); - assertThat(new MoveProcessor(mockMailboxManager, mockStatusResponseFactory, new RecordingMetricFactory()) + assertThat(new MoveProcessor(mockMailboxManager, mockStatusResponseFactory, new RecordingMetricFactory(), PathConverter.Factory.DEFAULT) .getImplementedCapabilities(null)).isEmpty(); } diff --git a/protocols/imap/src/test/java/org/apache/james/imap/processor/SelectProcessorTest.java b/protocols/imap/src/test/java/org/apache/james/imap/processor/SelectProcessorTest.java index ddf910c2c1..a0e339baf0 100644 --- a/protocols/imap/src/test/java/org/apache/james/imap/processor/SelectProcessorTest.java +++ b/protocols/imap/src/test/java/org/apache/james/imap/processor/SelectProcessorTest.java @@ -36,6 +36,7 @@ import org.apache.james.imap.encode.FakeImapSession; import org.apache.james.imap.encode.base.ImapResponseComposerImpl; import org.apache.james.imap.encode.main.DefaultImapEncoderFactory; import org.apache.james.imap.encode.main.DefaultLocalizer; +import org.apache.james.imap.main.PathConverter; import org.apache.james.imap.main.ResponseEncoder; import org.apache.james.imap.message.request.AbstractMailboxSelectionRequest; import org.apache.james.imap.message.request.SelectRequest; @@ -68,7 +69,8 @@ class SelectProcessorTest { testee = new SelectProcessor(mailboxManager, integrationResources.getEventBus(), new UnpooledStatusResponseFactory(), - new RecordingMetricFactory()); + new RecordingMetricFactory(), + PathConverter.Factory.DEFAULT); mailboxSession = mailboxManager.createSystemSession(Username.of("bob")); mailboxManager.createMailbox(MailboxPath.inbox(BOB), mailboxSession); diff --git a/protocols/imap/src/test/java/org/apache/james/imap/processor/SetACLProcessorTest.java b/protocols/imap/src/test/java/org/apache/james/imap/processor/SetACLProcessorTest.java index 207f72624c..354b8dd562 100644 --- a/protocols/imap/src/test/java/org/apache/james/imap/processor/SetACLProcessorTest.java +++ b/protocols/imap/src/test/java/org/apache/james/imap/processor/SetACLProcessorTest.java @@ -34,6 +34,7 @@ import org.apache.james.imap.api.ImapConstants; import org.apache.james.imap.api.message.response.ImapResponseMessage; import org.apache.james.imap.api.process.ImapProcessor.Responder; import org.apache.james.imap.encode.FakeImapSession; +import org.apache.james.imap.main.PathConverter; import org.apache.james.imap.message.MailboxName; import org.apache.james.imap.message.request.SetACLRequest; import org.apache.james.imap.message.response.UnpooledStatusResponseFactory; @@ -88,7 +89,7 @@ class SetACLProcessorTest { Object[] args = invocation.getArguments(); return (Mono) args[0]; }); - subject = new SetACLProcessor(mailboxManager, statusResponseFactory, new RecordingMetricFactory()); + subject = new SetACLProcessor(mailboxManager, statusResponseFactory, new RecordingMetricFactory(), PathConverter.Factory.DEFAULT); imapSession = new FakeImapSession(); mailboxSession = MailboxSessionUtil.create(USER_1); MessageManager messageManager = mock(MessageManager.class); diff --git a/protocols/imap/src/test/java/org/apache/james/imap/processor/SetMetadataProcessorTest.java b/protocols/imap/src/test/java/org/apache/james/imap/processor/SetMetadataProcessorTest.java index a61bca7656..4a7c580a1a 100644 --- a/protocols/imap/src/test/java/org/apache/james/imap/processor/SetMetadataProcessorTest.java +++ b/protocols/imap/src/test/java/org/apache/james/imap/processor/SetMetadataProcessorTest.java @@ -40,6 +40,7 @@ import org.apache.james.imap.api.message.response.StatusResponse; import org.apache.james.imap.api.message.response.StatusResponseFactory; import org.apache.james.imap.api.process.ImapProcessor; import org.apache.james.imap.encode.FakeImapSession; +import org.apache.james.imap.main.PathConverter; import org.apache.james.imap.message.request.SetMetadataRequest; import org.apache.james.mailbox.MailboxManager; import org.apache.james.mailbox.MailboxSession; @@ -103,7 +104,7 @@ class SetMetadataProcessorTest { void setUp() { MockitoAnnotations.initMocks(this); initAndMockData(); - processor = new SetMetadataProcessor(mockMailboxManager, mockStatusResponseFactory, new RecordingMetricFactory()); + processor = new SetMetadataProcessor(mockMailboxManager, mockStatusResponseFactory, new RecordingMetricFactory(), PathConverter.Factory.DEFAULT); } @Test diff --git a/server/container/guice/protocols/imap/src/main/java/org/apache/james/modules/protocols/IMAPServerModule.java b/server/container/guice/protocols/imap/src/main/java/org/apache/james/modules/protocols/IMAPServerModule.java index d5f33d874a..617f75630f 100644 --- a/server/container/guice/protocols/imap/src/main/java/org/apache/james/modules/protocols/IMAPServerModule.java +++ b/server/container/guice/protocols/imap/src/main/java/org/apache/james/modules/protocols/IMAPServerModule.java @@ -50,6 +50,7 @@ import org.apache.james.imap.encode.base.EndImapEncoder; import org.apache.james.imap.encode.main.DefaultImapEncoderFactory; import org.apache.james.imap.encode.main.DefaultLocalizer; import org.apache.james.imap.main.DefaultImapDecoderFactory; +import org.apache.james.imap.main.PathConverter; import org.apache.james.imap.message.response.UnpooledStatusResponseFactory; import org.apache.james.imap.processor.AuthenticateProcessor; import org.apache.james.imap.processor.CapabilityImplementingProcessor; @@ -106,6 +107,7 @@ public class IMAPServerModule extends AbstractModule { bind(StatusProcessor.class).in(Scopes.SINGLETON); bind(EnableProcessor.class).in(Scopes.SINGLETON); bind(NamespaceSupplier.class).to(NamespaceSupplier.Default.class).in(Scopes.SINGLETON); + bind(PathConverter.Factory.class).to(PathConverter.Factory.Default.class).in(Scopes.SINGLETON); bind(MailboxTyper.class).to(DefaultMailboxTyper.class).in(Scopes.SINGLETON); Multibinder.newSetBinder(binder(), GuiceProbe.class).addBinding().to(ImapGuiceProbe.class); diff --git a/server/protocols/protocols-imap4/src/test/java/org/apache/james/imapserver/netty/IMAPServerTest.java b/server/protocols/protocols-imap4/src/test/java/org/apache/james/imapserver/netty/IMAPServerTest.java index c39d54c032..76f8a4d0af 100644 --- a/server/protocols/protocols-imap4/src/test/java/org/apache/james/imapserver/netty/IMAPServerTest.java +++ b/server/protocols/protocols-imap4/src/test/java/org/apache/james/imapserver/netty/IMAPServerTest.java @@ -21,6 +21,7 @@ package org.apache.james.imapserver.netty; import static jakarta.mail.Flags.Flag.ANSWERED; import static jakarta.mail.Folder.READ_WRITE; +import static org.apache.james.jmap.JMAPTestingConstants.BOB; import static org.apache.james.jmap.JMAPTestingConstants.LOCALHOST_IP; import static org.apache.james.jwt.OidcTokenFixture.INTROSPECTION_RESPONSE; import static org.apache.james.mailbox.MessageManager.FlagsUpdateMode.REPLACE; --------------------------------------------------------------------- To unsubscribe, e-mail: notifications-unsubscr...@james.apache.org For additional commands, e-mail: notifications-h...@james.apache.org