aboutsummaryrefslogtreecommitdiffstats
path: root/main
diff options
context:
space:
mode:
authorSamuel Tardieu <sam@rfc1149.net>2011-09-28 22:27:53 +0200
committerSamuel Tardieu <sam@rfc1149.net>2011-09-29 09:35:48 +0200
commit4ab8fdcb970cc5dc0dcfe3858b96ff6c65d25ad5 (patch)
tree9f15912114df4bd016b04ce479d4e73b565b24f3 /main
parentf68241ae27eab529b97faef405b4a3a00c35b4c5 (diff)
downloadcgeo-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.java14
-rw-r--r--main/src/cgeo/geocaching/Twitter.java4
-rw-r--r--main/src/cgeo/geocaching/cgOAuth.java36
-rw-r--r--main/src/cgeo/geocaching/cgeoauth.java8
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;