X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/blobdiff_plain/fe6ab707e4bef8ac835936d55b2dfd7a6d9e65f2..10dac352323cb6b39809da5b7a32a37ef7541f23:/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 9d6d3f36..b3021418 100644 --- a/src/com/owncloud/android/authentication/AuthenticatorActivity.java +++ b/src/com/owncloud/android/authentication/AuthenticatorActivity.java @@ -52,9 +52,9 @@ import android.widget.TextView.OnEditorActionListener; import com.actionbarsherlock.app.SherlockDialogFragment; import com.owncloud.android.MainApp; import com.owncloud.android.R; +import com.owncloud.android.authentication.SsoWebViewClient.SsoWebViewClientListener; 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.operations.OAuth2GetAccessToken; @@ -64,6 +64,7 @@ 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.ui.dialog.SamlWebViewDialog; import com.owncloud.android.ui.dialog.SslValidatorDialog; import com.owncloud.android.ui.dialog.SslValidatorDialog.OnSslValidatorListener; @@ -102,9 +103,6 @@ implements OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeList private static final String KEY_AUTH_STATUS_TEXT = "AUTH_STATUS_TEXT"; private static final String KEY_AUTH_STATUS_ICON = "AUTH_STATUS_ICON"; private static final String KEY_REFRESH_BUTTON_ENABLED = "KEY_REFRESH_BUTTON_ENABLED"; - - // TODO Remove it - //private static final String KEY_OC_USERNAME_EQUALS = "oc_username="; private static final String AUTH_ON = "on"; private static final String AUTH_OFF = "off"; @@ -793,10 +791,42 @@ 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); + createAccount(); + success = true; + } 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 { dismissDialog(DIALOG_LOGIN_PROGRESS); @@ -1121,7 +1151,8 @@ implements OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeList success = createAccount(); } else { - success = updateToken(); + updateToken(); + success = true; } if (success) { @@ -1167,7 +1198,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); @@ -1178,16 +1209,6 @@ implements OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeList mAccountMgr.setAuthToken(mAccount, mAuthTokenType, mAuthToken); } else if (AccountTypeUtils.getAuthTokenTypeSamlSessionCookie(MainApp.getAccountType()).equals(mAuthTokenType)) { - String username = com.owncloud.android.oc_framework.accounts.AccountUtils.getUserNameForSamlSso(mAuthToken); - 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 @@ -1199,7 +1220,6 @@ implements OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeList } setAccountAuthenticatorResult(response); - return true; } @@ -1217,10 +1237,7 @@ implements OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeList Uri uri = Uri.parse(mHostBaseUrl); String username = mUsernameInput.getText().toString().trim(); - if (isSaml) { - username = com.owncloud.android.oc_framework.accounts.AccountUtils.getUserNameForSamlSso(mAuthToken); - - } else if (isOAuth) { + if (isOAuth) { username = "OAuth_user" + (new java.util.Random(System.currentTimeMillis())).nextLong(); } String accountName = username + "@" + uri.getHost(); @@ -1280,20 +1297,6 @@ implements OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeList } } -// TODO Remove it -// private String getUserNameForSamlSso() { -// if (mAuthToken != null) { -// String [] cookies = mAuthToken.split(";"); -// for (int i=0; i 0) { mAuthToken = sessionCookie; - boolean success = false; - if (mAction == ACTION_CREATE) { - success = createAccount(); - - } else { - success = updateToken(); - } - if (success) { - finish(); - } + + GetUserNameRemoteOperation getUserOperation = new GetUserNameRemoteOperation(); + WebdavClient client = OwnCloudClientFactory.createOwnCloudClient(Uri.parse(mHostBaseUrl), getApplicationContext(), true); + client.setSsoSessionCookie(mAuthToken); + getUserOperation.execute(client, this, mHandler); } @@ -1653,4 +1651,5 @@ implements OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeList } return super.onTouchEvent(event); } + }