diff options
| author | rsudev <rasch@munin-soft.de> | 2013-07-26 23:05:40 +0200 |
|---|---|---|
| committer | rsudev <rasch@munin-soft.de> | 2013-07-26 23:05:40 +0200 |
| commit | eb15dddf8715bbc1926b8030ab4db7fbeec666cf (patch) | |
| tree | 052b7d99c1cf4d8f6e22cf2eebe3fb840f417485 /main/src/cgeo/geocaching/connector | |
| parent | f86fa7a33393cd4ce2c7eff72479775b37dfeff3 (diff) | |
| download | cgeo-eb15dddf8715bbc1926b8030ab4db7fbeec666cf.zip cgeo-eb15dddf8715bbc1926b8030ab4db7fbeec666cf.tar.gz cgeo-eb15dddf8715bbc1926b8030ab4db7fbeec666cf.tar.bz2 | |
Implements OKAPI Live access for opencaching.pl
Diffstat (limited to 'main/src/cgeo/geocaching/connector')
10 files changed, 232 insertions, 26 deletions
diff --git a/main/src/cgeo/geocaching/connector/ConnectorFactory.java b/main/src/cgeo/geocaching/connector/ConnectorFactory.java index eb09978..54e3447 100644 --- a/main/src/cgeo/geocaching/connector/ConnectorFactory.java +++ b/main/src/cgeo/geocaching/connector/ConnectorFactory.java @@ -28,16 +28,20 @@ public final class ConnectorFactory { private static final UnknownConnector UNKNOWN_CONNECTOR = new UnknownConnector(); private static final IConnector[] CONNECTORS = new IConnector[] { GCConnector.getInstance(), - new OCApiLiveConnector("opencaching.de", "www.opencaching.de", "OC", R.string.oc_de_okapi_consumer_key, R.string.oc_de_okapi_consumer_secret, ApiSupport.current), + new OCApiLiveConnector("opencaching.de", "www.opencaching.de", "OC", "CC BY-NC-ND, alle Logeinträge © jeweiliger Autor", + R.string.oc_de_okapi_consumer_key, R.string.oc_de_okapi_consumer_secret, + R.string.pref_connectorOCActive, R.string.pref_ocde_tokenpublic, R.string.pref_ocde_tokensecret, ApiSupport.current), new OCConnector("OpenCaching.CZ", "www.opencaching.cz", "OZ"), - new OCApiConnector("OpenCaching.CO.UK", "www.opencaching.org.uk", "OK", "arU4okouc4GEjMniE2fq", ApiSupport.oldapi), + new OCApiConnector("OpenCaching.CO.UK", "www.opencaching.org.uk", "OK", "arU4okouc4GEjMniE2fq", "CC BY-NC-SA 2.5", ApiSupport.oldapi), new OCConnector("OpenCaching.ES", "www.opencachingspain.es", "OC"), new OCConnector("OpenCaching.IT", "www.opencaching.it", "OC"), new OCConnector("OpenCaching.JP", "www.opencaching.jp", "OJ"), new OCConnector("OpenCaching.NO/SE", "www.opencaching.se", "OS"), - new OCApiConnector("OpenCaching.NL", "www.opencaching.nl", "OB", "PdzU8jzIlcfMADXaYN8j", ApiSupport.current), - new OCApiConnector("OpenCaching.PL", "www.opencaching.pl", "OP", "GkxM47WkUkLQXXsZ9qSh", ApiSupport.current), - new OCApiConnector("OpenCaching.US", "www.opencaching.us", "OU", "pTsYAYSXFcfcRQnYE6uA", ApiSupport.oldapi), + new OCApiConnector("OpenCaching.NL", "www.opencaching.nl", "OB", "PdzU8jzIlcfMADXaYN8j", "CC BY-SA 3.0", ApiSupport.current), + new OCApiLiveConnector("opencaching.pl", "www.opencaching.pl", "OP", "CC BY-SA 3.0", + R.string.oc_pl_okapi_consumer_key, R.string.oc_pl_okapi_consumer_secret, + R.string.pref_connectorOCPLActive, R.string.pref_ocpl_tokenpublic, R.string.pref_ocpl_tokensecret, ApiSupport.current), + new OCApiConnector("OpenCaching.US", "www.opencaching.us", "OU", "pTsYAYSXFcfcRQnYE6uA", "CC BY-NC-SA 2.5", ApiSupport.oldapi), new OXConnector(), new GeocachingAustraliaConnector(), new GeopeitusConnector(), diff --git a/main/src/cgeo/geocaching/connector/oc/IOCAuthParams.java b/main/src/cgeo/geocaching/connector/oc/IOCAuthParams.java new file mode 100644 index 0000000..5a140a1 --- /dev/null +++ b/main/src/cgeo/geocaching/connector/oc/IOCAuthParams.java @@ -0,0 +1,60 @@ +package cgeo.geocaching.connector.oc; + +public interface IOCAuthParams { + + /** + * The site name: 'www.openaching...' + * + * @return + */ + String getSite(); + + /** + * ResId of the Consumer key + * + * @return + */ + int getCKResId(); + + /** + * ResId of the Consumer secret + * + * @return + */ + int getCSResId(); + + /** + * ResId ot the Authorization title + * + * @return + */ + int getAuthTitelResId(); + + /** + * Preference key of the public token + * + * @return + */ + int getTokenPublicPrefKey(); + + /** + * Preference key of the secret token + * + * @return + */ + int getTokenSecretPrefKey(); + + /** + * Preference key of the temporary public token (OAuth) + * + * @return + */ + int getTempTokenPublicPrefKey(); + + /** + * Preference key of the temporary secret token (OAuth) + * + * @return + */ + int getTempTokenSecretPrefKey(); +} diff --git a/main/src/cgeo/geocaching/connector/oc/OCApiConnector.java b/main/src/cgeo/geocaching/connector/oc/OCApiConnector.java index 4f365ec..d43d06b 100644 --- a/main/src/cgeo/geocaching/connector/oc/OCApiConnector.java +++ b/main/src/cgeo/geocaching/connector/oc/OCApiConnector.java @@ -27,11 +27,13 @@ public class OCApiConnector extends OCConnector implements ISearchByGeocode { private final String cK; private final ApiSupport apiSupport; + private final String licenseString; - public OCApiConnector(String name, String host, String prefix, String cK, ApiSupport apiSupport) { + public OCApiConnector(String name, String host, String prefix, String cK, String licenseString, ApiSupport apiSupport) { super(name, host, prefix); this.cK = cK; this.apiSupport = apiSupport; + this.licenseString = licenseString; } public void addAuthentication(final Parameters params) { @@ -41,7 +43,7 @@ public class OCApiConnector extends OCConnector implements ISearchByGeocode { @Override public String getLicenseText(final Geocache cache) { // NOT TO BE TRANSLATED - return "© " + cache.getOwnerDisplayName() + ", <a href=\"" + getCacheUrl(cache) + "\">" + getName() + "</a>, CC-BY-NC-ND, alle Logeinträge © jeweiliger Autor"; + return "© " + cache.getOwnerDisplayName() + ", <a href=\"" + getCacheUrl(cache) + "\">" + getName() + "</a>, " + licenseString; } @Override @@ -77,4 +79,13 @@ public class OCApiConnector extends OCConnector implements ISearchByGeocode { return apiSupport; } + @SuppressWarnings("static-method") + public int getTokenPublicPrefKeyId() { + return 0; + } + + @SuppressWarnings("static-method") + public int getTokenSecretPrefKeyId() { + return 0; + } } diff --git a/main/src/cgeo/geocaching/connector/oc/OCApiLiveConnector.java b/main/src/cgeo/geocaching/connector/oc/OCApiLiveConnector.java index 5ca2d28..d35e54b 100644 --- a/main/src/cgeo/geocaching/connector/oc/OCApiLiveConnector.java +++ b/main/src/cgeo/geocaching/connector/oc/OCApiLiveConnector.java @@ -2,7 +2,6 @@ package cgeo.geocaching.connector.oc; import cgeo.geocaching.Geocache; import cgeo.geocaching.SearchResult; -import cgeo.geocaching.settings.Settings; import cgeo.geocaching.cgData; import cgeo.geocaching.cgeoapplication; import cgeo.geocaching.connector.ILoggingManager; @@ -12,6 +11,7 @@ import cgeo.geocaching.connector.capability.ISearchByViewPort; import cgeo.geocaching.connector.oc.UserInfo.UserInfoStatus; import cgeo.geocaching.geopoint.Geopoint; import cgeo.geocaching.geopoint.Viewport; +import cgeo.geocaching.settings.Settings; import cgeo.geocaching.utils.CryptUtils; import org.apache.commons.lang3.StringUtils; @@ -22,18 +22,24 @@ import android.os.Handler; public class OCApiLiveConnector extends OCApiConnector implements ISearchByCenter, ISearchByViewPort, ILogin { - private String cS; + private final String cS; + private final int isActivePrefKeyId; + private final int tokenPublicPrefKeyId; + private final int tokenSecretPrefKeyId; private UserInfo userInfo = new UserInfo(StringUtils.EMPTY, 0, UserInfoStatus.NOT_RETRIEVED); - public OCApiLiveConnector(String name, String host, String prefix, int cKResId, int cSResId, ApiSupport apiSupport) { - super(name, host, prefix, CryptUtils.rot13(cgeoapplication.getInstance().getResources().getString(cKResId)), apiSupport); + public OCApiLiveConnector(String name, String host, String prefix, String licenseString, int cKResId, int cSResId, int isActivePrefKeyId, int tokenPublicPrefKeyId, int tokenSecretPrefKeyId, ApiSupport apiSupport) { + super(name, host, prefix, CryptUtils.rot13(cgeoapplication.getInstance().getResources().getString(cKResId)), licenseString, apiSupport); cS = CryptUtils.rot13(cgeoapplication.getInstance().getResources().getString(cSResId)); + this.isActivePrefKeyId = isActivePrefKeyId; + this.tokenPublicPrefKeyId = tokenPublicPrefKeyId; + this.tokenSecretPrefKeyId = tokenSecretPrefKeyId; } @Override public boolean isActivated() { - return Settings.isOCConnectorActive(); + return Settings.isOCConnectorActive(isActivePrefKeyId); } @Override @@ -49,8 +55,8 @@ public class OCApiLiveConnector extends OCApiConnector implements ISearchByCente @Override public OAuthLevel getSupportedAuthLevel() { - // TODO the tokens must be available connector specific - if (StringUtils.isNotBlank(Settings.getOCDETokenPublic()) && StringUtils.isNotBlank(Settings.getOCDETokenSecret())) { + + if (Settings.hasOCAuthorization(tokenPublicPrefKeyId, tokenSecretPrefKeyId)) { return OAuthLevel.Level3; } return OAuthLevel.Level1; @@ -62,6 +68,16 @@ public class OCApiLiveConnector extends OCApiConnector implements ISearchByCente } @Override + public int getTokenPublicPrefKeyId() { + return tokenPublicPrefKeyId; + } + + @Override + public int getTokenSecretPrefKeyId() { + return tokenSecretPrefKeyId; + } + + @Override public boolean supportsWatchList() { return true; } diff --git a/main/src/cgeo/geocaching/connector/oc/OCAuthorizationActivity.java b/main/src/cgeo/geocaching/connector/oc/OCAuthorizationActivity.java index 08d796e..10d6a66 100644 --- a/main/src/cgeo/geocaching/connector/oc/OCAuthorizationActivity.java +++ b/main/src/cgeo/geocaching/connector/oc/OCAuthorizationActivity.java @@ -1,42 +1,48 @@ package cgeo.geocaching.connector.oc; import cgeo.geocaching.R; -import cgeo.geocaching.settings.Settings; import cgeo.geocaching.cgeoapplication; import cgeo.geocaching.network.OAuthAuthorizationActivity; +import cgeo.geocaching.settings.Settings; import org.apache.commons.lang3.tuple.ImmutablePair; public class OCAuthorizationActivity extends OAuthAuthorizationActivity { - public OCAuthorizationActivity() { - super("www.opencaching.de", + final IOCAuthParams authParams; + + public OCAuthorizationActivity(IOCAuthParams authParams) { + super(authParams.getSite(), "/okapi/services/oauth/request_token", "/okapi/services/oauth/authorize", "/okapi/services/oauth/access_token", false, - cgeoapplication.getInstance().getResources().getString(R.string.oc_de_okapi_consumer_key), - cgeoapplication.getInstance().getResources().getString(R.string.oc_de_okapi_consumer_secret)); + cgeoapplication.getInstance().getResources().getString(authParams.getCKResId()), + cgeoapplication.getInstance().getResources().getString(authParams.getCSResId())); + this.authParams = authParams; } @Override - protected ImmutablePair<String, String> getTempToken() { - return Settings.getTempOCDEToken(); + protected ImmutablePair<String, String> getTempTokens() { + return Settings.getTokenPair(authParams.getTempTokenPublicPrefKey(), authParams.getTempTokenSecretPrefKey()); } @Override protected void setTempTokens(String tokenPublic, String tokenSecret) { - Settings.setOCDETempTokens(tokenPublic, tokenSecret); + Settings.setTokens(authParams.getTempTokenPublicPrefKey(), tokenPublic, authParams.getTempTokenSecretPrefKey(), tokenSecret); } @Override protected void setTokens(String tokenPublic, String tokenSecret, boolean enable) { - Settings.setOCDETokens(tokenPublic, tokenSecret, enable); + Settings.setTokens(authParams.getTokenPublicPrefKey(), tokenPublic, authParams.getTokenSecretPrefKey(), tokenSecret); + if (tokenPublic != null) { + Settings.setTokens(authParams.getTempTokenPublicPrefKey(), null, authParams.getTempTokenSecretPrefKey(), null); + } } @Override protected String getAuthTitle() { - return res.getString(R.string.auth_ocde); + return res.getString(authParams.getAuthTitelResId()); } @Override @@ -103,5 +109,4 @@ public class OCAuthorizationActivity extends OAuthAuthorizationActivity { protected String getAuthFinish() { return res.getString(R.string.auth_finish_oc); } - } diff --git a/main/src/cgeo/geocaching/connector/oc/OCDEAuthParams.java b/main/src/cgeo/geocaching/connector/oc/OCDEAuthParams.java new file mode 100644 index 0000000..734b383 --- /dev/null +++ b/main/src/cgeo/geocaching/connector/oc/OCDEAuthParams.java @@ -0,0 +1,46 @@ +package cgeo.geocaching.connector.oc; + +import cgeo.geocaching.R; + +public class OCDEAuthParams implements IOCAuthParams { + + @Override + public String getSite() { + return "www.opencaching.de"; + } + + @Override + public int getCKResId() { + return R.string.oc_de_okapi_consumer_key; + } + + @Override + public int getCSResId() { + return R.string.oc_de_okapi_consumer_secret; + } + + @Override + public int getAuthTitelResId() { + return R.string.auth_ocde; + } + + @Override + public int getTokenPublicPrefKey() { + return R.string.pref_ocde_tokenpublic; + } + + @Override + public int getTokenSecretPrefKey() { + return R.string.pref_ocde_tokensecret; + } + + @Override + public int getTempTokenPublicPrefKey() { + return R.string.pref_temp_ocde_token_public; + } + + @Override + public int getTempTokenSecretPrefKey() { + return R.string.pref_temp_ocde_token_secret; + } +} diff --git a/main/src/cgeo/geocaching/connector/oc/OCDEAuthorizationActivity.java b/main/src/cgeo/geocaching/connector/oc/OCDEAuthorizationActivity.java new file mode 100644 index 0000000..caf114c --- /dev/null +++ b/main/src/cgeo/geocaching/connector/oc/OCDEAuthorizationActivity.java @@ -0,0 +1,8 @@ +package cgeo.geocaching.connector.oc; + +public class OCDEAuthorizationActivity extends OCAuthorizationActivity { + + public OCDEAuthorizationActivity() { + super(new OCDEAuthParams()); + } +} diff --git a/main/src/cgeo/geocaching/connector/oc/OCPLAuthParams.java b/main/src/cgeo/geocaching/connector/oc/OCPLAuthParams.java new file mode 100644 index 0000000..117e990 --- /dev/null +++ b/main/src/cgeo/geocaching/connector/oc/OCPLAuthParams.java @@ -0,0 +1,46 @@ +package cgeo.geocaching.connector.oc; + +import cgeo.geocaching.R; + +public class OCPLAuthParams implements IOCAuthParams { + + @Override + public String getSite() { + return "www.opencaching.pl"; + } + + @Override + public int getCKResId() { + return R.string.oc_pl_okapi_consumer_key; + } + + @Override + public int getCSResId() { + return R.string.oc_pl_okapi_consumer_secret; + } + + @Override + public int getAuthTitelResId() { + return R.string.auth_ocpl; + } + + @Override + public int getTokenPublicPrefKey() { + return R.string.pref_ocpl_tokenpublic; + } + + @Override + public int getTokenSecretPrefKey() { + return R.string.pref_ocpl_tokensecret; + } + + @Override + public int getTempTokenPublicPrefKey() { + return R.string.pref_temp_ocpl_token_public; + } + + @Override + public int getTempTokenSecretPrefKey() { + return R.string.pref_temp_ocpl_token_secret; + } +} diff --git a/main/src/cgeo/geocaching/connector/oc/OCPLAuthorizationActivity.java b/main/src/cgeo/geocaching/connector/oc/OCPLAuthorizationActivity.java new file mode 100644 index 0000000..4f9ef96 --- /dev/null +++ b/main/src/cgeo/geocaching/connector/oc/OCPLAuthorizationActivity.java @@ -0,0 +1,8 @@ +package cgeo.geocaching.connector.oc; + +public class OCPLAuthorizationActivity extends OCAuthorizationActivity { + + public OCPLAuthorizationActivity() { + super(new OCPLAuthParams()); + } +} diff --git a/main/src/cgeo/geocaching/connector/oc/OkapiClient.java b/main/src/cgeo/geocaching/connector/oc/OkapiClient.java index 6959adf..be7b3a4 100644 --- a/main/src/cgeo/geocaching/connector/oc/OkapiClient.java +++ b/main/src/cgeo/geocaching/connector/oc/OkapiClient.java @@ -31,6 +31,7 @@ import cgeo.geocaching.settings.Settings; import cgeo.geocaching.utils.Log; import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.tuple.ImmutablePair; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; @@ -612,7 +613,8 @@ final class OkapiClient { params.add("langpref", getPreferredLanguage()); if (connector.getSupportedAuthLevel() == OAuthLevel.Level3) { - OAuth.signOAuth(host, service.methodName, "GET", false, params, Settings.getOCDETokenPublic(), Settings.getOCDETokenSecret(), connector.getCK(), connector.getCS()); + ImmutablePair<String, String> tokens = Settings.getTokenPair(connector.getTokenPublicPrefKeyId(), connector.getTokenSecretPrefKeyId()); + OAuth.signOAuth(host, service.methodName, "GET", false, params, tokens.left, tokens.right, connector.getCK(), connector.getCS()); } else { connector.addAuthentication(params); } |
