ares/checkers/
regex_checker.rs

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