mirror of
https://github.com/bisq-network/bisq.git
synced 2025-03-03 18:56:59 +01:00
use program arguments instead of system properties
This commit is contained in:
parent
5ab801cad2
commit
7b98445eb9
7 changed files with 61 additions and 22 deletions
|
@ -193,6 +193,7 @@ public class BisqEnvironment extends StandardEnvironment {
|
||||||
protected final String btcNodes, seedNodes, ignoreDevMsg, useDevPrivilegeKeys, useDevMode, useTorForBtc, rpcUser, rpcPassword,
|
protected final String btcNodes, seedNodes, ignoreDevMsg, useDevPrivilegeKeys, useDevMode, useTorForBtc, rpcUser, rpcPassword,
|
||||||
rpcPort, rpcBlockNotificationPort, dumpBlockchainData, fullDaoNode,
|
rpcPort, rpcBlockNotificationPort, dumpBlockchainData, fullDaoNode,
|
||||||
myAddress, banList, dumpStatistics, maxMemory, socks5ProxyBtcAddress,
|
myAddress, banList, dumpStatistics, maxMemory, socks5ProxyBtcAddress,
|
||||||
|
torRcFile, torRcOptions,
|
||||||
socks5ProxyHttpAddress, useAllProvidedNodes, numConnectionForBtc, genesisTxId, genesisBlockHeight, referralId, daoActivated;
|
socks5ProxyHttpAddress, useAllProvidedNodes, numConnectionForBtc, genesisTxId, genesisBlockHeight, referralId, daoActivated;
|
||||||
|
|
||||||
|
|
||||||
|
@ -267,6 +268,12 @@ public class BisqEnvironment extends StandardEnvironment {
|
||||||
socks5ProxyHttpAddress = commandLineProperties.containsProperty(NetworkOptionKeys.SOCKS_5_PROXY_HTTP_ADDRESS) ?
|
socks5ProxyHttpAddress = commandLineProperties.containsProperty(NetworkOptionKeys.SOCKS_5_PROXY_HTTP_ADDRESS) ?
|
||||||
(String) commandLineProperties.getProperty(NetworkOptionKeys.SOCKS_5_PROXY_HTTP_ADDRESS) :
|
(String) commandLineProperties.getProperty(NetworkOptionKeys.SOCKS_5_PROXY_HTTP_ADDRESS) :
|
||||||
"";
|
"";
|
||||||
|
torRcFile = commandLineProperties.containsProperty(NetworkOptionKeys.TORRC_FILE) ?
|
||||||
|
(String) commandLineProperties.getProperty(NetworkOptionKeys.TORRC_FILE) :
|
||||||
|
"";
|
||||||
|
torRcOptions = commandLineProperties.containsProperty(NetworkOptionKeys.TORRC_OPTIONS) ?
|
||||||
|
(String) commandLineProperties.getProperty(NetworkOptionKeys.TORRC_OPTIONS) :
|
||||||
|
"";
|
||||||
|
|
||||||
//RpcOptionKeys
|
//RpcOptionKeys
|
||||||
rpcUser = commandLineProperties.containsProperty(DaoOptionKeys.RPC_USER) ?
|
rpcUser = commandLineProperties.containsProperty(DaoOptionKeys.RPC_USER) ?
|
||||||
|
@ -435,6 +442,8 @@ public class BisqEnvironment extends StandardEnvironment {
|
||||||
setProperty(NetworkOptionKeys.NETWORK_ID, String.valueOf(baseCurrencyNetwork.ordinal()));
|
setProperty(NetworkOptionKeys.NETWORK_ID, String.valueOf(baseCurrencyNetwork.ordinal()));
|
||||||
setProperty(NetworkOptionKeys.SOCKS_5_PROXY_BTC_ADDRESS, socks5ProxyBtcAddress);
|
setProperty(NetworkOptionKeys.SOCKS_5_PROXY_BTC_ADDRESS, socks5ProxyBtcAddress);
|
||||||
setProperty(NetworkOptionKeys.SOCKS_5_PROXY_HTTP_ADDRESS, socks5ProxyHttpAddress);
|
setProperty(NetworkOptionKeys.SOCKS_5_PROXY_HTTP_ADDRESS, socks5ProxyHttpAddress);
|
||||||
|
setProperty(NetworkOptionKeys.TORRC_FILE, torRcFile);
|
||||||
|
setProperty(NetworkOptionKeys.TORRC_OPTIONS, torRcOptions);
|
||||||
|
|
||||||
setProperty(AppOptionKeys.APP_DATA_DIR_KEY, appDataDir);
|
setProperty(AppOptionKeys.APP_DATA_DIR_KEY, appDataDir);
|
||||||
setProperty(AppOptionKeys.DESKTOP_WITH_HTTP_API, desktopWithHttpApi);
|
setProperty(AppOptionKeys.DESKTOP_WITH_HTTP_API, desktopWithHttpApi);
|
||||||
|
|
|
@ -53,6 +53,9 @@ import org.springframework.util.StringUtils;
|
||||||
import joptsimple.OptionException;
|
import joptsimple.OptionException;
|
||||||
import joptsimple.OptionParser;
|
import joptsimple.OptionParser;
|
||||||
import joptsimple.OptionSet;
|
import joptsimple.OptionSet;
|
||||||
|
import joptsimple.util.PathConverter;
|
||||||
|
import joptsimple.util.PathProperties;
|
||||||
|
import joptsimple.util.RegexMatcher;
|
||||||
|
|
||||||
import com.google.inject.Guice;
|
import com.google.inject.Guice;
|
||||||
import com.google.inject.Injector;
|
import com.google.inject.Injector;
|
||||||
|
@ -330,6 +333,14 @@ public abstract class BisqExecutable implements GracefulShutDownHandler {
|
||||||
parser.accepts(NetworkOptionKeys.SOCKS_5_PROXY_HTTP_ADDRESS,
|
parser.accepts(NetworkOptionKeys.SOCKS_5_PROXY_HTTP_ADDRESS,
|
||||||
description("A proxy address to be used for Http requests (should be non-Tor). [host:port]", ""))
|
description("A proxy address to be used for Http requests (should be non-Tor). [host:port]", ""))
|
||||||
.withRequiredArg();
|
.withRequiredArg();
|
||||||
|
parser.accepts(NetworkOptionKeys.TORRC_FILE,
|
||||||
|
description("An existing torrc-file to be sourced for Tor. Note that torrc-entries, which are critical to Bisqs flawless operation, cannot be overwritten.", ""))
|
||||||
|
.withRequiredArg();
|
||||||
|
// .withValuesConvertedBy(new PathConverter(PathProperties.FILE_EXISTING, PathProperties.READABLE));
|
||||||
|
parser.accepts(NetworkOptionKeys.TORRC_OPTIONS,
|
||||||
|
description("A list of torrc-entries to amend to Bisqs torrc. Note that torrc-entries, which are critical to Bisqs flawless operation, cannot be overwritten. [torrc options line, torrc option, ...]", ""))
|
||||||
|
.withRequiredArg();
|
||||||
|
// .withValuesConvertedBy(RegexMatcher.regex("^([^\\s,]+\\s[^,]+,?\\s*)+$"));
|
||||||
|
|
||||||
//AppOptionKeys
|
//AppOptionKeys
|
||||||
parser.accepts(AppOptionKeys.USER_DATA_DIR_KEY,
|
parser.accepts(AppOptionKeys.USER_DATA_DIR_KEY,
|
||||||
|
|
|
@ -29,4 +29,6 @@ public class NetworkOptionKeys {
|
||||||
//SOCKS_5_PROXY_BTC_ADDRESS used in network module so dont move it to BtcOptionKeys
|
//SOCKS_5_PROXY_BTC_ADDRESS used in network module so dont move it to BtcOptionKeys
|
||||||
public static final String SOCKS_5_PROXY_BTC_ADDRESS = "socks5ProxyBtcAddress";
|
public static final String SOCKS_5_PROXY_BTC_ADDRESS = "socks5ProxyBtcAddress";
|
||||||
public static final String SOCKS_5_PROXY_HTTP_ADDRESS = "socks5ProxyHttpAddress";
|
public static final String SOCKS_5_PROXY_HTTP_ADDRESS = "socks5ProxyHttpAddress";
|
||||||
|
public static final String TORRC_OPTIONS = "torrcOptions";
|
||||||
|
public static final String TORRC_FILE = "torrcFile";
|
||||||
}
|
}
|
||||||
|
|
|
@ -42,10 +42,12 @@ public class NetworkNodeProvider implements Provider<NetworkNode> {
|
||||||
@Named(NetworkOptionKeys.USE_LOCALHOST_FOR_P2P) boolean useLocalhostForP2P,
|
@Named(NetworkOptionKeys.USE_LOCALHOST_FOR_P2P) boolean useLocalhostForP2P,
|
||||||
@Named(NetworkOptionKeys.MY_ADDRESS) String address,
|
@Named(NetworkOptionKeys.MY_ADDRESS) String address,
|
||||||
@Named(NetworkOptionKeys.PORT_KEY) int port,
|
@Named(NetworkOptionKeys.PORT_KEY) int port,
|
||||||
@Named(NetworkOptionKeys.TOR_DIR) File torDir) {
|
@Named(NetworkOptionKeys.TOR_DIR) File torDir,
|
||||||
|
@Named(NetworkOptionKeys.TORRC_FILE) String torrcFile,
|
||||||
|
@Named(NetworkOptionKeys.TORRC_OPTIONS) String torrcOptions) {
|
||||||
networkNode = useLocalhostForP2P ?
|
networkNode = useLocalhostForP2P ?
|
||||||
new LocalhostNetworkNode(address, port, networkProtoResolver) :
|
new LocalhostNetworkNode(address, port, networkProtoResolver) :
|
||||||
new TorNetworkNode(port, torDir, networkProtoResolver, bridgeAddressProvider);
|
new TorNetworkNode(port, torDir, networkProtoResolver, bridgeAddressProvider, torrcFile, torrcOptions);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -88,5 +88,7 @@ public class P2PModule extends AppModule {
|
||||||
bindConstant().annotatedWith(named(NetworkOptionKeys.BAN_LIST)).to(environment.getRequiredProperty(NetworkOptionKeys.BAN_LIST));
|
bindConstant().annotatedWith(named(NetworkOptionKeys.BAN_LIST)).to(environment.getRequiredProperty(NetworkOptionKeys.BAN_LIST));
|
||||||
bindConstant().annotatedWith(named(NetworkOptionKeys.SOCKS_5_PROXY_BTC_ADDRESS)).to(environment.getRequiredProperty(NetworkOptionKeys.SOCKS_5_PROXY_BTC_ADDRESS));
|
bindConstant().annotatedWith(named(NetworkOptionKeys.SOCKS_5_PROXY_BTC_ADDRESS)).to(environment.getRequiredProperty(NetworkOptionKeys.SOCKS_5_PROXY_BTC_ADDRESS));
|
||||||
bindConstant().annotatedWith(named(NetworkOptionKeys.SOCKS_5_PROXY_HTTP_ADDRESS)).to(environment.getRequiredProperty(NetworkOptionKeys.SOCKS_5_PROXY_HTTP_ADDRESS));
|
bindConstant().annotatedWith(named(NetworkOptionKeys.SOCKS_5_PROXY_HTTP_ADDRESS)).to(environment.getRequiredProperty(NetworkOptionKeys.SOCKS_5_PROXY_HTTP_ADDRESS));
|
||||||
|
bindConstant().annotatedWith(named(NetworkOptionKeys.TORRC_FILE)).to(environment.getRequiredProperty(NetworkOptionKeys.TORRC_FILE));
|
||||||
|
bindConstant().annotatedWith(named(NetworkOptionKeys.TORRC_OPTIONS)).to(environment.getRequiredProperty(NetworkOptionKeys.TORRC_OPTIONS));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -54,7 +54,7 @@ import java.nio.file.Paths;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileInputStream;
|
import java.io.FileInputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.LinkedHashMap;
|
import java.util.LinkedHashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@ -77,8 +77,6 @@ public class TorNetworkNode extends NetworkNode {
|
||||||
private static final int MAX_RESTART_ATTEMPTS = 5;
|
private static final int MAX_RESTART_ATTEMPTS = 5;
|
||||||
private static final long SHUT_DOWN_TIMEOUT = 5;
|
private static final long SHUT_DOWN_TIMEOUT = 5;
|
||||||
|
|
||||||
private static final String CONFIG_TORRCPREFIX = "torrc:";
|
|
||||||
private static final String CONFIG_TORRCFILE = "torrcfile";
|
|
||||||
|
|
||||||
private HiddenServiceSocket hiddenServiceSocket;
|
private HiddenServiceSocket hiddenServiceSocket;
|
||||||
private final File torDir;
|
private final File torDir;
|
||||||
|
@ -89,15 +87,20 @@ public class TorNetworkNode extends NetworkNode {
|
||||||
private MonadicBinding<Boolean> allShutDown;
|
private MonadicBinding<Boolean> allShutDown;
|
||||||
private Tor tor;
|
private Tor tor;
|
||||||
|
|
||||||
|
private String torrcFile = "";
|
||||||
|
private String torrcOptions = "";
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////
|
||||||
// Constructor
|
// Constructor
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
public TorNetworkNode(int servicePort, File torDir, NetworkProtoResolver networkProtoResolver, BridgeAddressProvider bridgeAddressProvider) {
|
public TorNetworkNode(int servicePort, File torDir, NetworkProtoResolver networkProtoResolver, BridgeAddressProvider bridgeAddressProvider, String torrcFile, String torrcOptions) {
|
||||||
super(servicePort, networkProtoResolver);
|
super(servicePort, networkProtoResolver);
|
||||||
this.torDir = torDir;
|
this.torDir = torDir;
|
||||||
this.bridgeAddressProvider = bridgeAddressProvider;
|
this.bridgeAddressProvider = bridgeAddressProvider;
|
||||||
|
this.torrcFile = torrcFile;
|
||||||
|
this.torrcOptions = torrcOptions;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -253,28 +256,38 @@ public class TorNetworkNode extends NetworkNode {
|
||||||
Torrc override = null;
|
Torrc override = null;
|
||||||
|
|
||||||
// check if the user wants to provide his own torrc file
|
// check if the user wants to provide his own torrc file
|
||||||
String torrcFile = System.getProperty(CONFIG_TORRCFILE);
|
if(!"".equals(torrcFile)) {
|
||||||
if(torrcFile != null) {
|
|
||||||
try {
|
try {
|
||||||
override = new Torrc(new FileInputStream(new File(torrcFile)));
|
override = new Torrc(new FileInputStream(new File(torrcFile)));
|
||||||
} catch(IOException e) {
|
} catch(IOException e) {
|
||||||
log.error("custom torrc file not found (" + torrcFile + "). Proceeding with defaults.");
|
log.error("custom torrc file not found ('{}'). Proceeding with defaults.", torrcFile);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// check if the user wants to temporarily add to the default torrc file
|
// check if the user wants to temporarily add to the default torrc file
|
||||||
LinkedHashMap<String, String> tmp = new LinkedHashMap<>();
|
LinkedHashMap<String, String> torrcOptionsMap = new LinkedHashMap<>();
|
||||||
System.getProperties().forEach((k, v) -> {
|
if(!"".equals(torrcOptions)) {
|
||||||
if(((String) k).startsWith(CONFIG_TORRCPREFIX))
|
Arrays.asList(torrcOptions.split(",")).forEach(line -> {
|
||||||
tmp.put(((String) k).substring(CONFIG_TORRCPREFIX.length()), (String) v);
|
line = line.trim();
|
||||||
});
|
if(line.matches("^[^\\s]+\\s.+")) {
|
||||||
if(!tmp.isEmpty())
|
String[] tmp = line.split("\\s", 2);
|
||||||
|
torrcOptionsMap.put(tmp[0].trim(), tmp[1].trim());
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
log.error("custom torrc override parse error ('{}'). Proceeding without custom overrides.", line);
|
||||||
|
torrcOptionsMap.clear();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// assemble final override options
|
||||||
|
if(!torrcOptionsMap.isEmpty())
|
||||||
// check for custom torrcFile
|
// check for custom torrcFile
|
||||||
if(null != override)
|
if(override != null)
|
||||||
// and merge the contents
|
// and merge the contents
|
||||||
override = new Torrc(override.getInputStream$tor(), tmp);
|
override = new Torrc(override.getInputStream$tor(), torrcOptionsMap);
|
||||||
else
|
else
|
||||||
override = new Torrc(tmp);
|
override = new Torrc(torrcOptionsMap);
|
||||||
|
|
||||||
log.info("Starting tor");
|
log.info("Starting tor");
|
||||||
Tor.setDefault(new NativeTor(torDir, bridgeEntries, override));
|
Tor.setDefault(new NativeTor(torDir, bridgeEntries, override));
|
||||||
|
|
|
@ -53,7 +53,7 @@ public class TorNetworkNodeTest {
|
||||||
public void testTorNodeBeforeSecondReady() throws InterruptedException, IOException {
|
public void testTorNodeBeforeSecondReady() throws InterruptedException, IOException {
|
||||||
latch = new CountDownLatch(1);
|
latch = new CountDownLatch(1);
|
||||||
int port = 9001;
|
int port = 9001;
|
||||||
TorNetworkNode node1 = new TorNetworkNode(port, new File("torNode_" + port), TestUtils.getNetworkProtoResolver(), null);
|
TorNetworkNode node1 = new TorNetworkNode(port, new File("torNode_" + port), TestUtils.getNetworkProtoResolver(), null, "", "");
|
||||||
node1.start(new SetupListener() {
|
node1.start(new SetupListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onTorNodeReady() {
|
public void onTorNodeReady() {
|
||||||
|
@ -79,7 +79,7 @@ public class TorNetworkNodeTest {
|
||||||
|
|
||||||
latch = new CountDownLatch(1);
|
latch = new CountDownLatch(1);
|
||||||
int port2 = 9002;
|
int port2 = 9002;
|
||||||
TorNetworkNode node2 = new TorNetworkNode(port2, new File("torNode_" + port2), TestUtils.getNetworkProtoResolver(), null);
|
TorNetworkNode node2 = new TorNetworkNode(port2, new File("torNode_" + port2), TestUtils.getNetworkProtoResolver(), null, "", "");
|
||||||
node2.start(new SetupListener() {
|
node2.start(new SetupListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onTorNodeReady() {
|
public void onTorNodeReady() {
|
||||||
|
@ -136,7 +136,7 @@ public class TorNetworkNodeTest {
|
||||||
public void testTorNodeAfterBothReady() throws InterruptedException, IOException {
|
public void testTorNodeAfterBothReady() throws InterruptedException, IOException {
|
||||||
latch = new CountDownLatch(2);
|
latch = new CountDownLatch(2);
|
||||||
int port = 9001;
|
int port = 9001;
|
||||||
TorNetworkNode node1 = new TorNetworkNode(port, new File("torNode_" + port), TestUtils.getNetworkProtoResolver(), null);
|
TorNetworkNode node1 = new TorNetworkNode(port, new File("torNode_" + port), TestUtils.getNetworkProtoResolver(), null, "", "");
|
||||||
node1.start(new SetupListener() {
|
node1.start(new SetupListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onTorNodeReady() {
|
public void onTorNodeReady() {
|
||||||
|
@ -161,7 +161,7 @@ public class TorNetworkNodeTest {
|
||||||
});
|
});
|
||||||
|
|
||||||
int port2 = 9002;
|
int port2 = 9002;
|
||||||
TorNetworkNode node2 = new TorNetworkNode(port2, new File("torNode_" + port), TestUtils.getNetworkProtoResolver(), null);
|
TorNetworkNode node2 = new TorNetworkNode(port2, new File("torNode_" + port), TestUtils.getNetworkProtoResolver(), null, "", "");
|
||||||
node2.start(new SetupListener() {
|
node2.start(new SetupListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onTorNodeReady() {
|
public void onTorNodeReady() {
|
||||||
|
|
Loading…
Add table
Reference in a new issue