package io.cattle.platform.iaas.api.servlet.filter; import io.cattle.platform.iaas.api.request.handler.GenericWhitelistedProxy; import java.io.IOException; import java.util.Arrays; import java.util.HashSet; import java.util.Set; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import org.apache.commons.lang3.StringUtils; public class ProxyFilter implements Filter { String proxy; boolean redirects = true; boolean parseform = false; Set<String> roles; Set<String> methods; @Override public void init(FilterConfig filterConfig) throws ServletException { proxy = filterConfig.getInitParameter("proxy"); String value = filterConfig.getInitParameter("redirects"); if (StringUtils.isNotBlank(value)) { redirects = Boolean.parseBoolean(value); } String parseFormValue = filterConfig.getInitParameter("parseform"); if (StringUtils.isNotBlank(parseFormValue)) { parseform = Boolean.parseBoolean(parseFormValue); } String roles = filterConfig.getInitParameter("roles"); if (StringUtils.isNotBlank(roles)) { this.roles = new HashSet<>(Arrays.asList(roles.trim().split("\\s*,\\s*"))); } String methods = filterConfig.getInitParameter("rolesMethods"); if (StringUtils.isNotBlank(roles)) { this.methods = new HashSet<>(Arrays.asList(methods.trim().split("\\s*,\\s*"))); } } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { RequestDispatcher rd = request.getRequestDispatcher("/v1/proxy/" + proxy + ((HttpServletRequest)request).getRequestURI()); request.setAttribute(GenericWhitelistedProxy.ALLOWED_HOST, true); request.setAttribute(GenericWhitelistedProxy.SET_HOST_CURRENT_HOST, true); request.setAttribute(GenericWhitelistedProxy.REDIRECTS, redirects); request.setAttribute(GenericWhitelistedProxy.PARSE_FORM, parseform); if (roles != null) { request.setAttribute(GenericWhitelistedProxy.REQUIRE_ROLE, roles); } if (methods != null) { request.setAttribute(GenericWhitelistedProxy.METHOD_ROLE, methods); } rd.forward(request, response); return; } @Override public void destroy() { } }