X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/blobdiff_plain/cab55a8edd27a9b470e0a0b97e228ba3852a65f1..aa19d764410f315da671df3c66152f3098cc05e2:/src/com/owncloud/android/authenticator/oauth2/OAuth2GetCodeRunnable.java diff --git a/src/com/owncloud/android/authenticator/oauth2/OAuth2GetCodeRunnable.java b/src/com/owncloud/android/authenticator/oauth2/OAuth2GetCodeRunnable.java index a4a563c5..62085b2d 100644 --- a/src/com/owncloud/android/authenticator/oauth2/OAuth2GetCodeRunnable.java +++ b/src/com/owncloud/android/authenticator/oauth2/OAuth2GetCodeRunnable.java @@ -11,7 +11,9 @@ import org.json.JSONException; import org.json.JSONObject; import android.content.Context; +import android.content.Intent; import android.net.ConnectivityManager; +import android.net.Uri; import android.os.Handler; import android.util.Log; @@ -28,17 +30,25 @@ public class OAuth2GetCodeRunnable implements Runnable { public static final String CODE_USER_CODE = "user_code"; public static final String CODE_CLIENT_ID = "client_id"; - public static final String CODE_CLIENT_SCOPE = "scope"; + public static final String CODE_SCOPE = "scope"; public static final String CODE_VERIFICATION_URL = "verification_url"; public static final String CODE_EXPIRES_IN = "expires_in"; public static final String CODE_DEVICE_CODE = "device_code"; public static final String CODE_INTERVAL = "interval"; + private static final String CODE_RESPONSE_TYPE = "response_type"; + private static final String CODE_REDIRECT_URI = "redirect_uri"; + + private String mGrantType = OAuth2Context.OAUTH2_AUTH_CODE_GRANT_TYPE; + private static final String TAG = "OAuth2GetCodeRunnable"; private OnOAuth2GetCodeResultListener mListener; private String mUrl; private Handler mHandler; private Context mContext; + private JSONObject codeResponseJson = null; + ResultOAuthType mLatestResult; + public void setListener(OnOAuth2GetCodeResultListener listener, Handler handler) { mListener = listener; @@ -54,9 +64,6 @@ public class OAuth2GetCodeRunnable implements Runnable { @Override public void run() { - ResultOAuthType mLatestResult; - String targetURI = null; - JSONObject codeResponseJson = null; if (!isOnline()) { postResult(ResultOAuthType.NO_NETWORK_CONNECTION,null); @@ -69,14 +76,41 @@ public class OAuth2GetCodeRunnable implements Runnable { mUrl = "https://" + mUrl; mLatestResult = ResultOAuthType.OK_SSL; } - targetURI = mUrl + OAuth2Context.OAUTH2_DEVICE_GETCODE_URL; - ConnectorOAuth2 connectorOAuth2 = new ConnectorOAuth2(targetURI); + if (mGrantType.equals(OAuth2Context.OAUTH2_AUTH_CODE_GRANT_TYPE)) { + requestBrowserToGetAuthorizationCode(); + + } else if (mGrantType.equals(OAuth2Context.OAUTH_G_DEVICE_GETTOKEN_GRANT_TYPE)) { + getAuthorizationCode(); + } + } + + /// open the authorization endpoint in a web browser! + private void requestBrowserToGetAuthorizationCode() { + Uri uri = Uri.parse(mUrl); + Uri.Builder uriBuilder = uri.buildUpon(); + uriBuilder.appendQueryParameter(CODE_RESPONSE_TYPE, OAuth2Context.OAUTH2_CODE_RESPONSE_TYPE); + uriBuilder.appendQueryParameter(CODE_REDIRECT_URI, OAuth2Context.MY_REDIRECT_URI); + uriBuilder.appendQueryParameter(CODE_CLIENT_ID, OAuth2Context.OAUTH2_F_CLIENT_ID); + uriBuilder.appendQueryParameter(CODE_SCOPE, OAuth2Context.OAUTH2_F_SCOPE); + //uriBuilder.appendQueryParameter(CODE_STATE, whateverwewant); + + uri = uriBuilder.build(); + Log.d(TAG, "Starting browser to view " + uri.toString()); + + Intent i = new Intent(Intent.ACTION_VIEW, uri); + mContext.startActivity(i); + + postResult(mLatestResult, null); + } + + private void getAuthorizationCode() { + ConnectorOAuth2 connectorOAuth2 = new ConnectorOAuth2(mUrl); try { List nameValuePairs = new ArrayList(2); - nameValuePairs.add(new BasicNameValuePair(CODE_CLIENT_ID, OAuth2Context.OAUTH2_DEVICE_CLIENT_ID)); - nameValuePairs.add(new BasicNameValuePair(CODE_CLIENT_SCOPE,OAuth2Context.OAUTH2_DEVICE_GETCODE_SCOPES)); + nameValuePairs.add(new BasicNameValuePair(CODE_CLIENT_ID, OAuth2Context.OAUTH2_G_DEVICE_CLIENT_ID)); + nameValuePairs.add(new BasicNameValuePair(CODE_SCOPE,OAuth2Context.OAUTH2_G_DEVICE_GETCODE_SCOPES)); UrlEncodedFormEntity params = new UrlEncodedFormEntity(nameValuePairs); codeResponseJson = new JSONObject(connectorOAuth2.connPost(params)); } catch (JSONException e) { @@ -90,10 +124,10 @@ public class OAuth2GetCodeRunnable implements Runnable { if (codeResponseJson == null) { mLatestResult = ResultOAuthType.HOST_NOT_AVAILABLE; } - postResult(mLatestResult, codeResponseJson); } + private boolean isOnline() { ConnectivityManager cm = (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE); return cm != null && cm.getActiveNetworkInfo() != null && cm.getActiveNetworkInfo().isConnectedOrConnecting();