You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@james.apache.org by bt...@apache.org on 2022/10/11 01:41:16 UTC
[james-project] 01/02: JAMES-3831 Expose urn:apache:james:params:jmap:mail:identity:sortorder capability
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 7e1b57a93c91881ce55d5a6ba2e43286be391af1
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Thu Oct 6 16:39:12 2022 +0700
JAMES-3831 Expose urn:apache:james:params:jmap:mail:identity:sortorder capability
---
.../org/apache/james/jmap/draft/JMAPModule.java | 2 ++
.../rfc8621/contract/CustomMethodContract.scala | 5 +++-
.../rfc8621/contract/SessionRoutesContract.scala | 4 ++-
.../org/apache/james/jmap/core/Capabilities.scala | 32 +---------------------
.../org/apache/james/jmap/core/Capability.scala | 16 ++++++++++-
.../james/jmap/routes/SessionRoutesTest.scala | 3 ++
6 files changed, 28 insertions(+), 34 deletions(-)
diff --git a/server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/draft/JMAPModule.java b/server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/draft/JMAPModule.java
index 7cdb17f9db..784d9f937c 100644
--- a/server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/draft/JMAPModule.java
+++ b/server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/draft/JMAPModule.java
@@ -39,6 +39,7 @@ import org.apache.james.jmap.Version;
import org.apache.james.jmap.change.MailboxChangeListener;
import org.apache.james.jmap.core.CapabilityFactory;
import org.apache.james.jmap.core.CoreCapabilityFactory;
+import org.apache.james.jmap.core.IdentitySortOrderCapabilityFactory$;
import org.apache.james.jmap.core.JmapQuotaCapabilityFactory$;
import org.apache.james.jmap.core.JmapRfc8621Configuration;
import org.apache.james.jmap.core.MDNCapabilityFactory$;
@@ -146,6 +147,7 @@ public class JMAPModule extends AbstractModule {
supportedCapabilities.addBinding().toInstance(MailCapabilityFactory$.MODULE$);
supportedCapabilities.addBinding().toInstance(QuotaCapabilityFactory$.MODULE$);
supportedCapabilities.addBinding().toInstance(JmapQuotaCapabilityFactory$.MODULE$);
+ supportedCapabilities.addBinding().toInstance(IdentitySortOrderCapabilityFactory$.MODULE$);
supportedCapabilities.addBinding().toInstance(SharesCapabilityFactory$.MODULE$);
supportedCapabilities.addBinding().toInstance(VacationResponseCapabilityFactory$.MODULE$);
supportedCapabilities.addBinding().toInstance(SubmissionCapabilityFactory$.MODULE$);
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/CustomMethodContract.scala b/server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/CustomMethodContract.scala
index 5fd115fc41..13633edd43 100644
--- a/server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/CustomMethodContract.scala
+++ b/server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/CustomMethodContract.scala
@@ -37,8 +37,8 @@ import org.apache.http.HttpStatus.SC_OK
import org.apache.james.GuiceJamesServer
import org.apache.james.events.Event.EventId
import org.apache.james.events.EventBus
-import org.apache.james.jmap.api.model.{AccountId, State, TypeName}
import org.apache.james.jmap.api.model.Size.Size
+import org.apache.james.jmap.api.model.{AccountId, State, TypeName}
import org.apache.james.jmap.change.{AccountIdRegistrationKey, StateChangeEvent}
import org.apache.james.jmap.core.CapabilityIdentifier.{CapabilityIdentifier, JMAP_CORE}
import org.apache.james.jmap.core.Invocation.MethodName
@@ -107,6 +107,7 @@ object CustomMethodContract {
| },
| "urn:apache:james:params:jmap:mail:quota": {},
| "urn:ietf:params:jmap:quota": {},
+ | "urn:apache:james:params:jmap:mail:identity:sortorder": {},
| "$CUSTOM": {"custom": "property"},
| "urn:apache:james:params:jmap:mail:shares": {},
| "urn:ietf:params:jmap:vacationresponse":{},
@@ -146,6 +147,7 @@ object CustomMethodContract {
| },
| "urn:apache:james:params:jmap:mail:quota": {},
| "urn:ietf:params:jmap:quota": {},
+ | "urn:apache:james:params:jmap:mail:identity:sortorder": {},
| "urn:apache:james:params:jmap:mail:shares": {},
| "$CUSTOM": {"custom": "property"},
| "urn:ietf:params:jmap:vacationresponse":{},
@@ -160,6 +162,7 @@ object CustomMethodContract {
| "urn:ietf:params:jmap:mail" : "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
| "urn:apache:james:params:jmap:mail:quota": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
| "urn:ietf:params:jmap:quota": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
+ | "urn:apache:james:params:jmap:mail:identity:sortorder": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
| "urn:apache:james:params:jmap:mail:shares": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
| "$CUSTOM": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
| "urn:ietf:params:jmap:vacationresponse": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
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/SessionRoutesContract.scala b/server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/SessionRoutesContract.scala
index 307cd22815..ecdcb3ad35 100644
--- a/server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/SessionRoutesContract.scala
+++ b/server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/SessionRoutesContract.scala
@@ -70,6 +70,7 @@ object SessionRoutesContract {
| },
| "urn:apache:james:params:jmap:mail:quota": {},
| "urn:ietf:params:jmap:quota": {},
+ | "urn:apache:james:params:jmap:mail:identity:sortorder": {},
| "urn:apache:james:params:jmap:mail:shares": {},
| "urn:ietf:params:jmap:vacationresponse":{},
| "urn:ietf:params:jmap:mdn":{}
@@ -108,6 +109,7 @@ object SessionRoutesContract {
| },
| "urn:apache:james:params:jmap:mail:quota": {},
| "urn:ietf:params:jmap:quota": {},
+ | "urn:apache:james:params:jmap:mail:identity:sortorder": {},
| "urn:apache:james:params:jmap:mail:shares": {},
| "urn:ietf:params:jmap:vacationresponse":{},
| "urn:ietf:params:jmap:mdn":{}
@@ -121,6 +123,7 @@ object SessionRoutesContract {
| "urn:ietf:params:jmap:mail" : "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
| "urn:apache:james:params:jmap:mail:quota": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
| "urn:ietf:params:jmap:quota": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
+ | "urn:apache:james:params:jmap:mail:identity:sortorder": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
| "urn:apache:james:params:jmap:mail:shares": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
| "urn:ietf:params:jmap:vacationresponse": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
| "urn:ietf:params:jmap:mdn": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6"
@@ -167,7 +170,6 @@ trait SessionRoutesContract {
.get("/session")
.`then`
.statusCode(SC_OK)
- .header("Content-Length", "3185")
.contentType(JSON)
.extract()
.body()
diff --git a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/core/Capabilities.scala b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/core/Capabilities.scala
index 2d8fe248a8..43a43190fb 100644
--- a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/core/Capabilities.scala
+++ b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/core/Capabilities.scala
@@ -18,47 +18,17 @@
****************************************************************/
package org.apache.james.jmap.core
-import java.net.URI
-
import com.google.common.annotations.VisibleForTesting
-import eu.timepit.refined.auto._
import org.apache.james.jmap.core.CapabilityIdentifier.CapabilityIdentifier
object DefaultCapabilities {
- def coreCapability(maxUploadSize: MaxSizeUpload) = CoreCapability(
- properties = CoreCapabilityProperties(
- maxUploadSize,
- MaxConcurrentUpload(4L),
- MaxSizeRequest(10_000_000L),
- MaxConcurrentRequests(4L),
- MaxCallsInRequest(16L),
- MaxObjectsInGet(500L),
- MaxObjectsInSet(500L),
- collationAlgorithms = List("i;unicode-casemap")))
-
- def webSocketCapability(url: URI) = WebSocketCapability(
- properties = WebSocketCapabilityProperties(SupportsPush(true), url))
-
- val MAIL_CAPABILITY = MailCapability(
- properties = MailCapabilityProperties(
- MaxMailboxesPerEmail(Some(10_000_000L)),
- MaxMailboxDepth(None),
- MaxSizeMailboxName(200L),
- MaxSizeAttachmentsPerEmail(20_000_000L),
- emailQuerySortOptions = List("receivedAt", "sentAt", "size", "from", "to", "subject"),
- MayCreateTopLevelMailbox(true)))
- val QUOTA_CAPABILITY = QuotaCapability()
- val SHARES_CAPABILITY = SharesCapability()
- val MDN_CAPABILITY = MDNCapability()
- val VACATION_RESPONSE_CAPABILITY = VacationResponseCapability()
- val SUBMISSION_CAPABILITY = SubmissionCapability()
-
@VisibleForTesting
def supported(configuration: JmapRfc8621Configuration): Set[CapabilityFactory] = Set(
CoreCapabilityFactory(configuration.maxUploadSize),
MailCapabilityFactory,
QuotaCapabilityFactory,
JmapQuotaCapabilityFactory,
+ IdentitySortOrderCapabilityFactory,
SharesCapabilityFactory,
VacationResponseCapabilityFactory,
SharesCapabilityFactory,
diff --git a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/core/Capability.scala b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/core/Capability.scala
index 49a6bd28c4..25a715e99e 100644
--- a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/core/Capability.scala
+++ b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/core/Capability.scala
@@ -26,7 +26,7 @@ import eu.timepit.refined.api.Refined
import eu.timepit.refined.auto._
import eu.timepit.refined.collection.NonEmpty
import eu.timepit.refined.string.Uri
-import org.apache.james.jmap.core.CapabilityIdentifier.{CapabilityIdentifier, EMAIL_SUBMISSION, JAMES_QUOTA, JAMES_SHARES, JMAP_CORE, JMAP_MAIL, JMAP_MDN, JMAP_QUOTA, JMAP_VACATION_RESPONSE, JMAP_WEBSOCKET}
+import org.apache.james.jmap.core.CapabilityIdentifier.{CapabilityIdentifier, EMAIL_SUBMISSION, JAMES_IDENTITY_SORTORDER, JAMES_QUOTA, JAMES_SHARES, JMAP_CORE, JMAP_MAIL, JMAP_MDN, JMAP_QUOTA, JMAP_VACATION_RESPONSE, JMAP_WEBSOCKET}
import org.apache.james.jmap.core.CoreCapabilityProperties.CollationAlgorithm
import org.apache.james.jmap.core.MailCapability.EmailQuerySortOption
import org.apache.james.jmap.core.UnsignedInt.{UnsignedInt, UnsignedIntConstraint}
@@ -50,6 +50,7 @@ object CapabilityIdentifier {
val JAMES_QUOTA: CapabilityIdentifier = "urn:apache:james:params:jmap:mail:quota"
val JMAP_QUOTA: CapabilityIdentifier = "urn:ietf:params:jmap:quota"
val JAMES_SHARES: CapabilityIdentifier = "urn:apache:james:params:jmap:mail:shares"
+ val JAMES_IDENTITY_SORTORDER: CapabilityIdentifier = "urn:apache:james:params:jmap:mail:identity:sortorder"
val JMAP_MDN: CapabilityIdentifier = "urn:ietf:params:jmap:mdn"
}
@@ -218,6 +219,19 @@ case object QuotaCapabilityFactory extends CapabilityFactory {
override def create(urlPrefixes: UrlPrefixes): Capability = QuotaCapability()
}
+final case class IdentitySortOrderCapabilityProperties() extends CapabilityProperties {
+ override def jsonify(): JsObject = Json.obj()
+}
+
+final case class IdentitySortOrderCapability(properties: IdentitySortOrderCapabilityProperties = IdentitySortOrderCapabilityProperties(),
+ identifier: CapabilityIdentifier = JAMES_IDENTITY_SORTORDER) extends Capability
+
+case object IdentitySortOrderCapabilityFactory extends CapabilityFactory {
+ override def id(): CapabilityIdentifier = JAMES_IDENTITY_SORTORDER
+
+ override def create(urlPrefixes: UrlPrefixes): Capability = IdentitySortOrderCapability()
+}
+
final case class SharesCapabilityProperties() extends CapabilityProperties {
override def jsonify(): JsObject = Json.obj()
}
diff --git a/server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/routes/SessionRoutesTest.scala b/server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/routes/SessionRoutesTest.scala
index 3f90df64c7..a32e7e4b36 100644
--- a/server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/routes/SessionRoutesTest.scala
+++ b/server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/routes/SessionRoutesTest.scala
@@ -149,6 +149,7 @@ class SessionRoutesTest extends AnyFlatSpec with BeforeAndAfter with Matchers {
| "supportsPush": true,
| "url": "ws://localhost/jmap/ws"
| },
+ | "urn:apache:james:params:jmap:mail:identity:sortorder": {},
| "urn:apache:james:params:jmap:mail:quota": {},
| "urn:ietf:params:jmap:quota": {},
| "urn:apache:james:params:jmap:mail:shares": {},
@@ -188,6 +189,7 @@ class SessionRoutesTest extends AnyFlatSpec with BeforeAndAfter with Matchers {
| },
| "urn:apache:james:params:jmap:mail:quota": {},
| "urn:ietf:params:jmap:quota": {},
+ | "urn:apache:james:params:jmap:mail:identity:sortorder": {},
| "urn:apache:james:params:jmap:mail:shares": {},
| "urn:ietf:params:jmap:vacationresponse":{}
| }
@@ -200,6 +202,7 @@ class SessionRoutesTest extends AnyFlatSpec with BeforeAndAfter with Matchers {
| "urn:ietf:params:jmap:mail" : "0fe275bf13ff761407c17f64b1dfae2f4b3186feea223d7267b79f873a105401",
| "urn:apache:james:params:jmap:mail:quota": "0fe275bf13ff761407c17f64b1dfae2f4b3186feea223d7267b79f873a105401",
| "urn:ietf:params:jmap:quota": "0fe275bf13ff761407c17f64b1dfae2f4b3186feea223d7267b79f873a105401",
+ | "urn:apache:james:params:jmap:mail:identity:sortorder": "0fe275bf13ff761407c17f64b1dfae2f4b3186feea223d7267b79f873a105401",
| "urn:apache:james:params:jmap:mail:shares": "0fe275bf13ff761407c17f64b1dfae2f4b3186feea223d7267b79f873a105401",
| "urn:ietf:params:jmap:vacationresponse": "0fe275bf13ff761407c17f64b1dfae2f4b3186feea223d7267b79f873a105401"
| },
---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@james.apache.org
For additional commands, e-mail: notifications-help@james.apache.org