1use serde::{Deserialize, Serialize};
2use serde_json::Value;
3
4#[derive(Debug, Clone, Serialize, Deserialize, Default)]
5pub struct ScanRecord {
6 pub target: String,
7 pub tool: String,
8 pub title: String,
9 pub severity: String,
10 pub port: Option<u16>,
11 pub cve: Option<String>,
12 pub service: Option<String>,
13 pub raw: Value,
14 #[serde(default, skip_serializing_if = "Option::is_none")]
15 pub nvd_description: Option<String>,
16 #[serde(default, skip_serializing_if = "Option::is_none")]
17 pub nvd_cvss_v3: Option<f32>,
18 #[serde(default, skip_serializing_if = "Option::is_none")]
19 pub nvd_cvss_v3_severity: Option<String>,
20 #[serde(default, skip_serializing_if = "Option::is_none")]
21 pub nvd_cvss_v2: Option<f32>,
22 #[serde(default, skip_serializing_if = "Option::is_none")]
23 pub nvd_published: Option<String>,
24 #[serde(default, skip_serializing_if = "Option::is_none")]
25 pub nvd_last_modified: Option<String>,
26 #[serde(default, skip_serializing_if = "Vec::is_empty")]
27 pub nvd_references: Vec<String>,
28}
29
30#[derive(Debug, Clone, Serialize, Deserialize)]
31pub struct DedupResult {
32 pub unique_count: usize,
33 pub removed_count: usize,
34 pub records: Vec<ScanRecord>,
35}
36
37#[derive(Debug, Clone, Serialize, Deserialize)]
38pub struct DedupStats {
39 pub total: usize,
40 pub unique: usize,
41 pub removed: usize,
42}
43
44#[derive(Debug, Clone, Serialize, Deserialize)]
45pub struct ModuleSuggestion {
46 pub service_banner: String,
47 pub suggested_module: String,
48 pub confidence: String,
49}
50
51#[derive(Debug, Clone, Serialize, Deserialize)]
52pub struct PayloadRecipe {
53 pub platform: String,
54 pub architecture: String,
55 pub lhost: String,
56 pub lport: u16,
57 pub format: String,
58 pub output_path: String,
59 pub encoder: Option<String>,
60 pub iterations: Option<u32>,
61 pub command: String,
62}
63
64#[derive(Debug, Clone, Serialize, Deserialize)]
65pub struct NVDCVEInfo {
66 pub cve_id: String,
67 pub description: String,
68 pub cvss_v3_score: Option<f32>,
69 pub cvss_v3_severity: Option<String>,
70 pub cvss_v2_score: Option<f32>,
71 pub published: String,
72 pub last_modified: String,
73 pub references: Vec<String>,
74}
75
76#[derive(Debug, Clone, Serialize, Deserialize)]
77pub struct MSFWorkspaceInfo {
78 pub name: String,
79 pub scope: String,
80 pub host_count: u64,
81}
82
83#[derive(Debug, Clone, Serialize, Deserialize)]
84pub struct MSFHostInfo {
85 pub address: String,
86 pub os_name: String,
87 pub os_flavor: String,
88 pub state: String,
89 pub notes_count: u64,
90}
91
92#[derive(Debug, Clone, Serialize, Deserialize)]
93pub struct MSFLoginResult {
94 pub success: bool,
95 pub token: String,
96 pub error: String,
97}
98
99#[derive(Debug, Clone, Serialize, Deserialize)]
100pub struct MSFWorkspacesResult {
101 pub workspaces: Vec<MSFWorkspaceInfo>,
102 pub error: String,
103}
104
105#[derive(Debug, Clone, Serialize, Deserialize)]
106pub struct MSFHostsResult {
107 pub hosts: Vec<MSFHostInfo>,
108 pub error: String,
109}
110
111#[derive(Debug, Clone, Serialize, Deserialize)]
112pub struct MSFHostCheckResult {
113 pub exists: bool,
114 pub error: String,
115}