diff --git a/appengine/src/com/google/android/chrometophone/server/DeviceInfo.java b/appengine/src/com/google/android/chrometophone/server/DeviceInfo.java index f8abe3e..1b97714 100644 --- a/appengine/src/com/google/android/chrometophone/server/DeviceInfo.java +++ b/appengine/src/com/google/android/chrometophone/server/DeviceInfo.java @@ -31,12 +31,23 @@ public class DeviceInfo { @Persistent private String deviceRegistrationID; + + @Persistent + private boolean debug; public DeviceInfo(Key key, String deviceRegistrationID) { this.key = key; this.deviceRegistrationID = deviceRegistrationID; } + public boolean getDebug() { + return debug; + } + + public void setDebug(boolean debug) { + this.debug = debug; + } + public Key getKey() { return key; } diff --git a/appengine/src/com/google/android/chrometophone/server/RegisterServlet.java b/appengine/src/com/google/android/chrometophone/server/RegisterServlet.java index b58e0d7..5491368 100644 --- a/appengine/src/com/google/android/chrometophone/server/RegisterServlet.java +++ b/appengine/src/com/google/android/chrometophone/server/RegisterServlet.java @@ -27,6 +27,8 @@ import javax.servlet.http.HttpServletResponse; import com.google.android.c2dm.server.C2DMessaging; import com.google.appengine.api.datastore.Key; import com.google.appengine.api.datastore.KeyFactory; +import com.google.appengine.api.oauth.OAuthService; +import com.google.appengine.api.oauth.OAuthServiceFactory; import com.google.appengine.api.users.User; import com.google.appengine.api.users.UserService; import com.google.appengine.api.users.UserServiceFactory; @@ -38,13 +40,50 @@ public class RegisterServlet extends HttpServlet { private static final String OK_STATUS = "OK"; private static final String ERROR_STATUS = "ERROR"; + /** + * Get the user using the UserService. + * + * If not logged in, return an error message. + * + * @return user, or null if not logged in. + * @throws IOException + */ + static User checkUser(HttpServletRequest req, HttpServletResponse resp, + boolean errorIfNotLoggedIn) throws IOException { + // Is it OAuth ? + User user = null; + OAuthService oauthService = OAuthServiceFactory.getOAuthService(); + try { + user = oauthService.getCurrentUser(); + if (user != null) { + log.info("Found OAuth user " + user); + return user; + } + } catch (Throwable t) { + user = null; + } + + UserService userService = UserServiceFactory.getUserService(); + user = userService.getCurrentUser(); + if (user == null && errorIfNotLoggedIn) { + // TODO: redirect to OAuth/user service login, or send the URL + // TODO: 401 instead of 400 + resp.setStatus(400); + resp.getWriter().println(ERROR_STATUS + " (Not authorized)"); + } + return user; + } + + /** + * @deprecated will be removed in next rel. + */ @Override - public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException { - doGet(req, resp); + public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { + doPost(req, resp); } @Override - public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { + public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException { resp.setContentType("text/plain"); String deviceRegistrationID = req.getParameter("devregid"); @@ -54,9 +93,7 @@ public class RegisterServlet extends HttpServlet { return; } - // Authorize & store device info - UserService userService = UserServiceFactory.getUserService(); - User user = userService.getCurrentUser(); + User user = checkUser(req, resp, true); if (user != null) { Key key = KeyFactory.createKey(DeviceInfo.class.getSimpleName(), user.getEmail()); DeviceInfo device = new DeviceInfo(key, deviceRegistrationID); @@ -73,9 +110,6 @@ public class RegisterServlet extends HttpServlet { } finally { pm.close(); } - } else { - resp.setStatus(400); - resp.getWriter().println(ERROR_STATUS + " (Not authorized)"); } } } diff --git a/appengine/src/com/google/android/chrometophone/server/SendServlet.java b/appengine/src/com/google/android/chrometophone/server/SendServlet.java index 6cb4581..b9b35b8 100644 --- a/appengine/src/com/google/android/chrometophone/server/SendServlet.java +++ b/appengine/src/com/google/android/chrometophone/server/SendServlet.java @@ -76,8 +76,7 @@ public class SendServlet extends HttpServlet { return; } - UserService userService = UserServiceFactory.getUserService(); - User user = userService.getCurrentUser(); + User user = RegisterServlet.checkUser(req, resp, false); if (user != null) { doSendToPhone(url, title, sel, user.getEmail(), apiVersion, resp); } else { @@ -88,6 +87,7 @@ public class SendServlet extends HttpServlet { URLEncoder.encode(title, "UTF-8") + "&url=" + URLEncoder.encode(url, "UTF-8") + "&sel=" + URLEncoder.encode(sel, "UTF-8"); + UserService userService = UserServiceFactory.getUserService(); resp.sendRedirect(userService.createLoginURL(followOnURL)); } } @@ -120,10 +120,25 @@ public class SendServlet extends HttpServlet { // Send push message to phone C2DMessaging push = C2DMessaging.get(getServletContext()); - if (push.sendNoRetry(deviceInfo.getDeviceRegistrationID(), - "" + url.hashCode(), "url", url, "title", title, - "sel", sel)) { - log.info("Link sent to phone!"); + boolean res = false; + String collapseKey = "" + url.hashCode(); + if (deviceInfo.getDebug()) { + res = push.sendNoRetry(deviceInfo.getDeviceRegistrationID(), + collapseKey, + "url", url, + "title", title, + "sel", sel, + "debug", "1"); + + } else { + res = push.sendNoRetry(deviceInfo.getDeviceRegistrationID(), + collapseKey, + "url", url, + "title", title, + "sel", sel); + } + if (res) { + log.info("Link sent to phone! collapse_key:" + collapseKey); resp.getWriter().println(OK_STATUS); return true; } else { diff --git a/appengine/src/com/google/android/chrometophone/server/UnregisterServlet.java b/appengine/src/com/google/android/chrometophone/server/UnregisterServlet.java index 07da2bb..39b7907 100644 --- a/appengine/src/com/google/android/chrometophone/server/UnregisterServlet.java +++ b/appengine/src/com/google/android/chrometophone/server/UnregisterServlet.java @@ -39,8 +39,16 @@ public class UnregisterServlet extends HttpServlet { private static final String OK_STATUS = "OK"; private static final String ERROR_STATUS = "ERROR"; + /** + * @deprecated Will be removed in next rel cycle. + */ @Override public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { + doPost(req, resp); + } + + @Override + public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException { resp.setContentType("text/plain"); String deviceRegistrationID = req.getParameter("devregid");