cherrybomb_engine/scan/
macros.rs

1#[macro_export]
2macro_rules! impl_passive_checks{
3    ( $( ($check:ident,$check_func:ident,$name:literal,$desc:literal )),* ) => {
4        #[derive(Debug, Clone, Serialize, Deserialize, PartialEq,Eq, EnumIter)]
5        pub enum PassiveChecks{
6            $(
7                $check(Vec<Alert>),
8            )*
9        }
10        impl PassiveChecks{
11            pub fn from_string(string:&str)->Option<Self>{
12                match string{
13                    $(
14                        $name=>Some(PassiveChecks::$check(vec![])),
15                    )*
16                    _=>None,
17                }
18            }
19            pub fn description(&self)->&'static str{
20                match &self{
21                    $(
22                        PassiveChecks::$check(_)=>$desc,
23                    )*
24                }
25            }
26            pub fn name(&self)->&'static str{
27                match &self{
28                    $(
29                        PassiveChecks::$check(_)=>$name,
30                    )*
31                }
32            }
33            pub fn inner(&self)->Vec<Alert>{
34                match &self{
35                    $(
36                        PassiveChecks::$check(i)=>i.to_vec(),
37                    )*
38                }
39            }
40            pub fn create_checks( vec_checks: &Vec<String>) ->Vec<PassiveChecks>{ //get a vec of checks name and create check passive struct
41                vec_checks
42                .into_iter()
43                .filter_map(|name| PassiveChecks::from_string(&name))
44                .collect()
45        }
46
47        }
48        impl <T:OAS+Serialize>PassiveSwaggerScan<T>{
49            pub fn run_check(&self,check:PassiveChecks)->PassiveChecks{
50                match check{
51                    $(
52                        PassiveChecks::$check(_)=>PassiveChecks::$check(self.$check_func()),
53                    )*
54                }
55            }
56        }
57    }
58}
59
60#[macro_export]
61macro_rules! impl_active_checks{
62    ( $( ($check:ident,$check_func:ident,$response_func:ident,$name:literal,$desc:literal )),* ) => {
63        #[derive(Debug, Clone, Serialize, Deserialize, PartialEq,Eq, EnumIter)]
64        pub enum ActiveChecks{
65            $(
66                $check((Vec<Alert>,AttackLog)),
67            )*
68        }
69        impl ActiveChecks{
70            pub fn description(&self)->&'static str{
71                match &self{
72                    $(
73                        ActiveChecks::$check(_)=>$desc,
74                    )*
75                }
76            }
77            pub fn from_string(str1:&str)->Option<Self>{
78                match str1{
79                    $(
80                        $name=>Some(ActiveChecks::$check((vec![],AttackLog::default()))),
81                    )*
82                    _=>None,
83                }
84            }
85            pub fn name(&self)->&'static str{
86                match &self{
87                    $(
88                        ActiveChecks::$check(_)=>$name,
89                    )*
90                }
91            }
92            pub fn inner(&self)->Vec<Alert>{
93                match &self{
94                    $(
95                        ActiveChecks::$check(i)=>i.0.to_vec(),
96                    )*
97                }
98            }
99            pub fn create_checks( vec_checks: &Vec<String>) ->Vec<ActiveChecks>{ //get a vec of checks name and create passive check struct
100                vec_checks
101                .into_iter()
102                .filter_map(|name| ActiveChecks::from_string(&name))
103                .collect()
104        }
105        }
106
107        impl <T:OAS+Serialize>ActiveScan<T>{
108            pub async fn run_check(&self,check:ActiveChecks,auth:&Authorization)->ActiveChecks{
109                match check{
110                    $(
111                        ActiveChecks::$check(_)=>ActiveChecks::$check(Self::$response_func(self.$check_func(auth).await)),
112                    )*
113                }
114            }
115        }
116    }
117}