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}