1use crate::engine::log_action;
4use crate::logging::AuditLogger;
5use crate::logging::verify::{FileVerification, verify_all, verify_date};
6
7pub struct LogVerification {
9 pub valid: bool,
10 pub verified: usize,
11 pub mismatched: usize,
12 pub missing: usize,
13 pub malformed: usize,
14 pub unsealed: usize,
15 pub files: Vec<FileVerification>,
16}
17
18pub fn verify_logs<L: AuditLogger>(logger: &L, date: Option<&str>) -> (LogVerification, String) {
20 let summary = if let Some(date) = date {
21 verify_date(Some(date))
22 } else {
23 verify_all()
24 };
25
26 let all_valid = summary.mismatched == 0
27 && summary.missing == 0
28 && summary.malformed == 0
29 && summary.unsealed == 0;
30
31 let details = format!(
32 "valid={}, verified={}, mismatched={}, missing={}, malformed={}, unsealed={}",
33 all_valid,
34 summary.verified,
35 summary.mismatched,
36 summary.missing,
37 summary.malformed,
38 summary.unsealed
39 );
40
41 let message = log_action(logger, "logs_verified", Some(&details), None, None, None);
42
43 (
44 LogVerification {
45 valid: all_valid,
46 verified: summary.verified,
47 mismatched: summary.mismatched,
48 missing: summary.missing,
49 malformed: summary.malformed,
50 unsealed: summary.unsealed,
51 files: summary.files,
52 },
53 message,
54 )
55}