package com.mgreau.gae.booking.client;
import java.io.IOException;
import java.util.logging.Logger;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.mortbay.log.Log;
import com.appspot.api.services.bookingendpoint.Bookingendpoint;
import com.appspot.api.services.bookingendpoint.Bookingendpoint.Hotels.Bookings.Insert;
import com.appspot.api.services.bookingendpoint.model.Booking;
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.googleapis.auth.oauth2.GoogleOAuthConstants;
import com.google.api.client.http.BasicAuthentication;
import com.google.api.client.http.GenericUrl;
import com.google.api.client.http.HttpTransport;
import com.google.api.client.http.javanet.NetHttpTransport;
import com.google.api.client.http.json.JsonHttpRequest;
import com.google.api.client.http.json.JsonHttpRequestInitializer;
import com.google.api.client.json.JsonFactory;
import com.google.api.client.json.jackson2.JacksonFactory;
public class BookingOAuth2CallbackServlet extends AbstractAuthorizationCodeCallbackServlet {
private static final Logger log = Logger.getLogger(BookingOAuth2CallbackServlet.class.getName());
@Override
protected String getUserId(HttpServletRequest req) throws ServletException, IOException {
Log.debug(req.getAttribute("user_id") + "/" + req.getParameter("user_id"));
return req.getParameter("user_id");
}
@Override
protected void onSuccess(HttpServletRequest req, HttpServletResponse resp, Credential credential)
throws ServletException, IOException {
HttpTransport httpTransport = new NetHttpTransport();
final JsonFactory jsonFactory = new JacksonFactory();
Bookingendpoint serviceCredentials = new Bookingendpoint(httpTransport,
jsonFactory, credential);
serviceCredentials = new Bookingendpoint.Builder(httpTransport, jsonFactory, null).setJsonHttpRequestInitializer( new JsonHttpRequestInitializer() {
public void initialize(JsonHttpRequest jsonHttpRequest) {
jsonHttpRequest.setEnableGZipContent(true);
}
}).build();
String insertBooking = "ok";
try {
Booking b = new Booking();
b.setBeds(12);
Insert insert = serviceCredentials.hotels().bookings().insert("15013", b);
insert.execute();
} catch (IOException e) {
insertBooking = "ko";
System.out.println("erreur booking"+e.getMessage());
}
resp.sendRedirect("/home?insertBooking="+insertBooking);
}
@Override
protected void onError(
HttpServletRequest req, HttpServletResponse resp, AuthorizationCodeResponseUrl errorResponse)
throws ServletException, IOException {
// handle error
log.severe("erreur de connexon OAuth2");
}
@Override
protected String getRedirectUri(HttpServletRequest req) throws ServletException, IOException {
GenericUrl url = new GenericUrl(req.getRequestURL().toString());
url.setRawPath("/oauth2callback");
return url.build();
}
@Override
protected AuthorizationCodeFlow initializeFlow() throws IOException {
// GoogleClientSecrets secret = new GoogleClientSecrets().load(jsonFactory, inputStream);
// AuthorizationCodeFlow f = new GoogleAuthorizationCodeFlow.Builder(
// new UrlFetchTransport(),
// new JacksonFactory(),
// new GenericUrl("https://server.example.com/token"),
// new BasicAuthentication(LoginPage.CLIENT_ID, LoginPage.CLIENT_SECRET),
// LoginPage.CLIENT_ID,
// "https://server.example.com/authorize"),
// Collections
// .singleton("https://www.googleapis.com/auth/userinfo.email"))
// .setCredentialStore(new MemoryCredentialStore()).build();
//
// return f;
return new AuthorizationCodeFlow.Builder(BearerToken.authorizationHeaderAccessMethod(),
new NetHttpTransport(),
new JacksonFactory(),
new GenericUrl(GoogleOAuthConstants.TOKEN_SERVER_URL),
new BasicAuthentication(LoginPage.CLIENT_ID, LoginPage.CLIENT_SECRET),
LoginPage.CLIENT_ID,
GoogleOAuthConstants.AUTHORIZATION_SERVER_URL).setCredentialStore(
new MemoryCredentialStore())
.build();
}
}