From 9b3454aaef45ba8f39d1304b5c35f64d35a96605 Mon Sep 17 00:00:00 2001 From: "burke.davey" Date: Mon, 30 Aug 2010 20:22:55 +0000 Subject: [PATCH] Add browser channel support and bump SDK ver to 1.3.6 --- appengine/.classpath | 2 +- .../com.google.appengine.eclipse.core.prefs | 4 +- .../server/BrowserChannelServlet.java | 68 +++++++++++++++++++ appengine/war/WEB-INF/appengine-web.xml | 2 +- appengine/war/WEB-INF/web.xml | 11 +++ 5 files changed, 83 insertions(+), 4 deletions(-) create mode 100644 appengine/src/com/google/android/chrometophone/server/BrowserChannelServlet.java diff --git a/appengine/.classpath b/appengine/.classpath index 1fc43ed..1560c35 100644 --- a/appengine/.classpath +++ b/appengine/.classpath @@ -2,7 +2,7 @@ - + diff --git a/appengine/.settings/com.google.appengine.eclipse.core.prefs b/appengine/.settings/com.google.appengine.eclipse.core.prefs index 99deb86..378d880 100644 --- a/appengine/.settings/com.google.appengine.eclipse.core.prefs +++ b/appengine/.settings/com.google.appengine.eclipse.core.prefs @@ -1,4 +1,4 @@ -#Mon May 31 20:22:11 BST 2010 +#Sun Aug 29 18:14:05 BST 2010 eclipse.preferences.version=1 -filesCopiedToWebInfLib=appengine-api-1.0-sdk-1.3.4.jar|appengine-api-labs-1.3.4.jar|appengine-jsr107cache-1.3.4.jar|jsr107cache-1.1.jar|datanucleus-appengine-1.0.7.final.jar|datanucleus-core-1.1.5.jar|datanucleus-jpa-1.1.5.jar|geronimo-jpa_3.0_spec-1.1.1.jar|geronimo-jta_1.1_spec-1.1.1.jar|jdo2-api-2.3-eb.jar +filesCopiedToWebInfLib=appengine-api-1.0-sdk-1.3.6.jar|appengine-api-labs-1.3.6.jar|appengine-jsr107cache-1.3.6.jar|jsr107cache-1.1.jar|datanucleus-appengine-1.0.7.final.jar|datanucleus-core-1.1.5.jar|datanucleus-jpa-1.1.5.jar|geronimo-jpa_3.0_spec-1.1.1.jar|geronimo-jta_1.1_spec-1.1.1.jar|jdo2-api-2.3-eb.jar ormEnhancementInclusions=src/**|c2dm/** diff --git a/appengine/src/com/google/android/chrometophone/server/BrowserChannelServlet.java b/appengine/src/com/google/android/chrometophone/server/BrowserChannelServlet.java new file mode 100644 index 0000000..4bd0bd0 --- /dev/null +++ b/appengine/src/com/google/android/chrometophone/server/BrowserChannelServlet.java @@ -0,0 +1,68 @@ +/* + * Copyright 2010 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.android.chrometophone.server; + +import java.io.IOException; +import java.util.logging.Logger; + +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import com.google.appengine.api.channel.ChannelMessage; +import com.google.appengine.api.channel.ChannelService; +import com.google.appengine.api.channel.ChannelServiceFactory; +import com.google.appengine.api.users.User; + +@SuppressWarnings("serial") +public class BrowserChannelServlet extends HttpServlet { + private static final String OK_STATUS = "OK"; + private static final String LOGIN_REQUIRED_STATUS = "LOGIN_REQUIRED"; + private static final String ERROR_STATUS = "ERROR"; + + @Override + public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException { + resp.setContentType("text/plain"); + + // Basic XSRF protection + if (req.getHeader("X-Same-Domain") == null) { + resp.setStatus(400); + resp.getWriter().println(ERROR_STATUS); + return; + } + + User user = RegisterServlet.checkUser(req, resp, false); + if (user == null) { + resp.setStatus(400); + resp.getWriter().println(LOGIN_REQUIRED_STATUS); + } else { + String channelToken = String.valueOf(user.hashCode()); // channel per user + String data = req.getParameter("data"); + if (data != null) { // send data + getChannelService().sendMessage(new ChannelMessage(channelToken, data)); + resp.getWriter().print(OK_STATUS); + } else { // setup channel + String channelId = getChannelService().createChannel(channelToken); + resp.getWriter().print(channelId); + } + } + } + + private ChannelService getChannelService() { + return ChannelServiceFactory.getChannelService(); + } +} diff --git a/appengine/war/WEB-INF/appengine-web.xml b/appengine/war/WEB-INF/appengine-web.xml index 5489cba..ff10602 100644 --- a/appengine/war/WEB-INF/appengine-web.xml +++ b/appengine/war/WEB-INF/appengine-web.xml @@ -16,7 +16,7 @@ --> chrometophone - 4 + 5 diff --git a/appengine/war/WEB-INF/web.xml b/appengine/war/WEB-INF/web.xml index 417eab3..df97175 100644 --- a/appengine/war/WEB-INF/web.xml +++ b/appengine/war/WEB-INF/web.xml @@ -41,6 +41,12 @@ com.google.android.chrometophone.server.AuthServlet + + + BrowserChannelServlet + com.google.android.chrometophone.server.BrowserChannelServlet + + dataMessagingServlet @@ -73,6 +79,11 @@ AuthServlet /signout + + + BrowserChannelServlet + /browserchannel + dataMessagingServlet