Repository: knox
Updated Branches:
  refs/heads/master 5cb02e2f9 -> febf20c05


KNOX-729 added filter apply capability to html content


Project: http://git-wip-us.apache.org/repos/asf/knox/repo
Commit: http://git-wip-us.apache.org/repos/asf/knox/commit/febf20c0
Tree: http://git-wip-us.apache.org/repos/asf/knox/tree/febf20c0
Diff: http://git-wip-us.apache.org/repos/asf/knox/diff/febf20c0

Branch: refs/heads/master
Commit: febf20c0570bdcff727e0053b895cc41b00f1a30
Parents: 5cb02e2
Author: Sumit Gupta <su...@apache.org>
Authored: Sat Oct 15 07:19:42 2016 -0400
Committer: Sumit Gupta <su...@apache.org>
Committed: Sat Oct 15 07:19:42 2016 -0400

----------------------------------------------------------------------
 .../rewrite/impl/html/HtmlFilterReaderBase.java | 20 +++++++-
 .../api/UrlRewriteServletFilterTest.java        | 51 ++++++++++++++++++++
 .../api/UrlRewriteServletFilterTest/rewrite.xml | 11 +++++
 3 files changed, 81 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/knox/blob/febf20c0/gateway-provider-rewrite/src/main/java/org/apache/hadoop/gateway/filter/rewrite/impl/html/HtmlFilterReaderBase.java
----------------------------------------------------------------------
diff --git 
a/gateway-provider-rewrite/src/main/java/org/apache/hadoop/gateway/filter/rewrite/impl/html/HtmlFilterReaderBase.java
 
b/gateway-provider-rewrite/src/main/java/org/apache/hadoop/gateway/filter/rewrite/impl/html/HtmlFilterReaderBase.java
index 6a7071f..a6222a8 100644
--- 
a/gateway-provider-rewrite/src/main/java/org/apache/hadoop/gateway/filter/rewrite/impl/html/HtmlFilterReaderBase.java
+++ 
b/gateway-provider-rewrite/src/main/java/org/apache/hadoop/gateway/filter/rewrite/impl/html/HtmlFilterReaderBase.java
@@ -24,6 +24,7 @@ import net.htmlparser.jericho.Segment;
 import net.htmlparser.jericho.StartTag;
 import net.htmlparser.jericho.StreamedSource;
 import net.htmlparser.jericho.Tag;
+import 
org.apache.hadoop.gateway.filter.rewrite.api.UrlRewriteFilterApplyDescriptor;
 import 
org.apache.hadoop.gateway.filter.rewrite.api.UrlRewriteFilterContentDescriptor;
 import 
org.apache.hadoop.gateway.filter.rewrite.api.UrlRewriteFilterPathDescriptor;
 import org.apache.hadoop.gateway.filter.rewrite.i18n.UrlRewriteMessages;
@@ -43,6 +44,7 @@ import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Map;
 import java.util.Stack;
+import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
 public abstract class HtmlFilterReaderBase extends Reader implements 
UrlRewriteFilterReader {
@@ -173,7 +175,8 @@ public abstract class HtmlFilterReaderBase extends Reader 
implements UrlRewriteF
       String outputValue = inputValue;
       try {
         Level tag = stack.peek();
-        outputValue = filterAttribute( tag.getQName(), tag.getQName( 
attribute.getName() ), inputValue, null );
+        String name = getRuleName(inputValue);
+        outputValue = filterAttribute( tag.getQName(), tag.getQName( 
attribute.getName() ), inputValue, name );
         if( outputValue == null ) {
           outputValue = inputValue;
         }
@@ -187,6 +190,21 @@ public abstract class HtmlFilterReaderBase extends Reader 
implements UrlRewriteF
     }
   }
 
