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

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

commit 779a1c26078aac647a927904306994660897a852
Author: Rene Cordier <[email protected]>
AuthorDate: Fri Jan 3 11:08:48 2025 +0700

    fixup! [ENHANCEMENT] ip and x-forwarded-for im JMAP logging context
---
 .../java/org/apache/james/util/ReactorUtils.java   |  2 +-
 .../jmap/method/DelegateSetCreatePerformer.scala   | 17 +++---
 .../jmap/method/DelegateSetDeletePerformer.scala   | 18 +++---
 .../method/DelegatedAccountDeletePerformer.scala   | 17 +++---
 .../jmap/method/EmailSetDeletePerformer.scala      | 18 +++---
 .../jmap/method/EmailSubmissionSetMethod.scala     | 68 ++++++++++------------
 .../jmap/method/MailboxSetUpdatePerformer.scala    | 23 ++++----
 7 files changed, 71 insertions(+), 92 deletions(-)

diff --git 
a/server/container/util/src/main/java/org/apache/james/util/ReactorUtils.java 
b/server/container/util/src/main/java/org/apache/james/util/ReactorUtils.java
index beb2c0dc5e..8c26be6382 100644
--- 
a/server/container/util/src/main/java/org/apache/james/util/ReactorUtils.java
+++ 
b/server/container/util/src/main/java/org/apache/james/util/ReactorUtils.java
@@ -194,7 +194,7 @@ public class ReactorUtils {
         return signal -> logWithContext(logStatement, signal.getContextView());
     }
 
