cleaning out the code that's responsible for acquiriing the first request token

This commit is contained in:
Josh Long
2010-08-29 00:54:29 +00:00
parent 2b903d1210
commit b8ed5eeffd
4 changed files with 89 additions and 71 deletions

View File

@@ -42,7 +42,7 @@ abstract public class AbstractOAuthAccessTokenBasedFactoryBean<T> implements Ini
protected OAuthConfiguration configuration;
protected final Object monitor = new Object();
protected volatile T twitter;
protected volatile AccessTokenInitialRequestProcessListener accessTokenInitialRequestProcessListener;
// protected volatile AccessTokenInitialRequestProcessListener accessTokenInitialRequestProcessListener;
protected volatile boolean initialized = false;
/**
@@ -84,20 +84,20 @@ abstract public class AbstractOAuthAccessTokenBasedFactoryBean<T> implements Ini
*/
public void afterPropertiesSet() throws Exception {
synchronized (this.monitor) {
if (this.accessTokenInitialRequestProcessListener == null) {
/*if (this.accessTokenInitialRequestProcessListener == null) {
accessTokenInitialRequestProcessListener = new ConsoleBasedAccessTokenInitialRequestProcessListener();
}
}*/
Assert.notNull(this.configuration.getConsumerKey(), "'consumerKey' mustn't be null");
Assert.notNull(this.configuration.getConsumerSecret(), "'consumerSecret' mustn't be null");
AccessToken accessTokenObj;
AccessToken accessTokenObj=null;
establishTwitterObject(accessTokenObj);
if (StringUtils.hasText(this.configuration.getAccessToken()) && StringUtils.hasText(this.configuration.getAccessTokenSecret())) {
accessTokenObj = new AccessToken(this.configuration.getAccessToken(), this.configuration.getAccessTokenSecret());
} else {
accessTokenObj = initialAuthorizationWizard();
}
} /*else {
// accessTokenObj = initialAuthorizationWizard();
}*/
establishTwitterObject(accessTokenObj);
@@ -107,11 +107,11 @@ abstract public class AbstractOAuthAccessTokenBasedFactoryBean<T> implements Ini
}
}
@SuppressWarnings("unused")
/*@SuppressWarnings("unused")
public void setAccessTokenInitialRequestProcessListener(AccessTokenInitialRequestProcessListener accessTokenInitialRequestProcessListener) {
this.accessTokenInitialRequestProcessListener = accessTokenInitialRequestProcessListener;
}
*/
public abstract void establishTwitterObject(AccessToken accessToken)
throws Exception;
@@ -154,6 +154,7 @@ abstract public class AbstractOAuthAccessTokenBasedFactoryBean<T> implements Ini
* @return returns the freshly created {@link twitter4j.http.AccessToken} object from the service
* @throws Exception for just about any deviation from the expected
*/
/*
private AccessToken initialAuthorizationWizard() throws Exception {
Assert.notNull(this.accessTokenInitialRequestProcessListener, "'accessTokenInitialRequestProcessListener' can't be null");
@@ -170,6 +171,7 @@ abstract public class AbstractOAuthAccessTokenBasedFactoryBean<T> implements Ini
return null;
}
*/
/**
* Responsibility of subclasses to call this because we cant dereference the generic type appropriately. The responsibility is

View File

@@ -19,12 +19,23 @@ import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.SystemUtils;
import org.apache.commons.lang.exception.ExceptionUtils;
import org.springframework.beans.factory.config.PropertiesFactoryBean;
import org.springframework.core.io.FileSystemResource;
import twitter4j.Twitter;
import twitter4j.TwitterException;
import twitter4j.TwitterFactory;
import twitter4j.http.AccessToken;
import twitter4j.http.RequestToken;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
@@ -36,33 +47,74 @@ import java.util.Properties;
* @author Josh Long
*/
public class ConsoleBasedAccessTokenInitialRequestProcessListener implements AccessTokenInitialRequestProcessListener {
public String openUrlAndReturnPin(String urlToOpen)
throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Open the following URL and grant access to your account:");
System.out.println(urlToOpen);
System.out.print("Enter the PIN(if aviailable) or just hit enter.[PIN]:");
public String openUrlAndReturnPin(String urlToOpen)
throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Open the following URL and grant access to your account:");
System.out.println(urlToOpen);
System.out.print("Enter the PIN(if aviailable) or just hit enter.[PIN]:");
return StringUtils.trim(br.readLine());
}
return StringUtils.trim(br.readLine());
}
public void persistReturnedAccessToken(AccessToken accessToken)
throws Exception {
Map<String, String> output = new HashMap<String, String>();
output.put(OAuthConfigurationFactoryBean.WELL_KNOWN_CONSUMER_ACCESS_TOKEN, accessToken.getToken());
output.put(OAuthConfigurationFactoryBean.WELL_KNOWN_CONSUMER_ACCESS_TOKEN_SECRET, accessToken.getTokenSecret());
public void persistReturnedAccessToken(AccessToken accessToken)
throws Exception {
Map<String, String> output = new HashMap<String, String>();
output.put(OAuthConfigurationFactoryBean.WELL_KNOWN_CONSUMER_ACCESS_TOKEN, accessToken.getToken());
output.put(OAuthConfigurationFactoryBean.WELL_KNOWN_CONSUMER_ACCESS_TOKEN_SECRET, accessToken.getTokenSecret());
File accessTokenCreds = new File(SystemUtils.getJavaIoTmpDir(), "twitter-accesstoken.properties");
FileOutputStream fileOutputStream = new FileOutputStream(accessTokenCreds);
Properties props = new Properties();
props.putAll(output);
props.store(fileOutputStream, "oauth-access-token");
IOUtils.closeQuietly(fileOutputStream);
File accessTokenCreds = new File(SystemUtils.getJavaIoTmpDir(), "twitter-accesstoken.properties");
FileOutputStream fileOutputStream = new FileOutputStream(accessTokenCreds);
Properties props = new Properties();
props.putAll(output);
props.store(fileOutputStream, "oauth-access-token");
IOUtils.closeQuietly(fileOutputStream);
System.out.println("The oauth accesstoken credentials have been written to " + accessTokenCreds.getAbsolutePath());
}
System.out.println("The oauth accesstoken credentials have been written to " + accessTokenCreds.getAbsolutePath());
}
public void failure(Throwable t) {
System.err.println("Exception occurred when trying to retrieve credentials: " + ExceptionUtils.getFullStackTrace(t));
}
public void failure(Throwable t) {
System.err.println("Exception occurred when trying to retrieve credentials: " + ExceptionUtils.getFullStackTrace(t));
}
public static void main(String[] args) throws Exception {
File twitterProps = new File(SystemUtils.getUserHome(), "Desktop/twitter.properties");
PropertiesFactoryBean propertiesFactoryBean = new PropertiesFactoryBean();
propertiesFactoryBean.setLocation(new FileSystemResource(twitterProps));
propertiesFactoryBean.afterPropertiesSet() ;
Properties props = propertiesFactoryBean.getObject();
String key = StringUtils.trim(props.getProperty("twitter.oauth.consumerKey"));
String secret = StringUtils.trim( props.getProperty("twitter.oauth.consumerSecret") ) ;
ConsoleBasedAccessTokenInitialRequestProcessListener consoleBasedAccessTokenInitialRequestProcessListener = new ConsoleBasedAccessTokenInitialRequestProcessListener();
Twitter twitter = new TwitterFactory().getOAuthAuthorizedInstance( key, secret);
RequestToken requestToken = twitter.getOAuthRequestToken();
AccessToken accessToken = null;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
while (null == accessToken) {
String pin = consoleBasedAccessTokenInitialRequestProcessListener.openUrlAndReturnPin(requestToken.getAuthorizationURL());
try {
if (pin.length() > 0) {
accessToken = twitter.getOAuthAccessToken(requestToken, pin);
} else {
accessToken = twitter.getOAuthAccessToken();
}
} catch (TwitterException te) {
if (401 == te.getStatusCode()) {
System.out.println("Unable to get the access token.");
} else {
te.printStackTrace();
}
}
}
consoleBasedAccessTokenInitialRequestProcessListener.persistReturnedAccessToken(accessToken);
}
}