+  private String getRuleName(String inputValue) {
+    if( config != null && !config.getSelectors().isEmpty() ) {
+      for( UrlRewriteFilterPathDescriptor selector : config.getSelectors() ) {
+        if ( selector instanceof UrlRewriteFilterApplyDescriptor ) {
+          UrlRewriteFilterApplyDescriptor apply = 
(UrlRewriteFilterApplyDescriptor)selector;
+          Matcher matcher = apply.compiledPath( REGEX_COMPILER ).matcher( 
inputValue );
+            if (matcher.matches()) {
+              return apply.rule();
+            }
+          }
+        }
+      }
+      return null;
+    }
+
   private void processText( Segment segment ) {
     String inputValue = segment.toString();
     String outputValue = inputValue;

http://git-wip-us.apache.org/repos/asf/knox/blob/febf20c0/gateway-provider-rewrite/src/test/java/org/apache/hadoop/gateway/filter/rewrite/api/UrlRewriteServletFilterTest.java
----------------------------------------------------------------------
diff --git 
a/gateway-provider-rewrite/src/test/java/org/apache/hadoop/gateway/filter/rewrite/api/UrlRewriteServletFilterTest.java
 
b/gateway-provider-rewrite/src/test/java/org/apache/hadoop/gateway/filter/rewrite/api/UrlRewriteServletFilterTest.java
index 8167d55..54fdfa3 100644
--- 
a/gateway-provider-rewrite/src/test/java/org/apache/hadoop/gateway/filter/rewrite/api/UrlRewriteServletFilterTest.java
+++ 
b/gateway-provider-rewrite/src/test/java/org/apache/hadoop/gateway/filter/rewrite/api/UrlRewriteServletFilterTest.java
@@ -675,6 +675,57 @@ public class UrlRewriteServletFilterTest {
   }
 
   @Test
+  public void testResponseHtmlBodyRewriteWithFilterInitParam() throws 
Exception {
+    Map<String,String> initParams = new HashMap<String,String>();
+    //initParams.put( "url, "" );
+    initParams.put( "response.body", "test-filter-4" );
+    //initParams.put( "response", "" );
+    setUp( initParams );
+
+    String responseHtml = "<!DOCTYPE html>\n" +
+        "<html>\n" +
+        "  <head>\n" +
+        "    <meta charset=\"UTF-8\">\n" +
+        "    <link rel=\"stylesheet\" href=\"pretty.css\">\n" +
+        "    <script src=\"script.js\"></script>\n" +
+        "  </head>\n" +
+        "  <body>\n" +
+        "  </body>\n" +
+        "</html>";
+    String rewrittenResponseHtml = "<!DOCTYPE html>\n" +
+        "<html>\n" +
+        "  <head>\n" +
+        "    <meta charset=\"UTF-8\">\n" +
+        "    <link rel=\"stylesheet\" 
href=\"http://someotherhost/stylesheets/pretty.css\";>\n" +
+        "    <script src=\"script.js\"></script>\n" +
+        "  </head>\n" +
+        "  <body>\n" +
+        "  </body>\n" +
+        "</html>";
+
+    // Setup the server side request/response interaction.
+    interaction.expect()
+        .method( "GET" )
+        .requestUrl( "http://mock-host:42/test-output-path-1"; );
+    interaction.respond()
+        .contentType( "application/html" )
+        .content( responseHtml, Charset.forName( "UTF-8" ) )
+        .status( 200 );
+    interactions.add( interaction );
+    request.setMethod( "GET" );
+    request.setURI( "/test-input-path" );
+    request.setHeader( "Host", "mock-host:42" );
+    request.setHeader( "Content-Type", "application/html" );
+
+    // Execute the request.
+    response = TestUtils.execute( server, request );
+
+    assertThat( response.getStatus(), is( 200 ) );
+    String content = response.getContent();
+    assertThat(content, is(rewrittenResponseHtml));
+  }
+
+  @Test
   public void testResponseXmlBodyRewriteWithFilterInitParam() throws Exception 
{
     Map<String,String> initParams = new HashMap<String,String>();
     initParams.put( "response.body", "test-filter-2" );

http://git-wip-us.apache.org/repos/asf/knox/blob/febf20c0/gateway-provider-rewrite/src/test/resources/org/apache/hadoop/gateway/filter/rewrite/api/UrlRewriteServletFilterTest/rewrite.xml
----------------------------------------------------------------------
diff --git 
a/gateway-provider-rewrite/src/test/resources/org/apache/hadoop/gateway/filter/rewrite/api/UrlRewriteServletFilterTest/rewrite.xml
 
b/gateway-provider-rewrite/src/test/resources/org/apache/hadoop/gateway/filter/rewrite/api/UrlRewriteServletFilterTest/rewrite.xml
index ad51cc8..e3e9c63 100644
--- 
a/gateway-provider-rewrite/src/test/resources/org/apache/hadoop/gateway/filter/rewrite/api/UrlRewriteServletFilterTest/rewrite.xml
+++ 
b/gateway-provider-rewrite/src/test/resources/org/apache/hadoop/gateway/filter/rewrite/api/UrlRewriteServletFilterTest/rewrite.xml
@@ -49,6 +49,10 @@
         <rewrite 
template="test-protocol://{$serviceAddr[NAMENODE]}/test-path"/>
     </rule>
 
+    <rule name="test-rule-html-attribute">
+        <rewrite template="http://someotherhost/stylesheets/pretty.css"/>
+    </rule>
+
     <filter name="test-filter-1">
         <content type="application/json">
             <apply path="$.url" rule="test-rule-1"/>
@@ -81,4 +85,11 @@
         </content>
     </filter>
 
+    <filter name="test-filter-4">
+        <content type="*/html">
+            <apply path="pretty.css" rule="test-rule-html-attribute"/>
+        </content>
+    </filter>
+
+
 </rules>
\ No newline at end of file

Reply via email to