com.lanastara.gtd.google.GoogleAuthenticator.java Source code

Java tutorial

Introduction

Here is the source code for com.lanastara.gtd.google.GoogleAuthenticator.java

Source

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.lanastara.gtd.google;

import com.google.api.client.googleapis.auth.oauth2.GoogleIdToken;
import com.google.api.client.googleapis.auth.oauth2.GoogleIdTokenVerifier;
import com.google.api.client.http.javanet.NetHttpTransport;
import com.google.api.client.json.jackson2.JacksonFactory;
import java.io.IOException;
import java.security.GeneralSecurityException;
import java.util.Arrays;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.restlet.Context;
import org.restlet.Request;
import org.restlet.Response;
import org.restlet.data.Cookie;
import org.restlet.security.Authenticator;
import org.restlet.util.Series;
import org.restlet.data.Status;
import org.restlet.security.User;

/**
 *
 * @author fritz
 */
public class GoogleAuthenticator extends Authenticator {

    public GoogleAuthenticator(Context context) {
        super(context);
    }

    @Override
    protected boolean authenticate(Request request, Response response) {

        GoogleIdTokenVerifier verifier = new GoogleIdTokenVerifier.Builder(new NetHttpTransport(),
                new JacksonFactory()).setAudience(
                        Arrays.asList("926615361246-oggengfh02hmjhjes5ki04pfin8m0hqa.apps.googleusercontent.com"))
                        .build();

        Series<Cookie> cookies = request.getCookies();
        Cookie token_cookie;
        if ((token_cookie = cookies.getFirst("id_token")) != null) {
            try {
                GoogleIdToken idToken = verifier.verify(token_cookie.getValue());
                if (idToken != null) {
                    GoogleIdToken.Payload payload = idToken.getPayload();
                    if (payload.getEmailVerified()) {
                        request.getClientInfo().setUser(new User(payload.getEmail()));
                        return true;
                    }
                }
            } catch (GeneralSecurityException | IOException ex) {
                Logger.getLogger(GoogleAuthenticator.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        response.setStatus(Status.CLIENT_ERROR_UNAUTHORIZED);
        return false;
    }

}