X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/blobdiff_plain/ee79b7a9a957e74b94b6c84ee5136d4fa6b124a9..e3be24b472a4f34168ed8360da376310f7e24a67:/src/com/owncloud/android/authentication/SsoWebViewClient.java diff --git a/src/com/owncloud/android/authentication/SsoWebViewClient.java b/src/com/owncloud/android/authentication/SsoWebViewClient.java index 9d9bca15..27327a96 100644 --- a/src/com/owncloud/android/authentication/SsoWebViewClient.java +++ b/src/com/owncloud/android/authentication/SsoWebViewClient.java @@ -18,26 +18,32 @@ package com.owncloud.android.authentication; import java.io.ByteArrayInputStream; -import java.io.IOException; import java.lang.ref.WeakReference; -import java.security.KeyStore; -import java.security.KeyStoreException; -import java.security.NoSuchAlgorithmException; import java.security.cert.Certificate; import java.security.cert.CertificateException; import java.security.cert.CertificateFactory; import java.security.cert.X509Certificate; +import com.actionbarsherlock.app.SherlockFragmentActivity; +import com.owncloud.android.R; import com.owncloud.android.lib.common.network.NetworkUtils; +import com.owncloud.android.ui.dialog.SslUntrustedCertDialog; +import com.owncloud.android.ui.dialog.SslUntrustedCertDialogABSTRACT; +import com.owncloud.android.ui.dialog.SslUntrustedCertDialog.OnSslUntrustedCertListener; import com.owncloud.android.utils.Log_OC; +import android.app.AlertDialog; import android.content.Context; +import android.content.DialogInterface; import android.graphics.Bitmap; import android.net.http.SslCertificate; import android.net.http.SslError; import android.os.Bundle; import android.os.Handler; import android.os.Message; +import android.support.v4.app.FragmentActivity; +import android.support.v4.app.FragmentManager; +import android.support.v4.app.FragmentTransaction; import android.view.KeyEvent; import android.view.View; import android.webkit.CookieManager; @@ -57,20 +63,24 @@ import android.webkit.WebViewClient; * * @author David A. Velasco */ -public class SsoWebViewClient extends WebViewClient { +public class SsoWebViewClient extends WebViewClient implements OnSslUntrustedCertListener { private static final String TAG = SsoWebViewClient.class.getSimpleName(); + + public final static String DIALOG_UNTRUSTED_CERT = "UNTRUSTED CERT"; public interface SsoWebViewClientListener { public void onSsoFinished(String sessionCookie); } + private Context mContext; private Handler mListenerHandler; private WeakReference mListenerRef; private String mTargetUrl; private String mLastReloadedUrlAtError; - public SsoWebViewClient (Handler listenerHandler, SsoWebViewClientListener listener) { + public SsoWebViewClient (Context context, Handler listenerHandler, SsoWebViewClientListener listener) { + mContext = context; mListenerHandler = listenerHandler; mListenerRef = new WeakReference(listener); mTargetUrl = "fake://url.to.be.set"; @@ -148,17 +158,39 @@ public class SsoWebViewClient extends WebViewClient { } @Override - public void onReceivedSslError (WebView view, SslErrorHandler handler, SslError error) { + public void onReceivedSslError (final WebView view, final SslErrorHandler handler, SslError error) { Log_OC.d(TAG, "onReceivedSslError : " + error); // Test 1 X509Certificate x509Certificate = getX509CertificateFromError(error); + boolean isKnownServer = false; if (x509Certificate != null) { Log_OC.d(TAG, "------>>>>> x509Certificate " + x509Certificate.toString()); + try { + isKnownServer = NetworkUtils.isCertInKnownServersStore((Certificate) x509Certificate, mContext); + } catch (Exception e) { + Log_OC.e(TAG, "Exception: " + e.getMessage()); + } } - handler.proceed(); + if (isKnownServer) { + handler.proceed(); + } else if (x509Certificate != null) { + // Show a dialog with all the certificate info + SslUntrustedCertDialog dialog = SslUntrustedCertDialog.newInstance(mContext, x509Certificate, this, handler); + FragmentManager fm = ((SherlockFragmentActivity)mContext).getSupportFragmentManager(); + FragmentTransaction ft = fm.beginTransaction(); + dialog.show(ft, DIALOG_UNTRUSTED_CERT); + handler.cancel(); + } else { + // Show a dialog with the certificate information available in SslError (not full) + SslUntrustedCertDialogABSTRACT dialog = SslUntrustedCertDialogABSTRACT.newInstanceForEmptySslError(error, handler); + FragmentManager fm = ((SherlockFragmentActivity)mContext).getSupportFragmentManager(); + FragmentTransaction ft = fm.beginTransaction(); + dialog.show(ft, DIALOG_UNTRUSTED_CERT); + // let's forward the handler, and see what happens... + } } /** @@ -180,12 +212,7 @@ public class SsoWebViewClient extends WebViewClient { } catch (CertificateException e) { x509Certificate = null; } - } - -// if (x509Certificate != null) { -// Log_OC.d(TAG, "------>>>>> x509Certificate " + x509Certificate.toString()); -// } - + } return x509Certificate; } @@ -227,4 +254,19 @@ public class SsoWebViewClient extends WebViewClient { return false; } + @Override + public void onFailedSavingCertificate() { + AlertDialog.Builder builder = new AlertDialog.Builder(mContext); + builder.setMessage(mContext.getString(R.string.ssl_validator_not_saved)); + builder.setCancelable(false); + builder.setPositiveButton(R.string.common_ok, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + }; + }); + builder.create().show(); + + } + }