Cleaning-up AuthenticatorActivty code
[pub/Android/ownCloud.git] / src / com / owncloud / android / authenticator / oauth2 / OAuth2GetCodeRunnable.java
index a4a563c..62085b2 100644 (file)
@@ -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<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(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();