Can edit more network settings

This commit is contained in:
2023-12-06 15:30:30 +01:00
parent 7bf4e87df1
commit b7d44f3091
17 changed files with 384 additions and 77 deletions

View File

@ -5,7 +5,7 @@ use crate::controllers::{HttpResult, LibVirtReq};
use crate::extractors::local_auth_extractor::LocalAuthEnabled;
use crate::libvirt_rest_structures::HypervisorInfo;
use actix_web::{HttpResponse, Responder};
use sysinfo::{System, SystemExt};
use sysinfo::{NetworksExt, System, SystemExt};
pub async fn root_index() -> impl Responder {
HttpResponse::Ok().body("Hello world!")
@ -86,3 +86,16 @@ pub async fn server_info(client: LibVirtReq) -> HttpResult {
system,
}))
}
pub async fn networks_list() -> HttpResult {
let mut system = System::new();
system.refresh_networks_list();
Ok(HttpResponse::Ok().json(
system
.networks()
.iter()
.map(|n| n.0.to_string())
.collect::<Vec<_>>(),
))
}

View File

@ -229,10 +229,10 @@ pub struct NetworkForwardXML {
pub mode: String,
#[serde(
default,
rename(serialize = "@mode"),
skip_serializing_if = "Option::is_none"
rename(serialize = "@dev"),
skip_serializing_if = "String::is_empty"
)]
pub dev: Option<String>,
pub dev: String,
}
/// Network DNS information

View File

@ -421,7 +421,7 @@ impl NetworkInfo {
forward: match self.forward_mode {
NetworkForwardMode::NAT => Some(NetworkForwardXML {
mode: "nat".to_string(),
dev: self.device,
dev: self.device.unwrap_or_default(),
}),
NetworkForwardMode::Isolated => None,
},
@ -443,7 +443,13 @@ impl NetworkInfo {
None => NetworkForwardMode::Isolated,
Some(_) => NetworkForwardMode::NAT,
},
device: xml.forward.map(|f| f.dev).unwrap_or(None),
device: xml
.forward
.map(|f| match f.dev.is_empty() {
true => None,
false => Some(f.dev),
})
.unwrap_or(None),
dns_server: xml.dns.map(|d| d.forwarder.addr),
domain: xml.domain.map(|d| d.name),
ip_v4: xml

View File

@ -101,6 +101,10 @@ async fn main() -> std::io::Result<()> {
"/api/server/info",
web::get().to(server_controller::server_info),
)
.route(
"/api/server/networks",
web::get().to(server_controller::networks_list),
)
// Auth controller
.route(
"/api/auth/local",