use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Deserialize, Serialize)]
#[serde(rename_all = "snake_case")]
pub enum SecretBackend {
Keyring,
ConfigSeed,
Aws,
Gcp,
Azure,
Vault,
Kubernetes,
Plaintext,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct SecretsConfig {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub backend: Option<SecretBackend>,
pub seed: Option<String>,
pub aws_secret_name: Option<String>,
pub aws_region: Option<String>,
pub gcp_project: Option<String>,
pub gcp_secret_name: Option<String>,
pub azure_vault_url: Option<String>,
pub azure_secret_name: Option<String>,
#[serde(default = "default_keyring_service")]
pub keyring_service: String,
pub vault_addr: Option<String>,
#[serde(default = "default_vault_kv_mount")]
pub vault_kv_mount: String,
pub vault_secret_path: Option<String>,
#[serde(default = "default_vault_secret_key")]
pub vault_secret_key: String,
pub vault_namespace: Option<String>,
#[serde(default = "default_vault_auth_method")]
pub vault_auth_method: String,
pub vault_k8s_role: Option<String>,
#[serde(default = "default_vault_k8s_mount")]
pub vault_k8s_mount: String,
#[serde(default = "default_vault_k8s_jwt_path")]
pub vault_k8s_jwt_path: String,
pub vault_token: Option<String>,
pub vault_approle_role_id: Option<String>,
pub vault_approle_secret_id: Option<String>,
#[serde(default = "default_vault_approle_mount")]
pub vault_approle_mount: String,
#[serde(default)]
pub vault_skip_verify: bool,
pub k8s_secret_name: Option<String>,
pub k8s_namespace: Option<String>,
#[serde(default = "default_k8s_secret_key")]
pub k8s_secret_key: String,
#[serde(default)]
pub allow_plaintext: bool,
}
fn default_keyring_service() -> String {
"vta".to_string()
}
fn default_vault_kv_mount() -> String {
"secret".to_string()
}
fn default_vault_secret_key() -> String {
"seed".to_string()
}
fn default_vault_auth_method() -> String {
"kubernetes".to_string()
}
fn default_vault_k8s_mount() -> String {
"kubernetes".to_string()
}
fn default_vault_k8s_jwt_path() -> String {
"/var/run/secrets/kubernetes.io/serviceaccount/token".to_string()
}
fn default_k8s_secret_key() -> String {
"seed".to_string()
}
fn default_vault_approle_mount() -> String {
"approle".to_string()
}
impl Default for SecretsConfig {
fn default() -> Self {
Self {
backend: None,
seed: None,
aws_secret_name: None,
aws_region: None,
gcp_project: None,
gcp_secret_name: None,
azure_vault_url: None,
azure_secret_name: None,
keyring_service: default_keyring_service(),
vault_addr: None,
vault_kv_mount: default_vault_kv_mount(),
vault_secret_path: None,
vault_secret_key: default_vault_secret_key(),
vault_namespace: None,
vault_auth_method: default_vault_auth_method(),
vault_k8s_role: None,
vault_k8s_mount: default_vault_k8s_mount(),
vault_k8s_jwt_path: default_vault_k8s_jwt_path(),
vault_token: None,
vault_approle_role_id: None,
vault_approle_secret_id: None,
vault_approle_mount: default_vault_approle_mount(),
vault_skip_verify: false,
k8s_secret_name: None,
k8s_namespace: None,
k8s_secret_key: default_k8s_secret_key(),
allow_plaintext: false,
}
}
}