From 3162ec624409ffa618383c9df01e8020932eb99e Mon Sep 17 00:00:00 2001 From: Mathieu ANCELIN Date: Tue, 12 Nov 2019 09:53:04 +0100 Subject: [PATCH] Fix #393 --- otoroshi/app/env/Env.scala | 3 ++- otoroshi/app/gateway/handlers.scala | 1 + otoroshi/app/gateway/websockets.scala | 5 ++++- otoroshi/app/models/descriptor.scala | 6 +++++- otoroshi/javascript/src/pages/ServicePage.js | 6 ++++++ 5 files changed, 18 insertions(+), 3 deletions(-) diff --git a/otoroshi/app/env/Env.scala b/otoroshi/app/env/Env.scala index 4afca48f6e..28e5e28f91 100644 --- a/otoroshi/app/env/Env.scala +++ b/otoroshi/app/env/Env.scala @@ -550,7 +550,8 @@ class Env(val configuration: Configuration, removeHeadersOut = Seq.empty, accessValidator = AccessValidatorRef(), missingOnlyHeadersIn = Map.empty, - missingOnlyHeadersOut = Map.empty + missingOnlyHeadersOut = Map.empty, + stripPath = true ) lazy val otoroshiVersion = "1.4.14-dev" diff --git a/otoroshi/app/gateway/handlers.scala b/otoroshi/app/gateway/handlers.scala index 64e57aa4d0..cb856ce270 100644 --- a/otoroshi/app/gateway/handlers.scala +++ b/otoroshi/app/gateway/handlers.scala @@ -1108,6 +1108,7 @@ class GatewayRequestHandler(snowMonkey: SnowMonkey, val uriParts = rawUri.split("/").toSeq val uri: String = descriptor.matchingRoot + .filter(_ => descriptor.stripPath) .map(m => req.relativeUri.replace(m, "")) .getOrElse(rawUri) val scheme = diff --git a/otoroshi/app/gateway/websockets.scala b/otoroshi/app/gateway/websockets.scala index 7274680b40..477ef1713a 100644 --- a/otoroshi/app/gateway/websockets.scala +++ b/otoroshi/app/gateway/websockets.scala @@ -622,7 +622,10 @@ class WebSocketHandler()(implicit env: Env) { val rawUri = req.relativeUri.substring(1) val uriParts = rawUri.split("/").toSeq val uri: String = - descriptor.matchingRoot.map(m => req.relativeUri.replace(m, "")).getOrElse(rawUri) + descriptor.matchingRoot + .filter(_ => descriptor.stripPath) + .map(m => req.relativeUri.replace(m, "")) + .getOrElse(rawUri) // val index = reqCounter.incrementAndGet() % (if (descriptor.targets.nonEmpty) descriptor.targets.size else 1) // // Round robin loadbalancing is happening here !!!!! // val target = descriptor.targets.apply(index.toInt) diff --git a/otoroshi/app/models/descriptor.scala b/otoroshi/app/models/descriptor.scala index ecc56cd378..28d968208f 100644 --- a/otoroshi/app/models/descriptor.scala +++ b/otoroshi/app/models/descriptor.scala @@ -1780,6 +1780,7 @@ case class ServiceDescriptor( targets: Seq[Target] = Seq.empty[Target], root: String = "/", matchingRoot: Option[String] = None, + stripPath: Boolean = true, localHost: String = "localhost:8080", localScheme: String = "http", redirectToLocal: Boolean = false, @@ -2309,6 +2310,7 @@ object ServiceDescriptor { localScheme = (json \ "localScheme").asOpt[String].getOrElse("http"), redirectToLocal = (json \ "redirectToLocal").asOpt[Boolean].getOrElse(false), enabled = (json \ "enabled").asOpt[Boolean].getOrElse(true), + stripPath = (json \ "stripPath").asOpt[Boolean].getOrElse(true), userFacing = (json \ "userFacing").asOpt[Boolean].getOrElse(false), privateApp = (json \ "privateApp").asOpt[Boolean].getOrElse(false), forceHttps = (json \ "forceHttps").asOpt[Boolean].getOrElse(true), @@ -2416,6 +2418,7 @@ object ServiceDescriptor { "targets" -> JsArray(sd.targets.map(_.toJson)), "root" -> sd.root, "matchingRoot" -> sd.matchingRoot, + "stripPath" -> sd.stripPath, "localHost" -> sd.localHost, "localScheme" -> sd.localScheme, "redirectToLocal" -> sd.redirectToLocal, @@ -2520,7 +2523,8 @@ trait ServiceDescriptorDataStore extends BasicStore[ServiceDescriptor] { removeHeadersOut = Seq.empty, accessValidator = AccessValidatorRef(), missingOnlyHeadersIn = Map.empty, - missingOnlyHeadersOut = Map.empty + missingOnlyHeadersOut = Map.empty, + stripPath = true ) def updateMetrics(id: String, callDuration: Long, diff --git a/otoroshi/javascript/src/pages/ServicePage.js b/otoroshi/javascript/src/pages/ServicePage.js index 30c4b621b8..7ad2c5e2d6 100644 --- a/otoroshi/javascript/src/pages/ServicePage.js +++ b/otoroshi/javascript/src/pages/ServicePage.js @@ -1187,6 +1187,12 @@ export class ServicePage extends Component { .matchingRoot || ''}/`} /> )} + this.changeTheValue('stripPath', e)} + />