mod refusal;
mod validate;
pub use refusal::Refusal;
use serde::Deserialize;
use crate::auth::Token;
fn default_bind() -> String {
"127.0.0.1:8080".to_owned()
}
fn default_debounce_ms() -> u64 {
250
}
fn default_max_streams() -> usize {
4096
}
#[derive(Debug, Clone, Deserialize)]
#[serde(deny_unknown_fields)]
pub struct SectionConfig {
pub application: String,
pub profile: String,
pub files: Vec<String>,
#[serde(default)]
pub env_prefix: Option<String>,
#[serde(default)]
pub whole_document: bool,
}
#[derive(Debug, Clone, Deserialize)]
#[serde(deny_unknown_fields)]
pub struct TlsConfig {
pub certificate: String,
pub key: String,
#[serde(default)]
pub client_ca: Option<String>,
#[serde(default)]
pub crl: Option<String>,
}
#[derive(Debug, Clone, Deserialize)]
#[serde(deny_unknown_fields)]
pub struct ClientConfig {
pub name: String,
#[serde(default)]
pub token: Option<Token>,
pub applications: Vec<String>,
}
impl ClientConfig {
#[must_use]
pub fn is_anonymous(&self) -> bool {
self.token.is_none()
}
}
#[derive(Debug, Clone, Deserialize)]
#[serde(deny_unknown_fields)]
pub struct ServerConfig {
#[serde(default = "default_bind")]
pub bind: String,
#[serde(default)]
pub insecure: bool,
#[serde(default)]
pub tls: Option<TlsConfig>,
#[serde(default)]
pub allow_anonymous: bool,
#[serde(default = "default_debounce_ms")]
pub watch_debounce_ms: u64,
#[serde(default = "default_max_streams")]
pub max_stream_connections: usize,
pub sections: Vec<SectionConfig>,
pub clients: Vec<ClientConfig>,
#[serde(default)]
pub kubernetes: Option<KubernetesAuthConfig>,
}
#[derive(Debug, Clone, serde::Deserialize)]
#[serde(deny_unknown_fields)]
pub struct KubernetesAuthConfig {
#[serde(default)]
pub audience: Option<String>,
pub grants: Vec<KubernetesGrant>,
}
#[derive(Debug, Clone, serde::Deserialize)]
#[serde(deny_unknown_fields)]
pub struct KubernetesGrant {
pub service_account: String,
pub applications: Vec<String>,
}
impl Default for ServerConfig {
fn default() -> Self {
Self {
bind: default_bind(),
insecure: false,
tls: None,
allow_anonymous: false,
watch_debounce_ms: default_debounce_ms(),
max_stream_connections: default_max_streams(),
sections: Vec::new(),
clients: Vec::new(),
kubernetes: None,
}
}
}