@GET @Path("/authorize") @JiveSignatureValidation public Response authorize(@Context HttpServletRequest request, @Context UriInfo uriInfo) { String instanceID = "TODO"; // TODO: HEADER PARAM / QUERY PARAM String userID = "TODO"; // TODO: HEADER PARAM / QUERY PARAM // TODO: CAPTURE THE JIVE ID FROM SIGNED FETCH HEADERS ConsumerCredentials consumerCredentials = new ConsumerCredentials(serviceConfig.getClientID(), serviceConfig.getClientSecret()); OAuth1AuthorizationFlow flow = OAuth1ClientSupport.builder(consumerCredentials) .authorizationFlow( serviceConfig.getRequestTokenUrl(), serviceConfig.getAccessTokenUrl(), serviceConfig.getAuthorizeUrl()) .callbackUri(uriInfo.getBaseUri() + "oauth/" + SERVICE_NAME + "/callback") .build(); String authorizationUrl = flow.start(); try { URI authorizationUri = new URI(authorizationUrl); /** LOAD INTO SESSION FOR FOLLOW-UP HIT * */ request.getSession().setAttribute(getFlowSessionKey(), flow); request.getSession().setAttribute(getInstanceIDSessionKey(), instanceID); request.getSession().setAttribute(getUserIDSessionKey(), userID); // *** NOTE: 303 "See Other" NEEDED FOR JERSEY FLOW TO PICK UP return Response.seeOther(authorizationUri).build(); } catch (URISyntaxException use) { log.error("Invalid Authorization URI: " + authorizationUrl); return Response.serverError().entity("Unable to Process this Request").build(); } // end try/catch } // end authorize
@GET @Path("/callback") public Response callback( @Context HttpServletRequest request, @Context UriInfo uriInfo, @QueryParam("oauth_token") String token, @QueryParam("oauth_verifier") String verifier) { if (token == null) { if (log.isWarnEnabled()) { log.warn("oauth_token is null, failing request"); } return Response.status(Response.Status.BAD_REQUEST) .entity("Missing oauth_token string") .build(); } // end if if (verifier == null) { if (log.isWarnEnabled()) { log.warn("oauth_verifier is null"); } return Response.status(Response.Status.BAD_REQUEST) .entity("Missing oauth_verifier string") .build(); } // end if /** * RETRIEVE FROM SESSION TO CLOSE OUT THE FLOW ** */ OAuth1AuthorizationFlow flow = (OAuth1AuthorizationFlow) request.getSession().getAttribute(getFlowSessionKey()); String instanceID = (String) request.getSession().getAttribute(getInstanceIDSessionKey()); String userID = (String) request.getSession().getAttribute(getUserIDSessionKey()); if (JiveSDKUtils.isAllExist(instanceID, userID, flow, verifier)) { flow.finish(verifier); if (log.isDebugEnabled()) { log.debug( "Successfully Retrieved OAuth Tokens[" + SERVICE_NAME + "]: instanceID=" + instanceID + ", token=" + token + ", verifier=" + verifier); } fireOAuthEvent( OAuthEvent.Type.GrantSuccess, getOAuth1GrantSuccessData(instanceID, userID, token, verifier)); try { URI uri = new URI("/oauth/" + SERVICE_NAME + "/callback-close.jsp"); return Response.temporaryRedirect(uri).build(); } catch (URISyntaxException use) { log.error("Invalid Authorization URI: /oauth/" + SERVICE_NAME + "/callback-close.jsp", use); return Response.serverError().entity("Invalid Close URL").build(); } // end try/catch } // end if return Response.status(404).entity("Resource Not Found").build(); } // end callback