From 5bb859152e5d9f160baf588e1555e79a4617fa8c Mon Sep 17 00:00:00 2001 From: Peter Wu Date: Thu, 24 Apr 2014 00:22:21 +0200 Subject: Refactor consumer key/secret pair into container --- src/mining/BearerRequester.java | 19 +++++-------------- src/support/ConsumerKeySecret.java | 39 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+), 14 deletions(-) create mode 100644 src/support/ConsumerKeySecret.java (limited to 'src') diff --git a/src/mining/BearerRequester.java b/src/mining/BearerRequester.java index 104dabb..bc82cd9 100644 --- a/src/mining/BearerRequester.java +++ b/src/mining/BearerRequester.java @@ -4,10 +4,10 @@ import java.io.IOException; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLConnection; -import org.apache.commons.codec.binary.Base64; import org.apache.commons.io.Charsets; import org.json.JSONException; import org.json.JSONObject; +import support.ConsumerKeySecret; /** * An API requester used for application-only requests. Not all requests are @@ -35,19 +35,18 @@ public class BearerRequester extends AbstractRequester { * Instantiates an instance, requesting an access token from the provided * consumer key and secret. * - * @param consumerKey Key provided by Twitter. - * @param consumerSecret Secret provided by Twitter. + * @param secrets The consumer secrets provided by Twitter. * @throws IOException if a failure occurred while acquiring a token. */ - public BearerRequester(String consumerKey, String consumerSecret) + public BearerRequester(ConsumerKeySecret secrets) throws IOException { - String creds = encodeToken(consumerKey, consumerSecret); String postData = "grant_type=client_credentials"; URL url = buildUrl("oauth2/token"); HttpURLConnection conn = open(url); conn.setRequestMethod("POST"); // set request headers - conn.addRequestProperty("Authorization", "Basic " + creds); + conn.addRequestProperty("Authorization", "Basic " + + secrets.getBearerTokenBase64()); conn.addRequestProperty("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"); conn.setFixedLengthStreamingMode(postData.length()); @@ -74,14 +73,6 @@ public class BearerRequester extends AbstractRequester { conn.addRequestProperty("Authorization", "Bearer " + access_token); } - private String encodeToken(String consumerKey, String consumerSecret) { - StringBuilder sb = new StringBuilder(); - sb.append(consumerKey); - sb.append(":"); - sb.append(consumerSecret); - return Base64.encodeBase64String(sb.toString().getBytes(Charsets.UTF_8)); - } - /** * @return the access token that authenticates requests. */ diff --git a/src/support/ConsumerKeySecret.java b/src/support/ConsumerKeySecret.java new file mode 100644 index 0000000..25bde51 --- /dev/null +++ b/src/support/ConsumerKeySecret.java @@ -0,0 +1,39 @@ +package support; + +import org.apache.commons.codec.binary.Base64; +import org.apache.commons.io.Charsets; + +/** + * Container for a pair of consumer key and secret. See + * https://dev.twitter.com/docs/auth/application-only-auth + */ +public class ConsumerKeySecret { + + private final String key; + private final String secret; + + public ConsumerKeySecret(String key, String secret) { + this.key = key; + this.secret = secret; + } + + public String getKey() { + return key; + } + + public String getSecret() { + return secret; + } + + private String getBearerToken() { + return key + ":" + secret; + } + + /** + * @return Base64-encoded bearer token that can should be included in the + * Authorization header for application-only requests. + */ + public String getBearerTokenBase64() { + return Base64.encodeBase64String(getBearerToken().getBytes(Charsets.UTF_8)); + } +} -- cgit v1.2.1