feat(opnsense-config): add caddy module with configuration management

Introduce a new Caddy module within opnsense-config to manage Caddy server configurations. This includes enabling/disabling Caddy, setting ports, and reloading/restarting the service via OPNsense shell commands. Additionally, provide a sample Caddy configuration file for PXE booting and a test file in the pxe-http-files directory.
This commit is contained in:
2025-01-07 17:12:39 -05:00
parent 925e84e4d2
commit 81d40ec163
17 changed files with 342 additions and 17 deletions

View File

@@ -0,0 +1,83 @@
use yaserde::MaybeString;
use yaserde_derive::{YaDeserialize, YaSerialize};
#[derive(Default, PartialEq, Debug, YaSerialize, YaDeserialize)]
pub struct Pischem {
pub caddy: Caddy,
}
#[derive(Default, PartialEq, Debug, YaSerialize, YaDeserialize)]
pub struct Caddy {
pub general: CaddyGeneral,
pub reverseproxy: MaybeString,
}
#[derive(Default, PartialEq, Debug, YaSerialize, YaDeserialize)]
pub struct CaddyGeneral {
pub enabled: u8,
#[yaserde(rename = "EnableLayer4")]
pub enable_layer4: Option<u8>,
#[yaserde(rename = "HttpPort")]
pub http_port: Option<u16>,
#[yaserde(rename = "HttpsPort")]
pub https_port: Option<u16>,
#[yaserde(rename = "TlsEmail")]
pub tls_email: MaybeString,
#[yaserde(rename = "TlsAutoHttps")]
pub tls_auto_https: MaybeString,
#[yaserde(rename = "TlsDnsProvider")]
pub tls_dns_provider: MaybeString,
#[yaserde(rename = "TlsDnsApiKey")]
pub tls_dns_api_key: MaybeString,
#[yaserde(rename = "TlsDnsSecretApiKey")]
pub tls_dns_secret_api_key: MaybeString,
#[yaserde(rename = "TlsDnsOptionalField1")]
pub tls_dns_optional_field1: MaybeString,
#[yaserde(rename = "TlsDnsOptionalField2")]
pub tls_dns_optional_field2: MaybeString,
#[yaserde(rename = "TlsDnsOptionalField3")]
pub tls_dns_optional_field3: MaybeString,
#[yaserde(rename = "TlsDnsOptionalField4")]
pub tls_dns_optional_field4: MaybeString,
#[yaserde(rename = "TlsDnsPropagationTimeout")]
pub tls_dns_propagation_timeout: MaybeString,
#[yaserde(rename = "TlsDnsPropagationResolvers")]
pub tls_dns_propagation_resolvers: MaybeString,
pub accesslist: MaybeString,
#[yaserde(rename = "DisableSuperuser")]
pub disable_superuser: Option<i32>,
#[yaserde(rename = "GracePeriod")]
pub grace_period: Option<u16>,
#[yaserde(rename = "HttpVersion")]
pub http_version: MaybeString,
#[yaserde(rename = "LogCredentials")]
pub log_credentials: MaybeString,
#[yaserde(rename = "LogAccessPlain")]
pub log_access_plain: MaybeString,
#[yaserde(rename = "LogAccessPlainKeep")]
pub log_access_plain_keep: Option<u16>,
#[yaserde(rename = "LogLevel")]
pub log_level: MaybeString,
#[yaserde(rename = "DynDnsSimpleHttp")]
pub dyn_dns_simple_http: MaybeString,
#[yaserde(rename = "DynDnsInterface")]
pub dyn_dns_interface: MaybeString,
#[yaserde(rename = "DynDnsInterval")]
pub dyn_dns_interval: MaybeString,
#[yaserde(rename = "DynDnsIpVersions")]
pub dyn_dns_ip_versions: MaybeString,
#[yaserde(rename = "DynDnsTtl")]
pub dyn_dns_ttl: MaybeString,
#[yaserde(rename = "DynDnsUpdateOnly")]
pub dyn_dns_update_only: MaybeString,
#[yaserde(rename = "AuthProvider")]
pub auth_provider: MaybeString,
#[yaserde(rename = "AuthToDomain")]
pub auth_to_domain: MaybeString,
#[yaserde(rename = "AuthToPort")]
pub auth_to_port: MaybeString,
#[yaserde(rename = "AuthToTls")]
pub auth_to_tls: Option<i32>,
#[yaserde(rename = "AuthToUri")]
pub auth_to_uri: MaybeString,
}

View File

@@ -2,6 +2,8 @@ mod opnsense;
mod interfaces;
mod dhcpd;
mod haproxy;
mod caddy;
pub use caddy::*;
pub use haproxy::*;
pub use opnsense::*;
pub use interfaces::*;

View File

@@ -5,7 +5,7 @@ use uuid::Uuid;
use yaserde::{MaybeString, NamedList, RawXml};
use yaserde_derive::{YaDeserialize, YaSerialize};
use super::Interface;
use super::{Interface, Pischem};
#[derive(Default, PartialEq, Debug, YaSerialize, YaDeserialize)]
#[yaserde(rename = "opnsense")]
@@ -44,7 +44,7 @@ pub struct OPNsense {
pub wireless: Wireless,
pub hasync: Hasync,
#[yaserde(rename = "Pischem")]
pub pischem: Option<RawXml>,
pub pischem: Option<Pischem>,
pub ifgroups: Ifgroups,
}
@@ -1370,7 +1370,6 @@ pub struct ConfigOpenVPN {
pub StaticKeys: MaybeString,
}
#[derive(Default, PartialEq, Debug, YaSerialize, YaDeserialize)]
pub struct StaticRoutes {
#[yaserde(attribute)]