From: David A. Velasco Date: Wed, 14 Aug 2013 15:16:42 +0000 (+0200) Subject: Merge remote-tracking branch 'origin/saml_based_federated_single_sign_on' into saml_b... X-Git-Tag: oc-android-1.4.6~17^2~21^2~1 X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/commitdiff_plain/ebd6888ed1c7fd1c2436b491e0fbfb185f5ab5c4?ds=inline;hp=-c Merge remote-tracking branch 'origin/saml_based_federated_single_sign_on' into saml_based_federated_single_sign_on_expired --- ebd6888ed1c7fd1c2436b491e0fbfb185f5ab5c4 diff --combined src/com/owncloud/android/authentication/AuthenticatorActivity.java index a21205ae,d844011e..e9da35a8 --- a/src/com/owncloud/android/authentication/AuthenticatorActivity.java +++ b/src/com/owncloud/android/authentication/AuthenticatorActivity.java @@@ -18,24 -18,8 +18,8 @@@ package com.owncloud.android.authentication; - import com.owncloud.android.Log_OC; - import com.owncloud.android.ui.dialog.SslValidatorDialog; - import com.owncloud.android.ui.dialog.SslValidatorDialog.OnSslValidatorListener; - import com.owncloud.android.utils.OwnCloudVersion; - import com.owncloud.android.authentication.SsoWebViewClient.SsoWebViewClientListener; - import com.owncloud.android.network.OwnCloudClientUtils; - import com.owncloud.android.operations.OwnCloudServerCheckOperation; - import com.owncloud.android.operations.ExistenceCheckOperation; - import com.owncloud.android.operations.OAuth2GetAccessToken; - import com.owncloud.android.operations.OnRemoteOperationListener; - import com.owncloud.android.operations.RemoteOperation; - import com.owncloud.android.operations.RemoteOperationResult; - import com.owncloud.android.operations.RemoteOperationResult.ResultCode; - import android.accounts.Account; - import android.accounts.AccountAuthenticatorActivity; import android.accounts.AccountManager; - import android.annotation.SuppressLint; import android.app.AlertDialog; import android.app.Dialog; import android.app.ProgressDialog; @@@ -59,17 -43,28 +43,28 @@@ import android.view.View.OnFocusChangeL import android.view.View.OnTouchListener; import android.view.Window; import android.view.inputmethod.EditorInfo; - import android.webkit.CookieManager; - import android.webkit.WebSettings; - import android.webkit.WebView; + import android.widget.Button; import android.widget.CheckBox; import android.widget.EditText; - import android.widget.Button; import android.widget.TextView; - import android.widget.Toast; import android.widget.TextView.OnEditorActionListener; + import android.widget.Toast; + import com.owncloud.android.Log_OC; import com.owncloud.android.R; + import com.owncloud.android.authentication.SsoWebViewClient.SsoWebViewClientListener; + import com.owncloud.android.network.OwnCloudClientUtils; + import com.owncloud.android.operations.ExistenceCheckOperation; + import com.owncloud.android.operations.OAuth2GetAccessToken; + import com.owncloud.android.operations.OnRemoteOperationListener; + import com.owncloud.android.operations.OwnCloudServerCheckOperation; + import com.owncloud.android.operations.RemoteOperation; + import com.owncloud.android.operations.RemoteOperationResult; + import com.owncloud.android.operations.RemoteOperationResult.ResultCode; + 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.OwnCloudVersion; import eu.alefzero.webdav.WebdavClient; @@@ -80,7 -75,7 +75,7 @@@ * @author David A. Velasco */ public class AuthenticatorActivity extends AccountAuthenticatorActivity - implements OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeListener, OnEditorActionListener, SsoWebViewClientListener { + implements OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeListener, OnEditorActionListener, SsoWebViewClientListener{ private static final String TAG = AuthenticatorActivity.class.getSimpleName(); @@@ -116,6 -111,8 +111,8 @@@ public static final byte ACTION_CREATE = 0; public static final byte ACTION_UPDATE_TOKEN = 1; + private static final String TAG_SAML_DIALOG = "samlWebViewDialog"; + private String mHostBaseUrl; private OwnCloudVersion mDiscoveredVersion; @@@ -152,8 -149,7 +149,7 @@@ private TextView mOAuthTokenEndpointText; private TextView mAccountNameInput; - private WebView mSsoWebView; - private SsoWebViewClient mWebViewClient; + private SamlWebViewDialog mSamlDialog; private View mOkButton; @@@ -180,7 -176,6 +176,6 @@@ mOAuthTokenEndpointText = (TextView)findViewById(R.id.oAuthEntryPoint_2); mOAuth2Check = (CheckBox) findViewById(R.id.oauth_onOff_check); mAccountNameInput = (EditText) findViewById(R.id.account_name); - mSsoWebView = (WebView) findViewById(R.id.web_sso_view); mOkButton = findViewById(R.id.buttonOK); mAuthStatusLayout = (TextView) findViewById(R.id.auth_status_text); @@@ -229,9 -224,6 +224,9 @@@ } mHostBaseUrl = normalizeUrl(mAccountMgr.getUserData(mAccount, AccountAuthenticator.KEY_OC_BASE_URL)); mHostUrlInput.setText(mHostBaseUrl); + String userName = mAccount.name.substring(0, mAccount.name.lastIndexOf('@')); + mUsernameInput.setText(userName); + mAccountNameInput.setText(userName); } initAuthorizationMethod(); // checks intent and setup.xml to determine mCurrentAuthorizationMethod mJustCreated = true; @@@ -266,8 -258,6 +261,6 @@@ if (mCurrentAuthTokenType == null) { mCurrentAuthTokenType = AccountAuthenticator.AUTH_TOKEN_TYPE_PASSWORD; - } else if (AccountAuthenticator.AUTH_TOKEN_TYPE_SAML_WEB_SSO_SESSION_COOKIE.equals(mCurrentAuthTokenType)) { - restoreWebView(savedInstanceState); } // check if server check was interrupted by a configuration change @@@ -292,8 -282,6 +285,8 @@@ mUsernameInput.setEnabled(false); mUsernameInput.setFocusable(false); mOAuth2Check.setVisibility(View.GONE); + mAccountNameInput.setEnabled(false); + mAccountNameInput.setFocusable(false); } //if (mServerIsChecked && !mServerIsValid && mRefreshButtonEnabled) showRefreshButton(); @@@ -340,40 -328,7 +333,7 @@@ } - @SuppressLint("SetJavaScriptEnabled") - private void initWebView() { - CookieManager cookieManager = CookieManager.getInstance(); - cookieManager.setAcceptCookie(true); - cookieManager.removeAllCookie(); - - mWebViewClient = new SsoWebViewClient(mHandler, this); - mSsoWebView.setWebViewClient(mWebViewClient); - WebSettings webSettings = mSsoWebView.getSettings(); - webSettings.setJavaScriptEnabled(true); - webSettings.setBuiltInZoomControls(true); - webSettings.setLoadWithOverviewMode(false); - webSettings.setSavePassword(false); - webSettings.setUserAgentString(WebdavClient.USER_AGENT); - } - - @SuppressLint("SetJavaScriptEnabled") - private void restoreWebView(Bundle savedInstanceState) { - mSsoWebView.restoreState(savedInstanceState); - - CookieManager cookieManager = CookieManager.getInstance(); - Log_OC.e(TAG, "Accept Cookie: " + cookieManager.acceptCookie()); - - mWebViewClient = new SsoWebViewClient(mHandler, this); - mSsoWebView.setWebViewClient(mWebViewClient); - mWebViewClient.setTargetUrl(mHostBaseUrl + AccountUtils.getWebdavPath(mDiscoveredVersion, mCurrentAuthTokenType)); - - WebSettings webSettings = mSsoWebView.getSettings(); - webSettings.setJavaScriptEnabled(true); // at least this one is not being kept by WebView#restoreState - webSettings.setBuiltInZoomControls(true); - webSettings.setLoadWithOverviewMode(false); - webSettings.setSavePassword(false); - webSettings.setUserAgentString(WebdavClient.USER_AGENT); - } + private void initAuthorizationMethod() { boolean oAuthRequired = false; @@@ -409,9 -364,6 +369,6 @@@ mUsernameInput.setText(userName); } - if (AccountAuthenticator.AUTH_TOKEN_TYPE_SAML_WEB_SSO_SESSION_COOKIE.equals(mCurrentAuthTokenType)) { - initWebView(); - } mOAuth2Check.setChecked(AccountAuthenticator.AUTH_TOKEN_TYPE_ACCESS_TOKEN.equals(mCurrentAuthTokenType)); } @@@ -450,12 -402,10 +407,10 @@@ outState.putParcelable(KEY_ACCOUNT, mAccount); } outState.putString(AccountAuthenticator.KEY_AUTH_TOKEN_TYPE, mCurrentAuthTokenType); - if (AccountAuthenticator.AUTH_TOKEN_TYPE_SAML_WEB_SSO_SESSION_COOKIE.equals(mCurrentAuthTokenType)) { - mSsoWebView.saveState(outState); - } // refresh button enabled outState.putBoolean(KEY_REFRESH_BUTTON_ENABLED, (mRefreshButton.getVisibility() == View.VISIBLE)); + } @@@ -485,15 -435,10 +440,15 @@@ protected void onResume() { super.onResume(); if (mAction == ACTION_UPDATE_TOKEN && mJustCreated && getIntent().getBooleanExtra(EXTRA_ENFORCED_UPDATE, false)) { - if (mOAuth2Check.isChecked()) + if (AccountAuthenticator.AUTH_TOKEN_TYPE_ACCESS_TOKEN.equals(mCurrentAuthTokenType)) { Toast.makeText(this, R.string.auth_expired_oauth_token_toast, Toast.LENGTH_LONG).show(); - else + + } else if (AccountAuthenticator.AUTH_TOKEN_TYPE_SAML_WEB_SSO_SESSION_COOKIE.equals(mCurrentAuthTokenType)) { + Toast.makeText(this, R.string.auth_expired_saml_sso_token_toast, Toast.LENGTH_LONG).show(); + + } else { Toast.makeText(this, R.string.auth_expired_basic_auth_toast, Toast.LENGTH_LONG).show(); + } } if (mNewCapturedUriFromOAuth2Redirection != null) { @@@ -501,6 -446,7 +456,7 @@@ } mJustCreated = false; + } @@@ -797,11 -743,14 +753,14 @@@ } catch (IllegalArgumentException e) { // NOTHING TO DO ; can't find out what situation that leads to the exception in this code, but user logs signal that it happens } - + if (result.isTemporalRedirection()) { String url = result.getRedirectedLocation(); - mWebViewClient.setTargetUrl(mHostBaseUrl + AccountUtils.getWebdavPath(mDiscoveredVersion, mCurrentAuthTokenType)); - mSsoWebView.loadUrl(url); + String targetUrl = mHostBaseUrl + AccountUtils.getWebdavPath(mDiscoveredVersion, mCurrentAuthTokenType); + + // Show dialog + mSamlDialog = SamlWebViewDialog.newInstance(url, targetUrl); + mSamlDialog.show(getSupportFragmentManager(), TAG_SAML_DIALOG); mAuthStatusIcon = android.R.drawable.ic_secure; mAuthStatusText = R.string.auth_follow_auth_server; @@@ -1448,7 -1397,6 +1407,6 @@@ mUsernameInput.setVisibility(View.GONE); mPasswordInput.setVisibility(View.GONE); mAccountNameInput.setVisibility(View.GONE); - mSsoWebView.setVisibility(View.GONE); } else if (AccountAuthenticator.AUTH_TOKEN_TYPE_SAML_WEB_SSO_SESSION_COOKIE.equals(mCurrentAuthTokenType)) { // SAML-based web Single Sign On @@@ -1457,8 -1405,6 +1415,6 @@@ mUsernameInput.setVisibility(View.GONE); mPasswordInput.setVisibility(View.GONE); mAccountNameInput.setVisibility(View.VISIBLE); - mSsoWebView.setVisibility(View.VISIBLE); - } else { // basic HTTP authorization mOAuthAuthEndpointText.setVisibility(View.GONE); @@@ -1466,7 -1412,6 +1422,6 @@@ mUsernameInput.setVisibility(View.VISIBLE); mPasswordInput.setVisibility(View.VISIBLE); mAccountNameInput.setVisibility(View.GONE); - mSsoWebView.setVisibility(View.GONE); } } @@@ -1537,20 -1482,33 +1492,33 @@@ } + public void onSamlDialogSuccess(String sessionCookie){ + mAuthToken = sessionCookie; + + if (sessionCookie != null && sessionCookie.length() > 0) { + Log_OC.d(TAG, "Successful SSO - time to save the account"); + mAuthToken = sessionCookie; + if (mAction == ACTION_CREATE) { + createAccount(); + + } else { + updateToken(); + } + + finish(); + + } + } + + + @Override public void onSsoFinished(String sessionCookie) { //Toast.makeText(this, "got cookies: " + sessionCookie, Toast.LENGTH_LONG).show(); - + if (sessionCookie != null && sessionCookie.length() > 0) { Log_OC.d(TAG, "Successful SSO - time to save the account"); - mAuthToken = sessionCookie; - if (mAction == ACTION_CREATE) { - createAccount(); - - } else { - updateToken(); - } - + onSamlDialogSuccess(sessionCookie); finish(); } else { @@@ -1558,5 -1516,7 +1526,7 @@@ Log_OC.d(TAG, "SSO failed"); } } + + }