From 6704db21fb4e63be2f19de0f06a8af77b9a8bf22 Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Thu, 25 Apr 2019 21:10:50 +0200 Subject: [PATCH] added Tor support to channel search --- .../services/ChannelDiscoveryService.java | 26 ++++++++++++++++--- .../services/XmppConnectionService.java | 5 ++++ .../conversations/ui/SettingsActivity.java | 1 + 3 files changed, 28 insertions(+), 4 deletions(-) diff --git a/src/main/java/eu/siacs/conversations/services/ChannelDiscoveryService.java b/src/main/java/eu/siacs/conversations/services/ChannelDiscoveryService.java index 1c7c6883e..306f8e189 100644 --- a/src/main/java/eu/siacs/conversations/services/ChannelDiscoveryService.java +++ b/src/main/java/eu/siacs/conversations/services/ChannelDiscoveryService.java @@ -7,12 +7,16 @@ import com.google.common.cache.CacheBuilder; import com.google.common.cache.CacheLoader; import com.google.common.cache.LoadingCache; +import java.io.IOException; +import java.util.Collections; import java.util.List; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; import eu.siacs.conversations.Config; +import eu.siacs.conversations.http.HttpConnectionManager; import eu.siacs.conversations.http.services.MuclumbusService; +import okhttp3.OkHttpClient; import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; @@ -24,19 +28,31 @@ public class ChannelDiscoveryService { private final XmppConnectionService service; - private final MuclumbusService muclumbusService; + private MuclumbusService muclumbusService; private final Cache> cache; public ChannelDiscoveryService(XmppConnectionService service) { this.service = service; + this.cache = CacheBuilder.newBuilder().expireAfterWrite(5, TimeUnit.MINUTES).build(); + } + + public void initializeMuclumbusService() { + OkHttpClient.Builder builder = new OkHttpClient.Builder(); + if (service.useTorToConnect()) { + try { + builder.proxy(HttpConnectionManager.getProxy()); + } catch (IOException e) { + throw new RuntimeException("Unable to use Tor proxy", e); + } + } Retrofit retrofit = new Retrofit.Builder() + .client(builder.build()) .baseUrl(Config.CHANNEL_DISCOVERY) .addConverterFactory(GsonConverterFactory.create()) .callbackExecutor(Executors.newSingleThreadExecutor()) .build(); this.muclumbusService = retrofit.create(MuclumbusService.class); - this.cache = CacheBuilder.newBuilder().expireAfterWrite(5, TimeUnit.MINUTES).build(); } public void discover(String query, OnChannelSearchResultsFound onChannelSearchResultsFound) { @@ -70,7 +86,8 @@ public class ChannelDiscoveryService { @Override public void onFailure(Call call, Throwable throwable) { - + Log.d(Config.LOGTAG, "Unable to query muclumbus on "+Config.CHANNEL_DISCOVERY, throwable); + listener.onChannelSearchResultsFound(Collections.emptyList()); } }); } catch (Exception e) { @@ -95,7 +112,8 @@ public class ChannelDiscoveryService { @Override public void onFailure(Call call, Throwable throwable) { - throwable.printStackTrace(); + Log.d(Config.LOGTAG, "Unable to query muclumbus on "+Config.CHANNEL_DISCOVERY, throwable); + listener.onChannelSearchResultsFound(Collections.emptyList()); } }); } diff --git a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java index 575cac60e..370748b5c 100644 --- a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java +++ b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java @@ -805,6 +805,10 @@ public class XmppConnectionService extends Service { return pingNow; } + public void reinitializeMuclumbusService() { + mChannelDiscoveryService.initializeMuclumbusService(); + } + public void discoverChannels(String query, ChannelDiscoveryService.OnChannelSearchResultsFound onChannelSearchResultsFound) { mChannelDiscoveryService.discover(query, onChannelSearchResultsFound); } @@ -992,6 +996,7 @@ public class XmppConnectionService extends Service { if (Compatibility.runsTwentySix()) { mNotificationService.initializeChannels(); } + mChannelDiscoveryService.initializeMuclumbusService(); mForceDuringOnCreate.set(Compatibility.runsAndTargetsTwentySix(this)); toggleForegroundService(); this.destroyed = false; diff --git a/src/main/java/eu/siacs/conversations/ui/SettingsActivity.java b/src/main/java/eu/siacs/conversations/ui/SettingsActivity.java index 73d7bd38a..99560801f 100644 --- a/src/main/java/eu/siacs/conversations/ui/SettingsActivity.java +++ b/src/main/java/eu/siacs/conversations/ui/SettingsActivity.java @@ -384,6 +384,7 @@ public class SettingsActivity extends XmppActivity implements reconnectAccounts(); } else if (name.equals("use_tor")) { reconnectAccounts(); + xmppConnectionService.reinitializeMuclumbusService(); } else if (name.equals(AUTOMATIC_MESSAGE_DELETION)) { xmppConnectionService.expireOldMessages(true); } else if (name.equals(THEME)) {