Repository: knox
Updated Branches:
  refs/heads/master 9c65733f0 -> 999831779


KNOX-614: Incorrect URI template expansion with {**} query params #fragments


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

Branch: refs/heads/master
Commit: 999831779eeb2dbaffc2e655ac1727382dc93afa
Parents: 9c65733
Author: Kevin Minder <kevin.min...@hortonworks.com>
Authored: Tue Oct 27 13:15:47 2015 -0400
Committer: Kevin Minder <kevin.min...@hortonworks.com>
Committed: Tue Oct 27 13:16:25 2015 -0400

----------------------------------------------------------------------
 CHANGES                                         |  3 +-
 .../gateway/util/urltemplate/Expander.java      | 10 ++++--
 .../gateway/util/urltemplate/ExpanderTest.java  | 34 ++++++++++++++++++++
 3 files changed, 44 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/knox/blob/99983177/CHANGES
----------------------------------------------------------------------
diff --git a/CHANGES b/CHANGES
index 0a851ab..d6f0d99 100644
--- a/CHANGES
+++ b/CHANGES
@@ -16,7 +16,7 @@ Release Notes - Apache Knox - Version 0.7.0
     * [KNOX-564] - Topology deployment fails for no configured providers
     * [KNOX-590] - CLI sys-user-auth-test and user-auth-test have improved 
messages and work for more Shiro configs
     * [KNOX-597] - Improve diagnostic logging of HTTP traffic
-    * [KNOX-596] - Add diagnostics to topology depoloyment
+    * [KNOX-596] - Add diagnostics to topology deployment
 
 ** Bug
     * [KNOX-554] - Fixed support for gateway.path change + added support for 
X-Forward-* headers in admin topology API.
@@ -25,6 +25,7 @@ Release Notes - Apache Knox - Version 0.7.0
     * [KNOX-599] - Template with {**} in queries are expanded with =null for 
query params without a value
     * [KNOX-601] - Knox test failures on windows
     * [KNOX-603] - Coverity: Potential resource leak in 
BaseKeystoreService.createKeystore
+    * [KNOX-614] - Incorrect URI template expansion with {**} query params 
#fragments
 
 ------------------------------------------------------------------------------
 Release Notes - Apache Knox - Version 0.6.0

http://git-wip-us.apache.org/repos/asf/knox/blob/99983177/gateway-util-urltemplate/src/main/java/org/apache/hadoop/gateway/util/urltemplate/Expander.java
----------------------------------------------------------------------
diff --git 
a/gateway-util-urltemplate/src/main/java/org/apache/hadoop/gateway/util/urltemplate/Expander.java
 
b/gateway-util-urltemplate/src/main/java/org/apache/hadoop/gateway/util/urltemplate/Expander.java
index ad6dc82..443df8f 100644
--- 
a/gateway-util-urltemplate/src/main/java/org/apache/hadoop/gateway/util/urltemplate/Expander.java
+++ 
b/gateway-util-urltemplate/src/main/java/org/apache/hadoop/gateway/util/urltemplate/Expander.java
@@ -53,8 +53,14 @@ public class Expander {
     expandScheme( template, names, params, evaluator, builder );
     expandAuthority( template, names, params, evaluator, builder );
     expandPath( template, names, params, evaluator, builder );
-    expandQuery( template, names, params, evaluator, builder );
-    expandFragment( template, names, params, evaluator, builder );
+    if( template.hasFragment() ) {
+      StringBuilder fragment = new StringBuilder();
+      expandFragment( template, names, params, evaluator, fragment );
+      expandQuery( template, names, params, evaluator, builder );
+      builder.append( fragment );
+    } else {
+      expandQuery( template, names, params, evaluator, builder );
+    }
     return builder.toString();
   }
 

http://git-wip-us.apache.org/repos/asf/knox/blob/99983177/gateway-util-urltemplate/src/test/java/org/apache/hadoop/gateway/util/urltemplate/ExpanderTest.java
----------------------------------------------------------------------
diff --git 
a/gateway-util-urltemplate/src/test/java/org/apache/hadoop/gateway/util/urltemplate/ExpanderTest.java
 
b/gateway-util-urltemplate/src/test/java/org/apache/hadoop/gateway/util/urltemplate/ExpanderTest.java
index 2cf8134..816144c 100644
--- 
a/gateway-util-urltemplate/src/test/java/org/apache/hadoop/gateway/util/urltemplate/ExpanderTest.java
+++ 
b/gateway-util-urltemplate/src/test/java/org/apache/hadoop/gateway/util/urltemplate/ExpanderTest.java
@@ -28,7 +28,9 @@ import java.net.URISyntaxException;
 import java.util.Arrays;
 import java.util.List;
 
+import static junit.framework.TestCase.assertNotNull;
 import static org.hamcrest.CoreMatchers.equalTo;
+import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.Matchers.containsString;
 import static org.hamcrest.Matchers.equalToIgnoringCase;
 import static org.junit.Assert.assertThat;
@@ -430,4 +432,36 @@ public class ExpanderTest {
 
   }
 
+  @Test
+  public void testRedirectHeaderRewriteKnoxBug614() throws Exception {
+    URI inputUri, outputUri;
+    Matcher<Void> matcher;
+    Matcher<Void>.Match match;
+    Template input, pattern, template;
+    Evaluator evaluator;
+
+    inputUri = new 
URI("https://internal-host:9443/context/?user.name=admin#/login";);
+
+    input = Parser.parse( inputUri.toString() );
+    pattern = Parser.parse( "*://*:*/{contextRoot}/?{**}#{fragment}" );
+    template = Parser.parse( 
"{$gateway.url}/foo/{contextRoot}/?{**}#{fragment}" );
+
+    matcher = new Matcher<Void>();
+    matcher.add( pattern, null );
+    match = matcher.match( input );
+
+    evaluator = new Evaluator() {
+      @Override
+      public List<String> evaluate( String function, List<String> parameters ) 
{
+        return Arrays.asList( "https://gateway-host:9443/gateway/default"; );
+      }
+    };
+
+    outputUri = Expander.expand( template, match.getParams(), evaluator );
+    assertNotNull(outputUri.toString());
+    assertThat(
+        outputUri.toString(),
+        is( 
"https://gateway-host:9443/gateway/default/foo/context/?user.name=admin#/login"; 
) );
+  }
+
 }

Reply via email to