diff options
| author | Samuel Tardieu <sam@rfc1149.net> | 2011-09-28 22:27:53 +0200 |
|---|---|---|
| committer | Samuel Tardieu <sam@rfc1149.net> | 2011-09-29 09:35:48 +0200 |
| commit | 4ab8fdcb970cc5dc0dcfe3858b96ff6c65d25ad5 (patch) | |
| tree | 9f15912114df4bd016b04ce479d4e73b565b24f3 /main | |
| parent | f68241ae27eab529b97faef405b4a3a00c35b4c5 (diff) | |
| download | cgeo-4ab8fdcb970cc5dc0dcfe3858b96ff6c65d25ad5.zip cgeo-4ab8fdcb970cc5dc0dcfe3858b96ff6c65d25ad5.tar.gz cgeo-4ab8fdcb970cc5dc0dcfe3858b96ff6c65d25ad5.tar.bz2 | |
Use Parameters instead of Map<String, String> for twitter
Diffstat (limited to 'main')
| -rw-r--r-- | main/src/cgeo/geocaching/Parameters.java | 14 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/Twitter.java | 4 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/cgOAuth.java | 36 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/cgeoauth.java | 8 |
4 files changed, 26 insertions, 36 deletions
diff --git a/main/src/cgeo/geocaching/Parameters.java b/main/src/cgeo/geocaching/Parameters.java index 3339a5e..d337464 100644 --- a/main/src/cgeo/geocaching/Parameters.java +++ b/main/src/cgeo/geocaching/Parameters.java @@ -4,13 +4,27 @@ import org.apache.http.NameValuePair; import org.apache.http.message.BasicNameValuePair; import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; public class Parameters extends ArrayList<NameValuePair> { private static final long serialVersionUID = 1L; + private static final Comparator<NameValuePair> comparator = new Comparator<NameValuePair>() { + @Override + public int compare(final NameValuePair nv1, final NameValuePair nv2) { + final int comparedKeys = nv1.getName().compareTo(nv2.getName()); + return comparedKeys != 0 ? comparedKeys : nv1.getValue().compareTo(nv2.getValue()); + } + }; + public void put(final String name, final String value) { add(new BasicNameValuePair(name, value)); } + public void sort() { + Collections.sort(this, comparator); + } + } diff --git a/main/src/cgeo/geocaching/Twitter.java b/main/src/cgeo/geocaching/Twitter.java index a1acbfb..37e594b 100644 --- a/main/src/cgeo/geocaching/Twitter.java +++ b/main/src/cgeo/geocaching/Twitter.java @@ -15,8 +15,6 @@ import java.io.OutputStreamWriter; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLConnection; -import java.util.HashMap; -import java.util.Map; import java.util.zip.GZIPInputStream; import java.util.zip.Inflater; import java.util.zip.InflaterInputStream; @@ -33,7 +31,7 @@ public final class Twitter { } try { - Map<String, String> parameters = new HashMap<String, String>(); + Parameters parameters = new Parameters(); parameters.put("status", status); if (coords != null) { diff --git a/main/src/cgeo/geocaching/cgOAuth.java b/main/src/cgeo/geocaching/cgOAuth.java index c06e011..6e84408 100644 --- a/main/src/cgeo/geocaching/cgOAuth.java +++ b/main/src/cgeo/geocaching/cgOAuth.java @@ -3,26 +3,15 @@ package cgeo.geocaching; import cgeo.geocaching.utils.CryptUtils; import org.apache.commons.lang3.StringUtils; +import org.apache.http.NameValuePair; import java.util.ArrayList; -import java.util.Arrays; import java.util.Date; import java.util.List; -import java.util.Map; public class cgOAuth { - public static String signOAuth(String host, String path, String method, boolean https, Map<String, String> params, String token, String tokenSecret) { + public static String signOAuth(String host, String path, String method, boolean https, Parameters params, String token, String tokenSecret) { String paramsDone = ""; - if (method.equalsIgnoreCase("GET") == false && method.equalsIgnoreCase("POST") == false) { - method = "POST"; - } else { - method = method.toUpperCase(); - } - - if (token == null) - token = ""; - if (tokenSecret == null) - tokenSecret = ""; long currentTime = new Date().getTime(); // miliseconds currentTime = currentTime / 1000; // seconds @@ -32,27 +21,18 @@ public class cgOAuth { params.put("oauth_nonce", CryptUtils.md5(Long.toString(System.currentTimeMillis()))); params.put("oauth_signature_method", "HMAC-SHA1"); params.put("oauth_timestamp", Long.toString(currentTime)); - params.put("oauth_token", token); + params.put("oauth_token", StringUtils.defaultString(token)); params.put("oauth_version", "1.0"); - String[] keys = new String[params.keySet().size()]; - params.keySet().toArray(keys); - Arrays.sort(keys); + params.sort(); List<String> paramsEncoded = new ArrayList<String>(); - for (String key : keys) { - String value = params.get(key); - paramsEncoded.add(key + "=" + cgBase.urlencode_rfc3986(value)); + for (final NameValuePair nameValue : params) { + paramsEncoded.add(nameValue.getName() + "=" + cgBase.urlencode_rfc3986(nameValue.getValue())); } - String keysPacked; - String requestPacked; - - keysPacked = cgSettings.keyConsumerSecret + "&" + tokenSecret; // both even if empty some of them! - if (https) - requestPacked = method + "&" + cgBase.urlencode_rfc3986("https://" + host + path) + "&" + cgBase.urlencode_rfc3986(StringUtils.join(paramsEncoded.toArray(), '&')); - else - requestPacked = method + "&" + cgBase.urlencode_rfc3986("http://" + host + path) + "&" + cgBase.urlencode_rfc3986(StringUtils.join(paramsEncoded.toArray(), '&')); + final String keysPacked = cgSettings.keyConsumerSecret + "&" + StringUtils.defaultString(tokenSecret); // both even if empty some of them! + final String requestPacked = method + "&" + cgBase.urlencode_rfc3986((https ? "https" : "http") + "://" + host + path) + "&" + cgBase.urlencode_rfc3986(StringUtils.join(paramsEncoded.toArray(), '&')); paramsEncoded.add("oauth_signature=" + cgBase.urlencode_rfc3986(cgBase.base64Encode(CryptUtils.hashHmac(requestPacked, keysPacked)))); paramsDone = StringUtils.join(paramsEncoded.toArray(), '&'); diff --git a/main/src/cgeo/geocaching/cgeoauth.java b/main/src/cgeo/geocaching/cgeoauth.java index 3d8b15b..2a12ce7 100644 --- a/main/src/cgeo/geocaching/cgeoauth.java +++ b/main/src/cgeo/geocaching/cgeoauth.java @@ -25,8 +25,6 @@ import java.io.OutputStreamWriter; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLConnection; -import java.util.HashMap; -import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -150,7 +148,7 @@ public class cgeoauth extends AbstractActivity { try { final StringBuilder sb = new StringBuilder(); - final String params = cgOAuth.signOAuth(host, pathRequest, method, true, new HashMap<String, String>(), null, null); + final String params = cgOAuth.signOAuth(host, pathRequest, method, true, new Parameters(), null, null); int code = -1; int retries = 0; @@ -207,7 +205,7 @@ public class cgeoauth extends AbstractActivity { prefsEdit.commit(); try { - final Map<String, String> paramsPre = new HashMap<String, String>(); + final Parameters paramsPre = new Parameters(); paramsPre.put("oauth_callback", "oob"); final String paramsBrowser = cgOAuth.signOAuth(host, pathAuthorize, "GET", true, paramsPre, OAtoken, OAtokenSecret); @@ -245,7 +243,7 @@ public class cgeoauth extends AbstractActivity { String lineOne = null; try { - final Map<String, String> paramsPre = new HashMap<String, String>(); + final Parameters paramsPre = new Parameters(); paramsPre.put("oauth_verifier", pinEntry.getText().toString()); int code = -1; |
