disable tor for private ip addresses to fix #1026

This commit is contained in:
woodser 2024-06-22 09:01:52 -04:00
parent 4819e5ebfa
commit 4494af8bc0
6 changed files with 41 additions and 20 deletions

View file

@ -253,12 +253,12 @@ public final class XmrConnectionService {
connectionList.setAutoSwitch(autoSwitch); connectionList.setAutoSwitch(autoSwitch);
} }
public boolean isConnectionLocal() { public boolean isConnectionLocalHost() {
return isConnectionLocal(getConnection()); return isConnectionLocalHost(getConnection());
} }
public boolean isConnectionTor() { public boolean isProxyApplied() {
return useTorProxy(getConnection()); return isProxyApplied(getConnection());
} }
public long getRefreshPeriodMs() { public long getRefreshPeriodMs() {
@ -328,26 +328,26 @@ public final class XmrConnectionService {
downloadListener.doneDownload(); downloadListener.doneDownload();
} }
private boolean isConnectionLocal(MoneroRpcConnection connection) { private boolean isConnectionLocalHost(MoneroRpcConnection connection) {
return connection != null && HavenoUtils.isLocalHost(connection.getUri()); return connection != null && HavenoUtils.isLocalHost(connection.getUri());
} }
private long getDefaultRefreshPeriodMs() { private long getDefaultRefreshPeriodMs() {
MoneroRpcConnection connection = getConnection(); MoneroRpcConnection connection = getConnection();
if (connection == null) return XmrLocalNode.REFRESH_PERIOD_LOCAL_MS; if (connection == null) return XmrLocalNode.REFRESH_PERIOD_LOCAL_MS;
if (isConnectionLocal(connection)) { if (isConnectionLocalHost(connection)) {
if (lastInfo != null && (lastInfo.isBusySyncing() || (lastInfo.getHeightWithoutBootstrap() != null && lastInfo.getHeightWithoutBootstrap() > 0 && lastInfo.getHeightWithoutBootstrap() < lastInfo.getHeight()))) return REFRESH_PERIOD_HTTP_MS; // refresh slower if syncing or bootstrapped if (lastInfo != null && (lastInfo.isBusySyncing() || (lastInfo.getHeightWithoutBootstrap() != null && lastInfo.getHeightWithoutBootstrap() > 0 && lastInfo.getHeightWithoutBootstrap() < lastInfo.getHeight()))) return REFRESH_PERIOD_HTTP_MS; // refresh slower if syncing or bootstrapped
else return XmrLocalNode.REFRESH_PERIOD_LOCAL_MS; // TODO: announce faster refresh after done syncing else return XmrLocalNode.REFRESH_PERIOD_LOCAL_MS; // TODO: announce faster refresh after done syncing
} else if (useTorProxy(connection)) { } else if (isProxyApplied(connection)) {
return REFRESH_PERIOD_ONION_MS; return REFRESH_PERIOD_ONION_MS;
} else { } else {
return REFRESH_PERIOD_HTTP_MS; return REFRESH_PERIOD_HTTP_MS;
} }
} }
private boolean useTorProxy(MoneroRpcConnection connection) { private boolean isProxyApplied(MoneroRpcConnection connection) {
if (connection == null) return false; if (connection == null) return false;
return connection.isOnion() || (preferences.getUseTorForXmr().isUseTorForXmr() && !HavenoUtils.isLocalHost(connection.getUri())); return connection.isOnion() || (preferences.getUseTorForXmr().isUseTorForXmr() && !HavenoUtils.isPrivateIp(connection.getUri()));
} }
private void initialize() { private void initialize() {
@ -475,7 +475,7 @@ public final class XmrConnectionService {
// set connection proxies // set connection proxies
log.info("TOR proxy URI: " + getProxyUri()); log.info("TOR proxy URI: " + getProxyUri());
for (MoneroRpcConnection connection : connectionManager.getConnections()) { for (MoneroRpcConnection connection : connectionManager.getConnections()) {
if (useTorProxy(connection)) connection.setProxyUri(getProxyUri()); if (isProxyApplied(connection)) connection.setProxyUri(getProxyUri());
} }
// restore auto switch // restore auto switch
@ -495,7 +495,7 @@ public final class XmrConnectionService {
// set connection from startup argument if given // set connection from startup argument if given
connectionManager.setAutoSwitch(false); connectionManager.setAutoSwitch(false);
MoneroRpcConnection connection = new MoneroRpcConnection(config.xmrNode, config.xmrNodeUsername, config.xmrNodePassword).setPriority(1); MoneroRpcConnection connection = new MoneroRpcConnection(config.xmrNode, config.xmrNodeUsername, config.xmrNodePassword).setPriority(1);
if (useTorProxy(connection)) connection.setProxyUri(getProxyUri()); if (isProxyApplied(connection)) connection.setProxyUri(getProxyUri());
connectionManager.setConnection(connection); connectionManager.setConnection(connection);
// start local node if applicable // start local node if applicable

View file

@ -268,9 +268,9 @@ public class WalletAppSetup {
private String getXmrDaemonNetworkAsString() { private String getXmrDaemonNetworkAsString() {
String postFix; String postFix;
if (xmrConnectionService.isConnectionLocal()) if (xmrConnectionService.isConnectionLocalHost())
postFix = " " + Res.get("mainView.footer.localhostMoneroNode"); postFix = " " + Res.get("mainView.footer.localhostMoneroNode");
else if (xmrConnectionService.isConnectionTor()) else if (xmrConnectionService.isProxyApplied())
postFix = " " + Res.get("mainView.footer.usingTor"); postFix = " " + Res.get("mainView.footer.usingTor");
else else
postFix = ""; postFix = "";
@ -279,7 +279,7 @@ public class WalletAppSetup {
private String getXmrWalletNetworkAsString() { private String getXmrWalletNetworkAsString() {
String postFix; String postFix;
if (xmrConnectionService.isConnectionLocal()) if (xmrConnectionService.isConnectionLocalHost())
postFix = " " + Res.get("mainView.footer.localhostMoneroNode"); postFix = " " + Res.get("mainView.footer.localhostMoneroNode");
else if (xmrWalletService.isProxyApplied()) else if (xmrWalletService.isProxyApplied())
postFix = " " + Res.get("mainView.footer.usingTor"); postFix = " " + Res.get("mainView.footer.usingTor");

View file

@ -293,7 +293,7 @@ public class OfferBookService {
} }
private long getKeyImageRefreshPeriodMs() { private long getKeyImageRefreshPeriodMs() {
return xmrConnectionService.isConnectionLocal() ? KEY_IMAGE_REFRESH_PERIOD_MS_LOCAL : KEY_IMAGE_REFRESH_PERIOD_MS_REMOTE; return xmrConnectionService.isConnectionLocalHost() ? KEY_IMAGE_REFRESH_PERIOD_MS_LOCAL : KEY_IMAGE_REFRESH_PERIOD_MS_REMOTE;
} }
private void updateAffectedOffers(String keyImage) { private void updateAffectedOffers(String keyImage) {

View file

@ -288,7 +288,7 @@ public class OpenOfferManager implements PeerManager.Listener, DecryptedDirectMe
} }
private long getKeyImageRefreshPeriodMs() { private long getKeyImageRefreshPeriodMs() {
return xmrConnectionService.isConnectionLocal() ? KEY_IMAGE_REFRESH_PERIOD_MS_LOCAL : KEY_IMAGE_REFRESH_PERIOD_MS_REMOTE; return xmrConnectionService.isConnectionLocalHost() ? KEY_IMAGE_REFRESH_PERIOD_MS_LOCAL : KEY_IMAGE_REFRESH_PERIOD_MS_REMOTE;
} }
public void onAllServicesInitialized() { public void onAllServicesInitialized() {

View file

@ -40,6 +40,7 @@ import haveno.core.xmr.wallet.XmrWalletService;
import haveno.network.p2p.NodeAddress; import haveno.network.p2p.NodeAddress;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.BigInteger; import java.math.BigInteger;
import java.net.InetAddress;
import java.net.URI; import java.net.URI;
import java.security.PrivateKey; import java.security.PrivateKey;
import java.text.DecimalFormat; import java.text.DecimalFormat;
@ -418,12 +419,32 @@ public class HavenoUtils {
/** /**
* Check if the given URI is on local host. * Check if the given URI is on local host.
*/ */
public static boolean isLocalHost(String uri) { public static boolean isLocalHost(String uriString) {
try { try {
String host = new URI(uri).getHost(); String host = new URI(uriString).getHost();
return LOOPBACK_HOST.equals(host) || LOCALHOST.equals(host); return LOOPBACK_HOST.equals(host) || LOCALHOST.equals(host);
} catch (Exception e) { } catch (Exception e) {
throw new RuntimeException(e); return false;
}
}
/**
* Check if the given URI is local or a private IP address.
*/
public static boolean isPrivateIp(String uriString) {
if (isLocalHost(uriString)) return true;
try {
// get the host
URI uri = new URI(uriString);
String host = uri.getHost();
// check if private IP address
if (host == null) return false;
InetAddress inetAddress = InetAddress.getByName(host);
return inetAddress.isAnyLocalAddress() || inetAddress.isLoopbackAddress() || inetAddress.isSiteLocalAddress();
} catch (Exception e) {
return false;
} }
} }

View file

@ -322,7 +322,7 @@ public class XmrWalletService {
} }
public boolean isProxyApplied(boolean wasWalletSynced) { public boolean isProxyApplied(boolean wasWalletSynced) {
return preferences.isProxyApplied(wasWalletSynced); return preferences.isProxyApplied(wasWalletSynced) && xmrConnectionService.isProxyApplied();
} }
public String getWalletPassword() { public String getWalletPassword() {