// Path: leitoor/src/main/java/br/com/delogic/leitoor/exception/LeitoorException.java
// @SuppressWarnings("serial")
// public class LeitoorException extends Exception {
// 
//     public LeitoorException(String message, Throwable cause) {
//         super(message, cause);
//     }
// 
//     public LeitoorException(String message) {
//         super(message);
//     }
// 
//     public static LeitoorException conviteInvalidoException(String convite) {
//         return new LeitoorException("Este convite não possui validade em nosso sistema:" + convite);
//     }
// 
//     public static LeitoorException contaInvalidaException(String mensagem) {
//         return new LeitoorException(mensagem);
//     }
// 
//     public static LeitoorException autenticacaoException(String mensagem) {
//         return new LeitoorException(mensagem);
//     }
// 
// }
// 
// Path: leitoor/src/main/java/br/com/delogic/leitoor/service/GoogleService.java
// public interface GoogleService {
// 
//     /**
//      * Obtém a url de conexão com o Google
//      *
//      * @param convite
//      * @return uma url
//      */
//     String getUrlAutenticacao(String convite);
// 
//     /**
//      * Obtém um usuario GooglePlus
//      *
//      * @param code
//      * @return usuario google
//      * @throws IOException
//      * @throws LeitoorException
//      */
//     Userinfoplus getUsuarioGoogle(String code) throws LeitoorException;
// 
//     RegraNegocioException ERRO_AUTENTICACAO_GOOGLE = new RegraNegocioException(
//                                                        "Aconteceu um erro ao tentar efetuar a autenticação");
// }


import java.io.IOException;
import javax.inject.Named;
import br.com.delogic.leitoor.exception.LeitoorException;
import br.com.delogic.leitoor.service.GoogleService;
import com.google.api.client.googleapis.auth.oauth2.GoogleAuthorizationCodeTokenRequest;
import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
import com.google.api.client.googleapis.auth.oauth2.GoogleTokenResponse;
import com.google.api.client.http.javanet.NetHttpTransport;
import com.google.api.client.json.jackson2.JacksonFactory;
import com.google.api.services.oauth2.Oauth2;
import com.google.api.services.oauth2.model.Userinfoplus;
package br.com.delogic.leitoor.service.impl;





@Named("googleService")
public class GoogleServiceImpl implements GoogleService {

    private static final String CLIENT_SECRET = "UDX_mDnc6Vy9GzG2Hf3vXKvF";
    private static final String CLIENT_ID     = "232471467258-nka1vthancampcs3raf6geaaojcgbhpv.apps.googleusercontent.com";

    @Override
    public String getUrlAutenticacao(String convite) {

        return "redirect:https://accounts.google.com/o/oauth2/auth?"
            + "&client_id=" + CLIENT_ID
            + "&redirect_uri=http://leitoor.com.br/login/google/autenticar"
            + "&scope=email%20profile"
            + "&state=" + convite
            + "&response_type=code";
    }

    @Override
// Path: leitoor/src/main/java/br/com/delogic/leitoor/exception/LeitoorException.java
// @SuppressWarnings("serial")
// public class LeitoorException extends Exception {
// 
//     public LeitoorException(String message, Throwable cause) {
//         super(message, cause);
//     }
// 
//     public LeitoorException(String message) {
//         super(message);
//     }
// 
//     public static LeitoorException conviteInvalidoException(String convite) {
//         return new LeitoorException("Este convite não possui validade em nosso sistema:" + convite);
//     }
// 
//     public static LeitoorException contaInvalidaException(String mensagem) {
//         return new LeitoorException(mensagem);
//     }
// 
//     public static LeitoorException autenticacaoException(String mensagem) {
//         return new LeitoorException(mensagem);
//     }
// 
// }
// 
// Path: leitoor/src/main/java/br/com/delogic/leitoor/service/GoogleService.java
// public interface GoogleService {
// 
//     /**
//      * Obtém a url de conexão com o Google
//      *
//      * @param convite
//      * @return uma url
//      */
//     String getUrlAutenticacao(String convite);
// 
//     /**
//      * Obtém um usuario GooglePlus
//      *
//      * @param code
//      * @return usuario google
//      * @throws IOException
//      * @throws LeitoorException
//      */
//     Userinfoplus getUsuarioGoogle(String code) throws LeitoorException;
// 
//     RegraNegocioException ERRO_AUTENTICACAO_GOOGLE = new RegraNegocioException(
//                                                        "Aconteceu um erro ao tentar efetuar a autenticação");
// }


// Path: leitoor/src/main/java/br/com/delogic/leitoor/service/impl/GoogleServiceImpl.java
import java.io.IOException;
import javax.inject.Named;
import br.com.delogic.leitoor.exception.LeitoorException;
import br.com.delogic.leitoor.service.GoogleService;
import com.google.api.client.googleapis.auth.oauth2.GoogleAuthorizationCodeTokenRequest;
import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
import com.google.api.client.googleapis.auth.oauth2.GoogleTokenResponse;
import com.google.api.client.http.javanet.NetHttpTransport;
import com.google.api.client.json.jackson2.JacksonFactory;
import com.google.api.services.oauth2.Oauth2;
import com.google.api.services.oauth2.model.Userinfoplus;

package br.com.delogic.leitoor.service.impl;





@Named("googleService")
public class GoogleServiceImpl implements GoogleService {

    private static final String CLIENT_SECRET = "UDX_mDnc6Vy9GzG2Hf3vXKvF";
    private static final String CLIENT_ID     = "232471467258-nka1vthancampcs3raf6geaaojcgbhpv.apps.googleusercontent.com";

    @Override
    public String getUrlAutenticacao(String convite) {

        return "redirect:https://accounts.google.com/o/oauth2/auth?"
            + "&client_id=" + CLIENT_ID
            + "&redirect_uri=http://leitoor.com.br/login/google/autenticar"
            + "&scope=email%20profile"
            + "&state=" + convite
            + "&response_type=code";
    }

    @Override
    public Userinfoplus getUsuarioGoogle(String codigo) throws LeitoorException {