This is an automated email from the ASF dual-hosted git repository.

more pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/knox.git


The following commit(s) were added to refs/heads/master by this push:
     new 1a7d05e  KNOX-1361 Fix issues when proxying websockets via socket.io 
(#386)
1a7d05e is described below

commit 1a7d05efd95b41edd370abde9b2a0e2093c9f293
Author: Sandeep Moré <moresand...@gmail.com>
AuthorDate: Mon Nov 23 13:08:29 2020 -0500

    KNOX-1361 Fix issues when proxying websockets via socket.io (#386)
---
 .../knox/gateway/websockets/GatewayWebsocketHandler.java    |  6 ++++++
 .../knox/gateway/websockets/WebsocketBackendUrlTest.java    | 13 +++++++++++++
 .../knox/gateway/websockets/WebsocketEchoTestBase.java      | 12 ++++++++----
 3 files changed, 27 insertions(+), 4 deletions(-)

diff --git 
a/gateway-server/src/main/java/org/apache/knox/gateway/websockets/GatewayWebsocketHandler.java
 
b/gateway-server/src/main/java/org/apache/knox/gateway/websockets/GatewayWebsocketHandler.java
index dfbd9a2..0f8cfa4 100644
--- 
a/gateway-server/src/main/java/org/apache/knox/gateway/websockets/GatewayWebsocketHandler.java
+++ 
b/gateway-server/src/main/java/org/apache/knox/gateway/websockets/GatewayWebsocketHandler.java
@@ -179,6 +179,7 @@ public class GatewayWebsocketHandler extends 
WebSocketHandler
    */
   protected synchronized String getMatchedBackendURL(final URI requestURI) {
     final String path = requestURI.getRawPath();
+    final String query = requestURI.getRawQuery();
 
     final ServiceRegistry serviceRegistryService = services
         .getService(ServiceType.SERVICE_REGISTRY_SERVICE);
@@ -235,7 +236,12 @@ public class GatewayWebsocketHandler extends 
WebSocketHandler
         backend.append(serviceUrl.getPort()).append('/');
         backend.append(serviceUrl.getPath());
       }
+      /* in case we have query params */
+      if(!StringUtils.isBlank(query)) {
+        backend.append('?').append(query);
+      }
       backendURL = backend.toString();
+
     } catch (MalformedURLException e){
         LOG.badUrlError(e);
         throw new RuntimeException(e.toString());
diff --git 
a/gateway-server/src/test/java/org/apache/knox/gateway/websockets/WebsocketBackendUrlTest.java
 
b/gateway-server/src/test/java/org/apache/knox/gateway/websockets/WebsocketBackendUrlTest.java
index 2f11c5c..adab585 100644
--- 
a/gateway-server/src/test/java/org/apache/knox/gateway/websockets/WebsocketBackendUrlTest.java
+++ 
b/gateway-server/src/test/java/org/apache/knox/gateway/websockets/WebsocketBackendUrlTest.java
@@ -75,4 +75,17 @@ public class WebsocketBackendUrlTest extends 
WebsocketEchoTestBase {
     String expectedBackendUrl = backendServerUri.toString() + "channels";
     assertThat(backendUrl, is(expectedBackendUrl));
   }
+
+  /*
+   * Test url generated for websocket backend connection
+   */
+  @Test
+  public void testWebsocketBackendUrlWithQueryParams() throws Exception {
+    final String pathContext = "channels?EIO=3&transport=websocket";
+    URI requestURI = new URI(String.format(Locale.ROOT, 
"%sgateway/websocket/123foo456bar/%s",serverUri.toString(), pathContext));
+    GatewayWebsocketHandler gwh = new GatewayWebsocketHandler(gatewayConfig, 
services);
+    String backendUrl = gwh.getMatchedBackendURL(requestURI);
+    String expectedBackendUrl = backendServerUri.toString() + pathContext;
+    assertThat(backendUrl, is(expectedBackendUrl));
+  }
 }
diff --git 
a/gateway-server/src/test/java/org/apache/knox/gateway/websockets/WebsocketEchoTestBase.java
 
b/gateway-server/src/test/java/org/apache/knox/gateway/websockets/WebsocketEchoTestBase.java
index 08decd4..5db254f 100644
--- 
a/gateway-server/src/test/java/org/apache/knox/gateway/websockets/WebsocketEchoTestBase.java
+++ 
b/gateway-server/src/test/java/org/apache/knox/gateway/websockets/WebsocketEchoTestBase.java
@@ -113,7 +113,11 @@ public class WebsocketEchoTestBase {
   }
 
   public static void startServers(String type) throws Exception {
-    startWebsocketServer(type);
+    startServers(type, "ws");
+  }
+
+  public static void startServers(final String type, final String context) 
throws Exception {
+    startWebsocketServer(type, context);
     startGatewayServer();
   }
 
@@ -137,7 +141,7 @@ public class WebsocketEchoTestBase {
    * Start Mock Websocket server that acts as backend.
    * @throws Exception exception on websocket server start
    */
-  private static void startWebsocketServer(String type) throws Exception {
+  private static void startWebsocketServer(final String type, final String 
contextPath) throws Exception {
 
     backendServer = new Server();
     ServerConnector connector = new ServerConnector(backendServer);
@@ -163,9 +167,9 @@ public class WebsocketEchoTestBase {
     }
     int port = connector.getLocalPort();
     if ("http".equals(type)) {
-      backendServerUri = new URI(String.format(Locale.ROOT, "http://%s:%d/ws";, 
host, port));
+      backendServerUri = new URI(String.format(Locale.ROOT, "http://%s:%d/%s";, 
host, port, contextPath));
     } else {
-      backendServerUri = new URI(String.format(Locale.ROOT, "ws://%s:%d/ws", 
host, port));
+      backendServerUri = new URI(String.format(Locale.ROOT, "ws://%s:%d/%s", 
host, port, contextPath));
     }
   }
 

Reply via email to