ares/checkers/
athena.rs

1use crate::{checkers::checker_result::CheckResult, config::get_config};
2use lemmeknow::Identifier;
3use log::trace;
4
5use super::{
6    checker_type::{Check, Checker},
7    english::EnglishChecker,
8    human_checker,
9    lemmeknow_checker::LemmeKnow,
10    regex_checker::RegexChecker,
11};
12
13/// Athena checker runs all other checkers
14pub struct Athena;
15
16impl Check for Checker<Athena> {
17    fn new() -> Self {
18        Checker {
19            // TODO: Update fields with proper values
20            name: "Athena Checker",
21            description: "Runs all available checkers",
22            link: "",
23            tags: vec!["athena", "all"],
24            expected_runtime: 0.01,
25            popularity: 1.0,
26            lemmeknow_config: Identifier::default(),
27            _phantom: std::marker::PhantomData,
28        }
29    }
30
31    fn check(&self, text: &str) -> CheckResult {
32        let config = get_config();
33        // Only run regex if its in the config
34        if config.regex.is_some() {
35            trace!("running regex");
36            let regex_checker = Checker::<RegexChecker>::new();
37            let regex_result = regex_checker.check(text);
38            if regex_result.is_identified {
39                let mut check_res = CheckResult::new(&regex_checker);
40                check_res.is_identified = human_checker::human_checker(&regex_result);
41                return check_res;
42            }
43        } else {
44            // In Ciphey if the user uses the regex checker all the other checkers turn off
45            // This is because they are looking for one specific bit of information so will not want the other checkers
46            // TODO: wrap all checkers in oncecell so we only create them once!
47            let lemmeknow = Checker::<LemmeKnow>::new();
48            let lemmeknow_result = lemmeknow.check(text);
49            if lemmeknow_result.is_identified {
50                let mut check_res = CheckResult::new(&lemmeknow);
51                check_res.is_identified = human_checker::human_checker(&lemmeknow_result);
52                return check_res;
53            }
54
55            let english = Checker::<EnglishChecker>::new();
56            let english_result = english.check(text);
57            if english_result.is_identified {
58                let mut check_res = CheckResult::new(&english);
59                check_res.is_identified = human_checker::human_checker(&english_result);
60                return check_res;
61            }
62        }
63
64        CheckResult::new(self)
65    }
66}