Package org.fluxtream.core.connectors

Source Code of org.fluxtream.core.connectors.SignpostOAuthHelper

package org.fluxtream.core.connectors;

import oauth.signpost.OAuthConsumer;
import oauth.signpost.basic.DefaultOAuthConsumer;
import org.apache.commons.io.IOUtils;
import org.fluxtream.core.connectors.updaters.RateLimitReachedException;
import org.fluxtream.core.connectors.updaters.UnexpectedResponseCodeException;
import org.fluxtream.core.domain.ApiKey;
import org.fluxtream.core.services.GuestService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;

@Component
public class SignpostOAuthHelper extends ApiClientSupport {

    @Autowired
    GuestService guestService;

  public final String makeRestCall(ApiKey apiKey,
      int objectTypes, String urlString) throws UnexpectedResponseCodeException, RateLimitReachedException {

        if (hasReachedRateLimit(apiKey.getConnector(), apiKey.getGuestId()))
            throw new RateLimitReachedException();

        try {
      long then = System.currentTimeMillis();
      URL url = new URL(urlString);
      HttpURLConnection request = (HttpURLConnection) url.openConnection();
     
      OAuthConsumer consumer = new DefaultOAuthConsumer(
          getConsumerKey(apiKey), getConsumerSecret(apiKey));
 
      consumer.setTokenWithSecret(
                    guestService.getApiKeyAttribute(apiKey,"accessToken"),
                    guestService.getApiKeyAttribute(apiKey,"tokenSecret"));

      // sign the request (consumer is a Signpost DefaultOAuthConsumer)
      try {
        consumer.sign(request);
      } catch (Exception e) {
        throw new RuntimeException("OAuth exception: " + e.getMessage());
      }
      request.connect();
            final int httpResponseCode = request.getResponseCode();
            final String httpResponseMessage = request.getResponseMessage();
            if (httpResponseCode == 200) {
        String json = IOUtils.toString(request.getInputStream());
        connectorUpdateService.addApiUpdate(apiKey,
            objectTypes, then, System.currentTimeMillis() - then,
            urlString, true, httpResponseCode, httpResponseMessage);
        // logger.info(apiKey.getGuestId(), "REST call success: " +
        // urlString);
        return json;
      } else {
        connectorUpdateService.addApiUpdate(apiKey,
            objectTypes, then, System.currentTimeMillis() - then,
            urlString, false, httpResponseCode, httpResponseMessage);
        throw new UnexpectedResponseCodeException(httpResponseCode,
                                                          httpResponseMessage,
                                                          urlString);
      }
    } catch (IOException e) {
      throw new RuntimeException("IOException trying to make rest call: " + e.getMessage());
    }
  }

  private String getConsumerSecret(ApiKey apiKey) {
    String consumerSecret = guestService.getApiKeyAttribute(apiKey, apiKey.getConnector().getName() + "ConsumerSecret");
    return consumerSecret == null ? "" : consumerSecret;
  }

  private String getConsumerKey(ApiKey apiKey) {
    String consumerKey = guestService.getApiKeyAttribute(apiKey, apiKey.getConnector().getName() + "ConsumerKey");
    return consumerKey == null ? "" : consumerKey;
  }

}
TOP

Related Classes of org.fluxtream.core.connectors.SignpostOAuthHelper

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.