feat(opnsense-config): Public API now a bit simpler, added support for latest opnsense version in xml types

This commit is contained in:
Jean-Gabriel Gill-Couture
2024-11-21 21:49:38 -05:00
parent cc9bcb902c
commit 9a37aa1321
12 changed files with 4418 additions and 342 deletions

View File

@@ -13,21 +13,21 @@ use super::opnsense::{NumberOption, Range, StaticMap};
#[derive(Default, PartialEq, Debug, YaSerialize, YaDeserialize)]
pub struct DhcpInterface {
pub enable: i32,
pub gateway: String,
pub domain: String,
pub enable: Option<MaybeString>,
pub gateway: Option<MaybeString>,
pub domain: Option<MaybeString>,
#[yaserde(rename = "ddnsdomainalgorithm")]
pub ddns_domain_algorithm: String,
pub ddns_domain_algorithm: Option<MaybeString>,
#[yaserde(rename = "numberoptions")]
pub number_options: Vec<NumberOption>,
#[yaserde(rename = "range")]
pub range: Range,
pub winsserver: MaybeString,
pub dnsserver: MaybeString,
pub ntpserver: MaybeString,
pub winsserver: Option<MaybeString>,
pub dnsserver: Option<MaybeString>,
pub ntpserver: Option<MaybeString>,
#[yaserde(rename = "staticmap")]
pub staticmaps: Vec<StaticMap>,
pub pool: MaybeString,
pub pool: Option<MaybeString>,
}
#[derive(Default, PartialEq, Debug, YaSerialize, YaDeserialize)]
@@ -40,11 +40,8 @@ pub struct DhcpRange {
#[cfg(test)]
mod test {
use std::net::Ipv4Addr;
use crate::xml_utils::to_xml_str;
use super::*;
use pretty_assertions::assert_eq;
#[test]

View File

@@ -7,12 +7,17 @@ pub struct Interface {
pub internal_dynamic: Option<MaybeString>,
#[yaserde(rename = "if")]
pub physical_interface_name: String,
pub descr: String,
pub descr: Option<MaybeString>,
pub enable: MaybeString,
pub lock: Option<MaybeString>,
#[yaserde(rename = "spoofmac")]
pub spoof_mac: Option<MaybeString>,
pub ipaddr: Option<MaybeString>,
pub dhcphostname: Option<MaybeString>,
#[yaserde(rename = "alias-address")]
pub alias_address: Option<MaybeString>,
#[yaserde(rename = "alias-subnet")]
pub alias_subnet: Option<MaybeString>,
#[yaserde(rename = "blockpriv")]
pub block_priv: Option<MaybeString>,
#[yaserde(rename = "blockbogons")]
@@ -25,10 +30,28 @@ pub struct Interface {
pub ipaddrv6: Option<MaybeString>,
pub networks: Option<MaybeString>,
pub subnetv6: Option<MaybeString>,
pub media: Option<MaybeString>,
pub mediaopt: Option<MaybeString>,
#[yaserde(rename = "track6-interface")]
pub track6_interface: Option<MaybeString>,
#[yaserde(rename = "track6-prefix-id")]
pub track6_prefix_id: Option<MaybeString>,
#[yaserde(rename = "dhcprejectfrom")]
pub dhcprejectfrom: Option<MaybeString>,
pub adv_dhcp_pt_timeout: Option<MaybeString>,
pub adv_dhcp_pt_retry: Option<MaybeString>,
pub adv_dhcp_pt_select_timeout: Option<MaybeString>,
pub adv_dhcp_pt_reboot: Option<MaybeString>,
pub adv_dhcp_pt_backoff_cutoff: Option<MaybeString>,
pub adv_dhcp_pt_initial_interval: Option<MaybeString>,
pub adv_dhcp_pt_values: Option<MaybeString>,
pub adv_dhcp_send_options: Option<MaybeString>,
pub adv_dhcp_request_options: Option<MaybeString>,
pub adv_dhcp_required_options: Option<MaybeString>,
pub adv_dhcp_option_modifiers: Option<MaybeString>,
pub adv_dhcp_config_advanced: Option<MaybeString>,
pub adv_dhcp_config_file_override: Option<MaybeString>,
pub adv_dhcp_config_file_override_path: Option<MaybeString>,
}
#[cfg(test)]
@@ -109,6 +132,8 @@ mod test {
<descr>LAN</descr>
<enable>1</enable>
<spoofmac/>
<media/>
<mediaopt/>
<ipaddr>192.168.20.1</ipaddr>
<subnet>24</subnet>
<ipaddrv6>track6</ipaddrv6>

View File

@@ -18,7 +18,8 @@ pub struct OPNsense {
pub syslog: Syslog,
pub nat: Nat,
pub filter: Filters,
pub load_balancer: LoadBalancer,
pub load_balancer: Option<LoadBalancer>,
pub rrd: Option<RawXml>,
pub ntpd: Ntpd,
pub widgets: Widgets,
pub revision: Revision,
@@ -26,13 +27,13 @@ pub struct OPNsense {
pub opnsense: OPNsenseXmlSection,
pub staticroutes: StaticRoutes,
pub ca: MaybeString,
pub gateways: Gateways,
pub cert: Cert,
pub gateways: Option<Gateways>,
pub cert: Vec<Cert>,
pub dhcpdv6: DhcpDv6,
pub virtualip: VirtualIp,
pub openvpn: OpenVpn,
pub ppps: Ppps,
pub dyndnses: Dyndnses,
pub dyndnses: Option<Dyndnses>,
pub vlans: Vlans,
pub bridges: Bridges,
pub gifs: Gifs,
@@ -332,7 +333,7 @@ pub struct Snmpd {
#[derive(Default, PartialEq, Debug, YaSerialize, YaDeserialize)]
pub struct Syslog {
pub reverse: Option<MaybeString>,
pub preservelogs: i32,
pub preservelogs: Option<MaybeString>,
}
#[derive(Default, PartialEq, Debug, YaSerialize, YaDeserialize)]
@@ -389,6 +390,16 @@ pub struct Created {
pub description: MaybeString,
}
#[derive(Default, PartialEq, Debug, YaSerialize, YaDeserialize)]
pub struct Filter {
#[yaserde(attribute)]
version: String,
rules: Option<MaybeString>,
snatrules: Option<MaybeString>,
npt: Option<MaybeString>,
onetoone: Option<MaybeString>,
}
#[derive(Default, PartialEq, Debug, YaSerialize, YaDeserialize)]
#[yaserde(rename = "OPNsense")]
pub struct OPNsenseXmlSection {
@@ -404,6 +415,8 @@ pub struct OPNsenseXmlSection {
pub ipsec: Option<IPsec>,
#[yaserde(rename = "Interfaces")]
pub interfaces: Option<ConfigInterfaces>,
#[yaserde(rename = "Kea")]
pub kea: Option<RawXml>,
pub monit: Option<Monit>,
#[yaserde(rename = "OpenVPNExport")]
pub openvpn_export: Option<OpenVPNExport>,
@@ -413,17 +426,19 @@ pub struct OPNsenseXmlSection {
#[yaserde(rename = "TrafficShaper")]
pub traffic_shaper: Option<RawXml>,
pub unboundplus: Option<RawXml>,
#[yaserde(rename = "DHCRelay")]
pub dhcrelay: Option<RawXml>,
pub wireguard: Option<Wireguard>,
#[yaserde(rename = "Swanctl")]
pub swanctl: Swanctl,
#[yaserde(rename = "DynDNS")]
pub dyndns: DynDNS,
pub dyndns: Option<DynDNS>,
#[yaserde(rename = "OpenVPN")]
pub openvpn: ConfigOpenVPN,
#[yaserde(rename = "Gateways")]
pub gateways: ConfigGateways,
pub gateways: RawXml,
#[yaserde(rename = "HAProxy")]
pub haproxy: HAProxy,
pub haproxy: Option<HAProxy>,
}
#[derive(Debug, YaSerialize, YaDeserialize, PartialEq)]
@@ -457,7 +472,7 @@ pub struct IDSGeneral {
#[yaserde(rename = "AlertSaveLogs")]
alert_save_logs: u8,
#[yaserde(rename = "MPMAlgo")]
mpm_algo: String,
mpm_algo: MaybeString,
detect: Detect,
syslog: Option<u8>,
syslog_eve: Option<u8>,
@@ -469,7 +484,7 @@ pub struct IDSGeneral {
#[derive(Debug, YaSerialize, YaDeserialize, PartialEq)]
pub struct Detect {
#[yaserde(rename = "Profile")]
profile: String,
profile: MaybeString,
toclient_groups: MaybeString,
toserver_groups: MaybeString,
}
@@ -495,6 +510,13 @@ pub struct GeneralIpsec {
pub struct ConfigInterfaces {
vxlans: Vxlan,
loopbacks: Loopback,
neighbors: Option<Neighbors>,
}
#[derive(Debug, YaSerialize, YaDeserialize, PartialEq)]
pub struct Neighbors {
#[yaserde(attribute)]
version: String,
}
#[derive(Debug, YaSerialize, YaDeserialize, PartialEq)]
@@ -532,7 +554,7 @@ pub struct GeneralMonit {
ssl: u8,
sslversion: String,
sslverify: u8,
logfile: String,
logfile: MaybeString,
statefile: MaybeString,
#[yaserde(rename = "eventqueuePath")]
event_queue_path: MaybeString,
@@ -543,7 +565,7 @@ pub struct GeneralMonit {
#[yaserde(rename = "httpdUsername")]
httpd_username: String,
#[yaserde(rename = "httpdPassword")]
httpd_password: String,
httpd_password: MaybeString,
#[yaserde(rename = "httpdPort")]
httpd_port: u16,
#[yaserde(rename = "httpdAllow")]
@@ -565,7 +587,7 @@ pub struct Alert {
noton: u8,
events: MaybeString,
format: MaybeString,
reminder: u32,
reminder: MaybeString,
description: MaybeString,
}
@@ -725,6 +747,8 @@ pub struct Firewall {
pub lv_template: Option<LvTemplate>,
#[yaserde(rename = "Category")]
pub category: Option<Category>,
#[yaserde(rename = "Filter")]
pub filter: Option<Filter>,
#[yaserde(rename = "Alias")]
pub alias: Option<Alias>,
}
@@ -1020,6 +1044,9 @@ pub struct ConfigSyslog {
#[derive(Default, PartialEq, Debug, YaSerialize, YaDeserialize)]
pub struct SyslogGeneral {
pub enabled: i32,
pub loglocal: Option<MaybeString>,
pub maxpreserve: Option<MaybeString>,
pub maxfilesize: Option<MaybeString>,
}
#[derive(Default, PartialEq, Debug, YaSerialize, YaDeserialize)]
@@ -1293,11 +1320,6 @@ pub struct ConfigOpenVPN {
pub StaticKeys: MaybeString,
}
#[derive(Default, PartialEq, Debug, YaSerialize, YaDeserialize)]
pub struct ConfigGateways {
#[yaserde(attribute)]
pub version: String,
}
#[derive(Default, PartialEq, Debug, YaSerialize, YaDeserialize)]
#[yaserde(rename = "HAProxy")]
@@ -1835,27 +1857,27 @@ pub struct StaticRoutes {
#[yaserde(attribute)]
pub version: String,
#[yaserde(rename = "route")]
pub route: MaybeString, // Assuming it can be empty, use Option
pub route: MaybeString,
}
#[derive(Default, PartialEq, Debug, YaSerialize, YaDeserialize)]
pub struct Ca {} // Empty struct for <ca/>
pub struct Ca {}
#[derive(Default, PartialEq, Debug, YaSerialize, YaDeserialize)]
pub struct Gateways {
#[yaserde(rename = "gateway_item")]
pub gateway_item: MaybeString, // Assuming it can be empty, use Option
pub gateway_item: RawXml
}
#[derive(Default, PartialEq, Debug, YaSerialize, YaDeserialize)]
pub struct Cert {
#[yaserde(rename = "refid")]
#[yaserde(attribute)]
pub uuid: Option<String>,
pub refid: String,
#[yaserde(rename = "descr")]
pub descr: String,
#[yaserde(rename = "crt")]
pub crt: String,
#[yaserde(rename = "prv")]
pub caref: Option<MaybeString>,
pub csr: Option<MaybeString>,
pub prv: String,
}
@@ -1873,27 +1895,27 @@ pub struct VirtualIp {
#[derive(Default, PartialEq, Debug, YaSerialize, YaDeserialize)]
pub struct Vip {
#[yaserde(attribute)]
pub uuid: String,
pub interface: String,
pub mode: String,
pub subnet: String,
pub subnet_bits: u32,
pub gateway: String,
pub noexpand: u32,
pub nobind: u32,
pub password: MaybeString,
pub vhid: MaybeString,
pub advbase: u32,
pub advskew: u32,
pub descr: String,
pub uuid: Option<String>,
pub interface: Option<MaybeString>,
pub mode: Option<MaybeString>,
pub subnet: Option<MaybeString>,
pub subnet_bits: Option<MaybeString>,
pub gateway: Option<MaybeString>,
pub noexpand: Option<MaybeString>,
pub nobind: Option<MaybeString>,
pub password: Option<MaybeString>,
pub vhid: Option<MaybeString>,
pub advbase: Option<MaybeString>,
pub advskew: Option<MaybeString>,
pub descr: Option<MaybeString>,
}
#[derive(Default, PartialEq, Debug, YaSerialize, YaDeserialize)]
pub struct OpenVpn {
#[yaserde(rename = "openvpn-server")]
pub openvpn_server: MaybeString,
pub openvpn_server: Option<MaybeString>,
#[yaserde(rename = "openvpn-client")]
pub openvpn_client: MaybeString,
pub openvpn_client: Option<MaybeString>,
}
#[derive(Default, PartialEq, Debug, YaSerialize, YaDeserialize)]
@@ -1903,14 +1925,14 @@ pub struct Ppps {
#[derive(Default, PartialEq, Debug, YaSerialize, YaDeserialize)]
pub struct Ppp {
pub ptpid: u32,
pub ptpid: Option<MaybeString>,
#[yaserde(rename = "type")]
pub r#type: String,
pub r#type: Option<MaybeString>,
#[yaserde(rename = "if")]
pub r#if: String,
pub ports: String,
pub username: String,
pub password: String,
pub r#if: Option<MaybeString>,
pub ports: Option<MaybeString>,
pub username: Option<MaybeString>,
pub password: Option<MaybeString>,
}
#[derive(Default, PartialEq, Debug, YaSerialize, YaDeserialize)]
@@ -1951,11 +1973,15 @@ pub struct Bridges {
#[derive(Default, PartialEq, Debug, YaSerialize, YaDeserialize)]
pub struct Gifs {
#[yaserde(attribute)]
pub version: Option<String>,
pub gif: MaybeString,
}
#[derive(Default, PartialEq, Debug, YaSerialize, YaDeserialize)]
pub struct Gres {
#[yaserde(attribute)]
pub version: Option<String>,
pub gre: MaybeString,
}
@@ -1963,6 +1989,7 @@ pub struct Gres {
pub struct Laggs {
#[yaserde(attribute)]
pub version: String,
pub lagg: Option<MaybeString>,
}
#[derive(Default, PartialEq, Debug, YaSerialize, YaDeserialize)]
@@ -1972,45 +1999,50 @@ pub struct Wireless {
#[derive(Default, PartialEq, Debug, YaSerialize, YaDeserialize)]
pub struct Hasync {
pub synchronizealiases: String,
pub synchronizeauthservers: String,
pub synchronizecerts: String,
pub synchronizedhcpd: String,
pub synchronizenat: String,
pub synchronizerules: String,
pub synchronizeschedules: String,
pub synchronizestaticroutes: String,
pub synchronizeusers: String,
pub synchronizevirtualip: String,
pub synchronizewidgets: String,
pub synchronizedhcrelay: String,
pub synchronizedhcpdv6: String,
pub synchronizedhcrelay6: String,
pub synchronizentpd: String,
pub synchronizesyslog: String,
pub synchronizecron: String,
pub synchronizesysctl: String,
pub synchronizewebgui: String,
pub synchronizednsforwarder: String,
pub synchronizeshaper: String,
pub synchronizecaptiveportal: String,
pub synchronizeipsec: String,
pub synchronizemonit: String,
pub synchronizessh: String,
pub synchronizeopenvpn: String,
pub synchronizeifgroups: String,
pub synchronizecategories: String,
pub synchronizelvtemplate: String,
pub synchronizesquid: String,
pub synchronizesuricata: String,
pub synchronizednsresolver: String,
pub pfsyncinterface: String,
pub synchronizetoip: String,
pub username: String,
pub password: String,
pub pfsyncenabled: String,
pub disablepreempt: String,
pub disconnectppps: String,
#[yaserde(attribute)]
pub version: Option<String>,
pub synchronizealiases: Option<MaybeString>,
pub synchronizeauthservers: Option<MaybeString>,
pub synchronizecerts: Option<MaybeString>,
pub synchronizedhcpd: Option<MaybeString>,
pub synchronizenat: Option<MaybeString>,
pub synchronizerules: Option<MaybeString>,
pub synchronizeschedules: Option<MaybeString>,
pub synchronizestaticroutes: Option<MaybeString>,
pub synchronizeusers: Option<MaybeString>,
pub synchronizevirtualip: Option<MaybeString>,
pub synchronizewidgets: Option<MaybeString>,
pub synchronizedhcrelay: Option<MaybeString>,
pub synchronizedhcpdv6: Option<MaybeString>,
pub synchronizedhcrelay6: Option<MaybeString>,
pub synchronizentpd: Option<MaybeString>,
pub synchronizesyslog: Option<MaybeString>,
pub synchronizecron: Option<MaybeString>,
pub synchronizesysctl: Option<MaybeString>,
pub synchronizewebgui: Option<MaybeString>,
pub synchronizednsforwarder: Option<MaybeString>,
pub synchronizeshaper: Option<MaybeString>,
pub synchronizecaptiveportal: Option<MaybeString>,
pub synchronizeipsec: Option<MaybeString>,
pub synchronizemonit: Option<MaybeString>,
pub synchronizessh: Option<MaybeString>,
pub synchronizeopenvpn: Option<MaybeString>,
pub synchronizeifgroups: Option<MaybeString>,
pub synchronizecategories: Option<MaybeString>,
pub synchronizelvtemplate: Option<MaybeString>,
pub synchronizesquid: Option<MaybeString>,
pub synchronizesuricata: Option<MaybeString>,
pub synchronizednsresolver: Option<MaybeString>,
pub pfsyncinterface: Option<MaybeString>,
pub synchronizetoip: Option<MaybeString>,
pub username: Option<MaybeString>,
pub password: Option<MaybeString>,
pub pfsyncenabled: Option<MaybeString>,
pub disablepreempt: Option<MaybeString>,
pub disconnectppps: Option<MaybeString>,
pub pfsyncpeerip: Option<MaybeString>,
pub pfsyncversion: Option<MaybeString>,
pub syncitems: Option<MaybeString>,
}
#[derive(Default, PartialEq, Debug, YaSerialize, YaDeserialize)]