Package org.jboss.resteasy.examples.twitter

Source Code of org.jboss.resteasy.examples.twitter.TwitterClientOAuthHelper$SingleClient

package org.jboss.resteasy.examples.twitter;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Properties;

import net.oauth.OAuth;
import net.oauth.OAuthAccessor;
import net.oauth.OAuthConsumer;
import net.oauth.OAuthException;
import net.oauth.OAuthMessage;
import net.oauth.OAuthServiceProvider;
import net.oauth.client.OAuthClient;
import net.oauth.client.httpclient4.HttpClient4;
import net.oauth.client.httpclient4.HttpClientPool;

import org.apache.http.conn.ClientConnectionManager;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager;
import org.apache.http.params.HttpParams;

public class TwitterClientOAuthHelper {

  private Properties props;
  private File propFile;

  public TwitterClientOAuthHelper(Properties props, File propFile) {
    super();
    this.props = props;
    this.propFile = propFile;
  }

  private void updateProperties(String msg) throws IOException {
    props.store(new FileOutputStream(propFile), msg);
  }

  private OAuthAccessor createOAuthAccessor() {
    String consumerKey = props.getProperty("consumerKey");
    String callbackUrl = null;
    String consumerSecret = props.getProperty("consumerSecret");
    String reqUrl = props.getProperty("requestUrl");
    String authzUrl = props.getProperty("authorizationUrl");
    String accessUrl = props.getProperty("accessUrl");
    OAuthServiceProvider provider = new OAuthServiceProvider(reqUrl,
        authzUrl, accessUrl);
    OAuthConsumer consumer = new OAuthConsumer(callbackUrl, consumerKey,
        consumerSecret, provider);
    return new OAuthAccessor(consumer);
  }

  private OAuthMessage sendRequest(Map map, String url) throws IOException,
      URISyntaxException, OAuthException {
    List<Map.Entry> params = new ArrayList<Map.Entry>();
    Iterator it = map.entrySet().iterator();
    while (it.hasNext()) {
      Map.Entry p = (Map.Entry) it.next();
      params.add(new OAuth.Parameter((String) p.getKey(), (String) p
          .getValue()));
    }
    OAuthAccessor accessor = createOAuthAccessor();
    accessor.tokenSecret = props.getProperty("tokenSecret");
    OAuthClient client = new OAuthClient(
        new HttpClient4(new SingleClient()));
    return client.invoke(accessor, "GET", url, params);
  }

  public String prepareOAuthHeaderForAccesingResources(Properties props,
      String method, String resource, String updateStatus)
      throws Exception {
    OAuthMessage message = new OAuthMessage(method, resource, null, null);
    message.addParameter(OAuth.OAUTH_NONCE, System.nanoTime() + "");
    message.addParameter(OAuth.OAUTH_VERSION, OAuth.VERSION_1_0);
    message.addParameter(OAuth.OAUTH_TIMESTAMP,
        (System.currentTimeMillis() / 1000) + "");
    message.addParameter(OAuth.OAUTH_SIGNATURE_METHOD, OAuth.HMAC_SHA1);
    message.addParameter(OAuth.OAUTH_TOKEN, props
        .getProperty("accessToken"));
    message.addParameter(OAuth.OAUTH_CONSUMER_KEY, props
        .getProperty("consumerKey"));

    if (updateStatus != null) {
      // the parameter used by twitter on
      message.addParameter("status", updateStatus);
    }

    OAuthServiceProvider provider = new OAuthServiceProvider(props
        .getProperty("requestUrl"), props
        .getProperty("authorizationUrl"), props
        .getProperty("accessUrl"));
    OAuthConsumer consumer = new OAuthConsumer("", props
        .getProperty("consumerKey"), props
        .getProperty("consumerSecret"), provider);
    OAuthAccessor accessor = new OAuthAccessor(consumer);
    accessor.tokenSecret = props.getProperty("tokenSecret");
    message.sign(accessor);

    return message.getAuthorizationHeader(resource);
  }

  public void request() throws Exception {
    OAuthAccessor accessor = createOAuthAccessor();
    HttpClient4 httpClient = new HttpClient4(new SingleClient());
    OAuthClient client = new OAuthClient(httpClient);
    client.getRequestToken(accessor);
    props.setProperty("requestToken", accessor.requestToken);
    props.setProperty("tokenSecret", accessor.tokenSecret);
    updateProperties("Last action: added requestToken");
  }

  public String authorize() throws Exception {
    // just print the redirect
    Properties paramProps = new Properties();
    paramProps
        .setProperty("application_name", props.getProperty("appName"));
    paramProps
        .setProperty("oauth_token", props.getProperty("requestToken"));
    OAuthAccessor accessor = createOAuthAccessor();
    OAuthMessage response = sendRequest(paramProps,
        accessor.consumer.serviceProvider.userAuthorizationURL);
    return response.URL;
  }

  public void access() throws Exception {
    Properties paramProps = new Properties();
    paramProps
        .setProperty("oauth_token", props.getProperty("requestToken"));
    OAuthMessage response = sendRequest(paramProps, props
        .getProperty("accessUrl"));

    props.setProperty("accessToken", response.getParameter("oauth_token"));
    props.setProperty("tokenSecret", response
        .getParameter("oauth_token_secret"));
    props.setProperty("userId", response.getParameter("user_id"));
    updateProperties("Last action: added accessToken");
  }

  public class SingleClient implements HttpClientPool {
    SingleClient() {
      org.apache.http.client.HttpClient client = new DefaultHttpClient();
      ClientConnectionManager mgr = client.getConnectionManager();
      if (!(mgr instanceof ThreadSafeClientConnManager)) {
        HttpParams params = client.getParams();
        client = new DefaultHttpClient(new ThreadSafeClientConnManager(
            params, mgr.getSchemeRegistry()), params);
      }

      // Use Proxy to access if you are in one of the countries that cannot connects to twitter directly.  
      // HttpHost proxy = new HttpHost("your_proxy_url", your_proxy_port);
      // client.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY,
      // proxy);
     
      this.client = client;
    }

    private final org.apache.http.client.HttpClient client;

    public org.apache.http.client.HttpClient getHttpClient(URL server) {
      return client;
    }
  }

}
TOP

Related Classes of org.jboss.resteasy.examples.twitter.TwitterClientOAuthHelper$SingleClient

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.