installer: add a warning if remote adress is not loopback
This commit is contained in:
parent
ac01a68591
commit
3d55616b66
@ -1,6 +1,6 @@
|
|||||||
#[cfg(target_os = "windows")]
|
#[cfg(target_os = "windows")]
|
||||||
use std::io::{self, Cursor};
|
use std::io::{self, Cursor};
|
||||||
use std::net::{IpAddr, Ipv4Addr, SocketAddr, TcpListener};
|
use std::net::{IpAddr, Ipv4Addr, Ipv6Addr, SocketAddr, TcpListener};
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
use std::str::FromStr;
|
use std::str::FromStr;
|
||||||
|
|
||||||
@ -415,9 +415,16 @@ impl Step for DefineBitcoind {
|
|||||||
message::DefineBitcoind::ConfigFieldEdited(field, value) => match field {
|
message::DefineBitcoind::ConfigFieldEdited(field, value) => match field {
|
||||||
ConfigField::Address => {
|
ConfigField::Address => {
|
||||||
self.is_running = None;
|
self.is_running = None;
|
||||||
self.address.value = value;
|
self.address.value.clone_from(&value);
|
||||||
|
self.address.valid = false;
|
||||||
|
if let Some((ip, port)) = value.rsplit_once(':') {
|
||||||
|
let port = u16::from_str(port);
|
||||||
|
let (ipv4, ipv6) = (Ipv4Addr::from_str(ip), Ipv6Addr::from_str(ip));
|
||||||
|
if port.is_ok() && (ipv4.is_ok() || ipv6.is_ok()) {
|
||||||
self.address.valid = true;
|
self.address.valid = true;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
ConfigField::CookieFilePath => {
|
ConfigField::CookieFilePath => {
|
||||||
self.is_running = None;
|
self.is_running = None;
|
||||||
self.rpc_auth_vals.cookie_path.value = value;
|
self.rpc_auth_vals.cookie_path.value = value;
|
||||||
|
|||||||
@ -1,12 +1,13 @@
|
|||||||
use async_hwi::utils::extract_keys_and_template;
|
use async_hwi::utils::extract_keys_and_template;
|
||||||
use iced::widget::{
|
use iced::widget::{
|
||||||
checkbox, container, pick_list, radio, scrollable, scrollable::Properties, slider, Space,
|
checkbox, container, pick_list, radio, scrollable, scrollable::Properties, slider, Button,
|
||||||
TextInput,
|
Space, TextInput,
|
||||||
};
|
};
|
||||||
use iced::{alignment, widget::progress_bar, Alignment, Length};
|
use iced::{alignment, widget::progress_bar, Alignment, Length};
|
||||||
|
|
||||||
use async_hwi::DeviceKind;
|
use async_hwi::DeviceKind;
|
||||||
use liana_ui::component::text;
|
use liana_ui::component::text;
|
||||||
|
use std::net::{Ipv4Addr, Ipv6Addr};
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
use std::{collections::HashSet, str::FromStr};
|
use std::{collections::HashSet, str::FromStr};
|
||||||
|
|
||||||
@ -839,6 +840,17 @@ pub fn define_bitcoin<'a>(
|
|||||||
selected_auth_type: &RpcAuthType,
|
selected_auth_type: &RpcAuthType,
|
||||||
is_running: Option<&Result<(), Error>>,
|
is_running: Option<&Result<(), Error>>,
|
||||||
) -> Element<'a, Message> {
|
) -> Element<'a, Message> {
|
||||||
|
let is_loopback = if let Some((ip, _port)) = address.value.clone().rsplit_once(':') {
|
||||||
|
let (ipv4, ipv6) = (Ipv4Addr::from_str(ip), Ipv6Addr::from_str(ip));
|
||||||
|
match (ipv4, ipv6) {
|
||||||
|
(_, Ok(ip)) => ip.is_loopback(),
|
||||||
|
(Ok(ip), _) => ip.is_loopback(),
|
||||||
|
_ => false,
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
false
|
||||||
|
};
|
||||||
|
|
||||||
let col_address = Column::new()
|
let col_address = Column::new()
|
||||||
.push(text("Address:").bold())
|
.push(text("Address:").bold())
|
||||||
.push(
|
.push(
|
||||||
@ -852,6 +864,19 @@ pub fn define_bitcoin<'a>(
|
|||||||
.size(text::P1_SIZE)
|
.size(text::P1_SIZE)
|
||||||
.padding(10),
|
.padding(10),
|
||||||
)
|
)
|
||||||
|
.push_maybe(if !is_loopback && address.valid {
|
||||||
|
Some(
|
||||||
|
iced::widget::Text::new(
|
||||||
|
"Connection to a remote Bitcoin node \
|
||||||
|
is not supported. Insert an IP address bound to the same machine \
|
||||||
|
running Liana (ignore this warning if that's already the case)",
|
||||||
|
)
|
||||||
|
.style(color::ORANGE)
|
||||||
|
.size(text::CAPTION_SIZE),
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
})
|
||||||
.spacing(10);
|
.spacing(10);
|
||||||
|
|
||||||
let col_auth = Column::new()
|
let col_auth = Column::new()
|
||||||
@ -917,6 +942,13 @@ pub fn define_bitcoin<'a>(
|
|||||||
})
|
})
|
||||||
.spacing(10);
|
.spacing(10);
|
||||||
|
|
||||||
|
let check_connect_enable = if let RpcAuthType::UserPass = selected_auth_type {
|
||||||
|
address.valid
|
||||||
|
&& !rpc_auth_vals.password.value.is_empty()
|
||||||
|
&& !rpc_auth_vals.user.value.is_empty()
|
||||||
|
} else {
|
||||||
|
address.valid && !rpc_auth_vals.cookie_path.value.is_empty()
|
||||||
|
};
|
||||||
layout(
|
layout(
|
||||||
progress,
|
progress,
|
||||||
"Set up connection to the Bitcoin full node",
|
"Set up connection to the Bitcoin full node",
|
||||||
@ -951,9 +983,13 @@ pub fn define_bitcoin<'a>(
|
|||||||
.spacing(10)
|
.spacing(10)
|
||||||
.push(Container::new(
|
.push(Container::new(
|
||||||
button::secondary(None, "Check connection")
|
button::secondary(None, "Check connection")
|
||||||
.on_press(Message::DefineBitcoind(
|
.on_press_maybe(if check_connect_enable {
|
||||||
|
Some(Message::DefineBitcoind(
|
||||||
message::DefineBitcoind::PingBitcoind,
|
message::DefineBitcoind::PingBitcoind,
|
||||||
))
|
))
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
})
|
||||||
.width(Length::Fixed(200.0)),
|
.width(Length::Fixed(200.0)),
|
||||||
))
|
))
|
||||||
.push(if is_running.map(|res| res.is_ok()).unwrap_or(false) {
|
.push(if is_running.map(|res| res.is_ok()).unwrap_or(false) {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user