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 264f73da547e952c7eba942494acbbb0dcd50dbf
Author: RĂ©mi Kowalski <[email protected]>
AuthorDate: Wed Sep 23 15:52:34 2020 +0200

    JAMES-3387 require accountId to be one of the accounts of the authenticated 
user
    
    and validate it for mailbox/set
---
 .../contract/MailboxSetMethodContract.scala        | 47 ++++++++++++++++++++++
 .../org/apache/james/jmap/mail/MailboxSet.scala    |  4 +-
 .../apache/james/jmap/method/CoreEchoMethod.scala  |  1 +
 .../apache/james/jmap/method/EmailGetMethod.scala  |  6 ++-
 .../james/jmap/method/EmailQueryMethod.scala       |  4 +-
 .../james/jmap/method/MailboxGetMethod.scala       |  4 +-
 .../james/jmap/method/MailboxQueryMethod.scala     |  4 +-
 .../james/jmap/method/MailboxSetMethod.scala       | 22 +++++-----
 .../org/apache/james/jmap/method/Method.scala      | 40 +++++++++++++++++-
 .../jmap/method/VacationResponseGetMethod.scala    |  1 +
 .../jmap/method/VacationResponseSetMethod.scala    |  1 +
 .../apache/james/jmap/routes/JMAPApiRoutes.scala   | 10 +++--
 .../james/jmap/method/CoreEchoMethodTest.scala     |  3 +-
 .../james/jmap/routes/JMAPApiRoutesTest.scala      | 10 ++---
 14 files changed, 127 insertions(+), 30 deletions(-)

diff --git 
a/server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/MailboxSetMethodContract.scala
 
