Search in sources :

Example 1 with ReservationConfirmation

use of oauth2.common.ReservationConfirmation in project tesb-rt-se by Talend.

the class RestaurantReservationService method completeReservation.

@GET
@Path("complete")
@Produces({ "text/html", "application/xml;q=0.9" })
public Response completeReservation(@QueryParam("code") String code, @QueryParam("state") String state) {
    String userName = sc.getUserPrincipal().getName();
    Map<String, ReservationRequest> userRequests = requests.get(userName);
    if (userRequests == null) {
        return redirectToFailureHandler(NO_REQUEST_USER);
    }
    if (state == null) {
        return redirectToFailureHandler(NO_REQUEST_STATE);
    }
    ReservationRequest request = userRequests.remove(state);
    if (request == null) {
        return redirectToFailureHandler(NO_REQUEST_AVAILABLE);
    }
    if (code == null) {
        return redirectToFailureHandler(NO_CODE_GRANT);
    }
    LOG.info("Completing the reservation request for a user: " + request.getReserveName());
    AuthorizationCodeGrant codeGrant = new AuthorizationCodeGrant(code, getCallbackURI());
    LOG.info("Requesting OAuth server to replace an authorized request token with an access token");
    ClientAccessToken accessToken = manager.getAccessToken(codeGrant);
    if (accessToken == null) {
        return redirectToFailureHandler(NO_OAUTH_ACCESS_TOKEN);
    }
    Calendar c = null;
    try {
        String authHeader = manager.createAuthorizationHeader(accessToken);
        socialService.replaceHeader("Authorization", authHeader);
        c = socialService.get(Calendar.class);
    } catch (RuntimeException ex) {
        return redirectToFailureHandler(CALENDAR_ACCESS_PROBLEM);
    }
    CalendarEntry entry = c.getEntry(request.getHour());
    if (entry.getEventDescription() == null || entry.getEventDescription().trim().isEmpty()) {
        String address = restaurantService.post(new Form().param("name", request.getReserveName()).param("phone", request.getContactPhone()).param("hour", Integer.toString(request.getHour())), String.class);
        if (address == null) {
            return redirectToFailureHandler(NO_RESERVATION);
        }
        // update the user's calendar
        String authHeader = manager.createAuthorizationHeader(accessToken);
        socialService.replaceHeader("Authorization", authHeader);
        Response response = socialService.form(new Form().param("hour", Integer.toString(request.getHour())).param("description", "Table reserved at " + address));
        boolean calendarUpdated = response.getStatus() == 200 || response.getStatus() == 204;
        return Response.ok(new ReservationConfirmation(address, request.getHour(), calendarUpdated)).build();
    } else {
        return redirectToFailureHandler(CALENDAR_BUSY);
    }
}
Also used : Response(javax.ws.rs.core.Response) AuthorizationCodeGrant(org.apache.cxf.rs.security.oauth2.grants.code.AuthorizationCodeGrant) CalendarEntry(oauth2.common.CalendarEntry) Form(javax.ws.rs.core.Form) ClientAccessToken(org.apache.cxf.rs.security.oauth2.common.ClientAccessToken) Calendar(oauth2.common.Calendar) ReservationConfirmation(oauth2.common.ReservationConfirmation) Path(javax.ws.rs.Path) Produces(javax.ws.rs.Produces) GET(javax.ws.rs.GET)

Example 2 with ReservationConfirmation

use of oauth2.common.ReservationConfirmation in project tesb-rt-se by Talend.

the class RESTClient method reserveTable.

public void reserveTable() throws Exception {
    WebClient rs = createClient("http://localhost:" + port + "/services/reservations/reserve/table", "barry@restaurant.com", "5678");
    Response r = rs.form(new Form().param("name", "Barry").param("phone", "12345678").param("hour", "7"));
    int status = r.getStatus();
    Object locationHeader = r.getMetadata().getFirst("Location");
    if (status != 303 || locationHeader == null) {
        System.out.println("OAuth flow is broken");
    }
    WebClient authorizeClient = createClient(locationHeader.toString(), "barry@social.com", "1234");
    OAuthAuthorizationData data = authorizeClient.get(OAuthAuthorizationData.class);
    Object authenticityCookie = authorizeClient.getResponse().getMetadata().getFirst("Set-Cookie");
    System.out.println(authenticityCookie);
    Form authorizationResult = getAuthorizationResult(data);
    authorizeClient.reset();
    authorizeClient.to(data.getReplyTo(), false);
    if (authenticityCookie != null) {
        authorizeClient.header("Cookie", (String) authenticityCookie);
    }
    Response r2 = authorizeClient.form(authorizationResult);
    int status2 = r2.getStatus();
    Object locationHeader2 = r2.getMetadata().getFirst("Location");
    if (status2 != 303 || locationHeader2 == null) {
        System.out.println("OAuth flow is broken");
    }
    WebClient finalClient = createClient(locationHeader2.toString(), "barry@restaurant.com", "5678");
    finalClient.accept("application/xml");
    ReservationConfirmation confirm = finalClient.get(ReservationConfirmation.class);
    if (confirm != null) {
        updateAndGetUserCalendar(7, "Dinner at " + confirm.getAddress());
    } else {
        System.out.println("Reservation failed");
    }
}
Also used : Response(javax.ws.rs.core.Response) Form(javax.ws.rs.core.Form) ReservationConfirmation(oauth2.common.ReservationConfirmation) WebClient(org.apache.cxf.jaxrs.client.WebClient) OAuthAuthorizationData(org.apache.cxf.rs.security.oauth2.common.OAuthAuthorizationData)

Aggregations

Form (javax.ws.rs.core.Form)2 Response (javax.ws.rs.core.Response)2 ReservationConfirmation (oauth2.common.ReservationConfirmation)2 GET (javax.ws.rs.GET)1 Path (javax.ws.rs.Path)1 Produces (javax.ws.rs.Produces)1 Calendar (oauth2.common.Calendar)1 CalendarEntry (oauth2.common.CalendarEntry)1 WebClient (org.apache.cxf.jaxrs.client.WebClient)1 ClientAccessToken (org.apache.cxf.rs.security.oauth2.common.ClientAccessToken)1 OAuthAuthorizationData (org.apache.cxf.rs.security.oauth2.common.OAuthAuthorizationData)1 AuthorizationCodeGrant (org.apache.cxf.rs.security.oauth2.grants.code.AuthorizationCodeGrant)1