Merge branch 'saml_based_federated_single_sign_on' into saml_based_federated_single_s...
authorDavid A. Velasco <dvelasco@solidgear.es>
Mon, 12 Aug 2013 11:21:01 +0000 (13:21 +0200)
committerDavid A. Velasco <dvelasco@solidgear.es>
Mon, 12 Aug 2013 11:21:01 +0000 (13:21 +0200)
1  2 
src/com/owncloud/android/authentication/AuthenticatorActivity.java

@@@ -229,12 -229,8 +229,11 @@@ implements  OnRemoteOperationListener, 
                  }\r
                  mHostBaseUrl = normalizeUrl(mAccountMgr.getUserData(mAccount, AccountAuthenticator.KEY_OC_BASE_URL));\r
                  mHostUrlInput.setText(mHostBaseUrl);\r
 +                String userName = mAccount.name.substring(0, mAccount.name.lastIndexOf('@'));\r
 +                mUsernameInput.setText(userName);\r
 +                mAccountNameInput.setText(userName);\r
              }\r
              initAuthorizationMethod();  // checks intent and setup.xml to determine mCurrentAuthorizationMethod\r
-             mOAuth2Check.setChecked(mCurrentAuthTokenType == AccountAuthenticator.AUTH_TOKEN_TYPE_ACCESS_TOKEN);\r
              mJustCreated = true;\r
              \r
              if (mAction == ACTION_UPDATE_TOKEN || !mHostUrlInputEnabled) {\r
              mCurrentAuthTokenType = savedInstanceState.getString(AccountAuthenticator.KEY_AUTH_TOKEN_TYPE);\r
              if (mCurrentAuthTokenType == null) {\r
                  mCurrentAuthTokenType =  AccountAuthenticator.AUTH_TOKEN_TYPE_PASSWORD;\r
+                 \r
+             } else if (AccountAuthenticator.AUTH_TOKEN_TYPE_SAML_WEB_SSO_SESSION_COOKIE.equals(mCurrentAuthTokenType)) {\r
+                 restoreWebView(savedInstanceState);\r
              }\r
  \r
              // check if server check was interrupted by a configuration change\r
              mUsernameInput.setEnabled(false);\r
              mUsernameInput.setFocusable(false);\r
              mOAuth2Check.setVisibility(View.GONE);\r
 +            mAccountNameInput.setEnabled(false);\r
 +            mAccountNameInput.setFocusable(false);\r
          }\r
          \r
          //if (mServerIsChecked && !mServerIsValid && mRefreshButtonEnabled) showRefreshButton();\r
          if (mServerIsChecked && !mServerIsValid && refreshButtonEnabled) showRefreshButton();\r
          mOkButton.setEnabled(mServerIsValid); // state not automatically recovered in configuration changes\r
  \r
-         if (mCurrentAuthTokenType == AccountAuthenticator.AUTH_TOKEN_TYPE_SAML_WEB_SSO_SESSION_COOKIE || \r
+         if (AccountAuthenticator.AUTH_TOKEN_TYPE_SAML_WEB_SSO_SESSION_COOKIE.equals(mCurrentAuthTokenType) || \r
                  !AUTH_OPTIONAL.equals(getString(R.string.auth_method_oauth2))) {\r
              mOAuth2Check.setVisibility(View.GONE);\r
          }\r
        private void initWebView() {\r
          CookieManager cookieManager = CookieManager.getInstance();\r
          cookieManager.setAcceptCookie(true);\r
-         //cookieManager.removeSessionCookie();        \r
+         cookieManager.removeAllCookie();\r
  \r
          mWebViewClient = new SsoWebViewClient(mHandler, this);\r
          mSsoWebView.setWebViewClient(mWebViewClient);\r
          webSettings.setUserAgentString(WebdavClient.USER_AGENT);\r
      }\r
  \r
+     @SuppressLint("SetJavaScriptEnabled")\r
+     private void restoreWebView(Bundle savedInstanceState) {\r
+         mSsoWebView.restoreState(savedInstanceState);\r
+         \r
+         CookieManager cookieManager = CookieManager.getInstance();\r
+         Log_OC.e(TAG, "Accept Cookie: " + cookieManager.acceptCookie());\r
\r
+         mWebViewClient = new SsoWebViewClient(mHandler, this);\r
+         mSsoWebView.setWebViewClient(mWebViewClient);\r
+         mWebViewClient.setTargetUrl(mHostBaseUrl + AccountUtils.getWebdavPath(mDiscoveredVersion, mCurrentAuthTokenType));\r
+         \r
+         WebSettings webSettings = mSsoWebView.getSettings();\r
+         webSettings.setJavaScriptEnabled(true);     // at least this one is not being kept by WebView#restoreState\r
+         webSettings.setBuiltInZoomControls(true);\r
+         webSettings.setLoadWithOverviewMode(false);\r
+         webSettings.setSavePassword(false);\r
+         webSettings.setUserAgentString(WebdavClient.USER_AGENT);\r
+     }\r
\r
      private void initAuthorizationMethod() {\r
          boolean oAuthRequired = false;\r
          boolean samlWebSsoRequired = false;\r
              }\r
          }\r
      \r
