private Response handleResponse(OAuthRequest request, OAuth10aService service) throws InterruptedException, ExecutionException, IOException, SAXException, InstantiationException, IllegalAccessException, ParserConfigurationException, FlickrException { com.github.scribejava.core.model.Response scribeResponse = service.execute(request); if (!scribeResponse.isSuccessful()) { throw new FlickrException(FLICKR_SERVICE_UNAVAILABLE, String.format("Received '%s' error from Flickr with status %d", scribeResponse.getMessage(), scribeResponse.getCode())); } Response f4jResponse; String strXml = scribeResponse.getBody().trim(); if (Flickr.debugStream) { logger.debug(strXml); } if (strXml.startsWith("oauth_problem=")) { throw new FlickrRuntimeException(strXml); } DocumentBuilder builder = getDocumentBuilder(); Document document = builder.parse(new InputSource(new StringReader(strXml))); f4jResponse = (Response) responseClass.newInstance(); f4jResponse.parse(document); return f4jResponse; }
@Override public void callback(CallbackContext context) { HttpServletRequest request = context.getRequest(); OAuthService scribe = prepareScribe(context).build(); String oAuthVerifier = request.getParameter("code"); Token accessToken = scribe.getAccessToken(EMPTY_TOKEN, new Verifier(oAuthVerifier)); OAuthRequest userRequest = new OAuthRequest(Verb.GET, gitLabConfiguration.url() + "/api/" + gitLabConfiguration.apiVersion() + "/user", scribe); scribe.signRequest(accessToken, userRequest); com.github.scribejava.core.model.Response userResponse = userRequest.send(); if (!userResponse.isSuccessful()) { throw new IllegalStateException(format("Fail to authenticate the user. Error code is %s, Body of the response is %s", userResponse.getCode(), userResponse.getBody())); } String userResponseBody = userResponse.getBody(); LOGGER.trace("User response received : %s", userResponseBody); GsonUser gsonUser = GsonUser.parse(userResponseBody); UserIdentity.Builder builder = UserIdentity.builder().setProviderLogin(gsonUser.getUsername()).setLogin(gsonUser.getUsername()).setName(gsonUser.getName()).setEmail(gsonUser.getEmail()); if (!gitLabConfiguration.userExceptions().contains(gsonUser.getUsername())) { Set<String> groups = getUserGroups(accessToken); if (!groups.isEmpty()) { builder.setGroups(groups); } } context.authenticate(builder.build()); context.redirectToRequestedPage(); }