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
private void onGetUserNameFinish(GetRemoteUserNameOperation operation, RemoteOperationResult result) {\r
+ \r
if (result.isSuccess()) {\r
boolean success = false;\r
String username = operation.getUserName();\r
if (success)\r
finish();\r
} else {\r
- updateAuthStatusIconAndText(result);\r
+ updateStatusIconFailUserName();\r
showAuthStatus();\r
Log_OC.e(TAG, "Access to user name failed: " + result.getLogMessage());\r
}\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
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
+ * 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
}\r
\r
\r
+ private void updateStatusIconFailUserName(){\r
+ mAuthStatusIcon = android.R.drawable.ic_secure;\r
+ mAuthStatusText = R.string.auth_fail_get_user_name;\r
+ }\r
+ \r
/**\r
* Processes the result of the request for and access token send \r
* to an OAuth authorization server.\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
- 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
- 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
- } else {\r
- updateToken();\r
- success = true;\r
- }\r
+ } else {\r
+ updateToken();\r
+ success = true;\r
+ }\r
\r
- if (success) {\r
- finish();\r
+ if (success) {\r
+ finish();\r
+ }\r
}\r
\r
} else if (result.isServerFail() || result.isException()) {\r
}\r
FragmentManager fm = getSupportFragmentManager();\r
FragmentTransaction ft = fm.beginTransaction();\r
+ ft.addToBackStack(null);\r
dialog.show(ft, DIALOG_UNTRUSTED_CERT);\r
}\r
\r
SslUntrustedCertDialog dialog = SslUntrustedCertDialog.newInstanceForFullSslError((CertificateCombinedException)result.getException());\r
FragmentManager fm = getSupportFragmentManager();\r
FragmentTransaction ft = fm.beginTransaction();\r
+ ft.addToBackStack(null);\r
dialog.show(ft, DIALOG_UNTRUSTED_CERT);\r
\r
}\r
\r
}\r
\r
- public void reloadWebView() {\r
- Fragment fd = getSupportFragmentManager().findFragmentByTag(TAG_SAML_DIALOG);\r
- if (fd != null && fd instanceof SamlWebViewDialog) {\r
- ((SamlWebViewDialog) fd).reloadWebView();\r
- }\r
- }\r
-\r
}\r