diff --git a/crates/atuin-client/src/history.rs b/crates/atuin-client/src/history.rs index 0503b43d..48d48eb7 100644 --- a/crates/atuin-client/src/history.rs +++ b/crates/atuin-client/src/history.rs @@ -8,10 +8,10 @@ use atuin_common::record::DecryptedData; use atuin_common::utils::uuid_v7; use eyre::{bail, eyre, Result}; -use regex::RegexSet; +use crate::secrets::SECRET_PATTERNS_RE; +use crate::settings::Settings; use crate::utils::get_host_user; -use crate::{secrets::SECRET_PATTERNS, settings::Settings}; use time::OffsetDateTime; mod builder; @@ -374,13 +374,10 @@ impl History { } pub fn should_save(&self, settings: &Settings) -> bool { - let secret_regex = SECRET_PATTERNS.iter().map(|f| f.1); - let secret_regex = RegexSet::new(secret_regex).expect("Failed to build secrets regex"); - !(self.command.starts_with(' ') || settings.history_filter.is_match(&self.command) || settings.cwd_filter.is_match(&self.cwd) - || (secret_regex.is_match(&self.command)) && settings.secrets_filter) + || (settings.secrets_filter && SECRET_PATTERNS_RE.is_match(&self.command))) } } diff --git a/crates/atuin-client/src/secrets.rs b/crates/atuin-client/src/secrets.rs index c3053b79..e249910d 100644 --- a/crates/atuin-client/src/secrets.rs +++ b/crates/atuin-client/src/secrets.rs @@ -1,11 +1,14 @@ // This file will probably trigger a lot of scanners. Sorry. +use regex::RegexSet; +use std::sync::LazyLock; + pub enum TestValue<'a> { Single(&'a str), Multiple(&'a [&'a str]), } -// A list of (name, regex, test), where test should match against regex +/// A list of `(name, regex, test)`, where `test` should match against `regex`. pub static SECRET_PATTERNS: &[(&str, &str, TestValue)] = &[ ( "AWS Access Key ID", @@ -114,6 +117,12 @@ pub static SECRET_PATTERNS: &[(&str, &str, TestValue)] = &[ ), ]; +/// The `regex` expressions from [`SECRET_PATTERNS`] compiled into a `RegexSet`. +pub static SECRET_PATTERNS_RE: LazyLock = LazyLock::new(|| { + let exprs = SECRET_PATTERNS.iter().map(|f| f.1); + RegexSet::new(exprs).expect("Failed to build secrets regex") +}); + #[cfg(test)] mod tests { use regex::Regex;