View File

@@ -15,19 +15,11 @@
*/
package org.springframework.integration.twitter.oauth;
import org.apache.commons.lang.SystemUtils;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.springframework.core.io.FileSystemResource;
import twitter4j.ResponseList;
import twitter4j.Status;
import twitter4j.Twitter;
import twitter4j.TwitterFactory;
import twitter4j.http.AccessToken;
import twitter4j.http.RequestToken;
import java.io.File;
import java.util.Properties;
public class OAuthAccessTokenBasedTwitterFactoryBean extends AbstractOAuthAccessTokenBasedFactoryBean<Twitter> {
protected OAuthAccessTokenBasedTwitterFactoryBean(OAuthConfiguration configuration) {
@@ -66,22 +58,5 @@ public class OAuthAccessTokenBasedTwitterFactoryBean extends AbstractOAuthAccess
return Twitter.class;
}
public static void main(String[] args) throws Throwable {
File propsFile = new File(new File(SystemUtils.getUserHome(), "Desktop"), "twitter.properties");
FileSystemResource fileSystemResource = new FileSystemResource(propsFile);
Properties properties = fromResource(fileSystemResource);
OAuthConfigurationFactoryBean oAuthConfigurationFactoryBean = new OAuthConfigurationFactoryBean();
oAuthConfigurationFactoryBean.bootstrapFromProperties(properties);
OAuthConfiguration configuration = oAuthConfigurationFactoryBean.getObject();
Twitter twitter = configuration.getTwitter();
System.out.println("Used the " + OAuthAccessTokenBasedTwitterFactoryBean.class.getName() + " and arrived at " + ToStringBuilder.reflectionToString(twitter));
ResponseList<Status> friendsTimeline = twitter.getFriendsTimeline();
System.out.println("Friends' timeline " + friendsTimeline);
Thread.sleep(10000);
}
}

View File

@@ -40,14 +40,6 @@ public class OAuthConfiguration {
this.accessTokenSecret = accessTokenSecret;
}
/** package friendly */
/* void setAsyncTwitter(AsyncTwitter asyncTwitter) {
this.asyncTwitter = asyncTwitter;
}*/
/**
* package friendly
*/
void setTwitter(Twitter twitter) {
this.twitter = twitter;
}
@@ -59,10 +51,7 @@ public class OAuthConfiguration {
return twitter;
}
/*
public AsyncTwitter getAsyncTwitter() {
return asyncTwitter;
}*/
public String getConsumerKey() {
return consumerKey;