Example usage for com.google.api.client.googleapis.auth.oauth2 GoogleTokenResponse parseIdToken

List of usage examples for com.google.api.client.googleapis.auth.oauth2 GoogleTokenResponse parseIdToken

Introduction

In this page you can find the example usage for com.google.api.client.googleapis.auth.oauth2 GoogleTokenResponse parseIdToken.

Prototype

@Beta
public GoogleIdToken parseIdToken() throws IOException 

Source Link

Document

Beta
Parses using GoogleIdToken#parse(JsonFactory,String) based on the #getFactory() JSON factory and #getIdToken() ID token .

Usage

From source file:com.example.contactmgr.server.auth.GPlus.java

License:Open Source License

/**
 * Upgrade given auth code to token, and store it in the session.
 * POST body of request should be the authorization code.
 * Example URI: /login?code=/*  w w  w.jav  a  2  s  .c  o m*/
 */
@GET
@Path("login")
public Response login(@QueryParam("code") String code, @Context HttpServletRequest req,
        @Context HttpServletResponse res) throws IOException {

    // already logged in
    if (AuthFilter.getUser() != null) {
        try {
            return Response.temporaryRedirect(new URI(getAppUrl(req))).build();
        } catch (URISyntaxException e) {
            throw new RestException(e);
        }
    }

    try {
        // Upgrade the authorization code into an access and refresh token.
        String callbackUri = getCallbackURI(req);
        GoogleTokenResponse tokenResponse = new GoogleAuthorizationCodeTokenRequest(TRANSPORT, JSON_FACTORY,
                CLIENT_ID, CLIENT_SECRET, code, callbackUri).execute();

        // You can read the Google user ID in the ID token.
        // This sample does not use the user ID.
        GoogleIdToken idToken = tokenResponse.parseIdToken();
        String email = idToken.getPayload().getEmail();

        User user = appUserSvc.getRegisteredUser(email);
        if ((user == null) || user.getGoogleId() == null) {
            // Register new user
            User newUser = getUserInfo(tokenResponse);
            try {
                user = registerUser(newUser);
            } catch (DuplicateUserException e) {
                res.sendRedirect("/s/ar.html");
            }
        }
        AuthFilter.login(user, tokenResponse.toString());
        return Response.temporaryRedirect(new URI(getAppUrl(req))).build();
    } catch (TokenResponseException e) {
        throw new RestException(e);
    } catch (IOException e) {
        throw new RestException(e);
    } catch (URISyntaxException e) {
        throw new RestException(e);
    }
}

From source file:com.example.contactmgr.server.auth.GPlus.java

License:Open Source License

private User getUserInfo(GoogleTokenResponse accessToken) {
    try {//from   w  w  w. j  av a  2s  .c  om
        // Build credential from stored token data.
        GoogleCredential credential = new GoogleCredential.Builder().setJsonFactory(JSON_FACTORY)
                .setTransport(TRANSPORT).setClientSecrets(CLIENT_ID, CLIENT_SECRET).build()
                .setFromTokenResponse(
                        JSON_FACTORY.fromString(accessToken.toString(), GoogleTokenResponse.class));
        // Create a new authorized API client.
        Plus service = new Plus.Builder(TRANSPORT, JSON_FACTORY, credential).setApplicationName(OAUTH_APP_NAME)
                .build();
        // Get a list of people that this user has shared with this app.
        Person me = service.people().get("me").execute();

        User newUser = new User();
        GoogleIdToken idToken = accessToken.parseIdToken();
        newUser.setEmailAddress(idToken.getPayload().getEmail());
        newUser.setGoogleId(idToken.getPayload().getSubject());
        newUser.setFirstName(me.getName().getGivenName());
        newUser.setLastName(me.getName().getFamilyName());
        String imageUrl = me.getImage().getUrl();
        newUser.setImgUrl(imageUrl);

        return newUser;

        //        PeopleFeed people = service.people().list("me", "visible").execute();
    } catch (IOException e) {
        throw new RestException(e);
    }

}

