OC-3260: Detect authentication method
[pub/Android/ownCloud.git] / src / com / owncloud / android / authentication / AuthenticatorActivity.java
index 9dcddce..73bbaec 100644 (file)
@@ -175,6 +175,8 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity
     private boolean mResumed; // Control if activity is resumed\r
 \r
     public static String DIALOG_UNTRUSTED_CERT = "DIALOG_UNTRUSTED_CERT";\r
     private boolean mResumed; // Control if activity is resumed\r
 \r
     public static String DIALOG_UNTRUSTED_CERT = "DIALOG_UNTRUSTED_CERT";\r
+    \r
+    private boolean mTryEmptyAuthorization = false;\r
 \r
 \r
     /**\r
 \r
 \r
     /**\r
@@ -893,6 +895,8 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity
             /// update status icon and text\r
             if (mServerIsValid) {\r
                 hideRefreshButton();\r
             /// update status icon and text\r
             if (mServerIsValid) {\r
                 hideRefreshButton();\r
+                // Try to create an account with user and pass "", to know if it is a regular server\r
+                tryEmptyAuthorization();\r
             } else {\r
                 showRefreshButton();\r
             }\r
             } else {\r
                 showRefreshButton();\r
             }\r
@@ -908,14 +912,40 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity
             mDiscoveredVersion = operation.getDiscoveredVersion();\r
             mHostBaseUrl = normalizeUrl(mHostUrlInput.getText().toString());\r
 \r
             mDiscoveredVersion = operation.getDiscoveredVersion();\r
             mHostBaseUrl = normalizeUrl(mHostUrlInput.getText().toString());\r
 \r
-            /// allow or not the user try to access the server\r
-            mOkButton.setEnabled(mServerIsValid);\r
+//            /// allow or not the user try to access the server\r
+//            mOkButton.setEnabled(mServerIsValid);\r
             \r
         }   // else nothing ; only the last check operation is considered; \r
         // multiple can be triggered if the user amends a URL before a previous check can be triggered\r
     }\r
 \r
 \r
             \r
         }   // else nothing ; only the last check operation is considered; \r
         // multiple can be triggered if the user amends a URL before a previous check can be triggered\r
     }\r
 \r
 \r
+    /**\r
+     *  Try to access with  user/pass ""/"", to know if it is a regular server\r
+     */\r
+    private void tryEmptyAuthorization() {\r
+        mTryEmptyAuthorization = true;\r
+        \r
+        Log_OC.d(TAG, "Trying empty authorization to detect authentication method");\r
+        \r
+        /// be gentle with the user\r
+        showDialog(DIALOG_LOGIN_PROGRESS);\r
+        \r
+        /// get the path to the root folder through WebDAV from the version server\r
+        String webdav_path = AccountUtils.getWebdavPath(mDiscoveredVersion, mAuthTokenType);\r
+\r
+        /// get basic credentials entered by user\r
+        String username = "";\r
+        String password = "";\r
+\r
+        /// test credentials \r
+        mAuthCheckOperation = new  ExistenceCheckRemoteOperation("", this, false);\r
+        OwnCloudClient client = OwnCloudClientFactory.createOwnCloudClient(Uri.parse(mHostBaseUrl + webdav_path), this, true);\r
+        client.setBasicCredentials(username, password);\r
+        mOperationThread = mAuthCheckOperation.execute(client, this, mHandler);\r
+    }\r
+    \r
+    \r
     private String normalizeUrl(String url) {\r
         if (url != null && url.length() > 0) {\r
             url = url.trim();\r
     private String normalizeUrl(String url) {\r
         if (url != null && url.length() > 0) {\r
             url = url.trim();\r
@@ -1166,21 +1196,29 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity
         } catch (IllegalArgumentException e) {\r
             // NOTHING TO DO ; can't find out what situation that leads to the exception in this code, but user logs signal that it happens\r
         }\r
         } catch (IllegalArgumentException e) {\r
             // NOTHING TO DO ; can't find out what situation that leads to the exception in this code, but user logs signal that it happens\r
         }\r
-\r
+        \r
         if (result.isSuccess()) {\r
         if (result.isSuccess()) {\r
-            Log_OC.d(TAG, "Successful access - time to save the account");\r
+            \r
+            if (mTryEmptyAuthorization) {\r
+                //allow or not the user try to access the server\r
+                mOkButton.setEnabled(mServerIsValid);\r
+                mTryEmptyAuthorization = false;\r
+                \r
+            } else {\r
+                Log_OC.d(TAG, "Successful access - time to save the account");\r
 \r
 \r
-            boolean success = false;\r
-            if (mAction == ACTION_CREATE) {\r
-                success = createAccount();\r
+                boolean success = false;\r
+                if (mAction == ACTION_CREATE) {\r
+                    success = createAccount();\r
 \r
 \r
-            } else {\r
-                updateToken();\r
-                success = true;\r
-            }\r
+                } else {\r
+                    updateToken();\r
+                    success = true;\r
+                }\r
 \r
 \r
-            if (success) {\r
-                finish();\r
+                if (success) {\r
+                    finish();\r
+                }\r
             }\r
 \r
         } else if (result.isServerFail() || result.isException()) {\r
             }\r
 \r
         } else if (result.isServerFail() || result.isException()) {\r