+         if (mAccount != null) {\r
+             String userName = mAccount.name.substring(0, mAccount.name.lastIndexOf('@'));\r
+             mUsernameInput.setText(userName);\r
+         }\r
+         \r
+         if (AccountAuthenticator.AUTH_TOKEN_TYPE_SAML_WEB_SSO_SESSION_COOKIE.equals(mCurrentAuthTokenType)) {\r
+             initWebView();\r
+         }\r
+         mOAuth2Check.setChecked(AccountAuthenticator.AUTH_TOKEN_TYPE_ACCESS_TOKEN.equals(mCurrentAuthTokenType));\r
+         \r
      }\r
  \r
      /**\r
              outState.putParcelable(KEY_ACCOUNT, mAccount);\r
          }\r
          outState.putString(AccountAuthenticator.KEY_AUTH_TOKEN_TYPE, mCurrentAuthTokenType);\r
+         if (AccountAuthenticator.AUTH_TOKEN_TYPE_SAML_WEB_SSO_SESSION_COOKIE.equals(mCurrentAuthTokenType)) {\r
+             mSsoWebView.saveState(outState);\r
+         }\r
          \r
          // refresh button enabled\r
          outState.putBoolean(KEY_REFRESH_BUTTON_ENABLED, (mRefreshButton.getVisibility() == View.VISIBLE));\r
      protected void onResume() {\r
          super.onResume();\r
          if (mAction == ACTION_UPDATE_TOKEN && mJustCreated && getIntent().getBooleanExtra(EXTRA_ENFORCED_UPDATE, false)) {\r
 -            if (mOAuth2Check.isChecked())\r
 +            if (AccountAuthenticator.AUTH_TOKEN_TYPE_ACCESS_TOKEN.equals(mCurrentAuthTokenType)) {\r
                  Toast.makeText(this, R.string.auth_expired_oauth_token_toast, Toast.LENGTH_LONG).show();\r
 -            else\r
 +                \r
 +            } else if (AccountAuthenticator.AUTH_TOKEN_TYPE_SAML_WEB_SSO_SESSION_COOKIE.equals(mCurrentAuthTokenType)) {\r
 +                Toast.makeText(this, R.string.auth_expired_saml_sso_token_toast, Toast.LENGTH_LONG).show();\r
 +                \r
 +            } else {\r
                  Toast.makeText(this, R.string.auth_expired_basic_auth_toast, Toast.LENGTH_LONG).show();\r
 +            }\r
          }\r
  \r
          if (mNewCapturedUriFromOAuth2Redirection != null) {\r
              mPasswordInput.setVisibility(View.GONE);\r
              mAccountNameInput.setVisibility(View.VISIBLE);\r
              mSsoWebView.setVisibility(View.VISIBLE);\r
-             initWebView();\r
              \r
          } else {\r
              // basic HTTP authorization\r