| 21 | |
| 22 | #[derive(Debug, Clone, Serialize, Deserialize)] |
| 23 | pub struct HardcodedSecret { |
| 24 | pub secret_type: String, |
| 25 | pub secret_value: String, |
| 26 | pub secret_preview: String, |
| 27 | pub found_in_url: String, |
| 28 | /// Direct URL to the JavaScript file where this secret was found (for easy access) |
| 29 | #[serde(skip_serializing_if = "Option::is_none")] |
| 30 | pub js_source_url: Option<String>, |
| 31 | pub context: String, |
| 32 | pub severity: String, |
| 33 | pub validated: bool, |
| 34 | pub validation_status: String, |
| 35 | pub discovered_at: String, |
| 36 | // Enhanced fields for detailed code context and remediation |
| 37 | #[serde(skip_serializing_if = "Option::is_none")] |
| 38 | pub code_snippet: Option<String>, |
| 39 | #[serde(skip_serializing_if = "Option::is_none")] |
| 40 | pub has_code_context: Option<bool>, |
| 41 | #[serde(skip_serializing_if = "Option::is_none")] |
| 42 | pub line_number: Option<i32>, |
| 43 | #[serde(skip_serializing_if = "Option::is_none")] |
| 44 | pub remediation: Option<String>, |
| 45 | } |
| 46 | |
| 47 | #[derive(Debug, Clone, Serialize, Deserialize)] |
| 48 | pub struct CloudStorageExposure { |
nothing calls this directly
no outgoing calls
no test coverage detected