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 0551c7410d3405eca755cf34c8b8538a29476b71 Author: Rémi KOWALSKI <[email protected]> AuthorDate: Tue Jun 30 17:07:24 2020 +0200 JAMES-3096 refactor default capabilities --- .../apache/james/jmap/http/SessionSupplier.scala | 32 +++------------ .../Capabilities.scala} | 45 +++++----------------- .../org/apache/james/jmap/model/Session.scala | 2 - 3 files changed, 15 insertions(+), 64 deletions(-) diff --git a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/http/SessionSupplier.scala b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/http/SessionSupplier.scala index 231617a..191480a 100644 --- a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/http/SessionSupplier.scala +++ b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/http/SessionSupplier.scala @@ -21,35 +21,13 @@ package org.apache.james.jmap.http import java.net.URL -import eu.timepit.refined.auto._ import org.apache.james.core.Username -import org.apache.james.jmap.http.SessionSupplier.{CORE_CAPABILITY, HARD_CODED_URL_PREFIX, MAIL_CAPABILITY} +import org.apache.james.jmap.http.SessionSupplier.HARD_CODED_URL_PREFIX import org.apache.james.jmap.model.CapabilityIdentifier.CapabilityIdentifier import org.apache.james.jmap.model._ import reactor.core.scala.publisher.SMono object SessionSupplier { - private val CORE_CAPABILITY = CoreCapability( - properties = CoreCapabilityProperties( - MaxSizeUpload(10_000_000L), - MaxConcurrentUpload(4L), - MaxSizeRequest(10_000_000L), - MaxConcurrentRequests(4L), - MaxCallsInRequest(16L), - MaxObjectsInGet(500L), - MaxObjectsInSet(500L), - collationAlgorithms = List("i;unicode-casemap"))) - - private val MAIL_CAPABILITY = MailCapability( - properties = MailCapabilityProperties( - MaxMailboxesPerEmail(Some(10_000_000L)), - MaxMailboxDepth(None), - MaxSizeMailboxName(200L), - MaxSizeAttachmentsPerEmail(20_000_000L), - emailQuerySortOptions = List("receivedAt", "cc", "from", "to", "subject", "size", "sentAt", "hasKeyword", "uid", "Id"), - MayCreateTopLevelMailbox(true) - )) - private val HARD_CODED_URL_PREFIX = "http://this-url-is-hardcoded.org" } @@ -57,7 +35,7 @@ class SessionSupplier { def generate(username: Username): SMono[Session] = { accounts(username) .map(account => Session( - Capabilities(CORE_CAPABILITY, MAIL_CAPABILITY), + DefaultCapabilities.SUPPORTED, List(account), primaryAccounts(account.accountId), username, @@ -68,11 +46,13 @@ class SessionSupplier { } private def accounts(username: Username): SMono[Account] = SMono.defer(() => - Account.from(username, IsPersonal(true), IsReadOnly(false), Set(CORE_CAPABILITY, MAIL_CAPABILITY)) match { + Account.from(username, IsPersonal(true), IsReadOnly(false), DefaultCapabilities.SUPPORTED.toSet) match { case Left(ex: IllegalArgumentException) => SMono.raiseError(ex) case Right(account: Account) => SMono.just(account) }) private def primaryAccounts(accountId: AccountId): Map[CapabilityIdentifier, AccountId] = - Map(CORE_CAPABILITY.identifier -> accountId, MAIL_CAPABILITY.identifier -> accountId) + DefaultCapabilities.SUPPORTED.toSet + .map(capability => (capability.identifier(), accountId)) + .toMap } diff --git a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/http/SessionSupplier.scala b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/model/Capabilities.scala similarity index 52% copy from server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/http/SessionSupplier.scala copy to server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/model/Capabilities.scala index 231617a..ac0a7d4 100644 --- a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/http/SessionSupplier.scala +++ b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/model/Capabilities.scala @@ -16,20 +16,12 @@ * specific language governing permissions and limitations * * under the License. * * ***************************************************************/ - -package org.apache.james.jmap.http - -import java.net.URL +package org.apache.james.jmap.model import eu.timepit.refined.auto._ -import org.apache.james.core.Username -import org.apache.james.jmap.http.SessionSupplier.{CORE_CAPABILITY, HARD_CODED_URL_PREFIX, MAIL_CAPABILITY} -import org.apache.james.jmap.model.CapabilityIdentifier.CapabilityIdentifier -import org.apache.james.jmap.model._ -import reactor.core.scala.publisher.SMono -object SessionSupplier { - private val CORE_CAPABILITY = CoreCapability( +object DefaultCapabilities { + val CORE_CAPABILITY = CoreCapability( properties = CoreCapabilityProperties( MaxSizeUpload(10_000_000L), MaxConcurrentUpload(4L), @@ -40,7 +32,7 @@ object SessionSupplier { MaxObjectsInSet(500L), collationAlgorithms = List("i;unicode-casemap"))) - private val MAIL_CAPABILITY = MailCapability( + val MAIL_CAPABILITY = MailCapability( properties = MailCapabilityProperties( MaxMailboxesPerEmail(Some(10_000_000L)), MaxMailboxDepth(None), @@ -48,31 +40,12 @@ object SessionSupplier { MaxSizeAttachmentsPerEmail(20_000_000L), emailQuerySortOptions = List("receivedAt", "cc", "from", "to", "subject", "size", "sentAt", "hasKeyword", "uid", "Id"), MayCreateTopLevelMailbox(true) - )) + ) + ) - private val HARD_CODED_URL_PREFIX = "http://this-url-is-hardcoded.org" + val SUPPORTED = Capabilities(CORE_CAPABILITY, MAIL_CAPABILITY) } -class SessionSupplier { - def generate(username: Username): SMono[Session] = { - accounts(username) - .map(account => Session( - Capabilities(CORE_CAPABILITY, MAIL_CAPABILITY), - List(account), - primaryAccounts(account.accountId), - username, - apiUrl = new URL(s"$HARD_CODED_URL_PREFIX/jmap"), - downloadUrl = new URL(s"$HARD_CODED_URL_PREFIX/download"), - uploadUrl = new URL(s"$HARD_CODED_URL_PREFIX/upload"), - eventSourceUrl = new URL(s"$HARD_CODED_URL_PREFIX/eventSource"))) - } - - private def accounts(username: Username): SMono[Account] = SMono.defer(() => - Account.from(username, IsPersonal(true), IsReadOnly(false), Set(CORE_CAPABILITY, MAIL_CAPABILITY)) match { - case Left(ex: IllegalArgumentException) => SMono.raiseError(ex) - case Right(account: Account) => SMono.just(account) - }) - - private def primaryAccounts(accountId: AccountId): Map[CapabilityIdentifier, AccountId] = - Map(CORE_CAPABILITY.identifier -> accountId, MAIL_CAPABILITY.identifier -> accountId) +case class Capabilities(coreCapability: CoreCapability, mailCapability: MailCapability) { + def toSet : Set[Capability] = Set(coreCapability, mailCapability) } diff --git a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/model/Session.scala b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/model/Session.scala index fb53ae3..d8594ad 100644 --- a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/model/Session.scala +++ b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/model/Session.scala @@ -80,8 +80,6 @@ object State { type State = String Refined NonEmpty } -case class Capabilities(coreCapability: CoreCapability, mailCapability: MailCapability) - final case class Session(capabilities: Capabilities, accounts: List[Account], primaryAccounts: Map[CapabilityIdentifier, AccountId], --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
