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