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
The following commit(s) were added to refs/heads/master by this push: new 3646740c6e JAMES-3830 Advertise the quota extension in the session route (#1226) 3646740c6e is described below commit 3646740c6e752b625c1ffb2dd14f495114043148 Author: Trần Hồng Quân <55171818+quantranhong1...@users.noreply.github.com> AuthorDate: Mon Oct 10 15:35:38 2022 +0700 JAMES-3830 Advertise the quota extension in the session route (#1226) --- .../java/org/apache/james/jmap/draft/JMAPModule.java | 2 ++ .../jmap/rfc8621/contract/CustomMethodContract.scala | 3 +++ .../jmap/rfc8621/contract/SessionRoutesContract.scala | 5 ++++- .../org/apache/james/jmap/core/Capabilities.scala | 1 + .../scala/org/apache/james/jmap/core/Capability.scala | 18 ++++++++++++++++-- .../apache/james/jmap/routes/SessionRoutesTest.scala | 3 +++ 6 files changed, 29 insertions(+), 3 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 2acbbb8876..7cdb17f9db 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.JmapQuotaCapabilityFactory$; import org.apache.james.jmap.core.JmapRfc8621Configuration; import org.apache.james.jmap.core.MDNCapabilityFactory$; import org.apache.james.jmap.core.MailCapabilityFactory$; @@ -144,6 +145,7 @@ public class JMAPModule extends AbstractModule { Multibinder<CapabilityFactory> supportedCapabilities = Multibinder.newSetBinder(binder(), CapabilityFactory.class); supportedCapabilities.addBinding().toInstance(MailCapabilityFactory$.MODULE$); supportedCapabilities.addBinding().toInstance(QuotaCapabilityFactory$.MODULE$); + supportedCapabilities.addBinding().toInstance(JmapQuotaCapabilityFactory$.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 d2e5487871..5fd115fc41 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 @@ -106,6 +106,7 @@ object CustomMethodContract { | "url": "ws://domain.com/jmap/ws" | }, | "urn:apache:james:params:jmap:mail:quota": {}, + | "urn:ietf:params:jmap:quota": {}, | "$CUSTOM": {"custom": "property"}, | "urn:apache:james:params:jmap:mail:shares": {}, | "urn:ietf:params:jmap:vacationresponse":{}, @@ -144,6 +145,7 @@ object CustomMethodContract { | "mayCreateTopLevelMailbox" : true | }, | "urn:apache:james:params:jmap:mail:quota": {}, + | "urn:ietf:params:jmap:quota": {}, | "urn:apache:james:params:jmap:mail:shares": {}, | "$CUSTOM": {"custom": "property"}, | "urn:ietf:params:jmap:vacationresponse":{}, @@ -157,6 +159,7 @@ object CustomMethodContract { | "urn:ietf:params:jmap:core" : "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6", | "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: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 e38189e325..307cd22815 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 @@ -69,6 +69,7 @@ object SessionRoutesContract { | "url": "ws://domain.com/jmap/ws" | }, | "urn:apache:james:params:jmap:mail:quota": {}, + | "urn:ietf:params:jmap:quota": {}, | "urn:apache:james:params:jmap:mail:shares": {}, | "urn:ietf:params:jmap:vacationresponse":{}, | "urn:ietf:params:jmap:mdn":{} @@ -106,6 +107,7 @@ object SessionRoutesContract { | "mayCreateTopLevelMailbox" : true | }, | "urn:apache:james:params:jmap:mail:quota": {}, + | "urn:ietf:params:jmap:quota": {}, | "urn:apache:james:params:jmap:mail:shares": {}, | "urn:ietf:params:jmap:vacationresponse":{}, | "urn:ietf:params:jmap:mdn":{} @@ -118,6 +120,7 @@ object SessionRoutesContract { | "urn:ietf:params:jmap:core" : "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6", | "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:shares": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6", | "urn:ietf:params:jmap:vacationresponse": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6", | "urn:ietf:params:jmap:mdn": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6" @@ -164,7 +167,7 @@ trait SessionRoutesContract { .get("/session") .`then` .statusCode(SC_OK) - .header("Content-Length", "3025") + .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 ae113f389d..2d8fe248a8 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 @@ -58,6 +58,7 @@ object DefaultCapabilities { CoreCapabilityFactory(configuration.maxUploadSize), MailCapabilityFactory, QuotaCapabilityFactory, + JmapQuotaCapabilityFactory, 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 d8ceafd487..49a6bd28c4 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_VACATION_RESPONSE, JMAP_WEBSOCKET} +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.CoreCapabilityProperties.CollationAlgorithm import org.apache.james.jmap.core.MailCapability.EmailQuerySortOption import org.apache.james.jmap.core.UnsignedInt.{UnsignedInt, UnsignedIntConstraint} @@ -48,6 +48,7 @@ object CapabilityIdentifier { val EMAIL_SUBMISSION: CapabilityIdentifier = "urn:ietf:params:jmap:submission" val JMAP_WEBSOCKET: CapabilityIdentifier = "urn:ietf:params:jmap:websocket" 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 JMAP_MDN: CapabilityIdentifier = "urn:ietf:params:jmap:mdn" } @@ -254,4 +255,17 @@ case object VacationResponseCapabilityFactory extends CapabilityFactory { } final case class VacationResponseCapability(properties: VacationResponseCapabilityProperties = VacationResponseCapabilityProperties(), - identifier: CapabilityIdentifier = JMAP_VACATION_RESPONSE) extends Capability \ No newline at end of file + identifier: CapabilityIdentifier = JMAP_VACATION_RESPONSE) extends Capability + +final case class JmapQuotaCapability(properties: JmapQuotaCapabilityProperties = JmapQuotaCapabilityProperties(), + identifier: CapabilityIdentifier = JMAP_QUOTA) extends Capability + +final case class JmapQuotaCapabilityProperties() extends CapabilityProperties { + override def jsonify(): JsObject = Json.obj() +} + +case object JmapQuotaCapabilityFactory extends CapabilityFactory { + override def id(): CapabilityIdentifier = JMAP_QUOTA + + override def create(urlPrefixes: UrlPrefixes): Capability = JmapQuotaCapability() +} \ No newline at end of file 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 0061236bac..3f90df64c7 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 @@ -150,6 +150,7 @@ class SessionRoutesTest extends AnyFlatSpec with BeforeAndAfter with Matchers { | "url": "ws://localhost/jmap/ws" | }, | "urn:apache:james:params:jmap:mail:quota": {}, + | "urn:ietf:params:jmap:quota": {}, | "urn:apache:james:params:jmap:mail:shares": {}, | "urn:ietf:params:jmap:vacationresponse":{} | }, @@ -186,6 +187,7 @@ class SessionRoutesTest extends AnyFlatSpec with BeforeAndAfter with Matchers { | "mayCreateTopLevelMailbox" : true | }, | "urn:apache:james:params:jmap:mail:quota": {}, + | "urn:ietf:params:jmap:quota": {}, | "urn:apache:james:params:jmap:mail:shares": {}, | "urn:ietf:params:jmap:vacationresponse":{} | } @@ -197,6 +199,7 @@ class SessionRoutesTest extends AnyFlatSpec with BeforeAndAfter with Matchers { | "urn:ietf:params:jmap:core" : "0fe275bf13ff761407c17f64b1dfae2f4b3186feea223d7267b79f873a105401", | "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:shares": "0fe275bf13ff761407c17f64b1dfae2f4b3186feea223d7267b79f873a105401", | "urn:ietf:params:jmap:vacationresponse": "0fe275bf13ff761407c17f64b1dfae2f4b3186feea223d7267b79f873a105401" | }, --------------------------------------------------------------------- To unsubscribe, e-mail: notifications-unsubscr...@james.apache.org For additional commands, e-mail: notifications-h...@james.apache.org