cleaning out the code that's responsible for acquiriing the first request token
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user