pipa_core/engine/
logs.rs

1//! Log verification functions for the engine
2
3use crate::engine::log_action;
4use crate::logging::AuditLogger;
5use crate::logging::verify::{FileVerification, verify_all, verify_date};
6
7/// Result of log verification
8pub 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
18/// Verify logs for a specific date or all logs
19pub 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}