aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSamuel Tardieu <sam@rfc1149.net>2013-09-13 17:44:13 +0200
committerSamuel Tardieu <sam@rfc1149.net>2013-09-13 19:29:39 +0200
commit19dbcd81c8bacc6c07238006d3a1a165a3a86250 (patch)
tree8d664c189724a0e2d6577eb74967f8656ceb42d0
parent6f159746cbffff44108a015fad80b78ddf2b5aad (diff)
downloadcgeo-19dbcd81c8bacc6c07238006d3a1a165a3a86250.zip
cgeo-19dbcd81c8bacc6c07238006d3a1a165a3a86250.tar.gz
cgeo-19dbcd81c8bacc6c07238006d3a1a165a3a86250.tar.bz2
Allow an OAuth process to specify a callback URI
-rw-r--r--main/src/cgeo/geocaching/connector/oc/OCAuthorizationActivity.java3
-rw-r--r--main/src/cgeo/geocaching/network/OAuthAuthorizationActivity.java104
-rw-r--r--main/src/cgeo/geocaching/twitter/TwitterAuthorizationActivity.java3
3 files changed, 73 insertions, 37 deletions
diff --git a/main/src/cgeo/geocaching/connector/oc/OCAuthorizationActivity.java b/main/src/cgeo/geocaching/connector/oc/OCAuthorizationActivity.java
index ec6bbf4..4524e91 100644
--- a/main/src/cgeo/geocaching/connector/oc/OCAuthorizationActivity.java
+++ b/main/src/cgeo/geocaching/connector/oc/OCAuthorizationActivity.java
@@ -18,7 +18,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..b5b35d6 100644
--- a/main/src/cgeo/geocaching/network/OAuthAuthorizationActivity.java
+++ b/main/src/cgeo/geocaching/network/OAuthAuthorizationActivity.java
@@ -30,6 +30,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 +40,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 +66,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 +89,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 +112,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 +121,7 @@ public abstract class OAuthAuthorizationActivity extends AbstractActivity {
this.https = https;
this.consumerKey = consumerKey;
this.consumerSecret = consumerSecret;
+ this.callback = callback;
}
@Override
@@ -122,10 +130,6 @@ public abstract class OAuthAuthorizationActivity extends AbstractActivity {
setTitle(getAuthTitle());
- init();
- }
-
- private void init() {
auth_1.setText(getAboutAuth1());
auth_2.setText(getAboutAuth2());
@@ -145,18 +149,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 +221,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 +250,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 +292,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();
diff --git a/main/src/cgeo/geocaching/twitter/TwitterAuthorizationActivity.java b/main/src/cgeo/geocaching/twitter/TwitterAuthorizationActivity.java
index 4d9a1f2..49588e7 100644
--- a/main/src/cgeo/geocaching/twitter/TwitterAuthorizationActivity.java
+++ b/main/src/cgeo/geocaching/twitter/TwitterAuthorizationActivity.java
@@ -15,7 +15,8 @@ public class TwitterAuthorizationActivity extends OAuthAuthorizationActivity {
"/oauth/access_token",
true,
Settings.getKeyConsumerPublic(),
- Settings.getKeyConsumerSecret());
+ Settings.getKeyConsumerSecret(),
+ null);
}
@Override