From 4c0919d26bb445b2532c8a4060b5b36f4970ee07 Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Tue, 24 Dec 2024 11:21:13 +0100 Subject: [PATCH] trim hostname before connecting via tor --- .../siacs/conversations/entities/Account.java | 33 +++++++++---------- .../conversations/xmpp/XmppConnection.java | 23 +++++-------- 2 files changed, 25 insertions(+), 31 deletions(-) diff --git a/src/main/java/eu/siacs/conversations/entities/Account.java b/src/main/java/eu/siacs/conversations/entities/Account.java index 3146abe466d1b27bf525c2584f7c87cf6bfab64f..b667428e0b72657a696eacb9d4a4edf049ed2f9f 100644 --- a/src/main/java/eu/siacs/conversations/entities/Account.java +++ b/src/main/java/eu/siacs/conversations/entities/Account.java @@ -4,22 +4,9 @@ import android.content.ContentValues; import android.database.Cursor; import android.os.SystemClock; import android.util.Log; - +import androidx.annotation.NonNull; import com.google.common.base.Strings; import com.google.common.collect.ImmutableList; - -import org.json.JSONException; -import org.json.JSONObject; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.concurrent.CopyOnWriteArraySet; - import eu.siacs.conversations.Config; import eu.siacs.conversations.R; import eu.siacs.conversations.crypto.PgpDecryptionService; @@ -38,6 +25,16 @@ import eu.siacs.conversations.utils.XmppUri; import eu.siacs.conversations.xmpp.Jid; import eu.siacs.conversations.xmpp.XmppConnection; import eu.siacs.conversations.xmpp.jingle.RtpCapability; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.CopyOnWriteArraySet; +import org.json.JSONException; +import org.json.JSONObject; public class Account extends AbstractEntity implements AvatarService.Avatarable { @@ -306,11 +303,12 @@ public class Account extends AbstractEntity implements AvatarService.Avatarable this.password = password; } + @NonNull public String getHostname() { return Strings.nullToEmpty(this.hostname); } - public void setHostname(String hostname) { + public void setHostname(final String hostname) { this.hostname = hostname; } @@ -398,7 +396,8 @@ public class Account extends AbstractEntity implements AvatarService.Avatarable } public HashedToken getFastMechanism() { - final HashedToken.Mechanism fastMechanism = HashedToken.Mechanism.ofOrNull(this.fastMechanism); + final HashedToken.Mechanism fastMechanism = + HashedToken.Mechanism.ofOrNull(this.fastMechanism); final String token = this.fastToken; if (fastMechanism == null || Strings.isNullOrEmpty(token)) { return null; @@ -775,7 +774,7 @@ public class Account extends AbstractEntity implements AvatarService.Avatarable public enum State { DISABLED(false, false), - LOGGED_OUT(false,false), + LOGGED_OUT(false, false), OFFLINE(false), CONNECTING(false), ONLINE(false), diff --git a/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java b/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java index bd96bb96ce58c282ab30099699568759b03b935f..8c6cc0e800587251bfb55d9bfbcd4acad7565d67 100644 --- a/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java +++ b/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java @@ -303,6 +303,7 @@ public class XmppConnection implements Runnable { // TODO collapse Tor usage into normal connection code path if (useTor) { final var seeOtherHost = this.seeOtherHostResolverResult; + final var hostname = account.getHostname(); final Resolver.Result resume = streamId == null ? null : streamId.location; final Resolver.Result viaTor; if (account.isOnion()) { @@ -315,7 +316,7 @@ public class XmppConnection implements Runnable { viaTor = resume; } else if (seeOtherHost != null) { viaTor = seeOtherHost; - } else if (account.getHostname().isEmpty()) { + } else if (hostname.isEmpty()) { viaTor = Iterables.getOnlyElement( Resolver.fromHardCoded( @@ -323,18 +324,12 @@ public class XmppConnection implements Runnable { } else { viaTor = Iterables.getOnlyElement( - Resolver.fromHardCoded( - account.getHostname(), account.getPort())); - this.verifiedHostname = account.getHostname(); + Resolver.fromHardCoded(hostname, account.getPort())); + this.verifiedHostname = hostname; } - Log.d( - Config.LOGTAG, - account.getJid().asBareJid() - + ": connect to " - + viaTor.asDestination() - + " via Tor. directTls=" - + viaTor.isDirectTls()); + Log.d(Config.LOGTAG, account.getJid().asBareJid() + " via Tor: " + viaTor); + localSocket = SocksSocketFactory.createSocketOverTor( viaTor.asDestination(), viaTor.getPort()); @@ -359,12 +354,12 @@ public class XmppConnection implements Runnable { throw new IOException("Could not start stream", e); } } else { + final var hostname = account.getHostname().trim(); final String domain = account.getServer(); final List results = new ArrayList<>(); - final boolean hardcoded = extended && !account.getHostname().isEmpty(); + final boolean hardcoded = extended && !hostname.isEmpty(); if (hardcoded) { - results.addAll( - Resolver.fromHardCoded(account.getHostname(), account.getPort())); + results.addAll(Resolver.fromHardCoded(hostname, account.getPort())); } else { results.addAll(Resolver.resolve(domain)); }