mirror of
https://github.com/bisq-network/bisq.git
synced 2025-02-23 23:06:39 +01:00
Add input validation for ignored peers and BTC nodes
Ignored peers and BTC nodes input fields will now only accept IPv4 and V2 onion addresses, with multiple addresses separated using a comma.
This commit is contained in:
parent
b0113d59a7
commit
5e52dc58a8
5 changed files with 56 additions and 3 deletions
|
@ -3284,3 +3284,4 @@ validation.phone.insufficientDigits=Not enough digits in {0} for a valid phone n
|
|||
validation.phone.tooManyDigits=Too many digits in {0} to be a valid phone number
|
||||
validation.phone.invalidDialingCode=Country dialing code in number {0} is invalid for country {1}. \
|
||||
The correct dialing code is {2}.
|
||||
validation.invalidAddressList=Must be comma separated list of valid addresses
|
||||
|
|
|
@ -27,6 +27,7 @@ import bisq.desktop.components.TitledGroupBg;
|
|||
import bisq.desktop.main.overlays.popups.Popup;
|
||||
import bisq.desktop.main.overlays.windows.TorNetworkSettingsWindow;
|
||||
import bisq.desktop.util.GUIUtil;
|
||||
import bisq.desktop.util.validation.RegexValidator;
|
||||
|
||||
import bisq.core.app.BisqEnvironment;
|
||||
import bisq.core.btc.nodes.BtcNodes;
|
||||
|
@ -239,7 +240,10 @@ public class NetworkSettingsView extends ActivatableView<GridPane, Void> {
|
|||
onBitcoinPeersToggleSelected(true);
|
||||
};
|
||||
|
||||
btcNodesInputTextFieldListener = (observable, oldValue, newValue) -> preferences.setBitcoinNodes(newValue);
|
||||
btcNodesInputTextField.setPromptText(Res.get("settings.net.ips"));
|
||||
RegexValidator regexValidator = GUIUtil.addressRegexValidator();
|
||||
btcNodesInputTextField.setValidator(regexValidator);
|
||||
btcNodesInputTextField.setErrorMessage(Res.get("validation.invalidAddressList"));
|
||||
btcNodesInputTextFieldFocusListener = (observable, oldValue, newValue) -> {
|
||||
if (oldValue && !newValue)
|
||||
showShutDownPopup();
|
||||
|
@ -311,7 +315,6 @@ public class NetworkSettingsView extends ActivatableView<GridPane, Void> {
|
|||
p2pPeersTableView.setItems(p2pSortedList);
|
||||
|
||||
btcNodesInputTextField.setText(preferences.getBitcoinNodes());
|
||||
btcNodesInputTextField.setPromptText(Res.get("settings.net.ips"));
|
||||
|
||||
btcNodesInputTextField.textProperty().addListener(btcNodesInputTextFieldListener);
|
||||
btcNodesInputTextField.focusedProperty().addListener(btcNodesInputTextFieldFocusListener);
|
||||
|
|
|
@ -28,6 +28,7 @@ import bisq.desktop.main.overlays.popups.Popup;
|
|||
import bisq.desktop.util.GUIUtil;
|
||||
import bisq.desktop.util.ImageUtil;
|
||||
import bisq.desktop.util.Layout;
|
||||
import bisq.desktop.util.validation.RegexValidator;
|
||||
|
||||
import bisq.core.app.BisqEnvironment;
|
||||
import bisq.core.btc.wallet.Restrictions;
|
||||
|
@ -324,8 +325,14 @@ public class PreferencesView extends ActivatableViewAndModel<GridPane, Preferenc
|
|||
// ignoreTraders
|
||||
ignoreTradersListInputTextField = addInputTextField(root, ++gridRow,
|
||||
Res.get("setting.preferences.ignorePeers"));
|
||||
ignoreTradersListListener = (observable, oldValue, newValue) ->
|
||||
RegexValidator regexValidator = GUIUtil.addressRegexValidator();
|
||||
ignoreTradersListInputTextField.setValidator(regexValidator);
|
||||
ignoreTradersListInputTextField.setErrorMessage(Res.get("validation.invalidAddressList"));
|
||||
ignoreTradersListListener = (observable, oldValue, newValue) -> {
|
||||
if (regexValidator.validate(newValue).isValid && !newValue.equals(oldValue)) {
|
||||
preferences.setIgnoreTradersList(Arrays.asList(StringUtils.deleteWhitespace(newValue).split(",")));
|
||||
}
|
||||
};
|
||||
|
||||
// referralId
|
||||
/* referralIdInputTextField = addInputTextField(root, ++gridRow, Res.get("setting.preferences.refererId"));
|
||||
|
|
|
@ -27,6 +27,7 @@ import bisq.desktop.main.MainView;
|
|||
import bisq.desktop.main.account.AccountView;
|
||||
import bisq.desktop.main.account.content.fiataccounts.FiatAccountsView;
|
||||
import bisq.desktop.main.overlays.popups.Popup;
|
||||
import bisq.desktop.util.validation.RegexValidator;
|
||||
|
||||
import bisq.core.account.witness.AccountAgeWitness;
|
||||
import bisq.core.account.witness.AccountAgeWitnessService;
|
||||
|
@ -1107,4 +1108,14 @@ public class GUIUtil {
|
|||
state.equals(AccountAgeWitnessService.SignState.PEER_SIGNER)) ?
|
||||
MaterialDesignIcon.APPROVAL : MaterialDesignIcon.ALERT_CIRCLE_OUTLINE;
|
||||
}
|
||||
|
||||
public static RegexValidator addressRegexValidator() {
|
||||
RegexValidator regexValidator = new RegexValidator();
|
||||
String portRegexPattern = "(0|[1-9][0-9]{0,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])";
|
||||
String onionV2RegexPattern = String.format("[a-zA-Z2-7]{16}\\.onion(?:\\:%1$s)?", portRegexPattern);
|
||||
String onionV3RegexPattern = String.format("[a-zA-Z2-7]{56}\\.onion(?:\\:%1$s)?", portRegexPattern);
|
||||
String ipv4RegexPattern = String.format("(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(?:\\:%1$s)?", portRegexPattern);
|
||||
regexValidator.setPattern(String.format("^(?:(?:(?:%1$s)|(?:%2$s)),)*(?:(?:%1$s)|(?:%2$s))*$", onionV2RegexPattern, ipv4RegexPattern));
|
||||
return regexValidator;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -17,6 +17,8 @@
|
|||
|
||||
package bisq.desktop.util;
|
||||
|
||||
import bisq.desktop.util.validation.RegexValidator;
|
||||
|
||||
import bisq.core.locale.GlobalSettings;
|
||||
import bisq.core.locale.Res;
|
||||
import bisq.core.locale.TradeCurrency;
|
||||
|
@ -44,6 +46,8 @@ import static com.natpryce.makeiteasy.MakeItEasy.with;
|
|||
import static org.bitcoinj.core.CoinMaker.oneBitcoin;
|
||||
import static org.bitcoinj.core.CoinMaker.satoshis;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertFalse;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
|
@ -112,6 +116,33 @@ public class GUIUtilTest {
|
|||
*/
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAddressRegexValidator() {
|
||||
RegexValidator regexValidator = GUIUtil.addressRegexValidator();
|
||||
|
||||
assertTrue(regexValidator.validate("").isValid);
|
||||
assertTrue(regexValidator.validate("abcdefghij234567.onion").isValid);
|
||||
assertTrue(regexValidator.validate("abcdefghijklmnop.onion,abcdefghijklmnop.onion").isValid);
|
||||
assertTrue(regexValidator.validate("qrstuvwxyzABCDEF.onion,qrstuvwxyzABCDEF.onion,aaaaaaaaaaaaaaaa.onion").isValid);
|
||||
assertTrue(regexValidator.validate("GHIJKLMNOPQRSTUV.onion:9999").isValid);
|
||||
assertTrue(regexValidator.validate("WXYZ234567abcdef.onion,GHIJKLMNOPQRSTUV.onion:9999").isValid);
|
||||
assertTrue(regexValidator.validate("aaaaaaaaaaaaaaaa.onion:9999,WXYZ234567abcdef.onion:9999,2222222222222222.onion:9999").isValid);
|
||||
|
||||
assertTrue(regexValidator.validate("12.34.56.78").isValid);
|
||||
assertTrue(regexValidator.validate("12.34.56.78:8888").isValid);
|
||||
|
||||
assertFalse(regexValidator.validate(" ").isValid);
|
||||
assertFalse(regexValidator.validate("abcd.onion").isValid);
|
||||
assertFalse(regexValidator.validate("abcdefghijklmnop,abcdefghijklmnop.onion").isValid);
|
||||
assertFalse(regexValidator.validate("abcdefghi2345689.onion:9999").isValid);
|
||||
assertFalse(regexValidator.validate("onion:9999,abcdefghijklmnop.onion:9999").isValid);
|
||||
assertFalse(regexValidator.validate("abcdefghijklmnop.onion:").isValid);
|
||||
assertFalse(regexValidator.validate("32zzibxmqi2ybxpqyggwwuwz7a3lbvtzoloti7cxoevyvijexvgsfeid.onion:8333").isValid);
|
||||
|
||||
assertFalse(regexValidator.validate("12.34.56.788").isValid);
|
||||
assertFalse(regexValidator.validate("12.34.56.78:").isValid);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void percentageOfTradeAmount_higherFeeAsMin() {
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue