From 7442340105bb7172c3d7d95d0c0b4a5e84f34a2c Mon Sep 17 00:00:00 2001 From: Mario Danic Date: Wed, 25 Oct 2017 22:37:57 +0200 Subject: [PATCH] Add support for proxy auth Signed-off-by: Mario Danic --- .../talk/dagger/modules/RestModule.java | 29 ++++++++++++++++++- .../utils/preferences/json/ProxyPrefs.java | 6 ++++ 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/nextcloud/talk/dagger/modules/RestModule.java b/app/src/main/java/com/nextcloud/talk/dagger/modules/RestModule.java index 40061232f..898c8e0ec 100644 --- a/app/src/main/java/com/nextcloud/talk/dagger/modules/RestModule.java +++ b/app/src/main/java/com/nextcloud/talk/dagger/modules/RestModule.java @@ -41,11 +41,14 @@ import javax.inject.Singleton; import dagger.Module; import dagger.Provides; import io.reactivex.schedulers.Schedulers; +import okhttp3.Authenticator; import okhttp3.Cache; +import okhttp3.Credentials; import okhttp3.Interceptor; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; +import okhttp3.Route; import okhttp3.logging.HttpLoggingInterceptor; import retrofit2.Retrofit; import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory; @@ -86,7 +89,7 @@ public class RestModule { @Provides @Singleton - OkHttpClient provideHttpClient(@Nullable Proxy proxy) { + OkHttpClient provideHttpClient(@Nullable Proxy proxy, AppPreferences appPreferences) { OkHttpClient.Builder httpClient = new OkHttpClient.Builder(); int cacheSize = 128 * 1024 * 1024; // 128 MB @@ -102,6 +105,13 @@ public class RestModule { if (proxy != null) { httpClient.proxy(proxy); + + if (!TextUtils.isEmpty(appPreferences.getProxyServer().getUsername()) && + !TextUtils.isEmpty(appPreferences.getProxyServer().getPassword())) { + httpClient.proxyAuthenticator(new ProxyAuthenticator(Credentials.basic( + appPreferences.getProxyServer().getUsername(), + appPreferences.getProxyServer().getPassword()))); + } } httpClient.addInterceptor(new HeadersInterceptor()); @@ -109,6 +119,23 @@ public class RestModule { return httpClient.build(); } + private class ProxyAuthenticator implements Authenticator { + + private String credentials; + + private ProxyAuthenticator(String credentials) { + this.credentials = credentials; + } + + @Nullable + @Override + public Request authenticate(@NonNull Route route, @NonNull Response response) throws IOException { + return response.request().newBuilder() + .header("Proxy-Authorization", credentials) + .build(); + } + } + private class HeadersInterceptor implements Interceptor { @Override diff --git a/app/src/main/java/com/nextcloud/talk/utils/preferences/json/ProxyPrefs.java b/app/src/main/java/com/nextcloud/talk/utils/preferences/json/ProxyPrefs.java index a2eb24873..4829c3de0 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/preferences/json/ProxyPrefs.java +++ b/app/src/main/java/com/nextcloud/talk/utils/preferences/json/ProxyPrefs.java @@ -40,4 +40,10 @@ public class ProxyPrefs { @JsonField(name = "proxy_type") String proxyType; + + @JsonField(name = "username") + String username; + + @JsonField(name = "password") + String password; }