use std::fmt;
#[non_exhaustive]
#[derive(Clone, Debug, PartialEq, Eq)]
pub enum NetworkSecurityError {
TlsVersionTooLow {
minimum: super::tls_policy::TlsVersion,
actual: super::tls_policy::TlsVersion,
},
WeakCipher {
cipher: String,
},
PinMismatch,
CertificateExpired,
NoPinsConfigured,
CleartextDetected {
url: String,
},
InsecureScheme {
scheme: String,
},
CertificateParseError {
detail: String,
},
}
impl fmt::Display for NetworkSecurityError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::TlsVersionTooLow { minimum, actual } => {
write!(f, "TLS version {actual:?} is below minimum {minimum:?}")
}
Self::WeakCipher { cipher } => write!(f, "weak cipher suite: {cipher}"),
Self::PinMismatch => write!(f, "certificate pin mismatch"),
Self::CertificateExpired => write!(f, "certificate has expired"),
Self::NoPinsConfigured => write!(f, "no certificate pins configured"),
Self::CleartextDetected { url } => write!(f, "cleartext traffic detected: {url}"),
Self::InsecureScheme { scheme } => write!(f, "insecure URI scheme: {scheme}"),
Self::CertificateParseError { detail } => {
write!(f, "certificate parse error: {detail}")
}
}
}
}
impl std::error::Error for NetworkSecurityError {}