\r
package com.owncloud.android.authentication;\r
\r
-import java.util.concurrent.ExecutionException;\r
-\r
import android.accounts.Account;\r
import android.accounts.AccountManager;\r
import android.app.AlertDialog;\r
import android.graphics.Rect;\r
import android.graphics.drawable.Drawable;\r
import android.net.Uri;\r
-import android.os.AsyncTask;\r
import android.os.Bundle;\r
import android.os.Handler;\r
import android.preference.PreferenceManager;\r
import com.actionbarsherlock.app.SherlockDialogFragment;\r
import com.owncloud.android.MainApp;\r
import com.owncloud.android.R;\r
-import com.owncloud.android.oc_framework.accounts.AccountTypeUtils;\r
-import com.owncloud.android.oc_framework.accounts.OwnCloudAccount;\r
-import com.owncloud.android.oc_framework.accounts.SsoWebViewClient.SsoWebViewClientListener;\r
-import com.owncloud.android.oc_framework.network.webdav.OwnCloudClientFactory;\r
-import com.owncloud.android.oc_framework.network.webdav.WebdavClient;\r
+import com.owncloud.android.authentication.SsoWebViewClient.SsoWebViewClientListener;\r
+import com.owncloud.android.lib.accounts.AccountTypeUtils;\r
+import com.owncloud.android.lib.accounts.OwnCloudAccount;\r
+import com.owncloud.android.lib.network.OwnCloudClientFactory;\r
+import com.owncloud.android.lib.network.OwnCloudClient;\r
import com.owncloud.android.operations.OAuth2GetAccessToken;\r
-import com.owncloud.android.oc_framework.operations.OnRemoteOperationListener;\r
+import com.owncloud.android.lib.operations.common.OnRemoteOperationListener;\r
import com.owncloud.android.operations.OwnCloudServerCheckOperation;\r
-import com.owncloud.android.oc_framework.operations.RemoteOperation;\r
-import com.owncloud.android.oc_framework.operations.RemoteOperationResult;\r
-import com.owncloud.android.oc_framework.operations.RemoteOperationResult.ResultCode;\r
-import com.owncloud.android.oc_framework.operations.remote.ExistenceCheckRemoteOperation;\r
-import com.owncloud.android.oc_framework.operations.remote.GetUserNameRemoteOperation;\r
+import com.owncloud.android.lib.operations.common.RemoteOperation;\r
+import com.owncloud.android.lib.operations.common.RemoteOperationResult;\r
+import com.owncloud.android.lib.operations.common.RemoteOperationResult.ResultCode;\r
+import com.owncloud.android.lib.operations.remote.ExistenceCheckRemoteOperation;\r
+import com.owncloud.android.lib.operations.remote.GetUserNameRemoteOperation;\r
import com.owncloud.android.ui.dialog.SamlWebViewDialog;\r
import com.owncloud.android.ui.dialog.SslValidatorDialog;\r
import com.owncloud.android.ui.dialog.SslValidatorDialog.OnSslValidatorListener;\r
import com.owncloud.android.utils.Log_OC;\r
-import com.owncloud.android.oc_framework.utils.OwnCloudVersion;\r
+import com.owncloud.android.lib.utils.OwnCloudVersion;\r
\r
/**\r
* This Activity is used to add an ownCloud account to the App\r
getString(R.string.oauth2_redirect_uri), \r
getString(R.string.oauth2_grant_type),\r
queryParameters);\r
- //WebdavClient client = OwnCloudClientUtils.createOwnCloudClient(Uri.parse(getString(R.string.oauth2_url_endpoint_access)), getApplicationContext());\r
- WebdavClient client = OwnCloudClientFactory.createOwnCloudClient(Uri.parse(mOAuthTokenEndpointText.getText().toString().trim()), getApplicationContext(), true);\r
+ //OwnCloudClient client = OwnCloudClientUtils.createOwnCloudClient(Uri.parse(getString(R.string.oauth2_url_endpoint_access)), getApplicationContext());\r
+ OwnCloudClient client = OwnCloudClientFactory.createOwnCloudClient(Uri.parse(mOAuthTokenEndpointText.getText().toString().trim()), getApplicationContext(), true);\r
operation.execute(client, this, mHandler);\r
}\r
\r
mServerStatusIcon = R.drawable.progress_small;\r
showServerStatus();\r
mOcServerChkOperation = new OwnCloudServerCheckOperation(uri, this);\r
- WebdavClient client = OwnCloudClientFactory.createOwnCloudClient(Uri.parse(uri), this, true);\r
+ OwnCloudClient client = OwnCloudClientFactory.createOwnCloudClient(Uri.parse(uri), this, true);\r
mOperationThread = mOcServerChkOperation.execute(client, this, mHandler);\r
} else {\r
mServerStatusText = 0;\r
\r
/// test credentials accessing the root folder\r
mAuthCheckOperation = new ExistenceCheckRemoteOperation("", this, false);\r
- WebdavClient client = OwnCloudClientFactory.createOwnCloudClient(Uri.parse(mHostBaseUrl + webdav_path), this, true);\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
/// test credentials accessing the root folder\r
mAuthCheckOperation = new ExistenceCheckRemoteOperation("", this, false);\r
- WebdavClient client = OwnCloudClientFactory.createOwnCloudClient(Uri.parse(mHostBaseUrl + webdav_path), this, false);\r
+ OwnCloudClient client = OwnCloudClientFactory.createOwnCloudClient(Uri.parse(mHostBaseUrl + webdav_path), this, false);\r
mOperationThread = mAuthCheckOperation.execute(client, this, mHandler);\r
\r
}\r
} else {\r
onAuthorizationCheckFinish((ExistenceCheckRemoteOperation)operation, result);\r
}\r
+ } else if (operation instanceof GetUserNameRemoteOperation) {\r
+ onGetUserNameFinish((GetUserNameRemoteOperation) operation, result);\r
+ \r
}\r
+ \r
}\r
\r
-\r
+ private void onGetUserNameFinish(GetUserNameRemoteOperation operation, RemoteOperationResult result) {\r
+ if (result.isSuccess()) {\r
+ boolean success = false;\r
+ String username = operation.getUserName();\r
+ \r
+ if ( mAction == ACTION_CREATE) {\r
+ mUsernameInput.setText(username);\r
+ success = createAccount();\r
+ } else {\r
+ \r
+ if (!mUsernameInput.getText().toString().equals(username)) {\r
+ // fail - not a new account, but an existing one; disallow\r
+ result = new RemoteOperationResult(ResultCode.ACCOUNT_NOT_THE_SAME); \r
+ updateAuthStatusIconAndText(result);\r
+ showAuthStatus();\r
+ Log_OC.d(TAG, result.getLogMessage());\r
+ } else {\r
+ updateToken();\r
+ success = true;\r
+ }\r
+ }\r
+ \r
+ if (success)\r
+ finish();\r
+ }\r
+ \r
+ }\r
\r
private void onSamlBasedFederatedSingleSignOnAuthorizationStart(RemoteOperation operation, RemoteOperationResult result) {\r
try {\r
mAuthToken = ((OAuth2GetAccessToken)operation).getResultTokenMap().get(OAuth2Constants.KEY_ACCESS_TOKEN);\r
Log_OC.d(TAG, "Got ACCESS TOKEN: " + mAuthToken);\r
mAuthCheckOperation = new ExistenceCheckRemoteOperation("", this, false);\r
- WebdavClient client = OwnCloudClientFactory.createOwnCloudClient(Uri.parse(mHostBaseUrl + webdav_path), this, true);\r
+ OwnCloudClient client = OwnCloudClientFactory.createOwnCloudClient(Uri.parse(mHostBaseUrl + webdav_path), this, true);\r
client.setBearerCredentials(mAuthToken);\r
mAuthCheckOperation.execute(client, this, mHandler);\r
\r
success = createAccount();\r
\r
} else {\r
- success = updateToken();\r
+ updateToken();\r
+ success = true;\r
}\r
\r
if (success) {\r
* Sets the proper response to get that the Account Authenticator that started this activity saves \r
* a new authorization token for mAccount.\r
*/\r
- private boolean updateToken() {\r
+ private void updateToken() {\r
Bundle response = new Bundle();\r
response.putString(AccountManager.KEY_ACCOUNT_NAME, mAccount.name);\r
response.putString(AccountManager.KEY_ACCOUNT_TYPE, mAccount.type);\r
\r
} else if (AccountTypeUtils.getAuthTokenTypeSamlSessionCookie(MainApp.getAccountType()).equals(mAuthTokenType)) {\r
\r
- String username= getUserNameForSaml();\r
- if (username == null)\r
- return false;\r
- \r
- if (!mUsernameInput.getText().toString().equals(username)) {\r
- // fail - not a new account, but an existing one; disallow\r
- RemoteOperationResult result = new RemoteOperationResult(ResultCode.ACCOUNT_NOT_THE_SAME); \r
- updateAuthStatusIconAndText(result);\r
- showAuthStatus();\r
- Log_OC.d(TAG, result.getLogMessage());\r
- \r
- return false;\r
- }\r
- \r
response.putString(AccountManager.KEY_AUTHTOKEN, mAuthToken);\r
// the next line is necessary; by now, notifications are calling directly to the AuthenticatorActivity to update, without AccountManager intervention\r
mAccountMgr.setAuthToken(mAccount, mAuthTokenType, mAuthToken);\r
}\r
setAccountAuthenticatorResult(response);\r
\r
- return true;\r
}\r
\r
\r
\r
Uri uri = Uri.parse(mHostBaseUrl);\r
String username = mUsernameInput.getText().toString().trim();\r
- if (isSaml) {\r
- username = getUserNameForSaml();\r
- if (username == null)\r
- return false;\r
-\r
- } else if (isOAuth) {\r
+ if (isOAuth) {\r
username = "OAuth_user" + (new java.util.Random(System.currentTimeMillis())).nextLong();\r
} \r
String accountName = username + "@" + uri.getHost();\r
\r
if (sessionCookie != null && sessionCookie.length() > 0) {\r
mAuthToken = sessionCookie;\r
- boolean success = false;\r
- if (mAction == ACTION_CREATE) {\r
- success = createAccount();\r
- \r
- } else {\r
- success = updateToken();\r
- }\r
- if (success) {\r
- finish();\r
- }\r
+\r
+ GetUserNameRemoteOperation getUserOperation = new GetUserNameRemoteOperation(); \r
+ OwnCloudClient client = OwnCloudClientFactory.createOwnCloudClient(Uri.parse(mHostBaseUrl), getApplicationContext(), true);\r
+ client.setSsoSessionCookie(mAuthToken);\r
+ getUserOperation.execute(client, this, mHandler);\r
}\r
\r
\r
return super.onTouchEvent(event);\r
}\r
\r
- \r
- /**\r
- * Asynchronous task to get the SAML User name from OCS-API\r
- *\r
- */\r
- private class GetUserNameTask extends AsyncTask<Void, Void, String>{\r
-\r
- @Override\r
- protected String doInBackground(Void... params) {\r
- \r
- GetUserNameRemoteOperation getUserOperation = new GetUserNameRemoteOperation(mHostBaseUrl, mAuthToken);\r
- WebdavClient client = OwnCloudClientFactory.createOwnCloudClient(Uri.parse(mHostBaseUrl), getApplicationContext(), true);\r
- RemoteOperationResult result = getUserOperation.execute(client);\r
- \r
- return result.getUserName();\r
- }\r
- \r
- }\r
-\r
- /**\r
- * Get the user name form OCS-API\r
- * @return username\r
- */\r
- private String getUserNameForSaml(){\r
-\r
- GetUserNameTask getUserTask = new GetUserNameTask();\r
- String username = null;\r
- try {\r
- username = getUserTask.execute().get();\r
- } catch (InterruptedException e) {\r
- e.printStackTrace();\r
- } catch (ExecutionException e) {\r
- e.printStackTrace();\r
- }\r
-\r
- return username;\r
- }\r
}\r