zeroflag opened a new pull request, #769:
URL: https://github.com/apache/knox/pull/769
## What changes were proposed in this pull request?
Ozone SCM UI uses placeholders such as `{{typestat.portval.toLowerCase()}}`
in the HTML which are supposed to be replaced by JavaScript code. However this
is the same syntax what knox uses for template variables. If no escaping is
used knox will populate the the template variable with an empty string since it
has no value.
But escaping `{` didn't work originally in rewrite templates (so `\{x\}`
resulted literally `\{x\}`).
## How was this patch tested?
sandbox topology:
```xml
<service>
<role>OZONE-SCM</role>
<url>http://localhost:1701</url>
</service>
```
service.xml
```xml
<service role="OZONE-SCM" name="ozone-scm" version="1.2.0">
<metadata>
<type>UI</type>
<context>/ozone-scm/index.html?host={{BACKEND_HOST}}</context>
<shortDesc>OZONE SCM UI</shortDesc>
</metadata>
<routes>
<route path="/ozone-scm/index.html">
<rewrite apply="OZONE-SCM/ozone-scm/inbound/request"
to="request.url"/>
<rewrite apply="OZONE-SCM/ozone-scm/outbound/response"
to="response.body"/>
</route>
</routes>
<dispatch
classname="org.apache.knox.gateway.dispatch.URLDecodingDispatch"
ha-classname="org.apache.knox.gateway.dispatch.URLDecodingDispatch"/>
</service>
````
rewrite.xml
```xml
<rules>
<rule dir="IN" name="OZONE-SCM/ozone-scm/inbound/request"
pattern="*://*:*/**/ozone-scm/{path=**}?host={host}?{**}">
<rewrite template="{host}/{path=**}?{**}"/>
</rule>
<rule dir="OUT" name="OZONE-SCM/ozone-scm/outbound/datanode/address">
<rewrite
template="{gateway.url}/ozone-scm/datanode/index.html?host=\{\{typestat.portval.toLowerCase()\}\}://\{\{typestat.hostname\}\}:\{\{typestat.portno\}\}"/>
</rule>
<filter name="OZONE-SCM/ozone-scm/outbound/response">
<content type="*/html">
<apply
path="\{\{typestat\.portval\.toLowerCase\(\)\}\}\:\/\/\{\{typestat\.hostname\}\}\:\{\{typestat\.portno\}\}"
rule="OZONE-SCM/ozone-scm/outbound/datanode/address"/>
</content>
</filter>
</rules>
```
Http server to emulate the service
```smalltalk
Teapot on
GET: 'index.html' ->
'<a
href="{{typestat.portval.toLowerCase()}}://{{typestat.hostname}}:{{typestat.portno}}">{{typestat.hostname}}</a>';
start.
```
URL to check:
https://localhost:8443/gateway/sandbox/ozone-scm/index.html?host=http://localhost:1701
Result:
```html
<a
href="https://localhost:8443/gateway/sandbox/ozone-scm/datanode/index.html?host={{typestat.portval.toLowerCase()}}://{{typestat.hostname}}:{{typestat.portno}}">{{typestat.hostname}}</a>
```
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]