sslx 0.3.1

The modern way to work with certificates and TLS
Documentation
use crate::cert::CertInfo;
use serde::Serialize;

#[derive(Serialize)]
pub struct JsonCertOutput {
    pub certificates: Vec<JsonCert>,
}

#[derive(Serialize)]
pub struct JsonCert {
    pub subject: String,
    pub issuer: String,
    pub serial: String,
    pub not_before: String,
    pub not_after: String,
    pub days_remaining: i64,
    pub is_expired: bool,
    pub key_type: String,
    pub key_bits: u32,
    pub sans: Vec<String>,
    pub sha256_fingerprint: String,
    pub is_ca: bool,
}

impl From<&CertInfo> for JsonCert {
    fn from(cert: &CertInfo) -> Self {
        Self {
            subject: cert.subject.clone(),
            issuer: cert.issuer.clone(),
            serial: cert.serial_hex.clone(),
            not_before: cert.not_before.format("%Y-%m-%dT%H:%M:%SZ").to_string(),
            not_after: cert.not_after.format("%Y-%m-%dT%H:%M:%SZ").to_string(),
            days_remaining: cert.days_remaining(),
            is_expired: cert.is_expired(),
            key_type: cert.key_type.to_string(),
            key_bits: cert.key_bits,
            sans: cert.sans.clone(),
            sha256_fingerprint: cert.sha256_fingerprint.clone(),
            is_ca: cert.is_ca,
        }
    }
}

#[derive(Serialize)]
pub struct JsonConnectionOutput {
    pub host: String,
    pub port: u16,
    pub tls_version: String,
    pub cipher_suite: String,
    pub alpn: Option<String>,
    pub chain: JsonCertOutput,
}

#[derive(Serialize)]
pub struct JsonVerifyOutput {
    pub valid: bool,
    pub error: Option<String>,
    pub chain_length: usize,
    pub certificate: JsonCert,
}

#[derive(Serialize)]
pub struct JsonGenerateOutput {
    pub cert_path: String,
    pub key_path: String,
    pub subject: String,
    pub sans: Vec<String>,
    pub days: u32,
    pub key_type: String,
}