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: dev-unsubscr...@knox.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org

Reply via email to