b/server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/MailboxSetMethodContract.scala
index 4434d3f..106194c 100644
--- 
a/server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/MailboxSetMethodContract.scala
+++ 
b/server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/MailboxSetMethodContract.scala
@@ -62,6 +62,53 @@ trait MailboxSetMethodContract {
   def errorInvalidMailboxIdMessage(value: String): String
 
   @Test
+  def mailboxSetShouldFailWhenWrongAccountId(server: GuiceJamesServer): Unit = 
{
+    val request =
+      """
+        |{
+        |   "using": [ "urn:ietf:params:jmap:core", 
"urn:ietf:params:jmap:mail" ],
+        |   "methodCalls": [
+        |       [
+        |           "Mailbox/set",
+        |           {
+        |                "accountId": "unknownAccountId",
+        |                "create": {
+        |                    "C42": {
+        |                      "name": "myMailbox"
+        |                    }
+        |                }
+        |           },
+        |    "c1"
+        |       ]
+        |   ]
+        |}
+        |""".stripMargin
+
+   val response =  `given`
+      .header(ACCEPT.toString, ACCEPT_RFC8621_VERSION_HEADER)
+      .body(request)
+    .when
+      .post
+    .`then`
+      .log().ifValidationFails()
+      .statusCode(SC_OK)
+      .contentType(JSON)
+      .extract
+      .body
+      .asString
+
+    assertThatJson(response).isEqualTo(
+      """{
+        |  "sessionState": "75128aab4b1b",
+        |  "methodResponses": [
+        |    ["error", {
+        |      "type": "accountNotFound"
+        |    }, "c1"]
+        |  ]
+        |}""".stripMargin)
+  }
+
+  @Test
   def updateShouldFailWhenModifyingRole(server: GuiceJamesServer): Unit = {
     val mailboxId: MailboxId = server.getProbe(classOf[MailboxProbeImpl])
       .createMailbox(MailboxPath.forUser(BOB, "INBOX"))
diff --git 
a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/mail/MailboxSet.scala
 
b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/mail/MailboxSet.scala
index 7cf5355..cbd034e 100644
--- 
a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/mail/MailboxSet.scala
+++ 
b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/mail/MailboxSet.scala
@@ -30,7 +30,7 @@ import org.apache.james.jmap.json.MailboxSerializer
 import org.apache.james.jmap.mail.MailboxName.MailboxName
 import org.apache.james.jmap.mail.MailboxPatchObject.MailboxPatchObjectKey
 import org.apache.james.jmap.mail.MailboxSetRequest.{MailboxCreationId, 
UnparsedMailboxId, UnparsedMailboxIdConstraint}
-import org.apache.james.jmap.method.MailboxCreationParseException
+import org.apache.james.jmap.method.{MailboxCreationParseException, 
WithAccountId}
 import org.apache.james.jmap.model.CapabilityIdentifier.CapabilityIdentifier
 import org.apache.james.jmap.model.SetError.{SetErrorDescription, SetErrorType}
 import org.apache.james.jmap.model.State.State
@@ -45,7 +45,7 @@ case class MailboxSetRequest(accountId: AccountId,
                              create: Option[Map[MailboxCreationId, JsObject]],
                              update: Option[Map[UnparsedMailboxId, 
MailboxPatchObject]],
                              destroy: Option[Seq[UnparsedMailboxId]],
-                             onDestroyRemoveEmails: 
Option[RemoveEmailsOnDestroy])
+                             onDestroyRemoveEmails: 
Option[RemoveEmailsOnDestroy]) extends WithAccountId
 
 object MailboxSetRequest {
   type UnparsedMailboxIdConstraint = NonEmpty
diff --git 
a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/CoreEchoMethod.scala
 
b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/CoreEchoMethod.scala
index a7fd705..c956a81 100644
--- 
a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/CoreEchoMethod.scala
+++ 
b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/CoreEchoMethod.scala
@@ -20,6 +20,7 @@ package org.apache.james.jmap.method
 
 
 import eu.timepit.refined.auto._
+import org.apache.james.jmap.http.SessionSupplier
 import org.apache.james.jmap.model.CapabilityIdentifier.CapabilityIdentifier
 import org.apache.james.jmap.model.DefaultCapabilities.CORE_CAPABILITY
 import org.apache.james.jmap.model.Invocation.MethodName
diff --git 
a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/EmailGetMethod.scala
 
b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/EmailGetMethod.scala
index 361a49f..ecc4663 100644
--- 
a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/EmailGetMethod.scala
+++ 
b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/EmailGetMethod.scala
@@ -24,6 +24,7 @@ import eu.timepit.refined.auto._
 import eu.timepit.refined.types.string.NonEmptyString
 import javax.inject.Inject
 import org.apache.james.jmap.api.model.Preview
+import org.apache.james.jmap.http.SessionSupplier
 import org.apache.james.jmap.json.{EmailGetSerializer, ResponseSerializer}
 import org.apache.james.jmap.mail.Email.UnparsedEmailId
 import org.apache.james.jmap.mail.{Email, EmailBodyPart, EmailGetRequest, 
EmailGetResponse, EmailIds, EmailNotFound, EmailView, EmailViewReaderFactory, 
SpecificHeaderRequest}
@@ -82,11 +83,12 @@ class EmailGetMethod @Inject() (readerFactory: 
EmailViewReaderFactory,
                                 messageIdFactory: MessageId.Factory,
                                 zoneIdProvider: ZoneIdProvider,
                                 previewFactory: Preview.Factory,
-                                metricFactory: MetricFactory) extends Method {
+                                metricFactory: MetricFactory,
+                                sessionSupplier: SessionSupplier) extends 
Method {
   override val methodName = MethodName("Email/get")
   override val requiredCapabilities: Capabilities = 
Capabilities(CORE_CAPABILITY, MAIL_CAPABILITY)
 
-  override def process(capabilities: Set[CapabilityIdentifier], invocation: 
Invocation, mailboxSession: MailboxSession, processingContext: 
ProcessingContext): Publisher[(Invocation, ProcessingContext)] =
+  override def process(capabilities: Set[CapabilityIdentifier], invocation: 
Invocation, mailboxSession: MailboxSession, processingContext: 
ProcessingContext, sessionSupplier: SessionSupplier): Publisher[(Invocation, 
ProcessingContext)] =
     metricFactory.decoratePublisherWithTimerMetricLogP99(JMAP_RFC8621_PREFIX + 
methodName.value,
       asEmailGetRequest(invocation.arguments)
         .flatMap(computeResponseInvocation(_, invocation, mailboxSession))
diff --git 
a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/EmailQueryMethod.scala
 
b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/EmailQueryMethod.scala
index 4feb97e..0cf6810 100644
--- 
a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/EmailQueryMethod.scala
+++ 
b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/EmailQueryMethod.scala
@@ -21,6 +21,7 @@ package org.apache.james.jmap.method
 import cats.implicits._
 import eu.timepit.refined.auto._
 import javax.inject.Inject
+import org.apache.james.jmap.http.SessionSupplier
 import org.apache.james.jmap.json.{EmailQuerySerializer, ResponseSerializer}
 import org.apache.james.jmap.mail.{Comparator, EmailQueryRequest, 
EmailQueryResponse, UnsupportedFilterException, 
UnsupportedRequestParameterException, UnsupportedSortException}
 import org.apache.james.jmap.model.CapabilityIdentifier.CapabilityIdentifier
@@ -44,7 +45,8 @@ import scala.jdk.CollectionConverters._
 
 class EmailQueryMethod @Inject() (serializer: EmailQuerySerializer,
                                   mailboxManager: MailboxManager,
-                                  metricFactory: MetricFactory) extends Method 
{
+                                  metricFactory: MetricFactory,
+                                  sessionSupplier: SessionSupplier) extends 
Method {
   override val methodName: MethodName = MethodName("Email/query")
   override val requiredCapabilities: Capabilities = 
Capabilities(CORE_CAPABILITY, MAIL_CAPABILITY)
 
diff --git 
a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MailboxGetMethod.scala
 
b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MailboxGetMethod.scala
index e1a6a57..6e660c8 100644
--- 
a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MailboxGetMethod.scala
+++ 
b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MailboxGetMethod.scala
@@ -21,6 +21,7 @@ package org.apache.james.jmap.method
 
 import eu.timepit.refined.auto._
 import javax.inject.Inject
+import org.apache.james.jmap.http.SessionSupplier
 import org.apache.james.jmap.json.{MailboxSerializer, ResponseSerializer}
 import org.apache.james.jmap.mail.MailboxSetRequest.UnparsedMailboxId
 import org.apache.james.jmap.mail._
@@ -49,7 +50,8 @@ class MailboxGetMethod @Inject() (serializer: 
MailboxSerializer,
                                   quotaFactory : 
QuotaLoaderWithPreloadedDefaultFactory,
                                   mailboxIdFactory: MailboxId.Factory,
                                   mailboxFactory: MailboxFactory,
-                                  metricFactory: MetricFactory) extends Method 
{
+                                  metricFactory: MetricFactory,
+                                  val sessionSupplier: SessionSupplier) 
extends Method {
   override val methodName: MethodName = MethodName("Mailbox/get")
   override val requiredCapabilities: Capabilities = 
Capabilities(CORE_CAPABILITY, MAIL_CAPABILITY)
 
diff --git 
a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MailboxQueryMethod.scala
 
b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MailboxQueryMethod.scala
index 46e9417..268dc1d 100644
--- 
a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MailboxQueryMethod.scala
+++ 
b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MailboxQueryMethod.scala
@@ -20,6 +20,7 @@ package org.apache.james.jmap.method
 
 import eu.timepit.refined.auto._
 import javax.inject.Inject
+import org.apache.james.jmap.http.SessionSupplier
 import org.apache.james.jmap.json.{MailboxQuerySerializer, ResponseSerializer}
 import org.apache.james.jmap.mail.{MailboxQueryRequest, MailboxQueryResponse}
 import org.apache.james.jmap.model.CapabilityIdentifier.CapabilityIdentifier
@@ -35,7 +36,8 @@ import reactor.core.scala.publisher.{SFlux, SMono}
 import reactor.core.scheduler.Schedulers
 
 class MailboxQueryMethod @Inject()(systemMailboxesProvider: 
SystemMailboxesProvider,
-                                   metricFactory: MetricFactory) extends 
Method {
+                                   metricFactory: MetricFactory,
+                                   val sessionSupplier: SessionSupplier) 
extends Method {
   override val methodName = MethodName("Mailbox/query")
   override val requiredCapabilities: Capabilities = 
Capabilities(CORE_CAPABILITY, MAIL_CAPABILITY)
 
diff --git 
a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MailboxSetMethod.scala
 
b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MailboxSetMethod.scala
index 465b22c..dc772c5 100644
--- 
a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MailboxSetMethod.scala
+++ 
b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MailboxSetMethod.scala
@@ -21,6 +21,7 @@ package org.apache.james.jmap.method
 
 import eu.timepit.refined.auto._
 import javax.inject.Inject
+import org.apache.james.jmap.http.SessionSupplier
 import org.apache.james.jmap.json.{MailboxSerializer, ResponseSerializer}
 import org.apache.james.jmap.mail.MailboxSetRequest.{MailboxCreationId, 
UnparsedMailboxId}
 import org.apache.james.jmap.mail.{InvalidPatchException, 
InvalidPropertyException, InvalidUpdateException, IsSubscribed, 
MailboxCreationRequest, MailboxCreationResponse, MailboxPatchObject, 
MailboxRights, MailboxSetError, MailboxSetRequest, MailboxSetResponse, 
MailboxUpdateResponse, NameUpdate, ParentIdUpdate, RemoveEmailsOnDestroy, 
ServerSetPropertyException, SortOrder, TotalEmails, TotalThreads, UnreadEmails, 
UnreadThreads, UnsupportedPropertyUpdatedException, ValidatedMailboxPatchObject}
@@ -147,21 +148,18 @@ class MailboxSetMethod @Inject()(serializer: 
MailboxSerializer,
                                  subscriptionManager: SubscriptionManager,
                                  mailboxIdFactory: MailboxId.Factory,
                                  quotaFactory : 
QuotaLoaderWithPreloadedDefaultFactory,
-                                 metricFactory: MetricFactory) extends Method {
+                                 val metricFactory: MetricFactory,
+                                 val sessionSupplier: SessionSupplier) extends 
MethodRequiringAccountId[MailboxSetRequest] {
   override val methodName: MethodName = MethodName("Mailbox/set")
   override val requiredCapabilities: Capabilities = 
Capabilities(CORE_CAPABILITY, MAIL_CAPABILITY)
 
-  override def process(capabilities: Set[CapabilityIdentifier], invocation: 
Invocation, mailboxSession: MailboxSession, processingContext: 
ProcessingContext): Publisher[(Invocation, ProcessingContext)] = {
-    metricFactory.decoratePublisherWithTimerMetricLogP99(JMAP_RFC8621_PREFIX + 
methodName.value,
-      asMailboxSetRequest(invocation.arguments)
-        .flatMap(mailboxSetRequest => {
-          for {
-            creationResultsWithUpdatedProcessingContext <- 
createMailboxes(mailboxSession, mailboxSetRequest, processingContext)
-            deletionResults <- deleteMailboxes(mailboxSession, 
mailboxSetRequest, processingContext)
-            updateResults <- updateMailboxes(mailboxSession, 
mailboxSetRequest, processingContext, capabilities)
-          } yield (createResponse(capabilities, invocation, mailboxSetRequest, 
creationResultsWithUpdatedProcessingContext._1, deletionResults, 
updateResults), creationResultsWithUpdatedProcessingContext._2)
-        }))
-  }
+  override def doProcess(capabilities: Set[CapabilityIdentifier], invocation: 
Invocation, mailboxSession: MailboxSession, processingContext: 
ProcessingContext, request: MailboxSetRequest): SMono[(Invocation, 
ProcessingContext)] = for {
+    creationResultsWithUpdatedProcessingContext <- 
createMailboxes(mailboxSession, request, processingContext)
+    deletionResults <- deleteMailboxes(mailboxSession, request, 
processingContext)
+    updateResults <- updateMailboxes(mailboxSession, request, 
processingContext, capabilities)
+  } yield (createResponse(capabilities, invocation, request, 
creationResultsWithUpdatedProcessingContext._1, deletionResults, 
updateResults), creationResultsWithUpdatedProcessingContext._2)
+
+  override def getRequest(mailboxSession: MailboxSession, invocation: 
Invocation): SMono[MailboxSetRequest] = 
asMailboxSetRequest(invocation.arguments)
 
   private def updateMailboxes(mailboxSession: MailboxSession,
                               mailboxSetRequest: MailboxSetRequest,
diff --git 
a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/Method.scala
 
b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/Method.scala
index e6dde8c..f4a40a5 100644
--- 
a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/Method.scala
+++ 
b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/Method.scala
@@ -19,12 +19,16 @@
 package org.apache.james.jmap.method
 
 
+import org.apache.james.jmap.http.SessionSupplier
 import org.apache.james.jmap.model.CapabilityIdentifier.CapabilityIdentifier
 import org.apache.james.jmap.model.Invocation.MethodName
-import org.apache.james.jmap.model.{Capabilities, Invocation}
+import org.apache.james.jmap.model.{AccountId, Capabilities, ErrorCode, 
Invocation, Session}
 import org.apache.james.jmap.routes.ProcessingContext
 import org.apache.james.mailbox.MailboxSession
+import org.apache.james.mailbox.exception.MailboxNotFoundException
+import org.apache.james.metrics.api.MetricFactory
 import org.reactivestreams.Publisher
+import reactor.core.scala.publisher.SMono
 
 trait Method {
   val JMAP_RFC8621_PREFIX: String = "JMAP-RFC8621-"
@@ -36,3 +40,37 @@ trait Method {
   def process(capabilities: Set[CapabilityIdentifier], invocation: Invocation, 
mailboxSession: MailboxSession, processingContext: ProcessingContext): 
Publisher[(Invocation, ProcessingContext)]
 }
 
+trait WithAccountId {
+  def accountId: AccountId
+}
+trait MethodRequiringAccountId[REQUEST <: WithAccountId] extends Method {
+  def metricFactory: MetricFactory
+  def sessionSupplier: SessionSupplier
+
+  override def process(capabilities: Set[CapabilityIdentifier], invocation: 
Invocation, mailboxSession: MailboxSession, processingContext: 
ProcessingContext): Publisher[(Invocation, ProcessingContext)] = {
+    val result = (for {
+      request <- getRequest(mailboxSession, invocation)
+      response <- validateAccountId(request.accountId, mailboxSession, 
sessionSupplier, invocation).flatMap{
+        case Right(_) =>  doProcess(capabilities, invocation, mailboxSession, 
processingContext, request)
+        case Left(invocation) => SMono.just((invocation, processingContext))
+      }
+    } yield response)
+      .onErrorResume {
+      case e: IllegalArgumentException => 
SMono.just((Invocation.error(ErrorCode.InvalidArguments, e.getMessage, 
invocation.methodCallId), processingContext))
+      case e: Throwable => SMono.raiseError(e)
+    }
+
+    metricFactory.decoratePublisherWithTimerMetricLogP99(JMAP_RFC8621_PREFIX + 
methodName.value, result)
+  }
+
+  private def validateAccountId(accountId: AccountId, mailboxSession: 
MailboxSession, sessionSupplier: SessionSupplier, invocation: Invocation): 
SMono[Either[Invocation, Session]] = {
+    sessionSupplier.generate(mailboxSession.getUser)
+      .filter(session => session.accounts.map(_.accountId).contains(accountId))
+      .map(session => Right[Invocation, 
Session](session).asInstanceOf[Either[Invocation, Session]])
+      .switchIfEmpty(SMono.just(Left[Invocation, 
Session](Invocation.error(ErrorCode.AccountNotFound, invocation.methodCallId))))
+  }
+
+  def doProcess(capabilities: Set[CapabilityIdentifier], invocation: 
Invocation, mailboxSession: MailboxSession, processingContext: 
ProcessingContext, request: REQUEST): SMono[(Invocation, ProcessingContext)]
+
+  def getRequest(mailboxSession: MailboxSession, invocation: Invocation): 
SMono[REQUEST]
+}
diff --git 
a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/VacationResponseGetMethod.scala
 
b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/VacationResponseGetMethod.scala
index 4652add..a3c3e8b 100644
--- 
a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/VacationResponseGetMethod.scala
+++ 
b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/VacationResponseGetMethod.scala
@@ -22,6 +22,7 @@ package org.apache.james.jmap.method
 import eu.timepit.refined.auto._
 import javax.inject.Inject
 import org.apache.james.jmap.api.vacation.{VacationRepository, AccountId => 
JavaAccountId}
+import org.apache.james.jmap.http.SessionSupplier
 import org.apache.james.jmap.json.{ResponseSerializer, VacationSerializer}
 import org.apache.james.jmap.mail.VacationResponse.UnparsedVacationResponseId
 import org.apache.james.jmap.mail.{VacationResponse, 
VacationResponseGetRequest, VacationResponseGetResponse, 
VacationResponseNotFound}
diff --git 
a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/VacationResponseSetMethod.scala
 
b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/VacationResponseSetMethod.scala
index bd34d88..4b24625 100644
--- 
a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/VacationResponseSetMethod.scala
+++ 
b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/VacationResponseSetMethod.scala
@@ -22,6 +22,7 @@ package org.apache.james.jmap.method
 import eu.timepit.refined.auto._
 import javax.inject.Inject
 import org.apache.james.jmap.api.vacation.{AccountId, VacationPatch, 
VacationRepository}
+import org.apache.james.jmap.http.SessionSupplier
 import org.apache.james.jmap.json.{ResponseSerializer, VacationSerializer}
 import 
org.apache.james.jmap.method.VacationResponseSetMethod.VACATION_RESPONSE_PATCH_OBJECT_KEY
 import org.apache.james.jmap.model.CapabilityIdentifier.CapabilityIdentifier
diff --git 
a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/routes/JMAPApiRoutes.scala
 
b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/routes/JMAPApiRoutes.scala
index 6833db8..ab870e1 100644
--- 
a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/routes/JMAPApiRoutes.scala
+++ 
b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/routes/JMAPApiRoutes.scala
@@ -33,7 +33,7 @@ import org.apache.james.jmap.HttpConstants.JSON_CONTENT_TYPE
 import org.apache.james.jmap.JMAPUrls.JMAP
 import org.apache.james.jmap.exceptions.UnauthorizedException
 import org.apache.james.jmap.http.rfc8621.InjectionKeys
-import org.apache.james.jmap.http.{Authenticator, MailboxesProvisioner, 
UserProvisioning}
+import org.apache.james.jmap.http.{Authenticator, MailboxesProvisioner, 
SessionSupplier, UserProvisioning}
 import org.apache.james.jmap.json.ResponseSerializer
 import org.apache.james.jmap.method.Method
 import org.apache.james.jmap.model.CapabilityIdentifier.CapabilityIdentifier
@@ -58,7 +58,8 @@ object JMAPApiRoutes {
 class JMAPApiRoutes (val authenticator: Authenticator,
                      userProvisioner: UserProvisioning,
                      mailboxesProvisioner: MailboxesProvisioner,
-                     methods: Set[Method]) extends JMAPRoutes {
+                     methods: Set[Method],
+                     sessionSupplier: SessionSupplier) extends JMAPRoutes {
 
   private val methodsByName: Map[MethodName, Method] = methods.map(method => 
method.methodName -> method).toMap
 
@@ -66,8 +67,9 @@ class JMAPApiRoutes (val authenticator: Authenticator,
   def this(@Named(InjectionKeys.RFC_8621) authenticator: Authenticator,
            userProvisioner: UserProvisioning,
            mailboxesProvisioner: MailboxesProvisioner,
-           javaMethods: java.util.Set[Method]) {
-    this(authenticator, userProvisioner, mailboxesProvisioner, 
javaMethods.asScala.toSet)
+           javaMethods: java.util.Set[Method],
+           sessionSupplier: SessionSupplier) {
+    this(authenticator, userProvisioner, mailboxesProvisioner, 
javaMethods.asScala.toSet, sessionSupplier)
   }
 
   override def routes(): stream.Stream[JMAPRoute] = Stream.of(
diff --git 
a/server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/method/CoreEchoMethodTest.scala
 
b/server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/method/CoreEchoMethodTest.scala
index ff24174..77da9e6 100644
--- 
a/server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/method/CoreEchoMethodTest.scala
+++ 
b/server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/method/CoreEchoMethodTest.scala
@@ -18,9 +18,10 @@
  * ***************************************************************/
 package org.apache.james.jmap.method
 
+import org.apache.james.jmap.http.SessionSupplier
 import org.apache.james.jmap.json.Fixture.{invocation1, invocation2}
 import org.apache.james.jmap.model.CapabilityIdentifier.CapabilityIdentifier
-import org.apache.james.jmap.model.{CapabilityIdentifier, Invocation}
+import org.apache.james.jmap.model.{CapabilityIdentifier, Invocation, 
JmapRfc8621Configuration}
 import org.apache.james.jmap.routes.ProcessingContext
 import org.apache.james.mailbox.MailboxSession
 import org.mockito.Mockito.mock
diff --git 
a/server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/routes/JMAPApiRoutesTest.scala
 
b/server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/routes/JMAPApiRoutesTest.scala
index 069c3d6..7e5298f 100644
--- 
a/server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/routes/JMAPApiRoutesTest.scala
+++ 
b/server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/routes/JMAPApiRoutesTest.scala
@@ -36,12 +36,12 @@ import org.apache.james.dnsservice.api.DNSService
 import org.apache.james.domainlist.memory.MemoryDomainList
 import org.apache.james.jmap.JMAPUrls.JMAP
 import org.apache.james.jmap._
-import org.apache.james.jmap.http.{Authenticator, BasicAuthenticationStrategy, 
MailboxesProvisioner, UserProvisioning}
+import org.apache.james.jmap.http.{Authenticator, BasicAuthenticationStrategy, 
MailboxesProvisioner, SessionSupplier, UserProvisioning}
 import org.apache.james.jmap.method.{CoreEchoMethod, Method}
 import org.apache.james.jmap.model.CapabilityIdentifier.CapabilityIdentifier
 import org.apache.james.jmap.model.DefaultCapabilities.CORE_CAPABILITY
 import org.apache.james.jmap.model.Invocation.MethodName
-import org.apache.james.jmap.model.{Capabilities, RequestLevelErrorType}
+import org.apache.james.jmap.model.{Capabilities, JmapRfc8621Configuration, 
RequestLevelErrorType}
 import org.apache.james.jmap.routes.JMAPApiRoutesTest._
 import org.apache.james.mailbox.extension.PreDeletionHook
 import org.apache.james.mailbox.inmemory.{InMemoryMailboxManager, 
MemoryMailboxManagerProvider}
@@ -76,10 +76,10 @@ object JMAPApiRoutesTest {
   private val userProvisionner: UserProvisioning = new 
UserProvisioning(usersRepository, new RecordingMetricFactory)
   private val subscriptionManager: StoreSubscriptionManager = new 
StoreSubscriptionManager(mailboxManager.getMapperFactory)
   private val mailboxesProvisioner: MailboxesProvisioner = new 
MailboxesProvisioner(mailboxManager, subscriptionManager, new 
RecordingMetricFactory)
-
+  private val sessionSupplier: SessionSupplier = new 
SessionSupplier(JmapRfc8621Configuration(JmapRfc8621Configuration.LOCALHOST_URL_PREFIX))
   private val JMAP_METHODS: Set[Method] = Set(new CoreEchoMethod)
 
-  private val JMAP_API_ROUTE: JMAPApiRoutes = new JMAPApiRoutes(AUTHENTICATOR, 
userProvisionner, mailboxesProvisioner, JMAP_METHODS)
+  private val JMAP_API_ROUTE: JMAPApiRoutes = new JMAPApiRoutes(AUTHENTICATOR, 
userProvisionner, mailboxesProvisioner, JMAP_METHODS, sessionSupplier)
   private val ROUTES_HANDLER: ImmutableSet[JMAPRoutesHandler] = 
ImmutableSet.of(new JMAPRoutesHandler(Version.RFC8621, JMAP_API_ROUTE))
 
   private val userBase64String: String = 
Base64.getEncoder.encodeToString("user1:password".getBytes(StandardCharsets.UTF_8))
@@ -443,7 +443,7 @@ class JMAPApiRoutesTest extends AnyFlatSpec with 
BeforeAndAfter with Matchers {
     
when(mockCoreEchoMethod.requiredCapabilities).thenReturn(Capabilities(CORE_CAPABILITY))
 
     val methods: Set[Method] = Set(mockCoreEchoMethod)
-    val apiRoute: JMAPApiRoutes = new JMAPApiRoutes(AUTHENTICATOR, 
userProvisionner, mailboxesProvisioner, methods)
+    val apiRoute: JMAPApiRoutes = new JMAPApiRoutes(AUTHENTICATOR, 
userProvisionner, mailboxesProvisioner, methods, sessionSupplier)
     val routesHandler: ImmutableSet[JMAPRoutesHandler] = ImmutableSet.of(new 
JMAPRoutesHandler(Version.RFC8621, apiRoute))
 
     val versionParser: VersionParser = new VersionParser(SUPPORTED_VERSIONS)


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

Reply via email to