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
use clap::{Args, ValueEnum};
use serde::Deserialize;

#[derive(Default, ValueEnum, Deserialize, Clone, Debug)]
pub enum Profile {
    Info,
    #[default]
    Normal,
    Intrusive,
    Passive,
    Full,
}

#[derive(Deserialize, Debug, Default)]
#[serde(default)]
pub struct Config {
    pub file: std::path::PathBuf,
    pub verbosity: Verbosity,
    pub profile: Profile,
    pub passive_include: Vec<String>,
    pub passive_exclude: Vec<String>,
    pub active_include: Vec<String>,
    pub active_exclude: Vec<String>,
    pub servers_override: Vec<String>,
    pub security: Vec<Auth>,
    pub ignore_tls_errors: bool,
    pub no_color: bool,
}

#[derive(ValueEnum, Deserialize, Clone, Debug, Default, PartialOrd, PartialEq)]
pub enum Verbosity {
    Quiet,
    #[default]
    Normal,
    Verbose,
    Debug,
}

#[derive(Args, Deserialize, Debug, Clone)]
pub struct Auth {
    /// Authentication type
    #[arg(long = "type", value_enum)]
    auth_type: AuthType,
    /// Entire String to use as the value
    /// (header-name: header-value / cookie-name: cookie-value / bearer-token)
    #[arg(long = "value")]
    auth_value: String,
    /// Name of the scope matching the security scheme
    #[arg(long = "scope")]
    auth_scope: Option<String>,
}

#[derive(ValueEnum, Deserialize, Clone, Debug)]
pub enum AuthType {
    Basic,
    Bearer,
    Header,
    Cookie,
}