From source file:com.example.listmaker.server.auth.GPlus.java

License:Open Source License

private User getUserInfo(GoogleTokenResponse accessToken) {
    try {//w  w  w  .j a v a  2 s.  c  o  m
        // Build credential from stored token data.
        GoogleCredential credential = new GoogleCredential.Builder().setJsonFactory(JSON_FACTORY)
                .setTransport(TRANSPORT).setClientSecrets(CLIENT_ID, CLIENT_SECRET).build()
                .setFromTokenResponse(
                        JSON_FACTORY.fromString(accessToken.toString(), GoogleTokenResponse.class));
        // Create a new authorized API client.
        Plus service = new Plus.Builder(TRANSPORT, JSON_FACTORY, credential)
                .setApplicationName(APPLICATION_NAME).build();
        // Get a list of people that this user has shared with this app.
        Person me = service.people().get("me").execute();

        User newUser = new User();
        GoogleIdToken idToken = accessToken.parseIdToken();
        newUser.setEmailAddress(idToken.getPayload().getEmail());
        newUser.setGoogleId(idToken.getPayload().getSubject());
        newUser.setFirstName(me.getName().getGivenName());
        newUser.setLastName(me.getName().getFamilyName());
        String imageUrl = me.getImage().getUrl();
        newUser.setImgUrl(imageUrl);

        return newUser;

        //        PeopleFeed people = service.people().list("me", "visible").execute();
    } catch (IOException e) {
        throw new RestException(e);
    }

}

From source file:com.google.plus.samples.haikuplus.Authenticate.java

License:Open Source License

/**
 * Parses an ID token from a TokenResponse. If the parse fails, a 500 is specified and
 * null is returned, indicating that the ID token Google returned with a Credential object
 * is invalid. Otherwise, the Google user ID associated with the token is returned.
 *///  w  ww  . ja  v a2s.  c  o m
private String parseIdToken(GoogleTokenResponse tokenResponse, HttpServletResponse response) {
    try {
        // You can read the Google user ID in the ID token.
        GoogleIdToken idToken = tokenResponse.parseIdToken();
        return getGoogleIdFromIdToken(idToken);
    } catch (IOException e) {
        logger.log(Level.INFO, "Failed to parse ID token from tokenResponse object; return 500", e);
        response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
        return null;
    }
}

From source file:io.mapping.api.billsplit.resources.AuthResource.java

License:Apache License

@POST
@Path("/login")
@Consumes(MediaType.APPLICATION_JSON)//ww  w.j  a v a  2s.  co m
@Produces(MediaType.APPLICATION_JSON)
public UserEntity login() throws IOException {
    // Return existing user entity from session if applicable
    UserEntity userEntity = mSessionUserProvider.getUser(mRequest.getSession());
    if (userEntity != null) {
        return userEntity;
    }

    // Get the auth token
    String token = mOAuth2Helper.getToken(mRequest);
    if (token != null) {
        GoogleTokenResponse tokenResponse = mOAuth2Helper.parseGoogleToken(token);

        if (tokenResponse == null) {
            throw new NoTokenException(500);
        }

        String googleId = tokenResponse.parseIdToken().getPayload().getSubject();

        EntityManager em = mEntityManagerFactory.createEntityManager();
        try {
            userEntity = em.createNamedQuery("userEntity.findByGoogleId", UserEntity.class)
                    .setParameter("googleId", googleId).getSingleResult();
        } catch (NoResultException ex) {
            // UserEntity does not yet exist
            userEntity = mUserResource.createMe(mRequest);
        } finally {
            em.close();
        }

        setUserInSession(userEntity);

        return userEntity;
    } else {
        // Shouldn't be calling login if we don't already have a token
        return null;
    }
}

From source file:io.mapping.api.billsplit.resources.ConnectGoogleResource.java

