aboutsummaryrefslogtreecommitdiffstats
path: root/main
diff options
context:
space:
mode:
authorBananeweizen <bananeweizen@gmx.de>2013-06-01 14:12:02 +0200
committerBananeweizen <bananeweizen@gmx.de>2013-06-01 14:12:02 +0200
commit2ab4eab43295c1c02a1682eff2251eb65a6fe9fe (patch)
treeda85178102fcd1e1df1ee4991e6c295d5d33decb /main
parentde0922ed82feb3d4715b8b354951c93852f4567a (diff)
downloadcgeo-2ab4eab43295c1c02a1682eff2251eb65a6fe9fe.zip
cgeo-2ab4eab43295c1c02a1682eff2251eb65a6fe9fe.tar.gz
cgeo-2ab4eab43295c1c02a1682eff2251eb65a6fe9fe.tar.bz2
fix #2820: OC search no longer working without authorization
Diffstat (limited to 'main')
-rw-r--r--main/src/cgeo/geocaching/connector/oc/OCApiLiveConnector.java9
-rw-r--r--main/src/cgeo/geocaching/connector/oc/OkapiClient.java29
-rw-r--r--main/src/cgeo/geocaching/connector/oc/OkapiService.java20
3 files changed, 39 insertions, 19 deletions
diff --git a/main/src/cgeo/geocaching/connector/oc/OCApiLiveConnector.java b/main/src/cgeo/geocaching/connector/oc/OCApiLiveConnector.java
index 929e3b8..d349dc2 100644
--- a/main/src/cgeo/geocaching/connector/oc/OCApiLiveConnector.java
+++ b/main/src/cgeo/geocaching/connector/oc/OCApiLiveConnector.java
@@ -2,6 +2,7 @@ package cgeo.geocaching.connector.oc;
import cgeo.geocaching.Geocache;
import cgeo.geocaching.SearchResult;
+import cgeo.geocaching.Settings;
import cgeo.geocaching.cgData;
import cgeo.geocaching.cgeoapplication;
import cgeo.geocaching.connector.ILoggingManager;
@@ -11,6 +12,8 @@ import cgeo.geocaching.geopoint.Geopoint;
import cgeo.geocaching.geopoint.Viewport;
import cgeo.geocaching.utils.CryptUtils;
+import org.apache.commons.lang3.StringUtils;
+
import android.app.Activity;
public class OCApiLiveConnector extends OCApiConnector implements ISearchByCenter, ISearchByViewPort {
@@ -36,7 +39,11 @@ public class OCApiLiveConnector extends OCApiConnector implements ISearchByCente
@Override
public OAuthLevel getSupportedAuthLevel() {
- return OAuthLevel.Level3;
+ // TODO the tokens must be available connector specific
+ if (StringUtils.isNotBlank(Settings.getOCDETokenPublic()) && StringUtils.isNotBlank(Settings.getOCDETokenSecret())) {
+ return OAuthLevel.Level3;
+ }
+ return OAuthLevel.Level1;
}
@Override
diff --git a/main/src/cgeo/geocaching/connector/oc/OkapiClient.java b/main/src/cgeo/geocaching/connector/oc/OkapiClient.java
index bf35574..7b000dc 100644
--- a/main/src/cgeo/geocaching/connector/oc/OkapiClient.java
+++ b/main/src/cgeo/geocaching/connector/oc/OkapiClient.java
@@ -99,9 +99,7 @@ final public class OkapiClient {
private static final String USER_USERNAME = "username";
- private static final String SERVICE_CACHE = "/okapi/services/caches/geocache";
-
- // the several realms of possible field s for cache retrieval:
+ // the several realms of possible fields for cache retrieval:
// Core: for livemap requests (L3 - only with level 3 auth)
// Additional: additional fields for full cache (L3 - only for level 3 auth, current - only for connectors with current api)
private static final String SERVICE_CACHE_CORE_FIELDS = "code|name|location|type|status|difficulty|terrain|size";
@@ -110,16 +108,10 @@ final public class OkapiClient {
private static final String SERVICE_CACHE_ADDITIONAL_CURRENT_FIELDS = "gc_code|attribution_note";
private static final String SERVICE_CACHE_ADDITIONAL_L3_FIELDS = "is_watched";
- private static final String SERVICE_SEARCH_AND_RETRIEVE = "/okapi/services/caches/shortcuts/search_and_retrieve";
-
private static final String METHOD_SEARCH_NEAREST = "services/caches/search/nearest";
private static final String METHOD_SEARCH_BBOX = "services/caches/search/bbox";
private static final String METHOD_RETRIEVE_CACHES = "services/caches/geocaches";
- private static final String SERVICE_MARK_CACHE = "/okapi/services/caches/mark";
-
- private static final String SERVICE_SUBMIT_LOG = "/okapi/services/logs/submit";
-
public static Geocache getCache(final String geoCode) {
final Parameters params = new Parameters("cache_code", geoCode);
IConnector connector = ConnectorFactory.getConnector(geoCode);
@@ -132,7 +124,7 @@ final public class OkapiClient {
params.add("fields", getFullFields(ocapiConn));
params.add("attribution_append", "none");
- final JSONObject data = request(ocapiConn, SERVICE_CACHE, params);
+ final JSONObject data = request(ocapiConn, OkapiService.SERVICE_CACHE, params);
if (data == null) {
return null;
@@ -160,7 +152,7 @@ final public class OkapiClient {
addRetrieveParams(params, connector);
- final JSONObject data = request(connector, SERVICE_SEARCH_AND_RETRIEVE, params);
+ final JSONObject data = request(connector, OkapiService.SERVICE_SEARCH_AND_RETRIEVE, params);
if (data == null) {
return Collections.emptyList();
@@ -184,6 +176,7 @@ final public class OkapiClient {
final Map<String, String> valueMap = new LinkedHashMap<String, String>();
valueMap.put("bbox", bboxString);
+ // FIXME Why is this testing level 3? The to be used service is level 1 only.
if (connector.getSupportedAuthLevel() != OAuthLevel.Level3) {
Log.e("Calling OkapiClient.getCachesBBox with wrong connector");
return Collections.emptyList();
@@ -195,7 +188,7 @@ final public class OkapiClient {
addRetrieveParams(params, connector);
- final JSONObject data = request(connector, SERVICE_SEARCH_AND_RETRIEVE, params);
+ final JSONObject data = request(connector, OkapiService.SERVICE_SEARCH_AND_RETRIEVE, params);
if (data == null) {
return Collections.emptyList();
@@ -208,7 +201,7 @@ final public class OkapiClient {
final Parameters params = new Parameters("cache_code", cache.getGeocode());
params.add("watched", watched ? "true" : "false");
- final JSONObject data = request(connector, SERVICE_MARK_CACHE, params);
+ final JSONObject data = request(connector, OkapiService.SERVICE_MARK_CACHE, params);
if (data == null) {
return false;
@@ -229,7 +222,7 @@ final public class OkapiClient {
params.add("needs_maintenance", "true");
}
- final JSONObject data = request(connector, SERVICE_SUBMIT_LOG, params);
+ final JSONObject data = request(connector, OkapiService.SERVICE_SUBMIT_LOG, params);
if (data == null) {
return new LogResult(StatusCode.LOG_POST_ERROR, "");
@@ -613,7 +606,7 @@ final public class OkapiClient {
return res.toString();
}
- private static JSONObject request(final OCApiConnector connector, final String service, final Parameters params) {
+ private static JSONObject request(final OCApiConnector connector, final OkapiService service, final Parameters params) {
if (connector == null) {
return null;
}
@@ -625,13 +618,13 @@ final public class OkapiClient {
params.add("langpref", getPreferredLanguage());
- if (connector.getSupportedAuthLevel() == OAuthLevel.Level3) {
- OAuth.signOAuth(host, service, "GET", false, params, Settings.getOCDETokenPublic(), Settings.getOCDETokenSecret(), connector.getCK(), connector.getCS());
+ if (service.level == OAuthLevel.Level3 && connector.getSupportedAuthLevel() == OAuthLevel.Level3) {
+ OAuth.signOAuth(host, service.methodName, "GET", false, params, Settings.getOCDETokenPublic(), Settings.getOCDETokenSecret(), connector.getCK(), connector.getCS());
} else {
connector.addAuthentication(params);
}
- final String uri = "http://" + host + service;
+ final String uri = "http://" + host + service.methodName;
return Network.requestJSON(uri, params);
}
diff --git a/main/src/cgeo/geocaching/connector/oc/OkapiService.java b/main/src/cgeo/geocaching/connector/oc/OkapiService.java
new file mode 100644
index 0000000..9b47596
--- /dev/null
+++ b/main/src/cgeo/geocaching/connector/oc/OkapiService.java
@@ -0,0 +1,20 @@
+package cgeo.geocaching.connector.oc;
+
+import cgeo.geocaching.connector.oc.OCApiConnector.OAuthLevel;
+
+
+enum OkapiService {
+ SERVICE_CACHE("/okapi/services/caches/geocache", OAuthLevel.Level1),
+ SERVICE_SEARCH_AND_RETRIEVE("/okapi/services/caches/shortcuts/search_and_retrieve", OAuthLevel.Level1),
+ SERVICE_MARK_CACHE("/okapi/services/caches/mark", OAuthLevel.Level3),
+ SERVICE_SUBMIT_LOG("/okapi/services/logs/submit", OAuthLevel.Level3);
+
+ final String methodName;
+ final OAuthLevel level;
+
+ OkapiService(final String methodName, final OAuthLevel level) {
+ this.methodName = methodName;
+ this.level = level;
+ }
+
+}