This is an automated email from the ASF dual-hosted git repository. btellier pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git
commit 69d7f22b9965be146b61633f0f24745a2365b812 Author: Benoit Tellier <[email protected]> AuthorDate: Tue Feb 23 11:53:56 2021 +0700 JAMES-3504 MDC context for POP3 commands Includes: - Request arguments (except for auth) - Session context (state, mailbox) - Action performed --- protocols/pop3/pom.xml | 4 + .../pop3/core/AbstractPassCmdHandler.java | 12 ++- .../james/protocols/pop3/core/CapaCmdHandler.java | 8 ++ .../james/protocols/pop3/core/DeleCmdHandler.java | 9 ++ .../james/protocols/pop3/core/ListCmdHandler.java | 13 ++- .../{NoopCmdHandler.java => MDCConstants.java} | 111 ++++++++++----------- .../james/protocols/pop3/core/NoopCmdHandler.java | 9 ++ .../james/protocols/pop3/core/QuitCmdHandler.java | 9 ++ .../james/protocols/pop3/core/RetrCmdHandler.java | 10 ++ .../james/protocols/pop3/core/RsetCmdHandler.java | 11 +- .../james/protocols/pop3/core/StatCmdHandler.java | 9 ++ .../james/protocols/pop3/core/StlsCmdHandler.java | 9 ++ .../james/protocols/pop3/core/TopCmdHandler.java | 15 ++- .../james/protocols/pop3/core/UidlCmdHandler.java | 14 ++- .../protocols/pop3/core/UnknownCmdHandler.java | 11 ++ .../james/protocols/pop3/core/UserCmdHandler.java | 10 ++ .../james/pop3server/core/PassCmdHandler.java | 12 ++- 17 files changed, 207 insertions(+), 69 deletions(-) diff --git a/protocols/pop3/pom.xml b/protocols/pop3/pom.xml index 47fc277..f77786e 100644 --- a/protocols/pop3/pom.xml +++ b/protocols/pop3/pom.xml @@ -35,6 +35,10 @@ <dependencies> <dependency> <groupId>${james.groupId}</groupId> + <artifactId>james-server-util</artifactId> + </dependency> + <dependency> + <groupId>${james.groupId}</groupId> <artifactId>testing-base</artifactId> <scope>test</scope> </dependency> diff --git a/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/AbstractPassCmdHandler.java b/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/AbstractPassCmdHandler.java index 9358025..cd6bd61 100644 --- a/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/AbstractPassCmdHandler.java +++ b/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/AbstractPassCmdHandler.java @@ -28,6 +28,7 @@ import org.apache.james.protocols.api.Response; import org.apache.james.protocols.pop3.POP3Response; import org.apache.james.protocols.pop3.POP3Session; import org.apache.james.protocols.pop3.mailbox.Mailbox; +import org.apache.james.util.MDCBuilder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -48,6 +49,14 @@ public abstract class AbstractPassCmdHandler extends RsetCmdHandler { */ @Override public Response onCommand(POP3Session session, Request request) { + return MDCBuilder.withMdc( + MDCBuilder.create() + .addContext(MDCBuilder.ACTION, "AUTH") + .addContext(MDCConstants.withSession(session)), + () -> doAuth(session, request)); + } + + private Response doAuth(POP3Session session, Request request) { String parameters = request.getArgument(); if (session.getHandlerState() == POP3Session.AUTHENTICATION_USERSET && parameters != null) { return doAuth(session, session.getUsername(), parameters); @@ -56,8 +65,7 @@ public abstract class AbstractPassCmdHandler extends RsetCmdHandler { return AUTH_FAILED; } } - - + /** * Authenticate a user and return the {@link Response} */ diff --git a/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/CapaCmdHandler.java b/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/CapaCmdHandler.java index fe6a335..b902f6e 100644 --- a/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/CapaCmdHandler.java +++ b/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/CapaCmdHandler.java @@ -31,6 +31,7 @@ import org.apache.james.protocols.api.handler.ExtensibleHandler; import org.apache.james.protocols.api.handler.WiringException; import org.apache.james.protocols.pop3.POP3Response; import org.apache.james.protocols.pop3.POP3Session; +import org.apache.james.util.MDCBuilder; import com.google.common.collect.ImmutableSet; @@ -44,6 +45,13 @@ public class CapaCmdHandler implements CommandHandler<POP3Session>, ExtensibleHa @Override public Response onCommand(POP3Session session, Request request) { + return MDCBuilder.withMdc(MDCBuilder.create() + .addContext(MDCBuilder.ACTION, "CAPA") + .addContext(MDCConstants.withSession(session)), + () -> capa(session)); + } + + private Response capa(POP3Session session) { POP3Response response = new POP3Response(POP3Response.OK_RESPONSE, "Capability list follows"); for (CapaCapability capabilities : caps) { diff --git a/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/DeleCmdHandler.java b/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/DeleCmdHandler.java index ce499d7..d32624a 100644 --- a/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/DeleCmdHandler.java +++ b/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/DeleCmdHandler.java @@ -30,6 +30,7 @@ import org.apache.james.protocols.api.handler.CommandHandler; import org.apache.james.protocols.pop3.POP3Response; import org.apache.james.protocols.pop3.POP3Session; import org.apache.james.protocols.pop3.mailbox.MessageMetaData; +import org.apache.james.util.MDCBuilder; import com.google.common.collect.ImmutableSet; @@ -49,6 +50,14 @@ public class DeleCmdHandler implements CommandHandler<POP3Session> { @Override @SuppressWarnings("unchecked") public Response onCommand(POP3Session session, Request request) { + return MDCBuilder.withMdc(MDCBuilder.create() + .addContext(MDCBuilder.ACTION, "DELE") + .addContext(MDCConstants.withSession(session)) + .addContext(MDCConstants.forRequest(request)), + () -> delete(session, request)); + } + + private Response delete(POP3Session session, Request request) { if (session.getHandlerState() == POP3Session.TRANSACTION) { int num = 0; try { diff --git a/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/ListCmdHandler.java b/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/ListCmdHandler.java index b706146..4c16b54 100644 --- a/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/ListCmdHandler.java +++ b/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/ListCmdHandler.java @@ -30,6 +30,7 @@ import org.apache.james.protocols.api.handler.CommandHandler; import org.apache.james.protocols.pop3.POP3Response; import org.apache.james.protocols.pop3.POP3Session; import org.apache.james.protocols.pop3.mailbox.MessageMetaData; +import org.apache.james.util.MDCBuilder; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; @@ -55,6 +56,14 @@ public class ListCmdHandler implements CommandHandler<POP3Session> { @Override @SuppressWarnings("unchecked") public Response onCommand(POP3Session session, Request request) { + return MDCBuilder.withMdc(MDCBuilder.create() + .addContext(MDCBuilder.ACTION, "LIST") + .addContext(MDCConstants.withSession(session)) + .addContext(MDCConstants.forRequest(request)), + () -> list(session, request)); + } + + private Response list(POP3Session session, Request request) { String parameters = request.getArgument(); List<MessageMetaData> uidList = session.getAttachment(POP3Session.UID_LIST, State.Transaction).orElse(ImmutableList.of()); List<String> deletedUidList = session.getAttachment(POP3Session.DELETED_UID_LIST, State.Transaction).orElse(ImmutableList.of()); @@ -89,13 +98,13 @@ public class ListCmdHandler implements CommandHandler<POP3Session> { int num = 0; try { num = Integer.parseInt(parameters); - + MessageMetaData data = MessageMetaDataUtils.getMetaData(session, num); if (data == null) { StringBuilder responseBuffer = new StringBuilder(64).append("Message (").append(num).append(") does not exist."); return new POP3Response(POP3Response.ERR_RESPONSE, responseBuffer.toString()); } - + if (!deletedUidList.contains(data.getUid())) { StringBuilder responseBuffer = new StringBuilder(64).append(num).append(" ").append(data.getSize()); response = new POP3Response(POP3Response.OK_RESPONSE, responseBuffer.toString()); diff --git a/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/NoopCmdHandler.java b/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/MDCConstants.java similarity index 56% copy from protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/NoopCmdHandler.java copy to protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/MDCConstants.java index 11012c6..de4f9af 100644 --- a/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/NoopCmdHandler.java +++ b/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/MDCConstants.java @@ -1,57 +1,54 @@ -/**************************************************************** - * Licensed to the Apache Software Foundation (ASF) under one * - * or more contributor license agreements. See the NOTICE file * - * distributed with this work for additional information * - * regarding copyright ownership. The ASF licenses this file * - * to you under the Apache License, Version 2.0 (the * - * "License"); you may not use this file except in compliance * - * with the License. You may obtain a copy of the License at * - * * - * http://www.apache.org/licenses/LICENSE-2.0 * - * * - * Unless required by applicable law or agreed to in writing, * - * software distributed under the License is distributed on an * - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * - * KIND, either express or implied. See the License for the * - * specific language governing permissions and limitations * - * under the License. * - ****************************************************************/ - -package org.apache.james.protocols.pop3.core; - -import java.util.Collection; - -import org.apache.james.protocols.api.Request; -import org.apache.james.protocols.api.Response; -import org.apache.james.protocols.api.handler.CommandHandler; -import org.apache.james.protocols.pop3.POP3Response; -import org.apache.james.protocols.pop3.POP3Session; - -import com.google.common.collect.ImmutableSet; - -/** - * Handles NOOP command - */ -public class NoopCmdHandler implements CommandHandler<POP3Session> { - - private static final Collection<String> COMMANDS = ImmutableSet.of("NOOP"); - - /** - * Handler method called upon receipt of a NOOP command. Like all good - * NOOPs, does nothing much. - */ - @Override - public Response onCommand(POP3Session session, Request request) { - if (session.getHandlerState() == POP3Session.TRANSACTION) { - return POP3Response.OK; - } else { - return POP3Response.ERR; - } - } - - @Override - public Collection<String> getImplCommands() { - return COMMANDS; - } - -} +/**************************************************************** + * Licensed to the Apache Software Foundation (ASF) under one * + * or more contributor license agreements. See the NOTICE file * + * distributed with this work for additional information * + * regarding copyright ownership. The ASF licenses this file * + * to you under the Apache License, Version 2.0 (the * + * "License"); you may not use this file except in compliance * + * with the License. You may obtain a copy of the License at * + * * + * http://www.apache.org/licenses/LICENSE-2.0 * + * * + * Unless required by applicable law or agreed to in writing, * + * software distributed under the License is distributed on an * + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * + * KIND, either express or implied. See the License for the * + * specific language governing permissions and limitations * + * under the License. * + ****************************************************************/ + +package org.apache.james.protocols.pop3.core; + +import java.util.Optional; + +import org.apache.james.protocols.api.Request; +import org.apache.james.protocols.pop3.POP3Session; +import org.apache.james.protocols.pop3.mailbox.Mailbox; +import org.apache.james.util.MDCBuilder; + +import com.github.fge.lambdas.Throwing; + +public interface MDCConstants { + String MAILBOX = "mailbox"; + String ARGUMENT = "argument"; + String STATE = "state"; + + static MDCBuilder withMailbox(POP3Session session) { + return Optional.ofNullable(session.getUserMailbox()) + .map(Throwing.function(Mailbox::getIdentifier).sneakyThrow()) + .map(id -> MDCBuilder.create().addContext(MAILBOX, id)) + .orElse(MDCBuilder.create()); + } + + static MDCBuilder forRequest(Request request) { + return Optional.ofNullable(request.getArgument()) + .map(argument -> MDCBuilder.create().addContext(ARGUMENT, argument)) + .orElse(MDCBuilder.create()); + } + + static MDCBuilder withSession(POP3Session session) { + return MDCBuilder.create() + .addContext(withMailbox(session)) + .addContext(STATE, session.getHandlerState()); + } +} diff --git a/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/NoopCmdHandler.java b/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/NoopCmdHandler.java index 11012c6..747797f 100644 --- a/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/NoopCmdHandler.java +++ b/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/NoopCmdHandler.java @@ -26,6 +26,7 @@ import org.apache.james.protocols.api.Response; import org.apache.james.protocols.api.handler.CommandHandler; import org.apache.james.protocols.pop3.POP3Response; import org.apache.james.protocols.pop3.POP3Session; +import org.apache.james.util.MDCBuilder; import com.google.common.collect.ImmutableSet; @@ -42,6 +43,14 @@ public class NoopCmdHandler implements CommandHandler<POP3Session> { */ @Override public Response onCommand(POP3Session session, Request request) { + return MDCBuilder.withMdc( + MDCBuilder.create() + .addContext(MDCBuilder.ACTION, "NOOP") + .addContext(MDCConstants.withSession(session)), + () -> noop(session)); + } + + private Response noop(POP3Session session) { if (session.getHandlerState() == POP3Session.TRANSACTION) { return POP3Response.OK; } else { diff --git a/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/QuitCmdHandler.java b/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/QuitCmdHandler.java index 345dd0b..b213ac8 100644 --- a/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/QuitCmdHandler.java +++ b/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/QuitCmdHandler.java @@ -30,6 +30,7 @@ import org.apache.james.protocols.api.handler.CommandHandler; import org.apache.james.protocols.pop3.POP3Response; import org.apache.james.protocols.pop3.POP3Session; import org.apache.james.protocols.pop3.mailbox.Mailbox; +import org.apache.james.util.MDCBuilder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -61,6 +62,14 @@ public class QuitCmdHandler implements CommandHandler<POP3Session> { */ @Override public Response onCommand(POP3Session session, Request request) { + return MDCBuilder.withMdc( + MDCBuilder.create() + .addContext(MDCBuilder.ACTION, "QUIT") + .addContext(MDCConstants.withSession(session)), + () -> quit(session)); + } + + private Response quit(POP3Session session) { Response response = null; if (session.getHandlerState() == POP3Session.AUTHENTICATION_READY || session.getHandlerState() == POP3Session.AUTHENTICATION_USERSET) { return SIGN_OFF; diff --git a/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/RetrCmdHandler.java b/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/RetrCmdHandler.java index 99d050c..0167317 100644 --- a/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/RetrCmdHandler.java +++ b/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/RetrCmdHandler.java @@ -32,6 +32,7 @@ import org.apache.james.protocols.pop3.POP3Response; import org.apache.james.protocols.pop3.POP3Session; import org.apache.james.protocols.pop3.POP3StreamResponse; import org.apache.james.protocols.pop3.mailbox.MessageMetaData; +import org.apache.james.util.MDCBuilder; import com.google.common.annotations.VisibleForTesting; import com.google.common.collect.ImmutableList; @@ -54,6 +55,15 @@ public class RetrCmdHandler implements CommandHandler<POP3Session> { @Override @SuppressWarnings("unchecked") public Response onCommand(POP3Session session, Request request) { + return MDCBuilder.withMdc( + MDCBuilder.create() + .addContext(MDCBuilder.ACTION, "RETR") + .addContext(MDCConstants.withSession(session)) + .addContext(MDCConstants.forRequest(request)), + () -> retr(session, request)); + } + + private Response retr(POP3Session session, Request request) { POP3Response response = null; String parameters = request.getArgument(); if (session.getHandlerState() == POP3Session.TRANSACTION) { diff --git a/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/RsetCmdHandler.java b/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/RsetCmdHandler.java index f88ec0b..87f2aa1 100644 --- a/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/RsetCmdHandler.java +++ b/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/RsetCmdHandler.java @@ -31,6 +31,7 @@ import org.apache.james.protocols.api.handler.CommandHandler; import org.apache.james.protocols.pop3.POP3Response; import org.apache.james.protocols.pop3.POP3Session; import org.apache.james.protocols.pop3.mailbox.MessageMetaData; +import org.apache.james.util.MDCBuilder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -49,13 +50,21 @@ public class RsetCmdHandler implements CommandHandler<POP3Session> { */ @Override public Response onCommand(POP3Session session, Request request) { + return MDCBuilder.withMdc( + MDCBuilder.create() + .addContext(MDCBuilder.ACTION, "RSET") + .addContext(MDCConstants.withSession(session)), + () -> rset(session)); + + } + + private Response rset(POP3Session session) { if (session.getHandlerState() == POP3Session.TRANSACTION) { stat(session); return POP3Response.OK; } else { return POP3Response.ERR; } - } /** diff --git a/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/StatCmdHandler.java b/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/StatCmdHandler.java index f942124..a2fbc74 100644 --- a/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/StatCmdHandler.java +++ b/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/StatCmdHandler.java @@ -30,6 +30,7 @@ import org.apache.james.protocols.api.handler.CommandHandler; import org.apache.james.protocols.pop3.POP3Response; import org.apache.james.protocols.pop3.POP3Session; import org.apache.james.protocols.pop3.mailbox.MessageMetaData; +import org.apache.james.util.MDCBuilder; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; @@ -46,6 +47,14 @@ public class StatCmdHandler implements CommandHandler<POP3Session> { */ @Override public Response onCommand(POP3Session session, Request request) { + return MDCBuilder.withMdc( + MDCBuilder.create() + .addContext(MDCBuilder.ACTION, "STAT") + .addContext(MDCConstants.withSession(session)), + () -> stat(session)); + } + + private Response stat(POP3Session session) { if (session.getHandlerState() == POP3Session.TRANSACTION) { List<MessageMetaData> uidList = session.getAttachment(POP3Session.UID_LIST, State.Transaction).orElse(ImmutableList.of()); diff --git a/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/StlsCmdHandler.java b/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/StlsCmdHandler.java index 28c03180..d84f853 100644 --- a/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/StlsCmdHandler.java +++ b/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/StlsCmdHandler.java @@ -29,6 +29,7 @@ import org.apache.james.protocols.api.handler.CommandHandler; import org.apache.james.protocols.pop3.POP3Response; import org.apache.james.protocols.pop3.POP3Session; import org.apache.james.protocols.pop3.POP3StartTlsResponse; +import org.apache.james.util.MDCBuilder; import com.google.common.collect.ImmutableSet; @@ -45,6 +46,14 @@ public class StlsCmdHandler implements CommandHandler<POP3Session>, CapaCapabili @Override public Response onCommand(POP3Session session, Request request) { + return MDCBuilder.withMdc( + MDCBuilder.create() + .addContext(MDCBuilder.ACTION, "START_TLS") + .addContext(MDCConstants.withSession(session)), + () -> stls(session)); + } + + private Response stls(POP3Session session) { // check if starttls is supported, the state is the right one and it was // not started before if (session.isStartTLSSupported() && session.getHandlerState() == POP3Session.AUTHENTICATION_READY && session.isTLSStarted() == false) { diff --git a/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/TopCmdHandler.java b/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/TopCmdHandler.java index 5931a2b..7ffb13f 100644 --- a/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/TopCmdHandler.java +++ b/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/TopCmdHandler.java @@ -34,6 +34,7 @@ import org.apache.james.protocols.pop3.POP3Response; import org.apache.james.protocols.pop3.POP3Session; import org.apache.james.protocols.pop3.POP3StreamResponse; import org.apache.james.protocols.pop3.mailbox.MessageMetaData; +import org.apache.james.util.MDCBuilder; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; @@ -58,6 +59,15 @@ public class TopCmdHandler extends RetrCmdHandler implements CapaCapability { @SuppressWarnings("unchecked") @Override public Response onCommand(POP3Session session, Request request) { + return MDCBuilder.withMdc( + MDCBuilder.create() + .addContext(MDCBuilder.ACTION, "TOP") + .addContext(MDCConstants.withSession(session)) + .addContext(MDCConstants.forRequest(request)), + () -> top(session, request)); + } + + private Response top(POP3Session session, Request request) { String parameters = request.getArgument(); if (parameters == null) { return SYNTAX_ERROR; @@ -81,13 +91,13 @@ public class TopCmdHandler extends RetrCmdHandler implements CapaCapability { return SYNTAX_ERROR; } try { - + MessageMetaData data = MessageMetaDataUtils.getMetaData(session, num); if (data == null) { StringBuilder responseBuffer = new StringBuilder(64).append("Message (").append(num).append(") does not exist."); return new POP3Response(POP3Response.ERR_RESPONSE, responseBuffer.toString()); } - + List<String> deletedUidList = session.getAttachment(POP3Session.DELETED_UID_LIST, State.Transaction).orElse(ImmutableList.of()); String uid = data.getUid(); @@ -109,7 +119,6 @@ public class TopCmdHandler extends RetrCmdHandler implements CapaCapability { } else { return POP3Response.ERR; } - } @Override diff --git a/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/UidlCmdHandler.java b/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/UidlCmdHandler.java index 4155a65..161934d 100644 --- a/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/UidlCmdHandler.java +++ b/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/UidlCmdHandler.java @@ -32,6 +32,7 @@ import org.apache.james.protocols.api.handler.CommandHandler; import org.apache.james.protocols.pop3.POP3Response; import org.apache.james.protocols.pop3.POP3Session; import org.apache.james.protocols.pop3.mailbox.MessageMetaData; +import org.apache.james.util.MDCBuilder; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; @@ -49,6 +50,15 @@ public class UidlCmdHandler implements CommandHandler<POP3Session>, CapaCapabili */ @Override public Response onCommand(POP3Session session, Request request) { + return MDCBuilder.withMdc( + MDCBuilder.create() + .addContext(MDCBuilder.ACTION, "UIDL") + .addContext(MDCConstants.withSession(session)) + .addContext(MDCConstants.forRequest(request)), + () -> uidl(session, request)); + } + + private Response uidl(POP3Session session, Request request) { POP3Response response = null; String parameters = request.getArgument(); if (session.getHandlerState() == POP3Session.TRANSACTION) { @@ -72,7 +82,7 @@ public class UidlCmdHandler implements CommandHandler<POP3Session>, CapaCapabili int num = 0; try { num = Integer.parseInt(parameters); - + MessageMetaData metadata = MessageMetaDataUtils.getMetaData(session, num); if (metadata == null) { @@ -98,7 +108,7 @@ public class UidlCmdHandler implements CommandHandler<POP3Session>, CapaCapabili } catch (IOException e) { return POP3Response.ERR; } - + } else { return POP3Response.ERR; } diff --git a/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/UnknownCmdHandler.java b/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/UnknownCmdHandler.java index 6193a31..7ec03f4 100644 --- a/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/UnknownCmdHandler.java +++ b/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/UnknownCmdHandler.java @@ -24,17 +24,28 @@ import org.apache.james.protocols.api.Response; import org.apache.james.protocols.api.handler.UnknownCommandHandler; import org.apache.james.protocols.pop3.POP3Response; import org.apache.james.protocols.pop3.POP3Session; +import org.apache.james.util.MDCBuilder; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * Default command handler for handling unknown commands */ public class UnknownCmdHandler extends UnknownCommandHandler<POP3Session> { + private static final Logger LOGGER = LoggerFactory.getLogger(UnknownCmdHandler.class); + /** * Handler method called upon receipt of an unrecognized command. Returns an * error response and logs the command. */ @Override public Response onCommand(POP3Session session, Request request) { + MDCBuilder.withMdc( + MDCBuilder.create() + .addContext(MDCBuilder.ACTION, request.getCommand()) + .addContext(MDCConstants.withSession(session)) + .addContext(MDCConstants.forRequest(request)), + () -> LOGGER.info("Unknown command received")); return POP3Response.ERR; } } diff --git a/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/UserCmdHandler.java b/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/UserCmdHandler.java index c4ded58..fe6e79a 100644 --- a/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/UserCmdHandler.java +++ b/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/UserCmdHandler.java @@ -28,6 +28,7 @@ import org.apache.james.protocols.api.Response; import org.apache.james.protocols.api.handler.CommandHandler; import org.apache.james.protocols.pop3.POP3Response; import org.apache.james.protocols.pop3.POP3Session; +import org.apache.james.util.MDCBuilder; import com.google.common.collect.ImmutableSet; @@ -45,6 +46,15 @@ public class UserCmdHandler implements CommandHandler<POP3Session>, CapaCapabili */ @Override public Response onCommand(POP3Session session, Request request) { + return MDCBuilder.withMdc( + MDCBuilder.create() + .addContext(MDCBuilder.ACTION, "USER") + .addContext(MDCConstants.withSession(session)) + .addContext(MDCConstants.forRequest(request)), + () -> user(session, request)); + } + + private Response user(POP3Session session, Request request) { String parameters = request.getArgument(); if (session.getHandlerState() == POP3Session.AUTHENTICATION_READY && parameters != null) { session.setUsername(Username.of(parameters)); diff --git a/server/protocols/protocols-pop3/src/main/java/org/apache/james/pop3server/core/PassCmdHandler.java b/server/protocols/protocols-pop3/src/main/java/org/apache/james/pop3server/core/PassCmdHandler.java index 47a1945..eb3f944 100644 --- a/server/protocols/protocols-pop3/src/main/java/org/apache/james/pop3server/core/PassCmdHandler.java +++ b/server/protocols/protocols-pop3/src/main/java/org/apache/james/pop3server/core/PassCmdHandler.java @@ -40,9 +40,12 @@ import org.apache.james.protocols.pop3.POP3Response; import org.apache.james.protocols.pop3.POP3Session; import org.apache.james.protocols.pop3.core.AbstractPassCmdHandler; import org.apache.james.protocols.pop3.mailbox.Mailbox; +import org.apache.james.util.MDCBuilder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.github.fge.lambdas.Throwing; + import reactor.core.publisher.Mono; /** @@ -71,6 +74,13 @@ public class PassCmdHandler extends AbstractPassCmdHandler { @Override protected Mailbox auth(POP3Session session, Username username, String password) throws Exception { + return MDCBuilder.withMdc( + MDCBuilder.create() + .addContext(MDCBuilder.USER, username.asString()), + Throwing.supplier(() -> auth(session, password)).sneakyThrow()); + } + + private Mailbox auth(POP3Session session, String password) throws IOException { MailboxSession mSession = null; try { mSession = manager.login(session.getUsername(), password); @@ -93,7 +103,5 @@ public class PassCmdHandler extends AbstractPassCmdHandler { manager.endProcessingRequest(mSession); } } - } - } --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
