Example usage for com.google.api.client.googleapis.auth.oauth2 GoogleIdTokenVerifier.Builder GoogleIdTokenVerifier.Builder

List of usage examples for com.google.api.client.googleapis.auth.oauth2 GoogleIdTokenVerifier.Builder GoogleIdTokenVerifier.Builder

Introduction

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

Prototype

public Builder(HttpTransport transport, JsonFactory jsonFactory) 

Source Link

Usage

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

License:Apache License

@POST
@Path("google")
@Produces(MediaType.APPLICATION_JSON)/*w  w  w . j a v  a2s . com*/
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;
}