From ea2436ae6f3230a2887c3e1c3c413b340d7637de Mon Sep 17 00:00:00 2001 From: Rahul Patel Date: Wed, 18 Oct 2023 00:50:59 +0530 Subject: [PATCH] Add support for proxies - 1/3 --- .../store/data/network/IProxyHttpClient.kt | 9 ++++++++ .../aurora/store/data/network/OkHttpClient.kt | 23 +++++++++++++++---- 2 files changed, 28 insertions(+), 4 deletions(-) create mode 100644 app/src/main/java/com/aurora/store/data/network/IProxyHttpClient.kt diff --git a/app/src/main/java/com/aurora/store/data/network/IProxyHttpClient.kt b/app/src/main/java/com/aurora/store/data/network/IProxyHttpClient.kt new file mode 100644 index 000000000..87520405d --- /dev/null +++ b/app/src/main/java/com/aurora/store/data/network/IProxyHttpClient.kt @@ -0,0 +1,9 @@ +package com.aurora.store.data.network + +import com.aurora.gplayapi.network.IHttpClient +import java.net.Proxy + +interface IProxyHttpClient : IHttpClient { + @Throws(UnsupportedOperationException::class) + fun setProxy(proxy: Proxy, proxyUser: String?, proxyPassword: String?): IHttpClient +} \ No newline at end of file diff --git a/app/src/main/java/com/aurora/store/data/network/OkHttpClient.kt b/app/src/main/java/com/aurora/store/data/network/OkHttpClient.kt index 4cab62427..f62b21db1 100644 --- a/app/src/main/java/com/aurora/store/data/network/OkHttpClient.kt +++ b/app/src/main/java/com/aurora/store/data/network/OkHttpClient.kt @@ -20,7 +20,6 @@ package com.aurora.store.data.network import com.aurora.gplayapi.data.models.PlayResponse -import com.aurora.gplayapi.network.IHttpClient import com.aurora.store.BuildConfig import com.aurora.store.util.Log import kotlinx.coroutines.flow.MutableStateFlow @@ -32,9 +31,10 @@ import okhttp3.HttpUrl.Companion.toHttpUrl import okhttp3.MediaType.Companion.toMediaType import okhttp3.RequestBody.Companion.toRequestBody import java.io.IOException +import java.net.Proxy import java.util.concurrent.TimeUnit -object OkHttpClient : IHttpClient { +object OkHttpClient : IProxyHttpClient { private const val POST = "POST" private const val GET = "GET" @@ -43,15 +43,30 @@ object OkHttpClient : IHttpClient { override val responseCode: StateFlow get() = _responseCode.asStateFlow() - private val okHttpClient = OkHttpClient().newBuilder() + private var okHttpClient = OkHttpClient() + private val okHttpClientBuilder = OkHttpClient().newBuilder() .connectTimeout(25, TimeUnit.SECONDS) .readTimeout(25, TimeUnit.SECONDS) .writeTimeout(25, TimeUnit.SECONDS) .retryOnConnectionFailure(true) .followRedirects(true) .followSslRedirects(true) - .build() + override fun setProxy( + proxy: Proxy, proxyUser: String?, proxyPassword: String? + ): IProxyHttpClient { + if (proxyUser != null) { + okHttpClientBuilder.proxyAuthenticator { route, response -> + val credential = Credentials.basic(proxyUser, proxyPassword.orEmpty()) + response.request.newBuilder().header("Proxy-Authorization", credential).build() + } + } + + okHttpClientBuilder.proxy(proxy) + okHttpClient = okHttpClientBuilder.build() + + return this + } @Throws(IOException::class) fun post(url: String, headers: Map, requestBody: RequestBody): PlayResponse {