UPnP server configurable from UI

This commit is contained in:
Igor Katson 2024-08-24 00:34:57 +01:00
parent 3110f68f36
commit 9f340d92e5
No known key found for this signature in database
GPG key ID: B4EC22B66D61A3F5
6 changed files with 166 additions and 8 deletions

View file

@ -125,10 +125,21 @@ impl Default for RqbitDesktopConfigHttpApi {
}
}
#[derive(Clone, Copy, Default, Serialize, Deserialize, PartialEq, Eq)]
#[derive(Clone, Default, Serialize, Deserialize, PartialEq, Eq, Debug)]
#[serde(default)]
pub struct RqbitDesktopConfigUpnp {
pub disable: bool,
// rename for backwards compat
#[serde(rename = "disable")]
pub disable_tcp_port_forward: bool,
#[serde(default)]
pub enable_server: bool,
#[serde(default)]
pub server_hostname: Option<String>,
#[serde(default)]
pub server_friendly_name: Option<String>,
}
#[derive(Clone, Serialize, Deserialize, PartialEq, Eq)]
@ -162,3 +173,23 @@ impl Default for RqbitDesktopConfig {
}
}
}
impl RqbitDesktopConfig {
pub fn validate(&self) -> anyhow::Result<()> {
if self.upnp.enable_server {
if self.http_api.disable {
anyhow::bail!("if UPnP server is enabled, you need to enable the HTTP API also.")
}
if self.http_api.listen_addr.ip().is_loopback() {
anyhow::bail!("if UPnP server is enabled, you need to set HTTP API IP to 0.0.0.0 or at least non-localhost address.")
}
match self.upnp.server_hostname.as_ref().map(|s| s.trim()) {
Some("") | None => {
anyhow::bail!("UPnP hostname must be set to non-empty string")
}
Some(_) => {}
}
}
Ok(())
}
}