// (c) Alexandre Fenyo 2012, 2013, 2014, 2015, 2016 - [email protected] - http://fenyo.net - GPLv3 licensed

package net.fenyo.mail4hotspot.web;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import com.google.api.client.auth.oauth2.AuthorizationCodeFlow;
import com.google.api.client.auth.oauth2.AuthorizationCodeResponseUrl;
import com.google.api.client.auth.oauth2.BearerToken;
import com.google.api.client.auth.oauth2.Credential;
import com.google.api.client.auth.oauth2.MemoryCredentialStore;
import com.google.api.client.extensions.servlet.auth.oauth2.AbstractAuthorizationCodeCallbackServlet;
import com.google.api.client.http.BasicAuthentication;
import com.google.api.client.http.GenericUrl;
import com.google.api.client.http.javanet.NetHttpTransport;
import com.google.api.client.json.jackson.JacksonFactory;

public class OAuthServletCallback extends AbstractAuthorizationCodeCallbackServlet {
	private static final long serialVersionUID = 1L;
	protected final Log log = LogFactory.getLog(getClass());

	@Override
	protected void onSuccess(HttpServletRequest req, HttpServletResponse resp, Credential credential) throws ServletException, IOException {
		log.debug("ok");
		resp.sendRedirect("/");
	}

	@Override
	protected void onError(HttpServletRequest req, HttpServletResponse resp, AuthorizationCodeResponseUrl errorResponse) throws ServletException, IOException {
		// handle error
		log.debug("erreur");
	}
	
	@Override
	protected String getRedirectUri(HttpServletRequest req) throws ServletException, IOException {
		GenericUrl url = new GenericUrl(req.getRequestURL().toString());
		url.setRawPath("/mail4hotspot/oauthcb");
		return url.build();
	}
	
	@Override
	protected AuthorizationCodeFlow initializeFlow() throws IOException {
		return new AuthorizationCodeFlow.Builder(BearerToken.authorizationHeaderAccessMethod(),
				new NetHttpTransport(),
				new JacksonFactory(),
				// token server URL:
				// new GenericUrl("https://server.example.com/token"),
				new GenericUrl("https://accounts.google.com/o/oauth2/auth"),
				new BasicAuthentication("458072371664.apps.googleusercontent.com",
						"mBp75wknGsGu0WMzHaHhqfXT"),
				"458072371664.apps.googleusercontent.com",
				// authorization server URL:
				"https://accounts.google.com/o/oauth2/auth").
				// setCredentialStore(new JdoCredentialStore(JDOHelper.getPersistenceManagerFactory("transactions-optional")))
				setCredentialStore(new MemoryCredentialStore()).setScopes("https://mail.google.com/")
				// setCredentialStore(new MyCredentialStore())
				.build();
	}
	
	@Override
	protected String getUserId(HttpServletRequest req) throws ServletException, IOException {
		// return user ID
		return "[email protected]";
	}
}