Skip to main content

lobe_core/engine/
tls.rs

1use crate::models::{CertificateInfo, TlsReport, TlsStatus};
2
3pub fn report_for_http() -> TlsReport {
4    TlsReport {
5        enabled: false,
6        status: TlsStatus::NotUsed,
7        version: None,
8        cipher_suite: None,
9        certificate: None,
10        error_message: None,
11    }
12}
13
14pub fn report_for_https_success(
15    version: Option<String>,
16    cipher_suite: Option<String>,
17    certificate: Option<CertificateInfo>,
18) -> TlsReport {
19    TlsReport {
20        enabled: true,
21        status: TlsStatus::HandshakeSucceeded,
22        version,
23        cipher_suite,
24        certificate,
25        error_message: None,
26    }
27}
28
29pub fn report_for_https_failure(error_message: impl Into<String>) -> TlsReport {
30    TlsReport {
31        enabled: true,
32        status: TlsStatus::HandshakeFailed,
33        version: None,
34        cipher_suite: None,
35        certificate: None,
36        error_message: Some(error_message.into()),
37    }
38}
39
40pub fn report_for_scheme(scheme: &str) -> TlsReport {
41    match scheme {
42        "https" => report_for_https_success(None, None, None),
43        _ => report_for_http(),
44    }
45}
46
47#[cfg(test)]
48mod tests {
49    use crate::models::TlsStatus;
50
51    use super::{report_for_http, report_for_https_failure, report_for_https_success};
52
53    #[test]
54    fn report_for_http_marks_tls_as_unused() {
55        let report = report_for_http();
56
57        assert!(!report.enabled);
58        assert_eq!(report.status, TlsStatus::NotUsed);
59        assert_eq!(report.error_message, None);
60    }
61
62    #[test]
63    fn report_for_https_success_marks_handshake_success() {
64        let report = report_for_https_success(None, None, None);
65
66        assert!(report.enabled);
67        assert_eq!(report.status, TlsStatus::HandshakeSucceeded);
68    }
69
70    #[test]
71    fn report_for_https_failure_carries_error_message() {
72        let report = report_for_https_failure("certificate expired");
73
74        assert!(report.enabled);
75        assert_eq!(report.status, TlsStatus::HandshakeFailed);
76        assert_eq!(report.error_message.as_deref(), Some("certificate expired"));
77    }
78}