use std::net::SocketAddr;
use std::path::PathBuf;
use globset::GlobMatcher;
use crate::LocalIpcEndpoint;
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct NetworkPolicy {
pub(super) mode: NetworkMode,
pub(super) domain_mode: DomainMode,
pub(super) unix_socket_mode: UnixSocketMode,
pub(super) local_network_access: LocalNetworkAccess,
pub(super) domains: Vec<DomainRule>,
pub(super) unix_sockets: Vec<UnixSocketRule>,
pub(super) local_ipc: Vec<LocalIpcRule>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct ResolvedNetworkTarget {
pub(super) domain: String,
pub(super) addresses: Vec<SocketAddr>,
}
#[derive(Debug, Clone)]
pub struct DomainRule {
pub(super) pattern: String,
pub(super) access: DomainAccess,
pub(super) matcher: DomainMatcher,
}
#[derive(Debug, Clone)]
pub struct UnixSocketRule {
pub(super) path: PathBuf,
pub(super) access: DomainAccess,
}
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub struct LocalIpcRule {
pub(super) endpoint: LocalIpcEndpoint,
pub(super) access: DomainAccess,
}
#[derive(Debug, PartialEq, Eq, Hash)]
pub enum ConnectionAuthorization {
Allowed(AuthorizedSocketAddr),
Denied,
ExternallyEnforced,
}
#[derive(Debug, PartialEq, Eq, Hash)]
pub struct AuthorizedSocketAddr(pub(super) SocketAddr);
#[derive(Debug, Clone)]
pub(super) enum DomainMatcher {
Any,
Full(GlobMatcher),
Suffix {
labels: Vec<GlobMatcher>,
include_apex: bool,
},
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum NetworkDecision {
Allow,
Deny,
ExternallyEnforced,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum DomainAccess {
Allow,
Deny,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum LocalNetworkAccess {
Deny,
Allow,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum UnixSocketMode {
Disabled,
Enabled,
Restricted,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum DomainMode {
Disabled,
Enabled,
Restricted,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum NetworkMode {
Disabled,
Enabled,
External,
}