From b8ed5eeffdada55a0bdc2d2aa853a98ac6ba89cb Mon Sep 17 00:00:00 2001 From: Josh Long Date: Sun, 29 Aug 2010 00:54:29 +0000 Subject: [PATCH] cleaning out the code that's responsible for acquiriing the first request token --- ...tractOAuthAccessTokenBasedFactoryBean.java | 22 ++-- ...essTokenInitialRequestProcessListener.java | 100 +++++++++++++----- ...uthAccessTokenBasedTwitterFactoryBean.java | 25 ----- .../twitter/oauth/OAuthConfiguration.java | 13 +-- 4 files changed, 89 insertions(+), 71 deletions(-) diff --git a/spring-integration-twitter/src/main/java/org/springframework/integration/twitter/oauth/AbstractOAuthAccessTokenBasedFactoryBean.java b/spring-integration-twitter/src/main/java/org/springframework/integration/twitter/oauth/AbstractOAuthAccessTokenBasedFactoryBean.java index 2b9350adf5..fd0640fafb 100644 --- a/spring-integration-twitter/src/main/java/org/springframework/integration/twitter/oauth/AbstractOAuthAccessTokenBasedFactoryBean.java +++ b/spring-integration-twitter/src/main/java/org/springframework/integration/twitter/oauth/AbstractOAuthAccessTokenBasedFactoryBean.java @@ -42,7 +42,7 @@ abstract public class AbstractOAuthAccessTokenBasedFactoryBean 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 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 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 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 implements Ini return null; } +*/ /** * Responsibility of subclasses to call this because we cant dereference the generic type appropriately. The responsibility is diff --git a/spring-integration-twitter/src/main/java/org/springframework/integration/twitter/oauth/ConsoleBasedAccessTokenInitialRequestProcessListener.java b/spring-integration-twitter/src/main/java/org/springframework/integration/twitter/oauth/ConsoleBasedAccessTokenInitialRequestProcessListener.java index c982c6b6e6..0cfc0b4d9f 100644 --- a/spring-integration-twitter/src/main/java/org/springframework/integration/twitter/oauth/ConsoleBasedAccessTokenInitialRequestProcessListener.java +++ b/spring-integration-twitter/src/main/java/org/springframework/integration/twitter/oauth/ConsoleBasedAccessTokenInitialRequestProcessListener.java @@ -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 output = new HashMap(); - 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 output = new HashMap(); + 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); + + } } diff --git a/spring-integration-twitter/src/main/java/org/springframework/integration/twitter/oauth/OAuthAccessTokenBasedTwitterFactoryBean.java b/spring-integration-twitter/src/main/java/org/springframework/integration/twitter/oauth/OAuthAccessTokenBasedTwitterFactoryBean.java index affcee2a8d..c7d7e82975 100644 --- a/spring-integration-twitter/src/main/java/org/springframework/integration/twitter/oauth/OAuthAccessTokenBasedTwitterFactoryBean.java +++ b/spring-integration-twitter/src/main/java/org/springframework/integration/twitter/oauth/OAuthAccessTokenBasedTwitterFactoryBean.java @@ -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 { 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 friendsTimeline = twitter.getFriendsTimeline(); - System.out.println("Friends' timeline " + friendsTimeline); - Thread.sleep(10000); - } } diff --git a/spring-integration-twitter/src/main/java/org/springframework/integration/twitter/oauth/OAuthConfiguration.java b/spring-integration-twitter/src/main/java/org/springframework/integration/twitter/oauth/OAuthConfiguration.java index dc2aad6c5c..b7ee022475 100644 --- a/spring-integration-twitter/src/main/java/org/springframework/integration/twitter/oauth/OAuthConfiguration.java +++ b/spring-integration-twitter/src/main/java/org/springframework/integration/twitter/oauth/OAuthConfiguration.java @@ -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;