From 749c166b10a0b7942cff1e7d0463f40d17b6d37a Mon Sep 17 00:00:00 2001 From: xiphon Date: Thu, 30 Jul 2020 21:26:40 +0000 Subject: [PATCH] main: socks5 proxy support --- components/UpdateDialog.qml | 1 + main.qml | 43 ++++++++++++++++++++++++++++--- pages/settings/SettingsLayout.qml | 29 +++++++++++++++++++++ 3 files changed, 70 insertions(+), 3 deletions(-) diff --git a/components/UpdateDialog.qml b/components/UpdateDialog.qml index 5fbef79e..a5f4ed97 100644 --- a/components/UpdateDialog.qml +++ b/components/UpdateDialog.qml @@ -199,5 +199,6 @@ Popup { Downloader { id: downloader + proxyAddress: persistentSettings.getProxyAddress() } } diff --git a/main.qml b/main.qml index c1d88d49..9e8e1a84 100644 --- a/main.qml +++ b/main.qml @@ -365,6 +365,7 @@ ApplicationWindow { currentWallet.deviceButtonPressed.connect(onDeviceButtonPressed); currentWallet.walletPassphraseNeeded.connect(onWalletPassphraseNeededWallet); currentWallet.transactionCommitted.connect(onTransactionCommitted); + currentWallet.proxyAddress = Qt.binding(persistentSettings.getWalletProxyAddress); middlePanel.paymentClicked.connect(handlePayment); middlePanel.sweepUnmixableClicked.connect(handleSweepUnmixable); middlePanel.getProofClicked.connect(handleGetProof); @@ -389,7 +390,9 @@ ApplicationWindow { 0, persistentSettings.is_recovering, persistentSettings.is_recovering_from_device, - persistentSettings.restore_height); + persistentSettings.restore_height, + persistentSettings.getWalletProxyAddress()); + // save wallet keys in case wallet settings have been changed in the init currentWallet.setPassword(walletPassword); } @@ -607,7 +610,14 @@ ApplicationWindow { const callback = function() { persistentSettings.useRemoteNode = true; currentDaemonAddress = persistentSettings.remoteNodeAddress; - currentWallet.initAsync(currentDaemonAddress, isTrustedDaemon()); + currentWallet.initAsync( + currentDaemonAddress, + isTrustedDaemon(), + 0, + false, + false, + 0, + persistentSettings.getWalletProxyAddress()); walletManager.setDaemonAddressAsync(currentDaemonAddress); }; @@ -625,7 +635,14 @@ ApplicationWindow { console.log("disconnecting remote node"); persistentSettings.useRemoteNode = false; currentDaemonAddress = localDaemonAddress - currentWallet.initAsync(currentDaemonAddress, isTrustedDaemon()); + currentWallet.initAsync( + currentDaemonAddress, + isTrustedDaemon(), + 0, + false, + false, + 0, + persistentSettings.getWalletProxyAddress()); walletManager.setDaemonAddressAsync(currentDaemonAddress); firstBlockSeen = 0; } @@ -1403,6 +1420,24 @@ ApplicationWindow { property string fiatPriceProvider: "kraken" property string fiatPriceCurrency: "xmrusd" + property string proxyAddress: "127.0.0.1:9050" + property bool proxyEnabled: false + function getProxyAddress() { + if (!proxyEnabled) { + return ""; + } + if (proxyAddress == "") { + return "127.0.0.1:0"; + } + return proxyAddress; + } + function getWalletProxyAddress() { + if (!useRemoteNode) { + return ""; + } + return getProxyAddress(); + } + Component.onCompleted: { MoneroComponents.Style.blackTheme = persistentSettings.blackTheme } @@ -2240,9 +2275,11 @@ ApplicationWindow { Network { id: network + proxyAddress: persistentSettings.getProxyAddress() } WalletManager { id: walletManager + proxyAddress: persistentSettings.getProxyAddress() } } diff --git a/pages/settings/SettingsLayout.qml b/pages/settings/SettingsLayout.qml index 22b9ec52..f65b3747 100644 --- a/pages/settings/SettingsLayout.qml +++ b/pages/settings/SettingsLayout.qml @@ -251,6 +251,35 @@ Rectangle { } } + MoneroComponents.CheckBox { + id: proxyCheckbox + Layout.topMargin: 6 + checked: persistentSettings.proxyEnabled + onClicked: { + persistentSettings.proxyEnabled = !persistentSettings.proxyEnabled; + } + text: qsTr("Socks5 proxy (%1%2)") + .arg(appWindow.walletMode >= 2 ? qsTr("remote node connections, ") : "") + .arg(qsTr("updates downloading, fetching price sources")) + translationManager.emptyString + } + + MoneroComponents.RemoteNodeEdit { + id: proxyEdit + Layout.leftMargin: 36 + Layout.topMargin: 6 + Layout.minimumWidth: 100 + placeholderFontSize: 15 + visible: persistentSettings.proxyEnabled + + daemonAddrLabelText: qsTr("IP address") + translationManager.emptyString + daemonPortLabelText: qsTr("Port") + translationManager.emptyString + + initialAddress: persistentSettings.proxyAddress + onEditingFinished: { + persistentSettings.proxyAddress = proxyEdit.getAddress(); + } + } + MoneroComponents.StandardButton { visible: !persistentSettings.customDecorations Layout.topMargin: 10