From b6d6c141d9d0dfdb4d6fd3ec2c0eec3f036f56ab Mon Sep 17 00:00:00 2001 From: cn-kali-team Date: Sat, 25 Nov 2023 22:55:12 +0800 Subject: [PATCH] fix format --- nvd-api/src/v2/api.rs | 19 ++++++-- nvd-api/src/v2/cve_history.rs | 12 +++--- nvd-api/src/v2/mod.rs | 12 ++++++ nvd-api/src/v2/products.rs | 28 ++++++++++++ nvd-api/src/v2/vulnerabilities.rs | 72 +++++++++++++------------------ 5 files changed, 90 insertions(+), 53 deletions(-) diff --git a/nvd-api/src/v2/api.rs b/nvd-api/src/v2/api.rs index 94e75b2..db0b594 100644 --- a/nvd-api/src/v2/api.rs +++ b/nvd-api/src/v2/api.rs @@ -1,12 +1,23 @@ use crate::pagination::Object; +use crate::v2::products::{CpeMatchParameters, CpeParameters}; use crate::v2::vulnerabilities::CveParameters; use crate::{Error, NVDApi}; -const ROUTER: &str = "cve"; - impl NVDApi { - pub async fn vulnerabilities(&self, query: CveParameters) -> Result { - let u = format!("{}/{}/{}", self.base_path, self.version, ROUTER); + pub async fn cve(&self, query: CveParameters) -> Result { + let u = format!("{}/{}/{}", self.base_path, "cves", self.version); + self.request(self.client.get(u).query(&query)).await + } + pub async fn cve_history(&self, query: CveParameters) -> Result { + let u = format!("{}/{}/{}", self.base_path, "cvehistory", self.version); + self.request(self.client.get(u).query(&query)).await + } + pub async fn cpe(&self, query: CpeParameters) -> Result { + let u = format!("{}/{}/{}", self.base_path, "cpes", self.version); + self.request(self.client.get(u).query(&query)).await + } + pub async fn cpe_match(&self, query: CpeMatchParameters) -> Result { + let u = format!("{}/{}/{}", self.base_path, "cpematch", self.version); self.request(self.client.get(u).query(&query)).await } } diff --git a/nvd-api/src/v2/cve_history.rs b/nvd-api/src/v2/cve_history.rs index 567f750..517ceba 100644 --- a/nvd-api/src/v2/cve_history.rs +++ b/nvd-api/src/v2/cve_history.rs @@ -4,19 +4,19 @@ use crate::v2::LimitOffset; #[derive(Debug, Serialize, Deserialize, PartialEq, Clone, Eq)] #[serde(rename_all = "camelCase")] pub struct CveHistoryParameters { - cve_id: Option, + pub cve_id: Option, #[serde(flatten)] - change_date: Option, - event_name: Option, + pub change_date: Option, + pub event_name: Option, #[serde(flatten)] - limit_offset: Option, + pub limit_offset: Option, } #[derive(Debug, Serialize, Deserialize, PartialEq, Clone, Eq)] #[serde(rename_all = "camelCase")] pub struct ChangeDate { - change_start_date: String, - change_end_date: String, + pub change_start_date: String, + pub change_end_date: String, } #[derive(Debug, Serialize, Deserialize, PartialEq, Clone, Eq)] diff --git a/nvd-api/src/v2/mod.rs b/nvd-api/src/v2/mod.rs index 24f7050..8d1fd22 100644 --- a/nvd-api/src/v2/mod.rs +++ b/nvd-api/src/v2/mod.rs @@ -16,3 +16,15 @@ pub struct LimitOffset { pub struct Vulnerabilities { cve: cve::api::CVE, } +#[derive(Debug, Serialize, Deserialize, PartialEq, Clone, Eq)] +#[serde(rename_all = "camelCase")] +pub struct Keyword { + keyword_exact_match: bool, + keyword_search: String, +} +#[derive(Debug, Serialize, Deserialize, PartialEq, Clone, Eq)] +#[serde(rename_all = "camelCase")] +pub struct LastModDate { + last_mod_start_date: String, + last_mod_end_date: String, +} \ No newline at end of file diff --git a/nvd-api/src/v2/products.rs b/nvd-api/src/v2/products.rs index e69de29..1bf3133 100644 --- a/nvd-api/src/v2/products.rs +++ b/nvd-api/src/v2/products.rs @@ -0,0 +1,28 @@ +use crate::v2::{Keyword, LastModDate, LimitOffset}; +use serde::{Deserialize, Serialize}; + +#[derive(Debug, Serialize, Deserialize, PartialEq, Clone, Eq)] +#[serde(rename_all = "camelCase")] +pub struct CpeParameters { + pub cpe_name_id: Option, + pub cpe_match_string: Option, + #[serde(flatten)] + pub keyword: Option, + #[serde(flatten)] + pub last_mod: Option, + // UUID + pub match_criteria_id: Option, + #[serde(flatten)] + pub limit_offset: Option, +} + +pub struct CpeMatchParameters { + pub cve_id: Option, + #[serde(flatten)] + pub last_mod: Option, + pub match_criteria_id: Option, + #[serde(flatten)] + pub keyword: Option, + #[serde(flatten)] + pub limit_offset: Option, +} diff --git a/nvd-api/src/v2/vulnerabilities.rs b/nvd-api/src/v2/vulnerabilities.rs index 5a0ed10..c2e3e2a 100644 --- a/nvd-api/src/v2/vulnerabilities.rs +++ b/nvd-api/src/v2/vulnerabilities.rs @@ -1,58 +1,58 @@ +use crate::v2::{Keyword, LastModDate, LimitOffset}; use serde::{Deserialize, Serialize}; -use crate::v2::LimitOffset; // https://nvd.nist.gov/developers/vulnerabilities #[derive(Debug, Serialize, Deserialize, PartialEq, Clone, Eq)] #[serde(rename_all = "camelCase")] pub struct CveParameters { - cpe_name: Option, - cve_id: Option, - cvss_v2_metrics: Option, - cvss_v2_severity: Option, - cvss_v3_metrics: Option, - cvss_v3_severity: Option, - cwe_id: Option, - has_cert_alerts: Option, - has_cert_notes: Option, - has_kev: Option, - has_oval: Option, - is_vulnerable: Option, + pub cpe_name: Option, + pub cve_id: Option, + pub cvss_v2_metrics: Option, + pub cvss_v2_severity: Option, + pub cvss_v3_metrics: Option, + pub cvss_v3_severity: Option, + pub cwe_id: Option, + pub has_cert_alerts: Option, + pub has_cert_notes: Option, + pub has_kev: Option, + pub has_oval: Option, + pub is_vulnerable: Option, #[serde(flatten)] - keyword: Option, + pub keyword: Option, #[serde(flatten)] - last_mod: Option, - no_rejected: Option, + pub last_mod: Option, + pub no_rejected: Option, #[serde(flatten)] - pub_date: Option, + pub pub_date: Option, #[serde(flatten)] - limit_offset: Option, - source_identifier: Option, + pub limit_offset: Option, + pub source_identifier: Option, #[serde(flatten)] - virtual_match: Option, + pub virtual_match: Option, } #[derive(Debug, Serialize, Deserialize, PartialEq, Clone, Eq)] #[serde(rename_all = "camelCase")] pub struct VirtualMatch { - virtual_match_string: String, + pub virtual_match_string: String, #[serde(flatten)] - version_start: Option, + pub version_start: Option, #[serde(flatten)] - version_end: Option, + pub version_end: Option, } #[derive(Debug, Serialize, Deserialize, PartialEq, Clone, Eq)] #[serde(rename_all = "camelCase")] pub struct VersionStart { - version_start: String, - version_start_type: String, + pub version_start: String, + pub version_start_type: String, } #[derive(Debug, Serialize, Deserialize, PartialEq, Clone, Eq)] #[serde(rename_all = "camelCase")] pub struct VersionEnd { - version_end: String, - version_end_type: String, + pub version_end: String, + pub version_end_type: String, } #[derive(Debug, Serialize, Deserialize, PartialEq, Clone, Eq)] @@ -62,25 +62,11 @@ pub enum VersionType { Excluding, } - - #[derive(Debug, Serialize, Deserialize, PartialEq, Clone, Eq)] #[serde(rename_all = "camelCase")] pub struct PubDate { - pub_start_date: String, - pub_end_date: String, + pub pub_start_date: String, + pub pub_end_date: String, } -#[derive(Debug, Serialize, Deserialize, PartialEq, Clone, Eq)] -#[serde(rename_all = "camelCase")] -pub struct Keyword { - keyword_exact_match: bool, - keyword_search: String, -} -#[derive(Debug, Serialize, Deserialize, PartialEq, Clone, Eq)] -#[serde(rename_all = "camelCase")] -pub struct LastModDate { - last_mod_start_date: String, - last_mod_end_date: String, -}