ares/checkers/
regex_checker.rs

1use gibberish_or_not::Sensitivity;
2use lemmeknow::Identifier;
3
4use super::checker_type::{Check, Checker};
5use crate::{checkers::checker_result::CheckResult, config::get_config};
6use log::trace;
7use regex::Regex;
8
9/// The Regex Checker checks if the text matches a known Regex pattern.
10/// This is the struct for it.
11pub struct RegexChecker;
12
13impl Check for Checker<RegexChecker> {
14    fn new() -> Self {
15        Checker {
16            name: "Regex Checker",
17            description: "Uses Regex to check for regex matches, useful for finding cribs.",
18            link: "https://github.com/rust-lang/regex",
19            tags: vec!["crib", "regex"],
20            expected_runtime: 0.01,
21            popularity: 1.0,
22            lemmeknow_config: Identifier::default(),
23            sensitivity: Sensitivity::Medium, // Default to Medium sensitivity
24            enhanced_detector: None,
25            _phantom: std::marker::PhantomData,
26        }
27    }
28
29    fn check(&self, text: &str) -> CheckResult {
30        trace!("Checking {} with regex", text);
31        // TODO put this into a lazy static so we don't generate it everytime
32        let config = get_config();
33        let regex_to_parse = config.regex.clone();
34        let re = Regex::new(&regex_to_parse.unwrap()).unwrap();
35
36        let regex_check_result = re.is_match(text);
37        let mut plaintext_found = false;
38        let printed_name = format!("Regex matched: {re}");
39        if regex_check_result {
40            plaintext_found = true;
41        }
42
43        CheckResult {
44            is_identified: plaintext_found,
45            text: text.to_string(),
46            checker_name: self.name,
47            checker_description: self.description,
48            description: printed_name,
49            link: self.link,
50        }
51    }
52
53    fn with_sensitivity(mut self, sensitivity: Sensitivity) -> Self {
54        self.sensitivity = sensitivity;
55        self
56    }
57
58    fn get_sensitivity(&self) -> Sensitivity {
59        self.sensitivity
60    }
61}