From bf25103fadfdef7912b0ef4e155000d65acd3ccc Mon Sep 17 00:00:00 2001 From: pythcoiner Date: Mon, 9 Sep 2024 14:25:05 +0200 Subject: [PATCH] gui(settings): add sanity check on electrum wallet address --- gui/src/app/state/settings/bitcoind.rs | 3 ++- gui/src/installer/step/node/electrum.rs | 18 ++---------------- gui/src/node/electrum.rs | 19 +++++++++++++++++++ 3 files changed, 23 insertions(+), 17 deletions(-) diff --git a/gui/src/app/state/settings/bitcoind.rs b/gui/src/app/state/settings/bitcoind.rs index 35d36ebc..ebdd45f3 100644 --- a/gui/src/app/state/settings/bitcoind.rs +++ b/gui/src/app/state/settings/bitcoind.rs @@ -453,7 +453,8 @@ impl ElectrumSettings { } view::SettingsEditMessage::FieldEdited(field, value) => { if !self.processing && field == "address" { - self.addr.value = value + self.addr.valid = crate::node::electrum::is_electrum_address_valid(&value); + self.addr.value = value; } } view::SettingsEditMessage::Confirm => { diff --git a/gui/src/installer/step/node/electrum.rs b/gui/src/installer/step/node/electrum.rs index 8adfbd5a..8de92b79 100644 --- a/gui/src/installer/step/node/electrum.rs +++ b/gui/src/installer/step/node/electrum.rs @@ -35,23 +35,9 @@ impl DefineElectrum { match msg { message::DefineElectrum::ConfigFieldEdited(field, value) => match field { ConfigField::Address => { - let value_noprefix = if value.starts_with("ssl://") { - value.replacen("ssl://", "", 1) - } else { - value.replacen("tcp://", "", 1) - }; - let noprefix_parts: Vec<_> = value_noprefix.split(':').collect(); self.address.value.clone_from(&value); // save the value including any prefix - self.address.valid = noprefix_parts.len() == 2 - && !noprefix_parts - .first() - .expect("there are two parts") - .is_empty() - && noprefix_parts - .last() - .expect("there are two parts") - .parse::() // check it is a port - .is_ok(); + self.address.valid = + crate::node::electrum::is_electrum_address_valid(&value); } }, }; diff --git a/gui/src/node/electrum.rs b/gui/src/node/electrum.rs index 97c563a8..11ca4c39 100644 --- a/gui/src/node/electrum.rs +++ b/gui/src/node/electrum.rs @@ -12,3 +12,22 @@ impl fmt::Display for ConfigField { } } } + +pub fn is_electrum_address_valid(value: &str) -> bool { + let value_noprefix = if value.starts_with("ssl://") { + value.replacen("ssl://", "", 1) + } else { + value.replacen("tcp://", "", 1) + }; + let noprefix_parts: Vec<_> = value_noprefix.split(':').collect(); + noprefix_parts.len() == 2 + && !noprefix_parts + .first() + .expect("there are two parts") + .is_empty() + && noprefix_parts + .last() + .expect("there are two parts") + .parse::() // check it is a port + .is_ok() +}