package org.swellrt.server.box.servlet; import java.io.IOException; import java.util.Enumeration; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.swellrt.server.box.events.gcm.GCMSubscriptionStore; import org.waveprotocol.box.server.authentication.SessionManager; import org.waveprotocol.wave.model.wave.ParticipantId; import org.waveprotocol.wave.util.logging.Log; import com.google.inject.Inject; public class NotificationService extends BaseService { private static final Log LOG = Log.get(NotificationService.class); private final GCMSubscriptionStore subscriptionStore; @Inject public NotificationService(SessionManager sessionManager, GCMSubscriptionStore subscriptionStore) { super(sessionManager); this.subscriptionStore = subscriptionStore; } @Override public void execute(HttpServletRequest req, HttpServletResponse response) throws IOException { ParticipantId participantId = sessionManager.getLoggedInUser(req); if (participantId == null) { response.sendError(HttpServletResponse.SC_FORBIDDEN); return; } Enumeration<String> paramNames = req.getParameterNames(); if (!paramNames.hasMoreElements()) { response.sendError(HttpServletResponse.SC_BAD_REQUEST, "No parameters found!"); return; } else { String name = paramNames.nextElement(); String value = req.getParameter(name); String account = sessionManager.getLoggedInAccount(req).getId().getAddress(); switch (name) { case "registerDevice": subscriptionStore.register(account, value); LOG.info("Device <" + value + "> registered for account " + account); response.setStatus(HttpServletResponse.SC_NO_CONTENT); break; case "unregisterDevice": subscriptionStore.unregister(account, value); LOG.info("Device <" + value + "> unregistered for account " + account); response.setStatus(HttpServletResponse.SC_NO_CONTENT); break; case "subscribe": subscriptionStore.addSubscriptor(value, account); LOG.info("Account " + account + " subscribed to wave id " + value); response.setStatus(HttpServletResponse.SC_NO_CONTENT); break; case "unsubscribe": subscriptionStore.removeSubscriptor(value, account); LOG.info("Account " + account + " unsubscribed to wave id " + value); response.setStatus(HttpServletResponse.SC_NO_CONTENT); break; default: response.sendError(HttpServletResponse.SC_BAD_REQUEST, "Unknown operation: " + name); } } } }