com.tcc.servidor_tcc.api.LoginResource.java Source code

Java tutorial

Introduction

Here is the source code for com.tcc.servidor_tcc.api.LoginResource.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.tcc.servidor_tcc.api;

import com.google.api.client.googleapis.auth.oauth2.GoogleIdToken;
import com.google.api.client.googleapis.auth.oauth2.GoogleIdToken.Payload;
import com.google.api.client.googleapis.auth.oauth2.GoogleIdTokenVerifier;
import com.google.api.client.http.javanet.NetHttpTransport;
import com.google.api.client.json.JsonFactory;
import com.google.api.client.json.gson.GsonFactory;
import com.tcc.servidor_tcc.dao.ReviewerDAO;
import com.tcc.servidor_tcc.dao.ReviewerDAOjpa;
import com.tcc.servidor_tcc.entidades.Reviewer;
import com.tcc.servidor_tcc.tokenUtil.Token;
import java.io.IOException;
import java.security.GeneralSecurityException;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import javax.ws.rs.Consumes;
import javax.ws.rs.FormParam;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;

@Path("/login")
public class LoginResource {

    private static final String CLIENT_ID = "37163664732-b2eus3fbmke97v04mn9se394v2274njk.apps.googleusercontent.com";
    private static final NetHttpTransport transport = new NetHttpTransport();
    private static final JsonFactory jsonFactory = new GsonFactory();

    @POST
    @Produces(MediaType.APPLICATION_JSON)
    @Consumes(MediaType.APPLICATION_JSON)
    public Response login(Reviewer reviewer) {
        ReviewerDAO dao = new ReviewerDAOjpa();
        Optional<Reviewer> rev = dao.getOne(reviewer.getEmail());
        String result = "Email isn't registered";
        Response.Status status = Response.Status.NOT_FOUND;
        if (rev.isPresent()) {
            Reviewer r = rev.get();
            if (r.getPassword().equals(reviewer.getPassword())) {
                result = Token.createClientToken(reviewer.getEmail());
                status = Response.Status.OK;
            } else {
                result = "Incorrect password";
                status = Response.Status.UNAUTHORIZED;
            }
        }
        return Response.status(status).entity(result).build();
    }

    @Path("/token")
    @POST
    @Consumes(MediaType.APPLICATION_FORM_URLENCODED)
    @Produces(MediaType.APPLICATION_JSON)
    public Response loginToken(@FormParam("tokenId") String tokenIdString) {
        System.out.println("Token:" + tokenIdString);

        GoogleIdTokenVerifier verifier = new GoogleIdTokenVerifier.Builder(transport, jsonFactory)
                .setAudience(Arrays.asList(CLIENT_ID)).setIssuer("https://accounts.google.com").build();

        GoogleIdToken idToken = null;
        try {
            idToken = verifier.verify(tokenIdString);
        } catch (GeneralSecurityException ex) {
            Logger.getLogger(LoginResource.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(LoginResource.class.getName()).log(Level.SEVERE, null, ex);
        }
        if (idToken != null) {
            Payload payload = idToken.getPayload();

            String userId = payload.getSubject();
            System.out.println("User ID: " + userId);

            String email = payload.getEmail();
            boolean emailVerified = payload.getEmailVerified();
            String name = (String) payload.get("name");
            String pictureUrl = (String) payload.get("picture");
            String locale = (String) payload.get("locale");
            String familyName = (String) payload.get("family_name");
            String givenName = (String) payload.get("given_name");

            ReviewerDAO dao = new ReviewerDAOjpa();
            Optional<Reviewer> rev = dao.getOne(email);
            if (rev.isPresent()) {
                String clientToken = Token.createClientToken(email);
                return Response.ok().entity(clientToken).build();
            } else {
                Reviewer reviewer = new Reviewer();
                reviewer.setEmail(email);
                reviewer.setName(name);
                return Response.status(Response.Status.CREATED).entity(reviewer).build();
            }

        } else {
            System.out.println("Invalid ID token.");
            return Response.status(Response.Status.UNAUTHORIZED).build();
        }

    }

}