diff options
| author | Bananeweizen <bananeweizen@gmx.de> | 2013-06-01 14:12:02 +0200 |
|---|---|---|
| committer | Bananeweizen <bananeweizen@gmx.de> | 2013-06-01 14:12:02 +0200 |
| commit | 2ab4eab43295c1c02a1682eff2251eb65a6fe9fe (patch) | |
| tree | da85178102fcd1e1df1ee4991e6c295d5d33decb | |
| parent | de0922ed82feb3d4715b8b354951c93852f4567a (diff) | |
| download | cgeo-2ab4eab43295c1c02a1682eff2251eb65a6fe9fe.zip cgeo-2ab4eab43295c1c02a1682eff2251eb65a6fe9fe.tar.gz cgeo-2ab4eab43295c1c02a1682eff2251eb65a6fe9fe.tar.bz2 | |
fix #2820: OC search no longer working without authorization
4 files changed, 46 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; + } + +} diff --git a/tests/src/cgeo/geocaching/connector/oc/OkapiClientTest.java b/tests/src/cgeo/geocaching/connector/oc/OkapiClientTest.java index 4f44f6b..50bf22a 100644 --- a/tests/src/cgeo/geocaching/connector/oc/OkapiClientTest.java +++ b/tests/src/cgeo/geocaching/connector/oc/OkapiClientTest.java @@ -21,4 +21,11 @@ public class OkapiClientTest extends CGeoTestCase { assertEquals("Oshkosh Municipal Tank", cache.getName()); assertTrue(cache.isDetailed()); } + + public static void testOCSearchMustWorkWithoutOAuthAccessTokens() { + final String geoCode = "OC1234"; + Geocache cache = OkapiClient.getCache(geoCode); + assertNotNull(cache); + assertEquals("Wupper-Schein", cache.getName()); + } } |
