Support proxy in connections managed by libsignal.

This commit is contained in:
moiseev-signal
2024-04-29 14:57:01 -07:00
committed by Greyson Parrelli
parent d20f588802
commit f9a8f447d2
6 changed files with 58 additions and 17 deletions

View File

@@ -87,6 +87,7 @@ import org.whispersystems.signalservice.internal.util.StaticCredentialsProvider;
import org.whispersystems.signalservice.internal.util.Util;
import org.whispersystems.signalservice.internal.websocket.DefaultResponseMapper;
import org.signal.core.util.Base64;
import org.whispersystems.signalservice.internal.websocket.LibSignalNetwork;
import java.io.IOException;
import java.security.MessageDigest;
@@ -369,7 +370,7 @@ public class SignalServiceAccountManager {
Optional<byte[]> token,
String mrEnclave,
Long timeoutMs,
@Nullable Network libsignalNetwork,
@Nullable LibSignalNetwork libsignalNetwork,
Consumer<byte[]> tokenSaver)
throws IOException
{

View File

@@ -19,6 +19,7 @@ import org.whispersystems.signalservice.api.push.exceptions.NonSuccessfulRespons
import org.whispersystems.signalservice.api.util.UuidUtil;
import org.whispersystems.signalservice.internal.ServiceResponse;
import org.whispersystems.signalservice.internal.configuration.SignalServiceConfiguration;
import org.whispersystems.signalservice.internal.websocket.LibSignalNetwork;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
@@ -55,7 +56,7 @@ public final class CdsiV2Service {
private final CdsiRequestHandler cdsiRequestHandler;
public CdsiV2Service(SignalServiceConfiguration configuration, String mrEnclave, @Nullable Network network) {
public CdsiV2Service(SignalServiceConfiguration configuration, String mrEnclave, @Nullable LibSignalNetwork network) {
if (network != null) {
this.cdsiRequestHandler = (username, password, request, tokenSaver) -> {

View File

@@ -5,14 +5,27 @@
package org.whispersystems.signalservice.internal.websocket
import org.signal.core.util.orNull
import org.signal.libsignal.internal.CompletableFuture
import org.signal.libsignal.net.CdsiLookupRequest
import org.signal.libsignal.net.CdsiLookupResponse
import org.signal.libsignal.net.ChatService
import org.signal.libsignal.net.Network
import org.whispersystems.signalservice.api.util.CredentialsProvider
import org.whispersystems.signalservice.internal.configuration.SignalProxy
import org.whispersystems.signalservice.internal.configuration.SignalServiceConfiguration
import java.io.IOException
import java.util.concurrent.ExecutionException
import java.util.function.Consumer
/**
* Makes Network API more ergonomic to use with Android client types
*/
class LibSignalNetwork(private val inner: Network) {
class LibSignalNetwork(private val inner: Network, config: SignalServiceConfiguration) {
init {
resetSettings(config)
}
fun createChatService(
credentialsProvider: CredentialsProvider? = null
): ChatService {
@@ -20,4 +33,27 @@ class LibSignalNetwork(private val inner: Network) {
val password = credentialsProvider?.password ?: ""
return inner.createChatService(username, password)
}
fun resetSettings(config: SignalServiceConfiguration) {
resetProxy(config.signalProxy.orNull())
}
private fun resetProxy(proxy: SignalProxy?) {
if (proxy == null) {
inner.clearProxy()
} else {
inner.setProxy(proxy.host, proxy.port)
}
}
// Delegates
@Throws(IOException::class, InterruptedException::class, ExecutionException::class)
fun cdsiLookup(
username: String?,
password: String?,
request: CdsiLookupRequest?,
tokenConsumer: Consumer<ByteArray?>
): CompletableFuture<CdsiLookupResponse?>? {
return inner.cdsiLookup(username, password, request, tokenConsumer)
}
}