package com.anjlab.ping.services.security; import java.io.IOException; import java.security.Principal; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.tapestry5.services.Dispatcher; import org.apache.tapestry5.services.Request; import org.apache.tapestry5.services.RequestGlobals; import org.apache.tapestry5.services.Response; import com.anjlab.ping.services.GAEHelper; public class AccessController implements Dispatcher { private GAEHelper helper; private RequestGlobals globals; public AccessController(GAEHelper helper, RequestGlobals globals) { this.helper = helper; this.globals = globals; } public boolean dispatch(Request request, Response response) throws IOException { Principal principal = helper.getUserPrincipal(); String thisURL = request.getPath(); if (principal != null || thisURL.startsWith("/job/analytics/1026/5002") // Share PingService analytics with everyone || thisURL.startsWith("/job/analytics.form") // and allow anonymous form submission for analytics page // (i.e., for changing analytics view) || thisURL.startsWith("/traceroute") || thisURL.startsWith("/assets") || thisURL.startsWith("/job/run/") || thisURL.startsWith("/task/") || thisURL.startsWith("/welcome") || thisURL.startsWith("/help") || thisURL.startsWith("/feedback")) { return false; } else { if (thisURL.equals("/")) { forwardRequest("/welcome", request, response); } else { response.sendRedirect(helper.createLoginURL()); } return true; } } private void forwardRequest(String forwardTo, Request request, Response response) throws IOException { try { HttpServletRequest servletRequest = globals.getHTTPServletRequest(); HttpServletResponse servletResponse = globals.getHTTPServletResponse(); servletRequest.getRequestDispatcher(forwardTo).forward(servletRequest, servletResponse); globals.storeServletRequestResponse(servletRequest, servletResponse); globals.storeRequestResponse(request, response); } catch (ServletException e) { throw new RuntimeException("Error forwarding request", e); } } }