package org.swellrt.server.box.servlet; import java.io.IOException; import javax.inject.Singleton; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.waveprotocol.box.server.authentication.SessionManager; import org.waveprotocol.wave.util.logging.Log; import com.google.inject.Inject; /** * A echo service to acknowledge if session cookie is sent by * the browser. * * A false response means that third party cookies are disabled. * Pass a session id token to cache the request * * GET /echo/{sessionId} * * 200 OK * { * sessionCookie: true, * sessionId: ... * } * * @author pablojan@gmail.com (Pablo Ojanguren) * */ @Singleton public class EchoService extends BaseService { private static final Log LOG = Log.get(EchoService.class); public static class EchoServiceData extends ServiceData { protected final boolean sessionCookie; protected final String sessionId; protected final String transientSessionId; public EchoServiceData(boolean sessionCookie, String sessionId, String transientSessionId) { this.sessionCookie = sessionCookie; this.sessionId = sessionId; this.transientSessionId = transientSessionId; } } @Inject public EchoService(SessionManager sessionManager) { super(sessionManager); } @Override public void execute(HttpServletRequest request, HttpServletResponse response) throws IOException { try { if (request.getMethod().equals("GET")) doGet(request, response); } catch (RuntimeException e) { sendResponseError(response, HttpServletResponse.SC_INTERNAL_SERVER_ERROR, RC_INTERNAL_SERVER_ERROR); LOG.warning(e.getMessage(), e); } } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { boolean hasSessionCookie = sessionManager.getSessionCookie(request) != null; String sessionId = sessionManager.getSessionId(request); String transientSessionId = sessionManager.getTransientSessionId(request); EchoServiceData responseData = new EchoServiceData(hasSessionCookie, sessionId, transientSessionId); sendResponse(response, responseData); } }