mirror of
https://github.com/oxen-io/session-android.git
synced 2025-12-15 20:42:00 +00:00
Set a better User-Agent on requests.
This commit is contained in:
@@ -200,7 +200,8 @@ public class SignalServiceMessageReceiver {
|
||||
WebSocketConnection webSocket = new WebSocketConnection(urls.getSignalServiceUrls()[0].getUrl(),
|
||||
urls.getSignalServiceUrls()[0].getTrustStore(),
|
||||
Optional.of(credentialsProvider), signalAgent, connectivityListener,
|
||||
sleepTimer);
|
||||
sleepTimer,
|
||||
urls.getNetworkInterceptors());
|
||||
|
||||
return new SignalServiceMessagePipe(webSocket, Optional.of(credentialsProvider));
|
||||
}
|
||||
@@ -209,7 +210,8 @@ public class SignalServiceMessageReceiver {
|
||||
WebSocketConnection webSocket = new WebSocketConnection(urls.getSignalServiceUrls()[0].getUrl(),
|
||||
urls.getSignalServiceUrls()[0].getTrustStore(),
|
||||
Optional.<CredentialsProvider>absent(), signalAgent, connectivityListener,
|
||||
sleepTimer);
|
||||
sleepTimer,
|
||||
urls.getNetworkInterceptors());
|
||||
|
||||
return new SignalServiceMessagePipe(webSocket, Optional.of(credentialsProvider));
|
||||
}
|
||||
|
||||
@@ -1,6 +1,10 @@
|
||||
package org.whispersystems.signalservice.internal.configuration;
|
||||
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import okhttp3.Interceptor;
|
||||
|
||||
public class SignalServiceConfiguration {
|
||||
|
||||
private final SignalServiceUrl[] signalServiceUrls;
|
||||
@@ -8,18 +12,21 @@ public class SignalServiceConfiguration {
|
||||
private final SignalContactDiscoveryUrl[] signalContactDiscoveryUrls;
|
||||
private final SignalKeyBackupServiceUrl[] signalKeyBackupServiceUrls;
|
||||
private final SignalStorageUrl[] signalStorageUrls;
|
||||
private final List<Interceptor> networkInterceptors;
|
||||
|
||||
public SignalServiceConfiguration(SignalServiceUrl[] signalServiceUrls,
|
||||
SignalCdnUrl[] signalCdnUrls,
|
||||
SignalContactDiscoveryUrl[] signalContactDiscoveryUrls,
|
||||
SignalKeyBackupServiceUrl[] signalKeyBackupServiceUrls,
|
||||
SignalStorageUrl[] signalStorageUrls)
|
||||
SignalStorageUrl[] signalStorageUrls,
|
||||
List<Interceptor> networkInterceptors)
|
||||
{
|
||||
this.signalServiceUrls = signalServiceUrls;
|
||||
this.signalCdnUrls = signalCdnUrls;
|
||||
this.signalContactDiscoveryUrls = signalContactDiscoveryUrls;
|
||||
this.signalKeyBackupServiceUrls = signalKeyBackupServiceUrls;
|
||||
this.signalStorageUrls = signalStorageUrls;
|
||||
this.networkInterceptors = networkInterceptors;
|
||||
}
|
||||
|
||||
public SignalServiceUrl[] getSignalServiceUrls() {
|
||||
@@ -41,4 +48,8 @@ public class SignalServiceConfiguration {
|
||||
public SignalStorageUrl[] getSignalStorageUrls() {
|
||||
return signalStorageUrls;
|
||||
}
|
||||
|
||||
public List<Interceptor> getNetworkInterceptors() {
|
||||
return networkInterceptors;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -94,6 +94,7 @@ import javax.net.ssl.X509TrustManager;
|
||||
import okhttp3.Call;
|
||||
import okhttp3.ConnectionSpec;
|
||||
import okhttp3.Credentials;
|
||||
import okhttp3.Interceptor;
|
||||
import okhttp3.MediaType;
|
||||
import okhttp3.MultipartBody;
|
||||
import okhttp3.OkHttpClient;
|
||||
@@ -165,7 +166,6 @@ public class PushServiceSocket {
|
||||
private final ConnectionHolder[] contactDiscoveryClients;
|
||||
private final ConnectionHolder[] keyBackupServiceClients;
|
||||
private final ConnectionHolder[] storageClients;
|
||||
private final OkHttpClient attachmentClient;
|
||||
|
||||
private final CredentialsProvider credentialsProvider;
|
||||
private final String signalAgent;
|
||||
@@ -174,12 +174,11 @@ public class PushServiceSocket {
|
||||
public PushServiceSocket(SignalServiceConfiguration signalServiceConfiguration, CredentialsProvider credentialsProvider, String signalAgent) {
|
||||
this.credentialsProvider = credentialsProvider;
|
||||
this.signalAgent = signalAgent;
|
||||
this.serviceClients = createServiceConnectionHolders(signalServiceConfiguration.getSignalServiceUrls());
|
||||
this.cdnClients = createConnectionHolders(signalServiceConfiguration.getSignalCdnUrls());
|
||||
this.contactDiscoveryClients = createConnectionHolders(signalServiceConfiguration.getSignalContactDiscoveryUrls());
|
||||
this.keyBackupServiceClients = createConnectionHolders(signalServiceConfiguration.getSignalKeyBackupServiceUrls());
|
||||
this.storageClients = createConnectionHolders(signalServiceConfiguration.getSignalStorageUrls());
|
||||
this.attachmentClient = createAttachmentClient();
|
||||
this.serviceClients = createServiceConnectionHolders(signalServiceConfiguration.getSignalServiceUrls(), signalServiceConfiguration.getNetworkInterceptors());
|
||||
this.cdnClients = createConnectionHolders(signalServiceConfiguration.getSignalCdnUrls(), signalServiceConfiguration.getNetworkInterceptors());
|
||||
this.contactDiscoveryClients = createConnectionHolders(signalServiceConfiguration.getSignalContactDiscoveryUrls(), signalServiceConfiguration.getNetworkInterceptors());
|
||||
this.keyBackupServiceClients = createConnectionHolders(signalServiceConfiguration.getSignalKeyBackupServiceUrls(), signalServiceConfiguration.getNetworkInterceptors());
|
||||
this.storageClients = createConnectionHolders(signalServiceConfiguration.getSignalStorageUrls(), signalServiceConfiguration.getNetworkInterceptors());
|
||||
this.random = new SecureRandom();
|
||||
}
|
||||
|
||||
@@ -1246,62 +1245,49 @@ public class PushServiceSocket {
|
||||
throw new NonSuccessfulResponseCodeException("Response: " + response);
|
||||
}
|
||||
|
||||
private ServiceConnectionHolder[] createServiceConnectionHolders(SignalUrl[] urls) {
|
||||
private ServiceConnectionHolder[] createServiceConnectionHolders(SignalUrl[] urls, List<Interceptor> interceptors) {
|
||||
List<ServiceConnectionHolder> serviceConnectionHolders = new LinkedList<>();
|
||||
|
||||
for (SignalUrl url : urls) {
|
||||
serviceConnectionHolders.add(new ServiceConnectionHolder(createConnectionClient(url),
|
||||
createConnectionClient(url),
|
||||
serviceConnectionHolders.add(new ServiceConnectionHolder(createConnectionClient(url, interceptors),
|
||||
createConnectionClient(url, interceptors),
|
||||
url.getUrl(), url.getHostHeader()));
|
||||
}
|
||||
|
||||
return serviceConnectionHolders.toArray(new ServiceConnectionHolder[0]);
|
||||
}
|
||||
|
||||
private ConnectionHolder[] createConnectionHolders(SignalUrl[] urls) {
|
||||
private ConnectionHolder[] createConnectionHolders(SignalUrl[] urls, List<Interceptor> interceptors) {
|
||||
List<ConnectionHolder> connectionHolders = new LinkedList<>();
|
||||
|
||||
for (SignalUrl url : urls) {
|
||||
connectionHolders.add(new ConnectionHolder(createConnectionClient(url), url.getUrl(), url.getHostHeader()));
|
||||
connectionHolders.add(new ConnectionHolder(createConnectionClient(url, interceptors), url.getUrl(), url.getHostHeader()));
|
||||
}
|
||||
|
||||
return connectionHolders.toArray(new ConnectionHolder[0]);
|
||||
}
|
||||
|
||||
private OkHttpClient createConnectionClient(SignalUrl url) {
|
||||
private OkHttpClient createConnectionClient(SignalUrl url, List<Interceptor> interceptors) {
|
||||
try {
|
||||
TrustManager[] trustManagers = BlacklistingTrustManager.createFor(url.getTrustStore());
|
||||
|
||||
SSLContext context = SSLContext.getInstance("TLS");
|
||||
context.init(null, trustManagers, null);
|
||||
|
||||
return new OkHttpClient.Builder()
|
||||
.sslSocketFactory(new Tls12SocketFactory(context.getSocketFactory()), (X509TrustManager)trustManagers[0])
|
||||
.connectionSpecs(url.getConnectionSpecs().or(Util.immutableList(ConnectionSpec.RESTRICTED_TLS)))
|
||||
.build();
|
||||
OkHttpClient.Builder builder = new OkHttpClient.Builder()
|
||||
.sslSocketFactory(new Tls12SocketFactory(context.getSocketFactory()), (X509TrustManager)trustManagers[0])
|
||||
.connectionSpecs(url.getConnectionSpecs().or(Util.immutableList(ConnectionSpec.RESTRICTED_TLS)));
|
||||
|
||||
for (Interceptor interceptor : interceptors) {
|
||||
builder.addInterceptor(interceptor);
|
||||
}
|
||||
|
||||
return builder.build();
|
||||
} catch (NoSuchAlgorithmException | KeyManagementException e) {
|
||||
throw new AssertionError(e);
|
||||
}
|
||||
}
|
||||
|
||||
private OkHttpClient createAttachmentClient() {
|
||||
try {
|
||||
SSLContext context = SSLContext.getInstance("TLS");
|
||||
context.init(null, null, null);
|
||||
|
||||
TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
|
||||
trustManagerFactory.init((KeyStore)null);
|
||||
|
||||
return new OkHttpClient.Builder()
|
||||
.sslSocketFactory(new Tls12SocketFactory(context.getSocketFactory()),
|
||||
(X509TrustManager)trustManagerFactory.getTrustManagers()[0])
|
||||
.connectionSpecs(Util.immutableList(ConnectionSpec.RESTRICTED_TLS))
|
||||
.build();
|
||||
} catch (NoSuchAlgorithmException | KeyManagementException | KeyStoreException e) {
|
||||
throw new AssertionError(e);
|
||||
}
|
||||
}
|
||||
|
||||
private String getAuthorizationHeader(CredentialsProvider credentialsProvider) {
|
||||
try {
|
||||
String identifier = credentialsProvider.getUuid() != null ? credentialsProvider.getUuid().toString() : credentialsProvider.getE164();
|
||||
@@ -1364,23 +1350,6 @@ public class PushServiceSocket {
|
||||
private AuthCredentials backupCredentials;
|
||||
}
|
||||
|
||||
private static class AttachmentDescriptor {
|
||||
@JsonProperty
|
||||
private long id;
|
||||
|
||||
@JsonProperty
|
||||
private String location;
|
||||
|
||||
public long getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public String getLocation() {
|
||||
return location;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private static class ConnectionHolder {
|
||||
|
||||
private final OkHttpClient client;
|
||||
|
||||
@@ -20,6 +20,7 @@ import java.security.NoSuchAlgorithmException;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.Future;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
@@ -32,6 +33,7 @@ import javax.net.ssl.TrustManager;
|
||||
import javax.net.ssl.X509TrustManager;
|
||||
|
||||
import okhttp3.ConnectionSpec;
|
||||
import okhttp3.Interceptor;
|
||||
import okhttp3.OkHttpClient;
|
||||
import okhttp3.Request;
|
||||
import okhttp3.Response;
|
||||
@@ -57,6 +59,7 @@ public class WebSocketConnection extends WebSocketListener {
|
||||
private final String signalAgent;
|
||||
private final ConnectivityListener listener;
|
||||
private final SleepTimer sleepTimer;
|
||||
private final List<Interceptor> interceptors;
|
||||
|
||||
private WebSocket client;
|
||||
private KeepAliveSender keepAliveSender;
|
||||
@@ -68,13 +71,15 @@ public class WebSocketConnection extends WebSocketListener {
|
||||
Optional<CredentialsProvider> credentialsProvider,
|
||||
String signalAgent,
|
||||
ConnectivityListener listener,
|
||||
SleepTimer timer)
|
||||
SleepTimer timer,
|
||||
List<Interceptor> interceptors)
|
||||
{
|
||||
this.trustStore = trustStore;
|
||||
this.credentialsProvider = credentialsProvider;
|
||||
this.signalAgent = signalAgent;
|
||||
this.listener = listener;
|
||||
this.sleepTimer = timer;
|
||||
this.interceptors = interceptors;
|
||||
this.attempts = 0;
|
||||
this.connected = false;
|
||||
|
||||
@@ -99,12 +104,17 @@ public class WebSocketConnection extends WebSocketListener {
|
||||
|
||||
Pair<SSLSocketFactory, X509TrustManager> socketFactory = createTlsSocketFactory(trustStore);
|
||||
|
||||
OkHttpClient okHttpClient = new OkHttpClient.Builder()
|
||||
.sslSocketFactory(new Tls12SocketFactory(socketFactory.first()), socketFactory.second())
|
||||
.connectionSpecs(Util.immutableList(ConnectionSpec.RESTRICTED_TLS))
|
||||
.readTimeout(KEEPALIVE_TIMEOUT_SECONDS + 10, TimeUnit.SECONDS)
|
||||
.connectTimeout(KEEPALIVE_TIMEOUT_SECONDS + 10, TimeUnit.SECONDS)
|
||||
.build();
|
||||
OkHttpClient.Builder clientBuilder = new OkHttpClient.Builder()
|
||||
.sslSocketFactory(new Tls12SocketFactory(socketFactory.first()), socketFactory.second())
|
||||
.connectionSpecs(Util.immutableList(ConnectionSpec.RESTRICTED_TLS))
|
||||
.readTimeout(KEEPALIVE_TIMEOUT_SECONDS + 10, TimeUnit.SECONDS)
|
||||
.connectTimeout(KEEPALIVE_TIMEOUT_SECONDS + 10, TimeUnit.SECONDS);
|
||||
|
||||
for (Interceptor interceptor : interceptors) {
|
||||
clientBuilder.addInterceptor(interceptor);
|
||||
}
|
||||
|
||||
OkHttpClient okHttpClient = clientBuilder.build();
|
||||
|
||||
Request.Builder requestBuilder = new Request.Builder().url(filledUri);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user