use std::time::Duration;
use crate::protocols::Protocol;
use crate::starttls::StarttlsProtocol;
#[derive(Debug, Clone)]
pub struct ProtocolTestConfig {
pub protocols: Option<Vec<Protocol>>,
pub starttls: Option<StarttlsProtocol>,
pub sni_name: Option<String>,
pub bugs_mode: bool,
pub timeout: Duration,
}
impl ProtocolTestConfig {
pub fn from_args(args: &crate::cli::Args) -> Self {
Self {
protocols: args.protocols_to_test(),
starttls: args.starttls_protocol(),
sni_name: args.tls.sni_name.clone(),
bugs_mode: args.tls.bugs,
timeout: Duration::from_secs(args.connection.socket_timeout.unwrap_or(10)),
}
}
}
#[derive(Debug, Clone)]
pub struct CipherTestConfig {
pub test_all_ciphers: bool,
pub max_concurrent: usize,
pub timeout: Duration,
}
impl CipherTestConfig {
const DEFAULT_MAX_CONCURRENT: usize = 10;
pub fn from_args(args: &crate::cli::Args) -> Self {
let max_concurrent = if args.network.max_concurrent_ciphers == 0 {
Self::DEFAULT_MAX_CONCURRENT
} else {
args.network.max_concurrent_ciphers
};
Self {
test_all_ciphers: args.scan.each_cipher,
max_concurrent,
timeout: Duration::from_secs(args.connection.socket_timeout.unwrap_or(10)),
}
}
}
#[derive(Debug, Clone)]
pub struct CertificateConfig {
pub check_revocation: bool,
pub check_ct_logs: bool,
pub hardfail: bool,
}
impl CertificateConfig {
pub fn from_args(args: &crate::cli::Args) -> Self {
Self {
check_revocation: args.tls.phone_out,
check_ct_logs: args.ct_logs.enable,
hardfail: args.tls.hardfail,
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_protocol_config_defaults() {
let args = crate::cli::Args::default();
let config = ProtocolTestConfig::from_args(&args);
assert!(config.protocols.is_none());
assert!(config.starttls.is_none());
assert!(config.sni_name.is_none());
assert!(!config.bugs_mode);
assert_eq!(config.timeout, Duration::from_secs(10));
}
#[test]
fn test_cipher_config_defaults() {
let args = crate::cli::Args::default();
let config = CipherTestConfig::from_args(&args);
assert!(!config.test_all_ciphers);
assert_eq!(config.max_concurrent, 10);
assert_eq!(config.timeout, Duration::from_secs(10));
}
#[test]
fn test_certificate_config_defaults() {
let args = crate::cli::Args::default();
let config = CertificateConfig::from_args(&args);
assert!(!config.check_revocation);
assert!(!config.check_ct_logs);
assert!(!config.hardfail);
}
}