License:Apache License

@POST
@Path("google")
@Produces(MediaType.APPLICATION_JSON)/*from w w w .j a  v  a 2s .  c o m*/
public GoogleTokenResponse connectGoogle(@Context HttpServletRequest request,
        @Context HttpServletResponse response, @QueryParam("state") final String state) throws IOException {
    // Check to see if they're already connected
    String token = mOAuth2Helper.getToken(request);
    if (token != null) {
        return mOAuth2Helper.parseGoogleToken(token);
    }

    // Allow forcing state
    if (state != null) {
        mOAuth2Helper.setState(request, state);
    }

    // Ensure the state parameter matches up
    if (!mOAuth2Helper.checkState(request, response)) {
        throw new InvalidOAuthStateException(500);
    }

    // Get the authorization code
    ByteArrayOutputStream resultStream = new ByteArrayOutputStream();
    getContent(request.getInputStream(), resultStream);
    String code = new String(resultStream.toByteArray(), "UTF-8");
    if (code == null) {
        throw new NullOAuthCodeException(500);
    }

    // Upgrade the authorization code into an access token and refresh token
    GoogleTokenResponse tokenResponse;
    try {
        tokenResponse = new GoogleAuthorizationCodeTokenRequest(mHttpTransport, mJacksonFactory,
                mGoogleClientSecrets.getWeb().getClientId(), mGoogleClientSecrets.getWeb().getClientSecret(),
                code, GOOGLE_REDIRECT_URI).execute();
    } catch (TokenResponseException ex) {
        throw new Builder(500).message(ex.getMessage()).build();
    }

    // Parse out the Google+ ID
    GoogleIdToken idToken = tokenResponse.parseIdToken();
    String userId = idToken.getPayload().getSubject();

    // Verify the token
    boolean verified = false;
    try {
        verified = new GoogleIdTokenVerifier.Builder(mHttpTransport, mJacksonFactory).build().verify(idToken);
    } catch (GeneralSecurityException e) {
        throw new Builder(500).message(e.getMessage()).build();
    }

    if (!verified) {
        throw new Builder(500).message(Messages.TOKEN_VERIFICATION_FAILED).build();
    }

    // Create a credential representation of the token data
    GoogleCredential credential = mOAuth2Helper.getGoogleCredential(tokenResponse);

    // Check token validity
    mOAuth2Helper.checkGoogleTokenValidity(credential, userId);

    // Store the token for next time
    mOAuth2Helper.setToken(request, mJacksonFactory.toString(tokenResponse));

    return tokenResponse;
}

From source file:org.n52.v3d.terraintools.auth.ConnectServlet.java

License:Open Source License

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    response.setContentType("application/json");

    // Only connect a user that is not already connected.
    String tokenData = (String) request.getSession().getAttribute("token");
    if (tokenData != null) {
        response.setStatus(HttpServletResponse.SC_OK);
        System.out.println("Current user is already connected");
        response.getWriter().print(GSON.toJson("Current user is already connected."));
        DriveSample.init(tokenData);/*  w w  w  . j  a v  a 2 s  . c om*/
        return;
    }

    // Normally the state would be a one-time use token, however in our
    // simple case, we want a user to be able to connect and disconnect
    // without reloading the page.  Thus, for demonstration, we don't
    // implement this best practice.
    //request.getSession().removeAttribute("state");
    ByteArrayOutputStream resultStream = new ByteArrayOutputStream();
    getContent(request.getInputStream(), resultStream);
    String code = new String(resultStream.toByteArray(), "UTF-8");

    try {
        // Upgrade the authorization code into an access and refresh token.
        GoogleTokenResponse tokenResponse = new GoogleAuthorizationCodeTokenRequest(TRANSPORT, JSON_FACTORY,
                CLIENT_ID, CLIENT_SECRET, code, "postmessage").execute();

        // You can read the Google user ID in the ID token.
        // This sample does not use the user ID.
        GoogleIdToken idToken = tokenResponse.parseIdToken();
        String gplusId = idToken.getPayload().getSubject();

        // Store the token in the session for later use.
        request.getSession().setAttribute("token", tokenResponse.toString());
        response.setStatus(HttpServletResponse.SC_OK);
        response.getWriter().print(GSON.toJson("Successfully connected user."));

        tokenData = (String) request.getSession().getAttribute("token");
        DriveSample.init(tokenData);
    } catch (TokenResponseException e) {
        response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
        response.getWriter().print(GSON.toJson("Failed to upgrade the authorization code."));
    } catch (IOException e) {
        response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
        response.getWriter().print(GSON.toJson("Failed to read token data from Google. " + e.getMessage()));
    }
}

