use serde::{Deserialize, Serialize};
pub const UNRESTRICTED_ACKNOWLEDGEMENT: &str = "I understand this disables all authorization";
#[derive(Debug, Clone, Default, Serialize, Deserialize, schemars::JsonSchema)]
#[serde(deny_unknown_fields)]
pub struct GovernanceConfig {
#[serde(default)]
pub authz: Option<AuthzConfig>,
#[serde(default)]
pub audit: AuditConfig,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema)]
#[serde(deny_unknown_fields)]
pub struct AuditConfig {
#[serde(default = "default_payload_cap_bytes")]
pub payload_cap_bytes: usize,
}
impl AuditConfig {
pub const DEFAULT_PAYLOAD_CAP_BYTES: usize = 1024 * 1024;
pub const MIN_PAYLOAD_CAP_BYTES: usize = 64 * 1024;
}
impl Default for AuditConfig {
fn default() -> Self {
Self {
payload_cap_bytes: Self::DEFAULT_PAYLOAD_CAP_BYTES,
}
}
}
const fn default_payload_cap_bytes() -> usize {
AuditConfig::DEFAULT_PAYLOAD_CAP_BYTES
}
#[derive(Debug, Clone, Serialize, Deserialize, schemars::JsonSchema)]
#[serde(deny_unknown_fields)]
pub struct AuthzConfig {
pub hook: AuthzHookConfig,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema)]
#[serde(rename_all = "lowercase")]
pub enum AuthzMode {
Webhook,
Extension,
Disabled,
Unrestricted,
}
#[derive(Debug, Clone, Serialize, Deserialize, schemars::JsonSchema)]
#[serde(deny_unknown_fields)]
pub struct AuthzHookConfig {
pub mode: AuthzMode,
#[serde(default)]
pub url: Option<String>,
#[serde(default = "default_timeout_ms")]
pub timeout_ms: u64,
#[serde(default)]
pub acknowledgement: Option<String>,
}
const fn default_timeout_ms() -> u64 {
500
}