swap validator with garde, update deps

This commit is contained in:
Samuel Lorch 2024-07-27 21:15:09 +02:00
parent 32e209b996
commit 7d0b9c5c3b
10 changed files with 831 additions and 475 deletions

1251
Cargo.lock generated

File diff suppressed because it is too large Load diff

View file

@ -22,7 +22,7 @@ tower-http = "0.4.4"
tracing = "0.1.40"
tracing-subscriber = "0.3.17"
uuid = { version = "1.5.0", features = ["v4"] }
validator = { version = "0.15", features = ["derive"] }
tera = "1"
lazy_static = "1.4.0"
garde = { version = "0.20.0", features = ["full"] }

View file

@ -1,11 +1,11 @@
use super::definitions::config::Config;
use garde::Validate;
use pwhash::sha512_crypt;
use serde::Serialize;
use std::fs;
use std::sync::{Arc, Mutex, MutexGuard};
use thiserror::Error;
use tracing::{error, info};
use validator::Validate;
#[derive(Error, Debug)]
pub enum ConfigError {
@ -13,7 +13,7 @@ pub enum ConfigError {
SerdeError(#[from] serde_json::Error),
#[error("Validation Error")]
ValidatonError(#[from] validator::ValidationErrors),
ValidatonError(#[from] garde::Report),
#[error("Hash Error")]
HashError(#[from] pwhash::error::Error),

View file

@ -1,5 +1,5 @@
use garde::Validate;
use serde::{Deserialize, Serialize};
use validator::Validate;
use super::firewall;
use super::firewall::SNATType;
@ -18,12 +18,19 @@ use crate::macro_db;
#[derive(Serialize, Deserialize, Clone, Validate, Default, Debug)]
pub struct Config {
#[garde(skip)]
pub config_version: u64,
#[garde(dive)]
pub network: network::Network,
#[garde(dive)]
pub object: object::Object,
#[garde(dive)]
pub system: system::System,
#[garde(dive)]
pub service: service::Service,
#[garde(dive)]
pub vpn: vpn::VPN,
#[garde(dive)]
pub firewall: firewall::Firewall,
}

View file

@ -1,14 +1,18 @@
use garde::Validate;
use serde::{Deserialize, Serialize};
use validator::Validate;
#[derive(Serialize, Deserialize, Clone, Validate, Default, Debug)]
pub struct Firewall {
#[garde(dive)]
pub forward_rules: Vec<ForwardRule>,
#[garde(dive)]
pub destination_nat_rules: Vec<DestinationNATRule>,
#[garde(dive)]
pub source_nat_rules: Vec<SourceNATRule>,
}
#[derive(Serialize, Deserialize, Clone, Validate, Debug)]
#[garde(allow_unvalidated)]
pub struct ForwardRule {
pub name: String,
pub services: Vec<String>,
@ -20,6 +24,7 @@ pub struct ForwardRule {
}
#[derive(Serialize, Deserialize, Clone, Validate, Debug)]
#[garde(allow_unvalidated)]
pub struct DestinationNATRule {
pub name: String,
pub services: Vec<String>,
@ -32,6 +37,7 @@ pub struct DestinationNATRule {
}
#[derive(Serialize, Deserialize, Clone, Validate, Debug)]
#[garde(allow_unvalidated)]
pub struct SourceNATRule {
pub name: String,
pub services: Vec<String>,

View file

@ -1,14 +1,17 @@
use garde::Validate;
use ipnet::IpNet;
use serde::{Deserialize, Serialize};
use validator::Validate;
#[derive(Serialize, Deserialize, Clone, Validate, Default, Debug)]
pub struct Network {
#[garde(dive)]
pub interfaces: Vec<NetworkInterface>,
#[garde(dive)]
pub static_routes: Vec<StaticRoute>,
}
#[derive(Serialize, Deserialize, Clone, Validate, Debug)]
#[garde(allow_unvalidated)]
pub struct NetworkInterface {
pub name: String,
pub alias: String,
@ -39,6 +42,7 @@ pub enum AddressingMode {
}
#[derive(Serialize, Deserialize, Clone, Validate, Debug)]
#[garde(allow_unvalidated)]
pub struct StaticRoute {
pub name: String,
pub interface: String,
@ -49,6 +53,7 @@ pub struct StaticRoute {
}
#[derive(Serialize, Deserialize, Clone, Validate, Debug)]
#[garde(allow_unvalidated)]
pub struct Link {
pub name: String,
}

View file

@ -1,15 +1,18 @@
use garde::Validate;
use ipnet::IpNet;
use serde::{Deserialize, Serialize};
use std::net::IpAddr;
use validator::Validate;
#[derive(Serialize, Deserialize, Clone, Validate, Default, Debug)]
pub struct Object {
#[garde(dive)]
pub addresses: Vec<Address>,
#[garde(dive)]
pub services: Vec<Service>,
}
#[derive(Serialize, Deserialize, Clone, Validate, Debug)]
#[garde(allow_unvalidated)]
pub struct Address {
pub name: String,
pub address_type: AddressType,
@ -26,6 +29,7 @@ pub enum AddressType {
}
#[derive(Serialize, Deserialize, Clone, Validate, Debug)]
#[garde(allow_unvalidated)]
pub struct Service {
pub name: String,
pub service_type: ServiceType,

View file

@ -1,15 +1,19 @@
use garde::Validate;
use macaddr::MacAddr8;
use serde::{Deserialize, Serialize};
use validator::Validate;
#[derive(Serialize, Deserialize, Clone, Validate, Default, Debug)]
pub struct Service {
#[garde(dive)]
pub dhcp_servers: Vec<DHCPServer>,
#[garde(dive)]
pub dns_servers: Vec<DNSServer>,
#[garde(dive)]
pub ntp_servers: Vec<NTPServer>,
}
#[derive(Serialize, Deserialize, Clone, Validate, Debug)]
#[garde(allow_unvalidated)]
pub struct DHCPServer {
pub name: String,
pub interface: String,
@ -23,6 +27,7 @@ pub struct DHCPServer {
}
#[derive(Serialize, Deserialize, Clone, Validate, Default, Debug)]
#[garde(allow_unvalidated)]
pub struct DNSServer {
pub name: String,
pub interface: String,
@ -30,6 +35,7 @@ pub struct DNSServer {
}
#[derive(Serialize, Deserialize, Clone, Validate, Default, Debug)]
#[garde(allow_unvalidated)]
pub struct NTPServer {
pub name: String,
pub interface: String,

View file

@ -1,12 +1,14 @@
use garde::Validate;
use serde::{Deserialize, Serialize};
use validator::Validate;
#[derive(Serialize, Deserialize, Clone, Validate, Default, Debug)]
pub struct System {
#[garde(dive)]
pub users: Vec<User>,
}
#[derive(Serialize, Deserialize, Clone, Validate, Default, Debug)]
#[garde(allow_unvalidated)]
pub struct User {
pub name: String,
pub comment: String,

View file

@ -1,18 +1,22 @@
use garde::Validate;
use serde::{Deserialize, Serialize};
use validator::Validate;
#[derive(Serialize, Deserialize, Clone, Validate, Default, Debug)]
pub struct VPN {
#[garde(dive)]
pub wireguard: Wireguard,
}
#[derive(Serialize, Deserialize, Clone, Validate, Default, Debug)]
pub struct Wireguard {
#[garde(dive)]
pub interfaces: Vec<WireguardInterface>,
#[garde(dive)]
pub peers: Vec<WireguardPeer>,
}
#[derive(Serialize, Deserialize, Clone, Validate, Debug)]
#[garde(allow_unvalidated)]
pub struct WireguardInterface {
pub name: String,
pub public_key: String,
@ -23,6 +27,7 @@ pub struct WireguardInterface {
}
#[derive(Serialize, Deserialize, Clone, Validate, Debug)]
#[garde(allow_unvalidated)]
pub struct WireguardPeer {
pub name: String,
pub public_key: String,