Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f2a5bce5 authored by Ricki Hirner's avatar Ricki Hirner
Browse files

Integrate MemorizingTrustManager by Georg Lukas

parent bdddd234
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -4,3 +4,6 @@
[submodule "vcard4android"]
	path = vcard4android
	url = git@gitlab.com:bitfireAT/vcard4android.git
[submodule "MemorizingTrustManager"]
	path = MemorizingTrustManager
	url = https://github.com/ge0rg/MemorizingTrustManager
Original line number Diff line number Diff line
Subproject commit 9e30ffdf7dc12744ab069d584febdc6a4ca0de7e
+2 −0
Original line number Diff line number Diff line
@@ -74,4 +74,6 @@ dependencies {

    compile project(':dav4android')
    compile project(':vcard4android')

    compile project(':MemorizingTrustManager')
}
+4 −0
Original line number Diff line number Diff line
@@ -103,6 +103,10 @@
            android:label="@string/settings_title"
            android:parentActivityName=".ui.settings.SettingsActivity" >
        </activity>

        <!-- MemorizingTrustManager -->
        <activity android:name="de.duenndns.ssl.MemorizingActivity"
                  android:theme="@android:style/Theme.Holo.Light.Dialog.NoActionBar"/>
    </application>

</manifest>
+32 −1
Original line number Diff line number Diff line
@@ -8,23 +8,33 @@

package at.bitfire.davdroid;

import android.content.Context;
import android.os.Build;

import com.squareup.okhttp.Authenticator;
import com.squareup.okhttp.CertificatePinner;
import com.squareup.okhttp.Credentials;
import com.squareup.okhttp.Interceptor;
import com.squareup.okhttp.OkHttpClient;
import com.squareup.okhttp.Request;
import com.squareup.okhttp.Response;
import com.squareup.okhttp.internal.tls.OkHostnameVerifier;
import com.squareup.okhttp.logging.HttpLoggingInterceptor;

import java.io.IOException;
import java.net.Proxy;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.text.SimpleDateFormat;
import java.util.List;
import java.util.concurrent.TimeUnit;

import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.SSLContext;
import javax.net.ssl.X509TrustManager;

import at.bitfire.dav4android.HttpUtils;
import de.duenndns.ssl.MemorizingTrustManager;
import lombok.RequiredArgsConstructor;

public class HttpClient extends OkHttpClient {
@@ -48,16 +58,20 @@ public class HttpClient extends OkHttpClient {
        userAgent = "DAVdroid/" + BuildConfig.VERSION_NAME + " (" + date + "; dav4android) Android/" + Build.VERSION.RELEASE;
    }

    final Context context;
    protected String username, password;


    public HttpClient() {
        super();
        context = null;
        initialize();
    }

    public HttpClient(String username, String password, boolean preemptive) {
    public HttpClient(Context context, String username, String password, boolean preemptive) {
        super();
        this.context = context;

        initialize();

        // authentication
@@ -78,6 +92,8 @@ public class HttpClient extends OkHttpClient {
     */
    public HttpClient(HttpClient client, String host) {
        super();
        context = client.context;

        initialize();

        username = client.username;
@@ -87,6 +103,21 @@ public class HttpClient extends OkHttpClient {


    protected void initialize() {
        if (context != null) {
            // use MemorizingTrustManager to manage self-signed certificates
            MemorizingTrustManager mtm = new MemorizingTrustManager(context);
            try {
                SSLContext sc = SSLContext.getInstance("TLS");
                sc.init(null, new X509TrustManager[] { mtm }, null);
                setSslSocketFactory(sc.getSocketFactory());
                setHostnameVerifier(mtm.wrapHostnameVerifier(OkHostnameVerifier.INSTANCE));
            } catch (NoSuchAlgorithmException e) {
                Constants.log.error("Couldn't get SSL Context for MemorizingTrustManager", e);
            } catch (KeyManagementException e) {
                Constants.log.error("Key management error while initializing MemorizingTrustManager", e);
            }
        }

        // don't follow redirects automatically because this may rewrite DAV methods to GET
        setFollowRedirects(false);

Loading