/* * Copyright 2014 Google Inc. All rights reserved. * * 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.samples.apps.iosched.server.gcm.device; import com.google.samples.apps.iosched.server.gcm.AuthHelper; import com.google.samples.apps.iosched.server.gcm.BaseServlet; import com.google.samples.apps.iosched.server.gcm.AuthHelper.AuthInfo; import com.google.samples.apps.iosched.server.gcm.db.DeviceStore; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet that registers a device, whose registration id is identified by * {@link #PARAMETER_REG_ID}. * * <p> * The client app should call this servlet everytime it receives a * {@code com.google.android.c2dm.intent.REGISTRATION C2DM} intent without an * error or {@code unregistered} extra. */ @SuppressWarnings("serial") public class RegisterServlet extends BaseServlet { private static final String PARAMETER_REG_ID = "gcm_id"; private static final String PARAMETER_GROUP_ID = "gcm_key"; @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException { // Let's see what this user is authorized to do AuthInfo authInfo = AuthHelper.processAuthorization(req); if (authInfo == null || !authInfo.permRegister) { send(resp, 403, "Not authorized"); return; } String gcmId = getParameter(req, PARAMETER_REG_ID); String gcmGroupId = getParameter(req, PARAMETER_GROUP_ID); // Check to see if gcmGroupId looks roughly like a UUID, by checking for the presence // of dashes. if (!gcmGroupId.contains("-")) { // Group ID is malformed. Drop request. send(resp, 400, "Invalid value: " + PARAMETER_GROUP_ID); return; } DeviceStore.register(gcmId, gcmGroupId); setSuccess(resp); } }