@Override
  public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
    resp.setContentType("text/plain");

    // Basic XSRF protection
    if (req.getHeader("X-Same-Domain") == null) {
      // TODO: Enable at consumer launch
      // resp.setStatus(400);
      // resp.getWriter().println(ERROR_STATUS + " (Missing X-Same-Domain header)");
      // return;
    }

    String deviceRegistrationID = req.getParameter("devregid");
    if (deviceRegistrationID == null) {
      resp.setStatus(400);
      resp.getWriter().println(ERROR_STATUS + "(Must specify devregid)");
      return;
    }

    User user = checkUser(req, resp, true);
    if (user != null) {
      Key key = KeyFactory.createKey(DeviceInfo.class.getSimpleName(), user.getEmail());
      DeviceInfo device = new DeviceInfo(key, deviceRegistrationID);
      // Context-shared PMF.
      PersistenceManager pm = C2DMessaging.getPMF(getServletContext()).getPersistenceManager();
      try {
        pm.makePersistent(device);
        resp.getWriter().println(OK_STATUS);
      } catch (Exception e) {
        resp.setStatus(500);
        resp.getWriter().println(ERROR_STATUS + " (Error registering device)");
        log.warning("Error registering device.");
      } finally {
        pm.close();
      }
    }
  }