package hudson.plugins.greenballs;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
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 javax.servlet.http.HttpServletResponse;
/**
*
* @author Asgeir Storesund Nilsen
*/
public class GreenBallFilter implements Filter {
final Pattern pattern = Pattern.compile(".+/(\\d{2}x\\d{2})/blue(_anime|)\\.gif");
final Logger logger = Logger.getLogger("hudson.plugins.greenballs");
public void init(FilterConfig config) throws ServletException {
}
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException,
ServletException {
if (req instanceof HttpServletRequest && resp instanceof HttpServletResponse) {
final HttpServletRequest httpServletRequest = (HttpServletRequest) req;
final HttpServletResponse httpServletResponse = (HttpServletResponse) resp;
final String uri = httpServletRequest.getRequestURI();
if (uri.endsWith(".gif")) {
final Matcher m = pattern.matcher(uri);
if (m.matches()) {
if (logger.isLoggable(Level.FINE))
logger.log(
Level.FINE,
"Redirecting {0} to {1}",
new Object[] {
uri,
httpServletRequest.getContextPath() + "/plugin/greenballs/" + m.group(1)
+ "/green" + m.group(2) + ".gif" });
httpServletResponse.setHeader("Cache-Control", "public, s-maxage=86400");
httpServletResponse.setDateHeader("Expires", System.currentTimeMillis() + 86400000);
RequestDispatcher dispatcher = httpServletRequest.getRequestDispatcher(httpServletRequest
.getContextPath() + "/plugin/greenballs/" + m.group(1) + "/green" + m.group(2) + ".gif");
dispatcher.forward(httpServletRequest, httpServletResponse);
}
}
}
chain.doFilter(req, resp);
}
public void destroy() {
}
}