diff --git a/src/main/java/org/jasig/portlet/proxy/service/web/interceptor/UserInfoUrlParameterizingPreInterceptor.java b/src/main/java/org/jasig/portlet/proxy/service/web/interceptor/UserInfoUrlParameterizingPreInterceptor.java index 137dfb72..cb7476a9 100644 --- a/src/main/java/org/jasig/portlet/proxy/service/web/interceptor/UserInfoUrlParameterizingPreInterceptor.java +++ b/src/main/java/org/jasig/portlet/proxy/service/web/interceptor/UserInfoUrlParameterizingPreInterceptor.java @@ -85,6 +85,9 @@ public void intercept(HttpContentRequestImpl proxyRequest, } } + // curly braces are illegal URL characters + url = removeRemainingUrlTokens(url); + // update the URL in the content request proxyRequest.setProxiedLocation(url); @@ -94,6 +97,11 @@ public void intercept(HttpContentRequestImpl proxyRequest, } + private String removeRemainingUrlTokens(String url) { + String s = url.replaceAll("/\\{[^\\}]*\\}/", "/"); + return s.replaceAll("\\{[^\\}]*\\}", ""); + } + @Override public boolean validate(HttpContentRequestImpl proxyRequest, PortletRequest portletRequest) { diff --git a/src/test/java/org/jasig/portlet/proxy/service/web/interceptor/UserInfoUrlParameterizingPreInterceptorTest.java b/src/test/java/org/jasig/portlet/proxy/service/web/interceptor/UserInfoUrlParameterizingPreInterceptorTest.java index e1ca8027..0d354219 100644 --- a/src/test/java/org/jasig/portlet/proxy/service/web/interceptor/UserInfoUrlParameterizingPreInterceptorTest.java +++ b/src/test/java/org/jasig/portlet/proxy/service/web/interceptor/UserInfoUrlParameterizingPreInterceptorTest.java @@ -57,7 +57,6 @@ public void setUp() { proxyRequest = new HttpContentRequestImpl(); proxyRequest.setParameters(parameters); proxyRequest.setProxiedLocation("http://somewhere.com/rest/test/id"); - } @Test @@ -74,19 +73,52 @@ public void testNoChange() { public void testReplacePathElement() { proxyRequest.setProxiedLocation("http://somewhere.com/rest/{test}/id"); preprocessor.intercept(proxyRequest, portletRequest); - + assertEquals("http://somewhere.com/rest/somevalue/id", proxyRequest.getProxiedLocation()); + } + + @Test + public void testNonReplacePathElement() { + proxyRequest.setProxiedLocation("http://somewhere.com/rest/{unknown_attr}/id"); + preprocessor.intercept(proxyRequest, portletRequest); + + assertEquals("http://somewhere.com/rest/id", proxyRequest.getProxiedLocation()); + } + @Test + public void testReplaceParam() { + proxyRequest.setProxiedLocation("http://somewhere.com/rest/id?param={test}"); + preprocessor.intercept(proxyRequest, portletRequest); + + assertEquals("http://somewhere.com/rest/id?param=somevalue", proxyRequest.getProxiedLocation()); } - + @Test - public void testReplaceParamter() { + public void testNonReplaceParam() { + proxyRequest.setProxiedLocation("http://somewhere.com/rest/id?param={missing_attr}"); + preprocessor.intercept(proxyRequest, portletRequest); + + assertEquals("http://somewhere.com/rest/id?param=", proxyRequest.getProxiedLocation()); + } + + @Test + public void testReplaceParameter() { IFormField formField = new FormFieldImpl("param", new String[]{"val1", "{test}"}); parameters.put("param", formField); preprocessor.intercept(proxyRequest, portletRequest); - + assertEquals("val1", proxyRequest.getParameters().get("param").getValues()[0]); assertEquals("somevalue", proxyRequest.getParameters().get("param").getValues()[1]); } + @Test + public void testNonReplaceParameter() { + IFormField formField = new FormFieldImpl("param", new String[]{"val1", "{missing_attr}"}); + parameters.put("param", formField); + preprocessor.intercept(proxyRequest, portletRequest); + + assertEquals("val1", proxyRequest.getParameters().get("param").getValues()[0]); + assertEquals("{missing_attr}", proxyRequest.getParameters().get("param").getValues()[1]); + } + }