Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Interceptor;
import android.app.Activity;
import javax.net.ssl.KeyManager;
import android.security.KeyChain;
Expand All @@ -35,6 +37,7 @@
import com.reactnativecommunity.webview.RNCWebViewManager;
import expo.modules.filesystem.legacy.FileSystemLegacyModule;
import chat.rocket.reactnative.networking.ExpoImageClient;
import chat.rocket.reactnative.notification.NotificationHelper;

public class SSLPinningTurboModule extends NativeSSLPinningSpec implements KeyChainAliasCallback {

Expand All @@ -43,16 +46,32 @@ public class SSLPinningTurboModule extends NativeSSLPinningSpec implements KeyCh
private static ReactApplicationContext reactContext;
private static OkHttpClient sharedClient;

private static final Interceptor USER_AGENT_INTERCEPTOR = chain -> {
Request original = chain.request();
if (original.header("User-Agent") != null) {
return chain.proceed(original);
}
Request request = original.newBuilder()
.header("User-Agent", NotificationHelper.getUserAgent())
.build();
return chain.proceed(request);
};

public static OkHttpClient.Builder getOkHttpClientBuilder() {
return new OkHttpClient.Builder()
.addInterceptor(USER_AGENT_INTERCEPTOR)
.connectTimeout(0, TimeUnit.MILLISECONDS)
.readTimeout(0, TimeUnit.MILLISECONDS)
.writeTimeout(0, TimeUnit.MILLISECONDS)
.cookieJar(new ReactCookieJarContainer());
}

public static OkHttpClient getSharedOkHttpClient() {
if (sharedClient != null) {
return sharedClient;
}
if (alias != null) {
OkHttpClient.Builder builder = new OkHttpClient.Builder()
.connectTimeout(0, TimeUnit.MILLISECONDS)
.readTimeout(0, TimeUnit.MILLISECONDS)
.writeTimeout(0, TimeUnit.MILLISECONDS)
.cookieJar(new ReactCookieJarContainer());
OkHttpClient.Builder builder = getOkHttpClientBuilder();

SSLSocketFactory sslSocketFactory = getSSLFactory(alias);
X509TrustManager trustManager = getTrustManagerFactory();
Expand Down Expand Up @@ -89,11 +108,7 @@ protected OkHttpClient getOkHttpClient() {
if (shared != null) {
return shared;
}
OkHttpClient.Builder builder = new OkHttpClient.Builder()
.connectTimeout(0, TimeUnit.MILLISECONDS)
.readTimeout(0, TimeUnit.MILLISECONDS)
.writeTimeout(0, TimeUnit.MILLISECONDS)
.cookieJar(new ReactCookieJarContainer());
OkHttpClient.Builder builder = getOkHttpClientBuilder();

if (alias != null) {
SSLSocketFactory sslSocketFactory = getSSLFactory(alias);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ class DDPClient {
companion object {
private const val TAG = "RocketChat.DDPClient"
private val sharedClient: OkHttpClient by lazy {
SSLPinningTurboModule.getSharedOkHttpClient() ?: OkHttpClient.Builder()
SSLPinningTurboModule.getSharedOkHttpClient() ?: SSLPinningTurboModule.getOkHttpClientBuilder()
.pingInterval(30, TimeUnit.SECONDS)
.build()
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ class MediaCallsAnswerRequest(
private const val TAG = "RocketChat.MediaCallsAnswerRequest"
private val JSON_MEDIA_TYPE = "application/json; charset=utf-8".toMediaType()
private val httpClient: OkHttpClient by lazy {
val base = SSLPinningTurboModule.getSharedOkHttpClient() ?: OkHttpClient()
val base = SSLPinningTurboModule.getSharedOkHttpClient() ?: SSLPinningTurboModule.getOkHttpClientBuilder().build()
base.newBuilder()
.callTimeout(10, TimeUnit.SECONDS)
.connectTimeout(5, TimeUnit.SECONDS)
Expand Down