\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.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.ui.dialog.SamlWebViewDialog;\r
import com.owncloud.android.ui.dialog.SslValidatorDialog;\r
import com.owncloud.android.ui.dialog.SslValidatorDialog.OnSslValidatorListener;\r
private static final String KEY_AUTH_STATUS_TEXT = "AUTH_STATUS_TEXT";\r
private static final String KEY_AUTH_STATUS_ICON = "AUTH_STATUS_ICON";\r
private static final String KEY_REFRESH_BUTTON_ENABLED = "KEY_REFRESH_BUTTON_ENABLED";\r
- \r
- // TODO Remove it\r
- //private static final String KEY_OC_USERNAME_EQUALS = "oc_username="; \r
\r
private static final String AUTH_ON = "on";\r
private static final String AUTH_OFF = "off";\r
}\r
}\r
}\r
- \r
- \r
+\r
+\r
+\r
private void onSamlBasedFederatedSingleSignOnAuthorizationStart(RemoteOperation operation, RemoteOperationResult result) {\r
try {\r
dismissDialog(DIALOG_LOGIN_PROGRESS);\r
mAccountMgr.setAuthToken(mAccount, mAuthTokenType, mAuthToken);\r
\r
} else if (AccountTypeUtils.getAuthTokenTypeSamlSessionCookie(MainApp.getAccountType()).equals(mAuthTokenType)) {\r
- String username = com.owncloud.android.oc_framework.accounts.AccountUtils.getUserNameForSamlSso(mAuthToken);\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
Uri uri = Uri.parse(mHostBaseUrl);\r
String username = mUsernameInput.getText().toString().trim();\r
if (isSaml) {\r
- username = com.owncloud.android.oc_framework.accounts.AccountUtils.getUserNameForSamlSso(mAuthToken);\r
- \r
+ username = getUserNameForSaml();\r
+ if (username == null)\r
+ return false;\r
+\r
} else if (isOAuth) {\r
username = "OAuth_user" + (new java.util.Random(System.currentTimeMillis())).nextLong();\r
} \r
}\r
}\r
\r
-// TODO Remove it\r
-// private String getUserNameForSamlSso() {\r
-// if (mAuthToken != null) {\r
-// String [] cookies = mAuthToken.split(";");\r
-// for (int i=0; i<cookies.length; i++) {\r
-// if (cookies[i].startsWith(KEY_OC_USERNAME_EQUALS )) {\r
-// String value = Uri.decode(cookies[i].substring(KEY_OC_USERNAME_EQUALS.length()));\r
-// return value;\r
-// }\r
-// }\r
-// }\r
-// return "";\r
-// }\r
-\r
\r
/**\r
* {@inheritDoc}\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