cherrybomb_engine/scan/
macros.rs1#[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>{ 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>{ 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}