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 745dedc62844b0f5651c89431d27020fea2d1af7 Author: Lan Khuat <[email protected]> AuthorDate: Mon May 10 14:49:29 2021 +0700 JAMES-3491 Configurable websocket url for JMAP configuration --- .../src/test/resources/jmap.properties | 1 + .../james/jmap/rfc8621/contract/CustomMethodContract.scala | 6 +++--- .../james/jmap/rfc8621/contract/SessionRoutesContract.scala | 4 ++-- .../src/test/resources/jmap.properties | 1 + .../main/scala/org/apache/james/jmap/core/Capabilities.scala | 4 ++-- .../main/scala/org/apache/james/jmap/core/Capability.scala | 5 +++-- .../org/apache/james/jmap/core/JmapRfc8621Configuration.scala | 11 +++++++---- .../org/apache/james/jmap/routes/JMAPApiRoutesTest.scala | 4 ++-- .../org/apache/james/jmap/routes/SessionRoutesTest.scala | 4 ++-- 9 files changed, 23 insertions(+), 17 deletions(-) diff --git a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/resources/jmap.properties b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/resources/jmap.properties index aa1cd40..e04d1d8 100644 --- a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/resources/jmap.properties +++ b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/resources/jmap.properties @@ -1,3 +1,4 @@ # Configuration urlPrefix for JMAP routes. url.prefix=http://domain.com +websocket.url.prefix=ws://domain.com upload.max.size=20M \ No newline at end of file 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 f2b9672..b480150 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 @@ -40,7 +40,7 @@ import org.apache.james.jmap.draft.JmapGuiceProbe import org.apache.james.jmap.http.UserCredential import org.apache.james.jmap.method.{InvocationWithContext, Method} import org.apache.james.jmap.rfc8621.contract.CustomMethodContract.CUSTOM -import org.apache.james.jmap.rfc8621.contract.Fixture.{ACCEPT_RFC8621_VERSION_HEADER, BOB, BOB_PASSWORD, DOMAIN, authScheme, baseRequestSpecBuilder} +import org.apache.james.jmap.rfc8621.contract.Fixture._ import org.apache.james.mailbox.MailboxSession import org.apache.james.utils.{DataProbeImpl, GuiceProbe} import org.junit.jupiter.api.{BeforeEach, Test} @@ -92,7 +92,7 @@ object CustomMethodContract { | }, | "urn:ietf:params:jmap:websocket": { | "supportsPush": true, - | "url": "http://domain.com/jmap/ws" + | "url": "ws://domain.com/jmap/ws" | }, | "urn:apache:james:params:jmap:mail:quota": {}, | "$CUSTOM": {"custom": "property"}, @@ -112,7 +112,7 @@ object CustomMethodContract { | }, | "urn:ietf:params:jmap:websocket": { | "supportsPush": true, - | "url": "http://domain.com/jmap/ws" + | "url": "ws://domain.com/jmap/ws" | }, | "urn:ietf:params:jmap:core" : { | "maxSizeUpload" : 20971520, 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 c7737c7..a8b52a3 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 @@ -65,7 +65,7 @@ object SessionRoutesContract { | }, | "urn:ietf:params:jmap:websocket": { | "supportsPush": true, - | "url": "http://domain.com/jmap/ws" + | "url": "ws://domain.com/jmap/ws" | }, | "urn:apache:james:params:jmap:mail:quota": {}, | "urn:apache:james:params:jmap:mail:shares": {}, @@ -84,7 +84,7 @@ object SessionRoutesContract { | }, | "urn:ietf:params:jmap:websocket": { | "supportsPush": true, - | "url": "http://domain.com/jmap/ws" + | "url": "ws://domain.com/jmap/ws" | }, | "urn:ietf:params:jmap:core" : { | "maxSizeUpload" : 20971520, diff --git a/server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/resources/jmap.properties b/server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/resources/jmap.properties index aa1cd40..e04d1d8 100644 --- a/server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/resources/jmap.properties +++ b/server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/resources/jmap.properties @@ -1,3 +1,4 @@ # Configuration urlPrefix for JMAP routes. url.prefix=http://domain.com +websocket.url.prefix=ws://domain.com upload.max.size=20M \ No newline at end of file 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 ef46ff0..6a899c0 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,7 +18,7 @@ ****************************************************************/ package org.apache.james.jmap.core -import java.net.URL +import java.net.URI import eu.timepit.refined.auto._ import org.apache.james.jmap.core.CapabilityIdentifier.CapabilityIdentifier @@ -35,7 +35,7 @@ object DefaultCapabilities { MaxObjectsInSet(500L), collationAlgorithms = List("i;unicode-casemap"))) - def webSocketCapability(url: URL) = WebSocketCapability( + def webSocketCapability(url: URI) = WebSocketCapability( properties = WebSocketCapabilityProperties(SupportsPush(true), url)) val MAIL_CAPABILITY = MailCapability( 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 d69ab77..920d087 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 @@ -19,7 +19,8 @@ package org.apache.james.jmap.core -import java.net.URL +import java.net.URI + import eu.timepit.refined import eu.timepit.refined.api.Refined import eu.timepit.refined.auto._ @@ -95,7 +96,7 @@ final case class CoreCapabilityProperties(maxSizeUpload: MaxSizeUpload, } final case class WebSocketCapabilityProperties(supportsPush: SupportsPush, - url: URL) extends CapabilityProperties { + url: URI) extends CapabilityProperties { override def jsonify(): JsObject = ResponseSerializer.webSocketPropertiesWrites.writes(this) } diff --git a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/core/JmapRfc8621Configuration.scala b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/core/JmapRfc8621Configuration.scala index 4501459..d100f2b 100644 --- a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/core/JmapRfc8621Configuration.scala +++ b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/core/JmapRfc8621Configuration.scala @@ -19,7 +19,7 @@ package org.apache.james.jmap.core -import java.net.URL +import java.net.{URI, URL} import org.apache.commons.configuration2.Configuration import org.apache.james.jmap.core.JmapRfc8621Configuration.UPLOAD_LIMIT_30_MB @@ -27,14 +27,17 @@ import org.apache.james.util.Size object JmapRfc8621Configuration { val LOCALHOST_URL_PREFIX: String = "http://localhost" + val LOCALHOST_WEBSOCKET_URL_PREFIX: String = "ws://localhost" val UPLOAD_LIMIT_30_MB: MaxSizeUpload = MaxSizeUpload.of(Size.of(30L, Size.Unit.M)).get - val LOCALHOST_CONFIGURATION: JmapRfc8621Configuration = JmapRfc8621Configuration(LOCALHOST_URL_PREFIX, UPLOAD_LIMIT_30_MB) + val LOCALHOST_CONFIGURATION: JmapRfc8621Configuration = JmapRfc8621Configuration(LOCALHOST_URL_PREFIX, LOCALHOST_WEBSOCKET_URL_PREFIX, UPLOAD_LIMIT_30_MB) val URL_PREFIX_PROPERTIES: String = "url.prefix" + val WEBSOCKET_URL_PREFIX_PROPERTIES: String = "websocket.url.prefix" val UPLOAD_LIMIT_PROPERTIES: String = "upload.max.size" def from(configuration: Configuration): JmapRfc8621Configuration = { JmapRfc8621Configuration( urlPrefixString = Option(configuration.getString(URL_PREFIX_PROPERTIES)).getOrElse(LOCALHOST_URL_PREFIX), + websocketPrefixString = Option(configuration.getString(WEBSOCKET_URL_PREFIX_PROPERTIES)).getOrElse(LOCALHOST_WEBSOCKET_URL_PREFIX), maxUploadSize = Option(configuration.getString(UPLOAD_LIMIT_PROPERTIES, null)) .map(Size.parse) .map(MaxSizeUpload.of(_).get) @@ -42,11 +45,11 @@ object JmapRfc8621Configuration { } } -case class JmapRfc8621Configuration(urlPrefixString: String, maxUploadSize: MaxSizeUpload = UPLOAD_LIMIT_30_MB) { +case class JmapRfc8621Configuration(urlPrefixString: String, websocketPrefixString: String, maxUploadSize: MaxSizeUpload = UPLOAD_LIMIT_30_MB) { val urlPrefix: URL = new URL(urlPrefixString) val apiUrl: URL = new URL(s"$urlPrefixString/jmap") val downloadUrl: URL = new URL(urlPrefixString + "/download/{accountId}/{blobId}/?type={type}&name={name}") val uploadUrl: URL = new URL(s"$urlPrefixString/upload/{accountId}") val eventSourceUrl: URL = new URL(s"$urlPrefixString/eventSource?types={types}&closeAfter={closeafter}&ping={ping}") - val webSocketUrl: URL = new URL(s"$urlPrefixString/jmap/ws") + val webSocketUrl: URI = new URI(s"$websocketPrefixString/jmap/ws") } diff --git a/server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/routes/JMAPApiRoutesTest.scala b/server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/routes/JMAPApiRoutesTest.scala index da32739..84c7d47 100644 --- a/server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/routes/JMAPApiRoutesTest.scala +++ b/server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/routes/JMAPApiRoutesTest.scala @@ -78,7 +78,7 @@ object JMAPApiRoutesTest { private val userProvisionner: UserProvisioning = new UserProvisioning(usersRepository, new RecordingMetricFactory) private val JMAP_METHODS: Set[Method] = Set(new CoreEchoMethod) - private val JMAP_API_ROUTE: JMAPApiRoutes = new JMAPApiRoutes(AUTHENTICATOR, userProvisionner, new JMAPApi(JMAP_METHODS, DefaultCapabilities.supported(JmapRfc8621Configuration("http://127.0.0.1")).capabilities.toSet)) + private val JMAP_API_ROUTE: JMAPApiRoutes = new JMAPApiRoutes(AUTHENTICATOR, userProvisionner, new JMAPApi(JMAP_METHODS, DefaultCapabilities.supported(JmapRfc8621Configuration("http://127.0.0.1", "ws://127.0.0.1")).capabilities.toSet)) private val ROUTES_HANDLER: ImmutableSet[JMAPRoutesHandler] = ImmutableSet.of(new JMAPRoutesHandler(Version.RFC8621, JMAP_API_ROUTE)) private val userBase64String: String = Base64.getEncoder.encodeToString("user1:password".getBytes(StandardCharsets.UTF_8)) @@ -442,7 +442,7 @@ class JMAPApiRoutesTest extends AnyFlatSpec with BeforeAndAfter with Matchers { when(mockCoreEchoMethod.requiredCapabilities).thenReturn(Set(JMAP_CORE)) val methods: Set[Method] = Set(mockCoreEchoMethod) - val apiRoute: JMAPApiRoutes = new JMAPApiRoutes(AUTHENTICATOR, userProvisionner, new JMAPApi(methods, DefaultCapabilities.supported(JmapRfc8621Configuration("http://127.0.0.1")).capabilities.toSet)) + val apiRoute: JMAPApiRoutes = new JMAPApiRoutes(AUTHENTICATOR, userProvisionner, new JMAPApi(methods, DefaultCapabilities.supported(JmapRfc8621Configuration("http://127.0.0.1", "ws://127.0.0.1")).capabilities.toSet)) val routesHandler: ImmutableSet[JMAPRoutesHandler] = ImmutableSet.of(new JMAPRoutesHandler(Version.RFC8621, apiRoute)) val versionParser: VersionParser = new VersionParser(SUPPORTED_VERSIONS, JMAPConfiguration.DEFAULT) 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 4ca303c..0e81e21 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 @@ -146,7 +146,7 @@ class SessionRoutesTest extends AnyFlatSpec with BeforeAndAfter with Matchers { | }, | "urn:ietf:params:jmap:websocket": { | "supportsPush": true, - | "url": "http://localhost/jmap/ws" + | "url": "ws://localhost/jmap/ws" | }, | "urn:apache:james:params:jmap:mail:quota": {}, | "urn:apache:james:params:jmap:mail:shares": {}, @@ -164,7 +164,7 @@ class SessionRoutesTest extends AnyFlatSpec with BeforeAndAfter with Matchers { | }, | "urn:ietf:params:jmap:websocket": { | "supportsPush": true, - | "url": "http://localhost/jmap/ws" + | "url": "ws://localhost/jmap/ws" | }, | "urn:ietf:params:jmap:core" : { | "maxSizeUpload" : 31457280, --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
