diff options
| author | Samuel Tardieu <sam@rfc1149.net> | 2013-09-13 20:53:30 +0200 |
|---|---|---|
| committer | Samuel Tardieu <sam@rfc1149.net> | 2013-09-13 20:56:03 +0200 |
| commit | 7871429261e1c112e1fb897f46c71ea064b0d49b (patch) | |
| tree | 01b22eb98e3a38f75b8d9eb8544ef472062aa416 /main/src | |
| parent | 5049488a85ed9785c7cc452f0fbc08a57c8241d5 (diff) | |
| parent | e87c9642838fb2a012154349f7bd94cd670f6806 (diff) | |
| download | cgeo-7871429261e1c112e1fb897f46c71ea064b0d49b.zip cgeo-7871429261e1c112e1fb897f46c71ea064b0d49b.tar.gz cgeo-7871429261e1c112e1fb897f46c71ea064b0d49b.tar.bz2 | |
Merge branch 'oauth-inband' into upstream
Conflicts:
main/src/cgeo/geocaching/twitter/TwitterAuthorizationActivity.java
Diffstat (limited to 'main/src')
4 files changed, 116 insertions, 112 deletions
diff --git a/main/src/cgeo/geocaching/connector/oc/OCAuthorizationActivity.java b/main/src/cgeo/geocaching/connector/oc/OCAuthorizationActivity.java index 96875ce..45a4475 100644 --- a/main/src/cgeo/geocaching/connector/oc/OCAuthorizationActivity.java +++ b/main/src/cgeo/geocaching/connector/oc/OCAuthorizationActivity.java @@ -19,7 +19,8 @@ public class OCAuthorizationActivity extends OAuthAuthorizationActivity { "/okapi/services/oauth/access_token", false, CgeoApplication.getInstance().getResources().getString(authParams.getCKResId()), - CgeoApplication.getInstance().getResources().getString(authParams.getCSResId())); + CgeoApplication.getInstance().getResources().getString(authParams.getCSResId()), + null); this.authParams = authParams; } diff --git a/main/src/cgeo/geocaching/network/OAuthAuthorizationActivity.java b/main/src/cgeo/geocaching/network/OAuthAuthorizationActivity.java index 79bda16..7f099f3 100644 --- a/main/src/cgeo/geocaching/network/OAuthAuthorizationActivity.java +++ b/main/src/cgeo/geocaching/network/OAuthAuthorizationActivity.java @@ -3,6 +3,7 @@ package cgeo.geocaching.network; import butterknife.InjectView; import cgeo.geocaching.R; +import cgeo.geocaching.R.string; import cgeo.geocaching.activity.AbstractActivity; import cgeo.geocaching.utils.Log; import cgeo.geocaching.utils.MatcherWrapper; @@ -30,6 +31,9 @@ import java.util.regex.Pattern; public abstract class OAuthAuthorizationActivity extends AbstractActivity { + public static final int NOT_AUTHENTICATED = 0; + public static final int AUTHENTICATED = 1; + private String host; private String pathRequest; private String pathAuthorize; @@ -37,6 +41,7 @@ public abstract class OAuthAuthorizationActivity extends AbstractActivity { private boolean https; private String consumerKey; private String consumerSecret; + @Nullable private String callback; private String OAtoken = null; private String OAtokenSecret = null; private final Pattern paramsPattern1 = Pattern.compile("oauth_token=([a-zA-Z0-9\\-\\_.]+)"); @@ -62,9 +67,11 @@ public abstract class OAuthAuthorizationActivity extends AbstractActivity { if (msg.what == 1) { startButton.setText(getAuthAgain()); - pinEntry.setVisibility(View.VISIBLE); - pinEntryButton.setVisibility(View.VISIBLE); - pinEntryButton.setOnClickListener(new ConfirmPINListener()); + if (isOOB()) { + pinEntry.setVisibility(View.VISIBLE); + pinEntryButton.setVisibility(View.VISIBLE); + pinEntryButton.setOnClickListener(new ConfirmPINListener()); + } } else { showToast(getErrAuthInitialize()); startButton.setText(getAuthStart()); @@ -83,7 +90,7 @@ public abstract class OAuthAuthorizationActivity extends AbstractActivity { pinEntryButton.setOnClickListener(new ConfirmPINListener()); pinEntryButton.setEnabled(true); - if (msg.what == 1) { + if (msg.what == AUTHENTICATED) { showToast(getAuthDialogCompleted()); pinEntryButton.setVisibility(View.GONE); @@ -106,7 +113,8 @@ public abstract class OAuthAuthorizationActivity extends AbstractActivity { String pathAccess, boolean https, String consumerKey, - String consumerSecret) { + String consumerSecret, + @Nullable String callback) { this.host = host; this.pathRequest = pathRequest; this.pathAuthorize = pathAuthorize; @@ -114,6 +122,7 @@ public abstract class OAuthAuthorizationActivity extends AbstractActivity { this.https = https; this.consumerKey = consumerKey; this.consumerSecret = consumerSecret; + this.callback = callback; } @Override @@ -122,10 +131,6 @@ public abstract class OAuthAuthorizationActivity extends AbstractActivity { setTitle(getAuthTitle()); - init(); - } - - private void init() { auth_1.setText(getAboutAuth1()); auth_2.setText(getAboutAuth2()); @@ -145,18 +150,43 @@ public abstract class OAuthAuthorizationActivity extends AbstractActivity { } else { // already have temporary tokens, continue from pin startButton.setText(getAuthAgain()); + if (isOOB()) { + pinEntry.setHint(getAuthPinHint()); + pinEntry.setVisibility(View.VISIBLE); + pinEntryButton.setVisibility(View.VISIBLE); + pinEntryButton.setOnClickListener(new ConfirmPINListener()); + } + } + } - pinEntry.setHint(getAuthPinHint()); - pinEntry.setVisibility(View.VISIBLE); - pinEntryButton.setVisibility(View.VISIBLE); - pinEntryButton.setOnClickListener(new ConfirmPINListener()); + @Override + public void onNewIntent(final Intent intent) { + setIntent(intent); + } + + @Override + public void onResume() { + super.onResume(); + final Uri uri = getIntent().getData(); + if (uri != null) { + final String verifier = uri.getQueryParameter("oauth_verifier"); + if (StringUtils.isNotBlank(verifier)) { + exchangeTokens(verifier); + } else { + // We can shortcut the whole verification process if we do not have a token at all. + changeTokensHandler.sendEmptyMessage(NOT_AUTHENTICATED); + } } } + private boolean isOOB() { + return callback == null; + } + private void requestToken() { final Parameters params = new Parameters(); - params.put("oauth_callback", "oob"); + params.put("oauth_callback", isOOB() ? "oob" : callback); final String method = "GET"; OAuth.signOAuth(host, pathRequest, method, https, params, null, null, consumerKey, consumerSecret); final String line = Network.getResponseData(Network.getRequest(getUrlPrefix() + host + pathRequest, params)); @@ -192,12 +222,12 @@ public abstract class OAuthAuthorizationActivity extends AbstractActivity { requestTokenHandler.sendEmptyMessage(status); } - private void changeToken() { + private void changeToken(final String verifier) { - int status = 0; + int status = NOT_AUTHENTICATED; try { - final Parameters params = new Parameters("oauth_verifier", pinEntry.getText().toString()); + final Parameters params = new Parameters("oauth_verifier", verifier); final String method = "POST"; OAuth.signOAuth(host, pathAccess, method, https, params, OAtoken, OAtokenSecret, consumerKey, consumerSecret); @@ -221,7 +251,7 @@ public abstract class OAuthAuthorizationActivity extends AbstractActivity { setTokens(null, null, false); } else { setTokens(OAtoken, OAtokenSecret, true); - status = 1; + status = AUTHENTICATED; } } catch (Exception e) { Log.e("OAuthAuthorizationActivity.changeToken", e); @@ -263,29 +293,34 @@ public abstract class OAuthAuthorizationActivity extends AbstractActivity { @Override public void onClick(View arg0) { - if (StringUtils.isEmpty(pinEntry.getText().toString())) { + final String verifier = pinEntry.getText().toString(); + if (StringUtils.isEmpty(verifier)) { helpDialog(getAuthDialogPinTitle(), getAuthDialogPinMessage()); return; } - if (changeTokensDialog == null) { - changeTokensDialog = new ProgressDialog(OAuthAuthorizationActivity.this); - changeTokensDialog.setCancelable(false); - changeTokensDialog.setMessage(getAuthDialogWait()); - } - changeTokensDialog.show(); - pinEntryButton.setEnabled(false); - pinEntryButton.setOnTouchListener(null); - pinEntryButton.setOnClickListener(null); - - (new Thread() { + exchangeTokens(verifier); + } + } - @Override - public void run() { - changeToken(); - } - }).start(); + private void exchangeTokens(final String verifier) { + if (changeTokensDialog == null) { + changeTokensDialog = new ProgressDialog(this); + changeTokensDialog.setCancelable(false); + changeTokensDialog.setMessage(getAuthDialogWait()); } + changeTokensDialog.show(); + pinEntryButton.setEnabled(false); + pinEntryButton.setOnTouchListener(null); + pinEntryButton.setOnClickListener(null); + + (new Thread() { + + @Override + public void run() { + changeToken(verifier); + } + }).start(); } protected abstract ImmutablePair<String, String> getTempTokens(); @@ -298,29 +333,56 @@ public abstract class OAuthAuthorizationActivity extends AbstractActivity { protected abstract String getAuthTitle(); - protected abstract String getAuthAgain(); + protected String getAuthAgain() { + return getString(R.string.auth_again); + } - protected abstract String getErrAuthInitialize(); + protected String getErrAuthInitialize() { + return getString(string.err_auth_initialize); + } - protected abstract String getAuthStart(); + protected String getAuthStart() { + return getString(R.string.auth_start); + } protected abstract String getAuthDialogCompleted(); - protected abstract String getErrAuthProcess(); + protected String getErrAuthProcess() { + return res.getString(R.string.err_auth_process); + } - protected abstract String getAuthDialogWait(); + protected String getAuthDialogWait() { + return res.getString(R.string.auth_dialog_waiting, getTitle()); + } - protected abstract String getAuthDialogPinTitle(); + protected String getAuthDialogPinTitle() { + assert false; + return null; + } - protected abstract String getAuthDialogPinMessage(); + protected String getAuthDialogPinMessage() { + assert false; + return null; + } - protected abstract String getAboutAuth1(); + protected String getAuthPinHint() { + assert false; + return null; + } - protected abstract String getAboutAuth2(); + protected String getAboutAuth1() { + return res.getString(R.string.auth_explain_short, getTitle()); + } - protected abstract String getAuthAuthorize(); + protected String getAboutAuth2() { + return res.getString(R.string.auth_explain_long, getTitle()); + } - protected abstract String getAuthPinHint(); + protected String getAuthAuthorize() { + return res.getString(R.string.auth_authorize, getTitle()); + } - protected abstract String getAuthFinish(); + protected String getAuthFinish() { + return res.getString(R.string.auth_finish, getTitle()); + } } diff --git a/main/src/cgeo/geocaching/settings/Settings.java b/main/src/cgeo/geocaching/settings/Settings.java index 65d06bf..16b6562 100644 --- a/main/src/cgeo/geocaching/settings/Settings.java +++ b/main/src/cgeo/geocaching/settings/Settings.java @@ -51,8 +51,8 @@ public final class Settings { private final static int unitsMetric = 1; // twitter api keys - private final static String keyConsumerPublic = CryptUtils.rot13("ESnsCvAv3kEupF1GCR3jGj"); - private final static String keyConsumerSecret = CryptUtils.rot13("7vQWceACV9umEjJucmlpFe9FCMZSeqIqfkQ2BnhV9x"); + private final static String keyConsumerPublic = CryptUtils.rot13("XdphhYs0nCqMwmKzpVkzkD"); + private final static String keyConsumerSecret = CryptUtils.rot13("BEBZgTKrzVvYuH6h26HbqmLk87qfVsrmdeRXlMZewIj"); public enum CoordInputFormatEnum { Plain, diff --git a/main/src/cgeo/geocaching/twitter/TwitterAuthorizationActivity.java b/main/src/cgeo/geocaching/twitter/TwitterAuthorizationActivity.java index 13dbde9..b813389 100644 --- a/main/src/cgeo/geocaching/twitter/TwitterAuthorizationActivity.java +++ b/main/src/cgeo/geocaching/twitter/TwitterAuthorizationActivity.java @@ -16,7 +16,8 @@ public class TwitterAuthorizationActivity extends OAuthAuthorizationActivity { "/oauth/access_token", true, Settings.getKeyConsumerPublic(), - Settings.getKeyConsumerSecret()); + Settings.getKeyConsumerSecret(), + "callback://www.cgeo.org/twitter/"); } @Override @@ -40,68 +41,8 @@ public class TwitterAuthorizationActivity extends OAuthAuthorizationActivity { } @Override - protected final String getAuthAgain() { - return res.getString(R.string.auth_again); - } - - @Override - protected final String getErrAuthInitialize() { - return res.getString(R.string.err_auth_initialize); - } - - @Override - protected final String getAuthStart() { - return res.getString(R.string.auth_start); - } - - @Override protected final String getAuthDialogCompleted() { - return res.getString(R.string.auth_dialog_completed); - } - - @Override - protected final String getErrAuthProcess() { - return res.getString(R.string.err_auth_process); - } - - @Override - protected final String getAuthDialogWait() { - return res.getString(R.string.auth_dialog_wait); - } - - @Override - protected final String getAuthDialogPinTitle() { - return res.getString(R.string.auth_dialog_pin_title); - } - - @Override - protected final String getAuthDialogPinMessage() { - return res.getString(R.string.auth_dialog_pin_message); - } - - @Override - protected final String getAboutAuth1() { - return res.getString(R.string.about_auth_1); - } - - @Override - protected final String getAboutAuth2() { - return res.getString(R.string.about_auth_2); - } - - @Override - protected final String getAuthAuthorize() { - return res.getString(R.string.auth_authorize); - } - - @Override - protected final String getAuthPinHint() { - return res.getString(R.string.auth_pin_hint); - } - - @Override - protected final String getAuthFinish() { - return res.getString(R.string.auth_finish); + return res.getString(R.string.auth_dialog_completed_twitter); } } |
