use citadel_types::crypto::{CryptoParameters, SecrecyMode, SecurityLevel};
use citadel_types::prelude::HeaderObfuscatorSettings;
use citadel_types::proto::SessionSecuritySettings;
#[derive(Default)]
pub struct SessionSecuritySettingsBuilder {
security_level: Option<SecurityLevel>,
secrecy_mode: Option<SecrecyMode>,
crypto_params: Option<CryptoParameters>,
header_obfuscator_settings: Option<HeaderObfuscatorSettings>,
}
impl SessionSecuritySettingsBuilder {
pub fn with_security_level(mut self, security_level: SecurityLevel) -> Self {
self.security_level = Some(security_level);
self
}
pub fn with_secrecy_mode(mut self, secrecy_mode: SecrecyMode) -> Self {
self.secrecy_mode = Some(secrecy_mode);
self
}
pub fn with_crypto_params(mut self, params: impl Into<CryptoParameters>) -> Self {
self.crypto_params = Some(params.into());
self
}
pub fn with_header_obfuscator_settings(
mut self,
header_obfuscator_settings: impl Into<HeaderObfuscatorSettings>,
) -> Self {
self.header_obfuscator_settings = Some(header_obfuscator_settings.into());
self
}
pub fn build(self) -> Result<SessionSecuritySettings, anyhow::Error> {
let settings = SessionSecuritySettings {
security_level: self.security_level.unwrap_or_default(),
secrecy_mode: self.secrecy_mode.unwrap_or_default(),
crypto_params: self.crypto_params.unwrap_or_default(),
header_obfuscator_settings: self.header_obfuscator_settings.unwrap_or_default(),
};
citadel_types::utils::validate_crypto_params(&settings.crypto_params)?;
Ok(settings)
}
}