-    public static void logWithContext(Runnable logStatement, ContextView 
contextView) {
+    private static void logWithContext(Runnable logStatement, ContextView 
contextView) {
         try (Closeable mdc = retrieveMDCBuilder(contextView).build()) {
             logStatement.run();
         } catch (IOException e) {
diff --git 
a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/DelegateSetCreatePerformer.scala
 
b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/DelegateSetCreatePerformer.scala
index da3ff86305..a549dcd357 100644
--- 
a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/DelegateSetCreatePerformer.scala
+++ 
b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/DelegateSetCreatePerformer.scala
@@ -98,16 +98,13 @@ class DelegateSetCreatePerformer @Inject()(delegationStore: 
DelegationStore,
     SMono.fromPublisher(usersRepository.containsReactive(request.username))
       .filter(bool => bool)
       .flatMap(_ => 
SMono.fromPublisher(delegationStore.addAuthorizedUser(mailboxSession.getUser, 
request.username))
-        .subscriberContext(context => {
-          ReactorUtils.logWithContext(() => AuditTrail.entry
-            .username(() => mailboxSession.getUser.asString())
-            .protocol("JMAP")
-            .action("DelegateSet/create")
-            .parameters(() => ImmutableMap.of("delegator", 
mailboxSession.getUser.asString(),
-              "delegatee", request.username.asString()))
-            .log("Delegation added."), context)
-          context
-        })
+        .doOnSuccess(_ => ReactorUtils.logAsMono(() => AuditTrail.entry
+          .username(() => mailboxSession.getUser.asString())
+          .protocol("JMAP")
+          .action("DelegateSet/create")
+          .parameters(() => ImmutableMap.of("delegator", 
mailboxSession.getUser.asString(),
+            "delegatee", request.username.asString()))
+          .log("Delegation added.")))
         .`then`(SMono.just[CreationResult](CreationSuccess(delegateCreationId, 
evaluateCreationResponse(request, mailboxSession))))
         .onErrorResume(e => 
SMono.just[CreationResult](CreationFailure(delegateCreationId, e))))
       
.switchIfEmpty(SMono.just[CreationResult](CreationFailure(delegateCreationId, 
new UserDoesNotExistException(request.username))))
diff --git 
a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/DelegateSetDeletePerformer.scala
 
b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/DelegateSetDeletePerformer.scala
index cf8487366c..aa966b0044 100644
--- 
a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/DelegateSetDeletePerformer.scala
+++ 
b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/DelegateSetDeletePerformer.scala
@@ -80,16 +80,12 @@ class DelegateSetDeletePerformer @Inject()(delegationStore: 
DelegationStore) {
           .filter(authorizedUser => DelegationId.from(baseUser, 
authorizedUser).equals(id))
           .next()
           .flatMap(authorizedUser => 
SMono(delegationStore.removeAuthorizedUser(baseUser, authorizedUser))
-
-            .subscriberContext(context => {
-              ReactorUtils.logWithContext(() => AuditTrail.entry
-                .username(() => baseUser.asString())
-                .protocol("JMAP")
-                .action("DelegateSet/destroy")
-                .parameters(() => ImmutableMap.of("delegator", 
baseUser.asString(),
-                  "delegatee", authorizedUser.asString()))
-                .log("Delegation removed."), context)
-              context
-            }))
+            .doOnSuccess(_ => ReactorUtils.logAsMono(() => AuditTrail.entry
+              .username(() => baseUser.asString())
+              .protocol("JMAP")
+              .action("DelegateSet/destroy")
+              .parameters(() => ImmutableMap.of("delegator", 
baseUser.asString(),
+                "delegatee", authorizedUser.asString()))
+              .log("Delegation removed."))))
           
.`then`(SMono.just[DelegateDeletionResult](DelegateDeletionSuccess(id))))
 }
diff --git 
a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/DelegatedAccountDeletePerformer.scala
 
b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/DelegatedAccountDeletePerformer.scala
index 149fceaabf..d40aa7c4ac 100644
--- 
a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/DelegatedAccountDeletePerformer.scala
+++ 
b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/DelegatedAccountDeletePerformer.scala
@@ -80,15 +80,12 @@ class DelegatedAccountDeletePerformer 
@Inject()(delegationStore: DelegationStore
           .filter(delegatedUser => DelegationId.from(delegatedUser, 
baseUser).equals(id))
           .next()
           .flatMap(delegatedUser => 
SMono(delegationStore.removeDelegatedUser(baseUser, delegatedUser))
-            .subscriberContext(context => {
-              ReactorUtils.logWithContext(() => AuditTrail.entry
-                .username(() => baseUser.asString())
-                .protocol("JMAP")
-                .action("DelegatedAccountSet/destroy")
-                .parameters(() => ImmutableMap.of("delegator", 
delegatedUser.asString(),
-                  "delegatee", baseUser.asString()))
-                .log("Delegation removed."), context)
-              context
-            }))
+            .doOnSuccess(_ => ReactorUtils.logAsMono(() => AuditTrail.entry
+              .username(() => baseUser.asString())
+              .protocol("JMAP")
+              .action("DelegatedAccountSet/destroy")
+              .parameters(() => ImmutableMap.of("delegator", 
delegatedUser.asString(),
+                "delegatee", baseUser.asString()))
+              .log("Delegation removed."))))
           
.`then`(SMono.just[DelegatedAccountDeletionResult](DelegatedAccountDeletionSuccess(id))))
 }
\ No newline at end of file
diff --git 
a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/EmailSetDeletePerformer.scala
 
b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/EmailSetDeletePerformer.scala
index 72e8d56d18..e62732a1f3 100644
--- 
a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/EmailSetDeletePerformer.scala
+++ 
b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/EmailSetDeletePerformer.scala
@@ -28,8 +28,9 @@ import org.apache.james.jmap.mail.{DestroyIds, EmailSet, 
EmailSetRequest, Unpars
 import org.apache.james.jmap.method.EmailSetDeletePerformer.{DestroyFailure, 
DestroyResult, DestroyResults}
 import org.apache.james.mailbox.model.{DeleteResult, MessageId}
 import org.apache.james.mailbox.{MailboxSession, MessageIdManager}
-import org.apache.james.util.AuditTrail
+import org.apache.james.util.{AuditTrail, ReactorUtils}
 import org.slf4j.LoggerFactory
+import reactor.core.publisher.Mono
 import reactor.core.scala.publisher.SMono
 
 import scala.jdk.CollectionConverters._
@@ -97,10 +98,7 @@ class EmailSetDeletePerformer @Inject()(messageIdManager: 
MessageIdManager,
       }
 
       SMono(messageIdManager.delete(messageIds.toSet.asJava, mailboxSession))
-        .subscriberContext(context => {
-          auditTrail(messageIds, mailboxSession)
-          context
-        })
+        .doOnSuccess(auditTrail(_, mailboxSession))
         .map(DestroyResult.from)
         .onErrorResume(e => SMono.just(messageIds.map(id => 
DestroyFailure(EmailSet.asUnparsed(id), e))))
         .map(_ ++ parsingErrors)
@@ -110,16 +108,16 @@ class EmailSetDeletePerformer @Inject()(messageIdManager: 
MessageIdManager,
     }
   }
 
