X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/blobdiff_plain/ea18765828292e6b0937498e867a65a774e79538..1e68dccd8b3efa28e1ebc5d12d5c9ce4a3260a9f:/src/com/owncloud/android/authentication/AuthenticatorActivity.java diff --git a/src/com/owncloud/android/authentication/AuthenticatorActivity.java b/src/com/owncloud/android/authentication/AuthenticatorActivity.java index c07b0026..3a11ea62 100644 --- a/src/com/owncloud/android/authentication/AuthenticatorActivity.java +++ b/src/com/owncloud/android/authentication/AuthenticatorActivity.java @@ -18,8 +18,6 @@ package com.owncloud.android.authentication; -import java.util.concurrent.ExecutionException; - import android.accounts.Account; import android.accounts.AccountManager; import android.app.AlertDialog; @@ -31,7 +29,6 @@ import android.content.SharedPreferences; import android.graphics.Rect; import android.graphics.drawable.Drawable; import android.net.Uri; -import android.os.AsyncTask; import android.os.Bundle; import android.os.Handler; import android.preference.PreferenceManager; @@ -55,24 +52,24 @@ import android.widget.TextView.OnEditorActionListener; import com.actionbarsherlock.app.SherlockDialogFragment; import com.owncloud.android.MainApp; import com.owncloud.android.R; -import com.owncloud.android.oc_framework.accounts.AccountTypeUtils; -import com.owncloud.android.oc_framework.accounts.OwnCloudAccount; -import com.owncloud.android.oc_framework.accounts.SsoWebViewClient.SsoWebViewClientListener; -import com.owncloud.android.oc_framework.network.webdav.OwnCloudClientFactory; -import com.owncloud.android.oc_framework.network.webdav.WebdavClient; +import com.owncloud.android.authentication.SsoWebViewClient.SsoWebViewClientListener; +import com.owncloud.android.lib.accounts.AccountTypeUtils; +import com.owncloud.android.lib.accounts.OwnCloudAccount; +import com.owncloud.android.lib.network.OwnCloudClientFactory; +import com.owncloud.android.lib.network.OwnCloudClient; import com.owncloud.android.operations.OAuth2GetAccessToken; -import com.owncloud.android.oc_framework.operations.OnRemoteOperationListener; +import com.owncloud.android.lib.operations.common.OnRemoteOperationListener; import com.owncloud.android.operations.OwnCloudServerCheckOperation; -import com.owncloud.android.oc_framework.operations.RemoteOperation; -import com.owncloud.android.oc_framework.operations.RemoteOperationResult; -import com.owncloud.android.oc_framework.operations.RemoteOperationResult.ResultCode; -import com.owncloud.android.oc_framework.operations.remote.ExistenceCheckRemoteOperation; -import com.owncloud.android.oc_framework.operations.remote.GetUserNameRemoteOperation; +import com.owncloud.android.lib.operations.common.RemoteOperation; +import com.owncloud.android.lib.operations.common.RemoteOperationResult; +import com.owncloud.android.lib.operations.common.RemoteOperationResult.ResultCode; +import com.owncloud.android.lib.operations.remote.ExistenceCheckRemoteOperation; +import com.owncloud.android.lib.operations.remote.GetUserNameRemoteOperation; import com.owncloud.android.ui.dialog.SamlWebViewDialog; import com.owncloud.android.ui.dialog.SslValidatorDialog; import com.owncloud.android.ui.dialog.SslValidatorDialog.OnSslValidatorListener; import com.owncloud.android.utils.Log_OC; -import com.owncloud.android.oc_framework.utils.OwnCloudVersion; +import com.owncloud.android.lib.utils.OwnCloudVersion; /** * This Activity is used to add an ownCloud account to the App @@ -527,8 +524,8 @@ implements OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeList getString(R.string.oauth2_redirect_uri), getString(R.string.oauth2_grant_type), queryParameters); - //WebdavClient client = OwnCloudClientUtils.createOwnCloudClient(Uri.parse(getString(R.string.oauth2_url_endpoint_access)), getApplicationContext()); - WebdavClient client = OwnCloudClientFactory.createOwnCloudClient(Uri.parse(mOAuthTokenEndpointText.getText().toString().trim()), getApplicationContext(), true); + //OwnCloudClient client = OwnCloudClientUtils.createOwnCloudClient(Uri.parse(getString(R.string.oauth2_url_endpoint_access)), getApplicationContext()); + OwnCloudClient client = OwnCloudClientFactory.createOwnCloudClient(Uri.parse(mOAuthTokenEndpointText.getText().toString().trim()), getApplicationContext(), true); operation.execute(client, this, mHandler); } @@ -592,7 +589,7 @@ implements OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeList mServerStatusIcon = R.drawable.progress_small; showServerStatus(); mOcServerChkOperation = new OwnCloudServerCheckOperation(uri, this); - WebdavClient client = OwnCloudClientFactory.createOwnCloudClient(Uri.parse(uri), this, true); + OwnCloudClient client = OwnCloudClientFactory.createOwnCloudClient(Uri.parse(uri), this, true); mOperationThread = mOcServerChkOperation.execute(client, this, mHandler); } else { mServerStatusText = 0; @@ -719,7 +716,7 @@ implements OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeList /// test credentials accessing the root folder mAuthCheckOperation = new ExistenceCheckRemoteOperation("", this, false); - WebdavClient client = OwnCloudClientFactory.createOwnCloudClient(Uri.parse(mHostBaseUrl + webdav_path), this, true); + OwnCloudClient client = OwnCloudClientFactory.createOwnCloudClient(Uri.parse(mHostBaseUrl + webdav_path), this, true); client.setBasicCredentials(username, password); mOperationThread = mAuthCheckOperation.execute(client, this, mHandler); } @@ -768,7 +765,7 @@ implements OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeList /// test credentials accessing the root folder mAuthCheckOperation = new ExistenceCheckRemoteOperation("", this, false); - WebdavClient client = OwnCloudClientFactory.createOwnCloudClient(Uri.parse(mHostBaseUrl + webdav_path), this, false); + OwnCloudClient client = OwnCloudClientFactory.createOwnCloudClient(Uri.parse(mHostBaseUrl + webdav_path), this, false); mOperationThread = mAuthCheckOperation.execute(client, this, mHandler); } @@ -794,10 +791,40 @@ implements OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeList } else { onAuthorizationCheckFinish((ExistenceCheckRemoteOperation)operation, result); } + } else if (operation instanceof GetUserNameRemoteOperation) { + onGetUserNameFinish((GetUserNameRemoteOperation) operation, result); + } + } - + private void onGetUserNameFinish(GetUserNameRemoteOperation operation, RemoteOperationResult result) { + if (result.isSuccess()) { + boolean success = false; + String username = operation.getUserName(); + + if ( mAction == ACTION_CREATE) { + mUsernameInput.setText(username); + success = createAccount(); + } else { + + if (!mUsernameInput.getText().toString().equals(username)) { + // fail - not a new account, but an existing one; disallow + result = new RemoteOperationResult(ResultCode.ACCOUNT_NOT_THE_SAME); + updateAuthStatusIconAndText(result); + showAuthStatus(); + Log_OC.d(TAG, result.getLogMessage()); + } else { + updateToken(); + success = true; + } + } + + if (success) + finish(); + } + + } private void onSamlBasedFederatedSingleSignOnAuthorizationStart(RemoteOperation operation, RemoteOperationResult result) { try { @@ -1088,7 +1115,7 @@ implements OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeList mAuthToken = ((OAuth2GetAccessToken)operation).getResultTokenMap().get(OAuth2Constants.KEY_ACCESS_TOKEN); Log_OC.d(TAG, "Got ACCESS TOKEN: " + mAuthToken); mAuthCheckOperation = new ExistenceCheckRemoteOperation("", this, false); - WebdavClient client = OwnCloudClientFactory.createOwnCloudClient(Uri.parse(mHostBaseUrl + webdav_path), this, true); + OwnCloudClient client = OwnCloudClientFactory.createOwnCloudClient(Uri.parse(mHostBaseUrl + webdav_path), this, true); client.setBearerCredentials(mAuthToken); mAuthCheckOperation.execute(client, this, mHandler); @@ -1123,7 +1150,8 @@ implements OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeList success = createAccount(); } else { - success = updateToken(); + updateToken(); + success = true; } if (success) { @@ -1169,7 +1197,7 @@ implements OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeList * Sets the proper response to get that the Account Authenticator that started this activity saves * a new authorization token for mAccount. */ - private boolean updateToken() { + private void updateToken() { Bundle response = new Bundle(); response.putString(AccountManager.KEY_ACCOUNT_NAME, mAccount.name); response.putString(AccountManager.KEY_ACCOUNT_TYPE, mAccount.type); @@ -1181,20 +1209,6 @@ implements OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeList } else if (AccountTypeUtils.getAuthTokenTypeSamlSessionCookie(MainApp.getAccountType()).equals(mAuthTokenType)) { - String username= getUserNameForSaml(); - if (username == null) - return false; - - if (!mUsernameInput.getText().toString().equals(username)) { - // fail - not a new account, but an existing one; disallow - RemoteOperationResult result = new RemoteOperationResult(ResultCode.ACCOUNT_NOT_THE_SAME); - updateAuthStatusIconAndText(result); - showAuthStatus(); - Log_OC.d(TAG, result.getLogMessage()); - - return false; - } - response.putString(AccountManager.KEY_AUTHTOKEN, mAuthToken); // the next line is necessary; by now, notifications are calling directly to the AuthenticatorActivity to update, without AccountManager intervention mAccountMgr.setAuthToken(mAccount, mAuthTokenType, mAuthToken); @@ -1205,7 +1219,6 @@ implements OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeList } setAccountAuthenticatorResult(response); - return true; } @@ -1223,12 +1236,7 @@ implements OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeList Uri uri = Uri.parse(mHostBaseUrl); String username = mUsernameInput.getText().toString().trim(); - if (isSaml) { - username = getUserNameForSaml(); - if (username == null) - return false; - - } else if (isOAuth) { + if (isOAuth) { username = "OAuth_user" + (new java.util.Random(System.currentTimeMillis())).nextLong(); } String accountName = username + "@" + uri.getHost(); @@ -1588,16 +1596,11 @@ implements OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeList if (sessionCookie != null && sessionCookie.length() > 0) { mAuthToken = sessionCookie; - boolean success = false; - if (mAction == ACTION_CREATE) { - success = createAccount(); - - } else { - success = updateToken(); - } - if (success) { - finish(); - } + + GetUserNameRemoteOperation getUserOperation = new GetUserNameRemoteOperation(); + OwnCloudClient client = OwnCloudClientFactory.createOwnCloudClient(Uri.parse(mHostBaseUrl), getApplicationContext(), true); + client.setSsoSessionCookie(mAuthToken); + getUserOperation.execute(client, this, mHandler); } @@ -1648,41 +1651,4 @@ implements OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeList return super.onTouchEvent(event); } - - /** - * Asynchronous task to get the SAML User name from OCS-API - * - */ - private class GetUserNameTask extends AsyncTask{ - - @Override - protected String doInBackground(Void... params) { - - GetUserNameRemoteOperation getUserOperation = new GetUserNameRemoteOperation(mHostBaseUrl, mAuthToken); - WebdavClient client = OwnCloudClientFactory.createOwnCloudClient(Uri.parse(mHostBaseUrl), getApplicationContext(), true); - RemoteOperationResult result = getUserOperation.execute(client); - - return result.getUserName(); - } - - } - - /** - * Get the user name form OCS-API - * @return username - */ - private String getUserNameForSaml(){ - - GetUserNameTask getUserTask = new GetUserNameTask(); - String username = null; - try { - username = getUserTask.execute().get(); - } catch (InterruptedException e) { - e.printStackTrace(); - } catch (ExecutionException e) { - e.printStackTrace(); - } - - return username; - } }