You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by bt...@apache.org on 2020/07/06 01:37:06 UTC

[james-project] 04/05: JAMES-3096 refactor default capabilities

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 <rk...@linagora.com>
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: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org