package org.openstack.atlas.api.filters;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import static org.openstack.atlas.api.filters.helpers.StringUtilities.getExtendedStackTrace;
public class RolesFilter implements Filter {
private final Log LOG = LogFactory.getLog(RolesFilter.class);
private FilterConfig filterConfig = null;
private static final String X_ROLES = "X-Roles";
@Override
public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig = filterConfig;
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
if (servletRequest instanceof HttpServletRequest) {
HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
HttpServletResponse httpServletResponse = (HttpServletResponse) servletResponse;
try {
//TODO: Extract roles... V1-B-34715 #2 RBAC ..mgmt also at some point
filterChain.doFilter(servletRequest, servletResponse);
} catch (Exception e) {
String exceptMsg = getExtendedStackTrace(e);
LOG.error(String.format("Error in filterChain:%s\n", exceptMsg));
httpServletResponse.sendError(500, "Something unexpected happened. Please contact support.");
}
} else {
filterChain.doFilter(servletRequest, servletResponse);
}
}
@Override
public void destroy() {
this.filterConfig = null;
}
}