-  private def auditTrail(deleteResult: Seq[MessageId], mailboxSession: 
MailboxSession): Unit =
-    if (deleteResult.nonEmpty) {
-      AuditTrail.entry
+  private def auditTrail(deleteResult: DeleteResult, mailboxSession: 
MailboxSession): Unit =
+    if (!deleteResult.getDestroyed.isEmpty) {
+      ReactorUtils.logAsMono(() => AuditTrail.entry
         .username(() => mailboxSession.getUser.asString())
         .protocol("JMAP")
         .action("Email/set destroy")
-        .parameters(() => ImmutableMap.of("messageIds", 
StringUtils.join(deleteResult),
+        .parameters(() => ImmutableMap.of("messageIds", 
StringUtils.join(deleteResult.getDestroyed),
           "loggedInUser", mailboxSession.getLoggedInUser.toScala
             .map(_.asString())
             .getOrElse("")))
-        .log("Mails deleted.")
+        .log("Mails deleted."))
     }
 }
diff --git 
a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/EmailSubmissionSetMethod.scala
 
b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/EmailSubmissionSetMethod.scala
index d5c5939e58..b58b5f2b73 100644
--- 
a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/EmailSubmissionSetMethod.scala
+++ 
b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/EmailSubmissionSetMethod.scala
@@ -298,44 +298,38 @@ class EmailSubmissionSetMethod @Inject()(serializer: 
EmailSubmissionSetSerialize
   private def enqueue(mail: Mail, delay: Duration, mailboxSession: 
MailboxSession): SMono[Unit] =
     (delay match {
       case d if d.isNegative || d.isZero => SMono(queue.enqueueReactive(mail))
-        .subscriberContext(context => {
-          ReactorUtils.logWithContext(() => AuditTrail.entry
-            .username(() => mailboxSession.getUser.asString())
-            .protocol("JMAP")
-            .action("EmailSubmission")
-            .parameters(() => ImmutableMap.of("mailId", mail.getName,
-              "mimeMessageId", Option(mail.getMessage)
-                .flatMap(message => Option(message.getMessageID))
-                .getOrElse(""),
-              "sender", mail.getMaybeSender.asString,
-              "recipients", StringUtils.join(mail.getRecipients),
-              "size", mail.getMessageSize.toString,
-              "loggedInUser", mailboxSession.getLoggedInUser.toScala
-                .map(_.asString())
-                .getOrElse("")))
-            .log("JMAP mail spooled."), context)
-          context
-        })
+        .doOnSuccess(_ => ReactorUtils.logAsMono(() => AuditTrail.entry
+          .username(() => mailboxSession.getUser.asString())
+          .protocol("JMAP")
+          .action("EmailSubmission")
+          .parameters(() => ImmutableMap.of("mailId", mail.getName,
+            "mimeMessageId", Option(mail.getMessage)
+              .flatMap(message => Option(message.getMessageID))
+              .getOrElse(""),
+            "sender", mail.getMaybeSender.asString,
+            "recipients", StringUtils.join(mail.getRecipients),
+            "size", mail.getMessageSize.toString,
+            "loggedInUser", mailboxSession.getLoggedInUser.toScala
+              .map(_.asString())
+              .getOrElse("")))
+          .log("JMAP mail spooled.")))
       case _ => SMono(queue.enqueueReactive(mail, delay))
-        .subscriberContext(context => {
-          ReactorUtils.logWithContext(() => AuditTrail.entry
-            .username(() => mailboxSession.getUser.asString())
-            .protocol("JMAP")
-            .action("EmailSubmission")
-            .parameters(() => ImmutableMap.of("mailId", mail.getName,
-              "mimeMessageId", Option(mail.getMessage)
-                .flatMap(message => Option(message.getMessageID))
-                .getOrElse(""),
-              "size", mail.getMessageSize.toString,
-              "sender", mail.getMaybeSender.asString,
-              "recipients", StringUtils.join(mail.getRecipients),
-              "holdFor", delay.toString,
-              "loggedInUser", mailboxSession.getLoggedInUser.toScala
-                .map(_.asString())
-                .getOrElse("")))
-            .log("JMAP mail spooled."), context)
-          context
-        })
+        .doOnSuccess(_ => ReactorUtils.logAsMono(() => AuditTrail.entry
+          .username(() => mailboxSession.getUser.asString())
+          .protocol("JMAP")
+          .action("EmailSubmission")
+          .parameters(() => ImmutableMap.of("mailId", mail.getName,
+            "mimeMessageId", Option(mail.getMessage)
+              .flatMap(message => Option(message.getMessageID))
+              .getOrElse(""),
+            "size", mail.getMessageSize.toString,
+            "sender", mail.getMaybeSender.asString,
+            "recipients", StringUtils.join(mail.getRecipients),
+            "holdFor", delay.toString,
+            "loggedInUser", mailboxSession.getLoggedInUser.toScala
+              .map(_.asString())
+              .getOrElse("")))
+          .log("JMAP mail spooled.")))
     }).`then`(SMono.fromCallable(() => 
LifecycleUtil.dispose(mail)).subscribeOn(Schedulers.boundedElastic()))
 
   private def retrieveDelay(mailParameters: Option[Map[ParameterName, 
Option[ParameterValue]]]): Try[Duration] =
diff --git 
a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MailboxSetUpdatePerformer.scala
 
b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MailboxSetUpdatePerformer.scala
index 3a4c8b0697..0b6d3dd166 100644
--- 
a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MailboxSetUpdatePerformer.scala
+++ 
b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MailboxSetUpdatePerformer.scala
@@ -251,19 +251,16 @@ class MailboxSetUpdatePerformer @Inject()(serializer: 
MailboxSerializer,
 
     val partialUpdatesOperation: SMono[Unit] = 
SFlux.fromIterable(validatedPatch.rightsPartialUpdates)
       .flatMap(partialUpdate => SMono.fromCallable(() => 
mailboxManager.applyRightsCommand(mailboxId, partialUpdate.asACLCommand(), 
mailboxSession))
-        .subscriberContext(context => {
-          ReactorUtils.logWithContext(() => AuditTrail.entry
-            .username(() => mailboxSession.getUser.asString())
-            .protocol("JMAP")
-            .action("Mailbox/set update")
-            .parameters(() => ImmutableMap.of("loggedInUser", 
mailboxSession.getLoggedInUser.toScala.map(_.asString()).getOrElse(""),
-              "delegator", mailboxSession.getUser.asString(),
-              "delegatee", partialUpdate.entryKey.getName,
-              "mailboxId", mailboxId.serialize(),
-              "rights", partialUpdate.rights.asJava.serialize()))
-            .log("JMAP mailbox shared."), context)
-          context
-        }),
+        .doOnSuccess(_ => ReactorUtils.logAsMono(() => AuditTrail.entry
+          .username(() => mailboxSession.getUser.asString())
+          .protocol("JMAP")
+          .action("Mailbox/set update")
+          .parameters(() => ImmutableMap.of("loggedInUser", 
mailboxSession.getLoggedInUser.toScala.map(_.asString()).getOrElse(""),
+            "delegator", mailboxSession.getUser.asString(),
+            "delegatee", partialUpdate.entryKey.getName,
+            "mailboxId", mailboxId.serialize(),
+            "rights", partialUpdate.rights.asJava.serialize()))
+          .log("JMAP mailbox shared."))),
         maxConcurrency = 5)
       .`then`()
 


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to