aboutsummaryrefslogtreecommitdiffstats
path: root/main/src
diff options
context:
space:
mode:
authorSamuel Tardieu <sam@rfc1149.net>2013-09-13 20:53:30 +0200
committerSamuel Tardieu <sam@rfc1149.net>2013-09-13 20:56:03 +0200
commit7871429261e1c112e1fb897f46c71ea064b0d49b (patch)
tree01b22eb98e3a38f75b8d9eb8544ef472062aa416 /main/src
parent5049488a85ed9785c7cc452f0fbc08a57c8241d5 (diff)
parente87c9642838fb2a012154349f7bd94cd670f6806 (diff)
downloadcgeo-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')
-rw-r--r--main/src/cgeo/geocaching/connector/oc/OCAuthorizationActivity.java3
-rw-r--r--main/src/cgeo/geocaching/network/OAuthAuthorizationActivity.java156
-rw-r--r--main/src/cgeo/geocaching/settings/Settings.java4
-rw-r--r--main/src/cgeo/geocaching/twitter/TwitterAuthorizationActivity.java65
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);
}
}