atlas git commit: ATLAS-1985: fix incorrect URL-encoding while redirecting to active instance in HA
Repository: atlas Updated Branches: refs/heads/0.8-incubating 8cc62810d -> bc2d39d10 ATLAS-1985: fix incorrect URL-encoding while redirecting to active instance in HA Change-Id: I919fcef66368c10b1f8a752043c422a333835508 Signed-off-by: Madhan Neethiraj (cherry picked from commit 6547af2d035fae7402d7a4d77e640e0599fb1075) Project: http://git-wip-us.apache.org/repos/asf/atlas/repo Commit: http://git-wip-us.apache.org/repos/asf/atlas/commit/bc2d39d1 Tree: http://git-wip-us.apache.org/repos/asf/atlas/tree/bc2d39d1 Diff: http://git-wip-us.apache.org/repos/asf/atlas/diff/bc2d39d1 Branch: refs/heads/0.8-incubating Commit: bc2d39d1066a01599509c4aa366f4fbdc0c51f4c Parents: 8cc6281 Author: nixonrodrigues Authored: Mon Jul 24 18:43:31 2017 +0530 Committer: Madhan Neethiraj Committed: Tue Jul 25 07:27:01 2017 -0700 -- .../atlas/web/filters/ActiveServerFilter.java | 15 +- .../web/filters/ActiveServerFilterTest.java | 21 +++- 2 files changed, 30 insertions(+), 6 deletions(-) -- http://git-wip-us.apache.org/repos/asf/atlas/blob/bc2d39d1/webapp/src/main/java/org/apache/atlas/web/filters/ActiveServerFilter.java -- diff --git a/webapp/src/main/java/org/apache/atlas/web/filters/ActiveServerFilter.java b/webapp/src/main/java/org/apache/atlas/web/filters/ActiveServerFilter.java index 29d829f..c68c4b2 100644 --- a/webapp/src/main/java/org/apache/atlas/web/filters/ActiveServerFilter.java +++ b/webapp/src/main/java/org/apache/atlas/web/filters/ActiveServerFilter.java @@ -20,7 +20,6 @@ package org.apache.atlas.web.filters; import org.apache.atlas.web.service.ActiveInstanceState; import org.apache.atlas.web.service.ServiceState; -import org.apache.hadoop.http.HtmlQuoting; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; @@ -37,6 +36,7 @@ import javax.servlet.http.HttpServletResponse; import javax.ws.rs.HttpMethod; import javax.ws.rs.core.HttpHeaders; import java.io.IOException; +import java.net.URLEncoder; /** * A servlet {@link Filter} that redirects web requests from a passive Atlas server instance to an active one. @@ -127,14 +127,19 @@ public class ActiveServerFilter implements Filter { String activeServerAddress) throws IOException { String requestURI = servletRequest.getRequestURI(); String queryString = servletRequest.getQueryString(); + +if (queryString != null && (!queryString.isEmpty())) { +queryString = URLEncoder.encode(queryString, "UTF-8"); +} + if ((queryString != null) && (!queryString.isEmpty())) { requestURI += "?" + queryString; } -String quotedUri = HtmlQuoting.quoteHtmlChars(requestURI); -if (quotedUri == null) { -quotedUri = "/"; + +if (requestURI == null) { +requestURI = "/"; } -String redirectLocation = activeServerAddress + quotedUri; +String redirectLocation = activeServerAddress + requestURI; LOG.info("Not active. Redirecting to {}", redirectLocation); // A POST/PUT/DELETE require special handling by sending HTTP 307 instead of the regular 301/302. // Reference: http://stackoverflow.com/questions/2068418/whats-the-difference-between-a-302-and-a-307-redirect http://git-wip-us.apache.org/repos/asf/atlas/blob/bc2d39d1/webapp/src/test/java/org/apache/atlas/web/filters/ActiveServerFilterTest.java -- diff --git a/webapp/src/test/java/org/apache/atlas/web/filters/ActiveServerFilterTest.java b/webapp/src/test/java/org/apache/atlas/web/filters/ActiveServerFilterTest.java index 3396072..60f3d48 100644 --- a/webapp/src/test/java/org/apache/atlas/web/filters/ActiveServerFilterTest.java +++ b/webapp/src/test/java/org/apache/atlas/web/filters/ActiveServerFilterTest.java @@ -137,11 +137,30 @@ public class ActiveServerFilterTest { activeServerFilter.doFilter(servletRequest, servletResponse, filterChain); -verify(servletResponse).sendRedirect(ACTIVE_SERVER_ADDRESS + "types?query=TRAIT"); +verify(servletResponse).sendRedirect(ACTIVE_SERVER_ADDRESS + "types?query%3DTRAIT"); } @Test +public void testRedirectedRequestShouldContainEncodeQueryParameters() throws IOException, ServletException { + when(serviceState.getState()).thenReturn(ServiceState.ServiceStateValue.PASSIVE); + +ActiveServerFilter activeServerFilter = new ActiveServerFilter(activeInstanceState, serviceState); + + when(activeInstanceState.getActiveServerAddress()).thenReturn(ACTIVE_SERVER_ADDRESS); +when(servletRequest.getMethod()).thenReturn(HttpMethod.GET); + when(s
atlas git commit: ATLAS-1985: fix incorrect URL-encoding while redirecting to active instance in HA
Repository: atlas Updated Branches: refs/heads/master 2e8f6013f -> 6547af2d0 ATLAS-1985: fix incorrect URL-encoding while redirecting to active instance in HA Change-Id: I919fcef66368c10b1f8a752043c422a333835508 Signed-off-by: Madhan Neethiraj Project: http://git-wip-us.apache.org/repos/asf/atlas/repo Commit: http://git-wip-us.apache.org/repos/asf/atlas/commit/6547af2d Tree: http://git-wip-us.apache.org/repos/asf/atlas/tree/6547af2d Diff: http://git-wip-us.apache.org/repos/asf/atlas/diff/6547af2d Branch: refs/heads/master Commit: 6547af2d035fae7402d7a4d77e640e0599fb1075 Parents: 2e8f601 Author: nixonrodrigues Authored: Mon Jul 24 18:43:31 2017 +0530 Committer: Madhan Neethiraj Committed: Tue Jul 25 07:09:42 2017 -0700 -- .../atlas/web/filters/ActiveServerFilter.java | 15 +- .../web/filters/ActiveServerFilterTest.java | 21 +++- 2 files changed, 30 insertions(+), 6 deletions(-) -- http://git-wip-us.apache.org/repos/asf/atlas/blob/6547af2d/webapp/src/main/java/org/apache/atlas/web/filters/ActiveServerFilter.java -- diff --git a/webapp/src/main/java/org/apache/atlas/web/filters/ActiveServerFilter.java b/webapp/src/main/java/org/apache/atlas/web/filters/ActiveServerFilter.java index 29d829f..c68c4b2 100644 --- a/webapp/src/main/java/org/apache/atlas/web/filters/ActiveServerFilter.java +++ b/webapp/src/main/java/org/apache/atlas/web/filters/ActiveServerFilter.java @@ -20,7 +20,6 @@ package org.apache.atlas.web.filters; import org.apache.atlas.web.service.ActiveInstanceState; import org.apache.atlas.web.service.ServiceState; -import org.apache.hadoop.http.HtmlQuoting; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; @@ -37,6 +36,7 @@ import javax.servlet.http.HttpServletResponse; import javax.ws.rs.HttpMethod; import javax.ws.rs.core.HttpHeaders; import java.io.IOException; +import java.net.URLEncoder; /** * A servlet {@link Filter} that redirects web requests from a passive Atlas server instance to an active one. @@ -127,14 +127,19 @@ public class ActiveServerFilter implements Filter { String activeServerAddress) throws IOException { String requestURI = servletRequest.getRequestURI(); String queryString = servletRequest.getQueryString(); + +if (queryString != null && (!queryString.isEmpty())) { +queryString = URLEncoder.encode(queryString, "UTF-8"); +} + if ((queryString != null) && (!queryString.isEmpty())) { requestURI += "?" + queryString; } -String quotedUri = HtmlQuoting.quoteHtmlChars(requestURI); -if (quotedUri == null) { -quotedUri = "/"; + +if (requestURI == null) { +requestURI = "/"; } -String redirectLocation = activeServerAddress + quotedUri; +String redirectLocation = activeServerAddress + requestURI; LOG.info("Not active. Redirecting to {}", redirectLocation); // A POST/PUT/DELETE require special handling by sending HTTP 307 instead of the regular 301/302. // Reference: http://stackoverflow.com/questions/2068418/whats-the-difference-between-a-302-and-a-307-redirect http://git-wip-us.apache.org/repos/asf/atlas/blob/6547af2d/webapp/src/test/java/org/apache/atlas/web/filters/ActiveServerFilterTest.java -- diff --git a/webapp/src/test/java/org/apache/atlas/web/filters/ActiveServerFilterTest.java b/webapp/src/test/java/org/apache/atlas/web/filters/ActiveServerFilterTest.java index 3396072..60f3d48 100644 --- a/webapp/src/test/java/org/apache/atlas/web/filters/ActiveServerFilterTest.java +++ b/webapp/src/test/java/org/apache/atlas/web/filters/ActiveServerFilterTest.java @@ -137,11 +137,30 @@ public class ActiveServerFilterTest { activeServerFilter.doFilter(servletRequest, servletResponse, filterChain); -verify(servletResponse).sendRedirect(ACTIVE_SERVER_ADDRESS + "types?query=TRAIT"); +verify(servletResponse).sendRedirect(ACTIVE_SERVER_ADDRESS + "types?query%3DTRAIT"); } @Test +public void testRedirectedRequestShouldContainEncodeQueryParameters() throws IOException, ServletException { + when(serviceState.getState()).thenReturn(ServiceState.ServiceStateValue.PASSIVE); + +ActiveServerFilter activeServerFilter = new ActiveServerFilter(activeInstanceState, serviceState); + + when(activeInstanceState.getActiveServerAddress()).thenReturn(ACTIVE_SERVER_ADDRESS); +when(servletRequest.getMethod()).thenReturn(HttpMethod.GET); + when(servletRequest.getRequestURI()).thenReturn("api/atlas/v2/search/basic"); + whe