This is an automated email from the ASF dual-hosted git repository.
rcordier 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 e935399d12 [FIX] JMAP urn:ietf:params:jmap:submission
submissionExtensions shoul… (#1424)
e935399d12 is described below
commit e935399d121d199516cd2348212e346a3369b69d
Author: Benoit TELLIER <[email protected]>
AuthorDate: Tue Feb 7 16:24:06 2023 +0700
[FIX] JMAP urn:ietf:params:jmap:submission submissionExtensions shoul…
(#1424)
---
.../apache/james/jmap/rfc8621/contract/CustomMethodContract.scala | 4 ++--
.../james/jmap/rfc8621/contract/SessionRoutesContract.scala | 8 ++++----
.../src/main/scala/org/apache/james/jmap/core/Capability.scala | 5 +++--
.../scala/org/apache/james/jmap/json/ResponseSerializer.scala | 3 +++
.../scala/org/apache/james/jmap/routes/SessionRoutesTest.scala | 4 ++--
5 files changed, 14 insertions(+), 10 deletions(-)
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 d1a0f76d0f..cf474fe0ce 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
@@ -81,7 +81,7 @@ object CustomMethodContract {
| "capabilities" : {
| "urn:ietf:params:jmap:submission": {
| "maxDelayedSend": 0,
- | "submissionExtensions": []
+ | "submissionExtensions": {}
| },
| "urn:ietf:params:jmap:core" : {
| "maxSizeUpload" : 20971520,
@@ -122,7 +122,7 @@ object CustomMethodContract {
| "accountCapabilities" : {
| "urn:ietf:params:jmap:submission": {
| "maxDelayedSend": 0,
- | "submissionExtensions": []
+ | "submissionExtensions": {}
| },
| "urn:ietf:params:jmap:websocket": {
| "supportsPush": true,
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 6c99784cf1..8548fac0ed 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
@@ -45,7 +45,7 @@ object SessionRoutesContract {
| "capabilities" : {
| "urn:ietf:params:jmap:submission": {
| "maxDelayedSend": 0,
- | "submissionExtensions": []
+ | "submissionExtensions": {}
| },
| "urn:ietf:params:jmap:core" : {
| "maxSizeUpload" : 20971520,
@@ -85,7 +85,7 @@ object SessionRoutesContract {
| "accountCapabilities" : {
| "urn:ietf:params:jmap:submission": {
| "maxDelayedSend": 0,
- | "submissionExtensions": []
+ | "submissionExtensions": {}
| },
| "urn:ietf:params:jmap:websocket": {
| "supportsPush": true,
@@ -243,7 +243,7 @@ trait SessionRoutesContract {
| "urn:apache:james:params:jmap:delegation": {},
| "urn:ietf:params:jmap:submission": {
| "maxDelayedSend": 0,
- | "submissionExtensions": []
+ | "submissionExtensions": {}
| },
| "urn:ietf:params:jmap:websocket": {
| "supportsPush": true,
@@ -292,7 +292,7 @@ trait SessionRoutesContract {
| "urn:apache:james:params:jmap:delegation": {},
| "urn:ietf:params:jmap:submission": {
| "maxDelayedSend": 0,
- | "submissionExtensions": []
+ | "submissionExtensions": {}
| },
| "urn:ietf:params:jmap:websocket": {
| "supportsPush": true,
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 86098e2aef..b198b92f1c 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
@@ -157,7 +157,8 @@ final case class
WebSocketCapabilityProperties(supportsPush: SupportsPush,
final case class SupportsPush(value: Boolean) extends AnyVal
final case class MaxDelayedSend(value: Int) extends AnyVal
final case class EhloName(value: String) extends AnyVal
-final case class EhloArgs(value: String) extends AnyVal
+final case class EhloArg(value: String) extends AnyVal
+final case class EhloArgs(values: List[EhloArg]) extends AnyVal
final case class SubmissionCapability(identifier: CapabilityIdentifier =
EMAIL_SUBMISSION,
properties: SubmissionProperties =
SubmissionProperties()) extends Capability
@@ -169,7 +170,7 @@ case object SubmissionCapabilityFactory extends
CapabilityFactory {
}
final case class SubmissionProperties(maxDelayedSend: MaxDelayedSend =
MaxDelayedSend(0),
- submissionExtensions: Map[EhloName,
List[EhloArgs]] = Map()) extends CapabilityProperties {
+ submissionExtensions: Map[EhloName,
EhloArgs] = Map()) extends CapabilityProperties {
override def jsonify(): JsObject =
ResponseSerializer.submissionPropertiesWrites.writes(this)
}
diff --git
a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/json/ResponseSerializer.scala
b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/json/ResponseSerializer.scala
index 56905e9c8b..609f68f50a 100644
---
a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/json/ResponseSerializer.scala
+++
b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/json/ResponseSerializer.scala
@@ -90,7 +90,10 @@ object ResponseSerializer {
val mailCapabilityWrites: OWrites[MailCapabilityProperties] =
Json.writes[MailCapabilityProperties]
private implicit val maxDelayedSendWrites: Writes[MaxDelayedSend] =
Json.valueWrites[MaxDelayedSend]
private implicit val ehloNameWrites: Writes[EhloName] =
Json.valueWrites[EhloName]
+ private implicit val ehloArgWrites: Writes[EhloArg] =
Json.valueWrites[EhloArg]
private implicit val ehloArgsWrites: Writes[EhloArgs] =
Json.valueWrites[EhloArgs]
+ private implicit val ehloArgsMapWrite: Writes[Map[EhloName, EhloArgs]] =
+ mapWrites[EhloName, EhloArgs](_.value, ehloArgsWrites)
private implicit val supportsPushWrites: Writes[SupportsPush] =
Json.valueWrites[SupportsPush]
val submissionPropertiesWrites: OWrites[SubmissionProperties] =
Json.writes[SubmissionProperties]
val webSocketPropertiesWrites: OWrites[WebSocketCapabilityProperties] =
Json.writes[WebSocketCapabilityProperties]
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 46adabc781..8de94e18ee 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
@@ -130,7 +130,7 @@ class SessionRoutesTest extends AnyFlatSpec with
BeforeAndAfter with Matchers {
| "capabilities" : {
| "urn:ietf:params:jmap:submission": {
| "maxDelayedSend": 0,
- | "submissionExtensions": []
+ | "submissionExtensions": {}
| },
| "urn:ietf:params:jmap:core" : {
| "maxSizeUpload" : 31457280,
@@ -169,7 +169,7 @@ class SessionRoutesTest extends AnyFlatSpec with
BeforeAndAfter with Matchers {
| "accountCapabilities" : {
| "urn:ietf:params:jmap:submission": {
| "maxDelayedSend": 0,
- | "submissionExtensions": []
+ | "submissionExtensions": {}
| },
| "urn:ietf:params:jmap:websocket": {
| "supportsPush": true,
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]