From source file:org.orcsun.sunspace.third.GoogleAPI.java

License:Open Source License

/**
 * Upgrade given auth code to token, and store it in the session. POST body
 * of request should be the authorization code. Example URI:
 * /connect?state=...&gplus_id=.../*from w w  w .  ja v a 2  s. c om*/
 * @throws Exception 
 */
@RequestMapping(value = "/oauth2callback", method = RequestMethod.GET)
protected String validateToken(HttpServletRequest request, HttpServletRequest response, Model model)
        throws Exception {
    String error = request.getParameter("error");
    if (error != null) {//wrong 
        logger.error(error);
        model.addAttribute("msg", error);
        return "redirect:/user/redirectLogin";
    } else {
        String code = request.getParameter("code");
        logger.info("==========code" + code);
        String original_state = (String) request.getSession().getAttribute("state");
        String state = request.getParameter("state");
        if (code != null && state.equals(original_state)) {//request access token

            GoogleTokenResponse tokenResponse = new GoogleAuthorizationCodeTokenRequest(TRANSPORT, JSON_FACTORY,
                    SunConstants.GOOGLE_API_CLIENT_ID, SunConstants.GOOGLE_API_CLIENT_SECRET, code,
                    SunConstants.AUTH_REDIRECT_URL_GOOGLE).execute();

            GoogleIdToken idToken = tokenResponse.parseIdToken();

            String gplusId = idToken.getPayload().getSubject();
            String email = idToken.getPayload().getEmail();

            if (email == null)
                return "redirect:/user/redirectLogin";
            else {
                logger.info("gplusid:" + gplusId);
                logger.info("email:" + email);
                User user = userDao.findUserByEmail(email);
                if (user == null) {
                    user = new User();
                    user.setName("GoogleUser");
                    user.setOpenid(gplusId);
                    user.setEmail(email);
                    user.setPasswd(tokenResponse.toString());
                    long uid = userDao.addUser(user);
                    user.setUid(uid);
                }

                // Store the token in the session for later use.
                request.getSession().setAttribute("token", tokenResponse.toString());

                //get user profile
                GoogleCredential credential = new GoogleCredential.Builder().setJsonFactory(JSON_FACTORY)
                        .setTransport(TRANSPORT)
                        .setClientSecrets(SunConstants.GOOGLE_API_CLIENT_ID,
                                SunConstants.GOOGLE_API_CLIENT_SECRET)
                        .build().setFromTokenResponse(
                                JSON_FACTORY.fromString(tokenResponse.toString(), GoogleTokenResponse.class));
                // Create a new authorized API client.
                Plus service = new Plus.Builder(TRANSPORT, JSON_FACTORY, credential)
                        .setApplicationName(APPLICATION_NAME).build();
                // Get a list of people that this user has shared with this app.
                Person person = service.people().get("me").execute();
                user.setPhoto1(person.getImage().getUrl());
                user.setName(person.getDisplayName());
                user.setPhoto2(person.getCover().getCoverPhoto().getUrl());

                request.getSession().setAttribute("user", user);
            }
        }
        return "redirect:/user/admin";
    }
}