Package com.gadglet.servlets

Source Code of com.gadglet.servlets.OauthRequestServlet

/**
* Copyright (C)  Gadglet .
*
* This file is part of Gadglet
*
* Gadglet is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Gadglet is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with Gadglet. If not, see <http://www.gnu.org/licenses/>.
*/

package com.gadglet.servlets;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.logging.Logger;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.gadglet.core.GadgletRequestWrapper;
import com.gadglet.core.GadgletResponse;
import com.gadglet.core.RequestException;
import com.gadglet.data.DomainUser;
import com.gadglet.data.DomainUserUtils;
import com.gadglet.data.Gadget;
import com.gadglet.data.GadgetUtils;
import com.gadglet.data.RegistrationToken;
import com.gadglet.data.RegistrationTokenUtils;
import com.gadglet.data.utils.DomainUserStatus;
import com.gadglet.params.GadgetType;
import com.gadglet.params.ReqErrorTypes;
import com.gadglet.params.SharedConstants;
import com.gadglet.util.UrlUtils;
import com.google.appengine.api.NamespaceManager;
import com.google.appengine.api.oauth.OAuthRequestException;
import com.google.appengine.api.oauth.OAuthService;
import com.google.appengine.api.oauth.OAuthServiceFactory;
import com.google.appengine.api.users.User;
import com.google.gson.Gson;

public class OauthRequestServlet extends BasicRequestServlet {

  private static final long serialVersionUID = 17583894573489L;
  Logger log = Logger.getLogger(this.getClass().getName());

  @Override
  public void doGet(HttpServletRequest request, HttpServletResponse response)
  throws ServletException, IOException {
    checkUser(request, response);

  }

  @Override
  public void doPost(HttpServletRequest request, HttpServletResponse response)
  throws ServletException, IOException {
    checkUser(request, response);

  }

  private void checkUser(HttpServletRequest httpServletRequest,
      HttpServletResponse httpServletResponse) {

    GadgletResponse gadgetServerResponse = new GadgletResponse();

    GadgletRequestWrapper platformRequestWrapper = new GadgletRequestWrapper(
        httpServletRequest);

    if (!(platformRequestWrapper.getParameter("ignoreJson") != null && UrlUtils
        .isOnDevPort8888(platformRequestWrapper)))
      setResponseHeaders(httpServletResponse);

    boolean userIsValid = false;
    try {
      userIsValid = validateOauthUser(platformRequestWrapper,
          gadgetServerResponse);
     
      // load gadget
      Gadget g = GadgetUtils.getGadget(platformRequestWrapper.getGadgetName());
     
      if(g==null || g.getGadgletType()==null || !g.getGadgletType().equals(GadgetType.BIZLET.getGadgetType()))
        throw new RequestException(
            ReqErrorTypes.UNRECOGNIZED_GADGET);
      else
        platformRequestWrapper.setRequestedGadget(g);

    } catch (RequestException e) {
      userIsValid = false;
      gadgetServerResponse.setError(e);
    } catch (Exception e) {
      userIsValid = false;
      gadgetServerResponse.setError(new RequestException(
          ReqErrorTypes.REQUEST_FAILED));
      printStackTrace(e);
    }

    if (userIsValid)
      performRequest(platformRequestWrapper, gadgetServerResponse,
          httpServletResponse);

    else {

      PrintWriter out = null;
      try {
        out = httpServletResponse.getWriter();
        Gson gson = new Gson();
        out.print(gson.toJson(new JsonEnvelope(gadgetServerResponse)));
      } catch (IOException e) {

        log.warning(e.getMessage());
      }

    }

  }

  protected boolean validateOauthUser(
      GadgletRequestWrapper platformRequestWrapper,
      GadgletResponse jsonResponse) throws RequestException {
    // need to check session for existing user

    boolean userLogin = false;
    User user = null;
    DomainUser domainUser = null;

    domainUser =  platformRequestWrapper.getCurrentDomainUser();

    try {
      OAuthService oauth = OAuthServiceFactory.getOAuthService();
      user = oauth.getCurrentUser();
      userLogin = true;


    } catch (OAuthRequestException e) {
      printStackTrace(e);
      throw new RequestException(ReqErrorTypes.USER_NOT_LOGGEDIN);

    }
    // in case the user changed his id during session (possible ?)
    if (domainUser != null && !user.getUserId().equals(domainUser.getId()))
      domainUser = null;

    if (domainUser != null) {
      NamespaceManager.set(domainUser.getAccount());
      return true;
    }


   
    domainUser = DomainUserUtils.getMyDomainUserWithOauth();
    // set user in session
   
    if (platformRequestWrapper != null && domainUser != null) {
         
      if (domainUser.getAccount() == null)
        throw new RequestException(ReqErrorTypes.USER_MISSING_ACCOUNT);
      if (domainUser.getStatus() != DomainUserStatus.ACTIVE.getUserStatus())
        throw new RequestException(ReqErrorTypes.USER_NOT_ACTIVE);
     
      platformRequestWrapper.getSession().setAttribute("domainUser",
          domainUser);
      NamespaceManager.set(domainUser.getAccount());
      return true;
    }
   
   
    if (domainUser == null)
    {
      // Registration

      RegistrationToken token = null;
      // in case of SIGNED
      if (userRegistrationMethod.equalsIgnoreCase(SharedConstants.registrationMethodSigned))
        jsonResponse.addCustomFieldError(SharedConstants.registrationProcessParamName,
            SharedConstants.registrationDoSigned);

      else
      {
     
        String tokenId = null;
        // work on token created in the current session

        if (platformRequestWrapper.getRegistrationTokenId() != null) {
          tokenId = platformRequestWrapper.getRegistrationTokenId();
          try {
            token = RegistrationTokenUtils.updateTokenForOauth(
                tokenId, user);
          } catch (Exception e) {
            printStackTrace(e);

          }
        }
        if (token == null) {
     
          try {
            token = RegistrationTokenUtils.createNew(user);

          } catch (Exception e) {
            printStackTrace(e);;
          }
        }

        //
        if (token != null) {
          jsonResponse.addCustomFieldError(
              SharedConstants.registrationTokenParamName,
              token.getTokenID());

          if (!token.isOpenSocialReady())
            jsonResponse.addCustomFieldError(
                SharedConstants.registrationProcessParamName,
                SharedConstants.registrationDoSigned);
        }
      }

      if (token != null)
        throw new RequestException(ReqErrorTypes.USER_NOT_REGISTERED);
      else
        throw new RequestException(ReqErrorTypes.REQUEST_FAILED);
    }

    return userLogin;
  }
}
TOP

Related Classes of com.gadglet.servlets.OauthRequestServlet

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.