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