Skip to content

Commit

Permalink
update
Browse files Browse the repository at this point in the history
  • Loading branch information
cn-kali-team committed Nov 22, 2023
1 parent 0e5f700 commit cffebc0
Show file tree
Hide file tree
Showing 12 changed files with 390 additions and 137 deletions.
2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ include = ["LICENSE", "Cargo.toml", "src/**/*.rs"]
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[workspace]
members = ["cpe", "cve", "cvss", "cwe", "helper", "nvd-server", "nvd-yew"]
members = ["cpe", "cve", "cvss", "cwe", "helper", "nvd-server", "nvd-yew", "nvd-api"]
default-members = ["nvd-server"]

#https://github.com/johnthagen/min-sized-rust
Expand Down
9 changes: 6 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,13 @@
## Libraries

### cvss 通用漏洞评分系统
- [doc](https://emo-cat.github.io/nvd-rs/cvss/)
- [doc](https://emo-crab.github.io/nvd-rs/cvss/)

### cve 通用漏洞披露
- [doc](https://emo-cat.github.io/nvd-rs/cve/)
- [doc](https://emo-crab.github.io/nvd-rs/cve/)

### cpe 通用平台枚举
- [doc](https://emo-cat.github.io/nvd-rs/cpe/)
- [doc](https://emo-crab.github.io/nvd-rs/cpe/)

### cwe 通用弱点枚举
- [doc](https://emo-crab.github.io/nvd-rs/cwe/)
2 changes: 1 addition & 1 deletion Trunk.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[build]
target = "nvd-yew/index.html"
dist = "nvd-api/dist"
dist = "nvd-server/dist"

[[proxy]]
backend = "http://127.0.0.1:8888/api/"
50 changes: 27 additions & 23 deletions cvss/src/metric/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -50,37 +50,41 @@ pub use crate::metric::v4::MetricTypeV4;
use std::fmt::{Debug, Display};
use std::str::FromStr;

// TODO: 改宏定义
#[derive(Debug, Clone)]
pub struct Help {
pub worth: Worth,
pub des: String,
pub worth: Worth,
pub des: String,
}

#[derive(Debug, Clone)]
pub enum Worth {
/// 最严重的
Worst,
/// 比较严重的
Worse,
/// 坏
Bad,
/// 还好
Good,
/// 最严重的
Worst,
/// 比较严重的
Worse,
/// 坏
Bad,
/// 还好
Good,
}

pub trait Metric: Clone + Debug + FromStr + Display {
const TYPE: MetricType;
fn name() -> &'static str {
match Self::TYPE {
MetricType::V2(v2) => v2.name(),
MetricType::V3(v3) => v3.name(),
MetricType::V4(v4) => v4.name(),
const TYPE: MetricType;
fn name() -> &'static str {
match Self::TYPE {
MetricType::V2(v2) => v2.name(),
MetricType::V3(v3) => v3.name(),
MetricType::V4(v4) => v4.name(),
}
}
}
fn help(&self) -> Help;
fn score(&self) -> f32;
fn as_str(&self) -> &'static str;
fn help(&self) -> Help;
fn score(&self) -> f32;
fn as_str(&self) -> &'static str;
}

pub enum MetricType {
V2(MetricTypeV2),
V3(MetricTypeV3),
V4(MetricTypeV4),
V2(MetricTypeV2),
V3(MetricTypeV3),
V4(MetricTypeV4),
}
213 changes: 107 additions & 106 deletions cvss/src/severity.rs
Original file line number Diff line number Diff line change
Expand Up @@ -18,154 +18,155 @@ use crate::error::{CVSSError, Result};
use serde::{Deserialize, Serialize};
use std::fmt::{Display, Formatter};
use std::str::FromStr;

/// 定性严重程度
#[derive(Clone, PartialEq, Debug, Deserialize, Serialize)]
#[derive(Clone, PartialEq, Debug, Deserialize, Serialize, Eq)]
#[serde(rename_all = "UPPERCASE")]
pub enum SeverityType {
/// 未校正 | None | 0.0 |
None,
/// 低危 | Low | 0.1 - 3.9 |
Low,
/// 中危 | Medium | 4.0 - 6.9 |
Medium,
/// 高危 | High | 7.0 - 8.9 |
High,
/// 严重 | Critical | 9.0 - 10.0 |
Critical,
/// 未校正 | None | 0.0 |
None,
/// 低危 | Low | 0.1 - 3.9 |
Low,
/// 中危 | Medium | 4.0 - 6.9 |
Medium,
/// 高危 | High | 7.0 - 8.9 |
High,
/// 严重 | Critical | 9.0 - 10.0 |
Critical,
}

impl Display for SeverityType {
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
write!(f, "{}", self.as_str())
}
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
write!(f, "{}", self.as_str())
}
}

impl SeverityType {
fn as_str(&self) -> &'static str {
match self {
SeverityType::None => "None",
SeverityType::Low => "Low",
SeverityType::Medium => "Medium",
SeverityType::High => "High",
SeverityType::Critical => "Critical",
fn as_str(&self) -> &'static str {
match self {
SeverityType::None => "None",
SeverityType::Low => "Low",
SeverityType::Medium => "Medium",
SeverityType::High => "High",
SeverityType::Critical => "Critical",
}
}
}
}

impl From<f32> for SeverityType {
fn from(value: f32) -> Self {
if value < 0.1 {
SeverityType::None
} else if value < 4.0 {
SeverityType::Low
} else if value < 7.0 {
SeverityType::Medium
} else if value < 9.0 {
SeverityType::High
} else {
SeverityType::Critical
fn from(value: f32) -> Self {
if value < 0.1 {
SeverityType::None
} else if value < 4.0 {
SeverityType::Low
} else if value < 7.0 {
SeverityType::Medium
} else if value < 9.0 {
SeverityType::High
} else {
SeverityType::Critical
}
}
}
}

impl FromStr for SeverityType {
type Err = CVSSError;
type Err = CVSSError;

fn from_str(s: &str) -> Result<Self> {
match s {
"None" => Ok(Self::None),
"Low" => Ok(Self::Low),
"Medium" => Ok(Self::Medium),
"High" => Ok(Self::High),
"Critical" => Ok(Self::Critical),
_ => Err(CVSSError::InvalidCVSS {
key: "SeverityType".to_string(),
value: s.to_string(),
expected: "None,Low,Medium,High,Critical".to_string(),
}),
fn from_str(s: &str) -> Result<Self> {
match s {
"None" => Ok(Self::None),
"Low" => Ok(Self::Low),
"Medium" => Ok(Self::Medium),
"High" => Ok(Self::High),
"Critical" => Ok(Self::Critical),
_ => Err(CVSSError::InvalidCVSS {
key: "SeverityType".to_string(),
value: s.to_string(),
expected: "None,Low,Medium,High,Critical".to_string(),
}),
}
}
}
}

#[derive(Clone, PartialEq, Debug, Deserialize, Serialize)]
#[derive(Clone, PartialEq, Debug, Deserialize, Serialize, Eq)]
#[serde(rename_all = "UPPERCASE")]
pub enum SeverityTypeV2 {
/// 未校正 | None | 0.0 |
None,
/// 低危 | Low | 0.0 - 3.9 |
Low,
/// 中危 | Medium | 4.0 - 6.9 |
Medium,
/// 高危 | High | 7.0 - 10.0 |
High,
/// 未校正 | None | 0.0 |
None,
/// 低危 | Low | 0.0 - 3.9 |
Low,
/// 中危 | Medium | 4.0 - 6.9 |
Medium,
/// 高危 | High | 7.0 - 10.0 |
High,
}

impl Display for SeverityTypeV2 {
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
write!(f, "S:{}", self.as_str())
}
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
write!(f, "S:{}", self.as_str())
}
}

impl SeverityTypeV2 {
fn as_str(&self) -> &'static str {
match self {
SeverityTypeV2::None => "None",
SeverityTypeV2::Low => "Low",
SeverityTypeV2::Medium => "Medium",
SeverityTypeV2::High => "High",
fn as_str(&self) -> &'static str {
match self {
SeverityTypeV2::None => "None",
SeverityTypeV2::Low => "Low",
SeverityTypeV2::Medium => "Medium",
SeverityTypeV2::High => "High",
}
}
}
}

impl From<f32> for SeverityTypeV2 {
fn from(value: f32) -> Self {
if value < 0.1 {
SeverityTypeV2::None
} else if value < 4.0 {
SeverityTypeV2::Low
} else if value < 7.0 {
SeverityTypeV2::Medium
} else {
SeverityTypeV2::High
fn from(value: f32) -> Self {
if value < 0.1 {
SeverityTypeV2::None
} else if value < 4.0 {
SeverityTypeV2::Low
} else if value < 7.0 {
SeverityTypeV2::Medium
} else {
SeverityTypeV2::High
}
}
}
}

impl FromStr for SeverityTypeV2 {
type Err = CVSSError;
type Err = CVSSError;

fn from_str(s: &str) -> Result<Self> {
match s {
"None" => Ok(Self::None),
"Low" => Ok(Self::Low),
"Medium" => Ok(Self::Medium),
"High" => Ok(Self::High),
_ => Err(CVSSError::InvalidCVSS {
key: "SeverityTypeV2".to_string(),
value: s.to_string(),
expected: "None,Low,Medium,High".to_string(),
}),
fn from_str(s: &str) -> Result<Self> {
match s {
"None" => Ok(Self::None),
"Low" => Ok(Self::Low),
"Medium" => Ok(Self::Medium),
"High" => Ok(Self::High),
_ => Err(CVSSError::InvalidCVSS {
key: "SeverityTypeV2".to_string(),
value: s.to_string(),
expected: "None,Low,Medium,High".to_string(),
}),
}
}
}
}

#[cfg(test)]
mod tests {
use crate::severity::SeverityType;
use crate::severity::SeverityType;

#[test]
fn severity_type_test() {
assert_eq!(SeverityType::from(0.0), SeverityType::None);
assert_eq!(SeverityType::from(0.1), SeverityType::Low);
assert_eq!(SeverityType::from(0.3), SeverityType::Low);
assert_eq!(SeverityType::from(1.0), SeverityType::Low);
assert_eq!(SeverityType::from(1.6), SeverityType::Low);
assert_eq!(SeverityType::from(4.0), SeverityType::Medium);
assert_eq!(SeverityType::from(5.0), SeverityType::Medium);
assert_eq!(SeverityType::from(6.0), SeverityType::Medium);
assert_eq!(SeverityType::from(6.9), SeverityType::Medium);
assert_eq!(SeverityType::from(7.0), SeverityType::High);
assert_eq!(SeverityType::from(9.0), SeverityType::Critical);
assert_eq!(SeverityType::from(10.0), SeverityType::Critical);
}
#[test]
fn severity_type_test() {
assert_eq!(SeverityType::from(0.0), SeverityType::None);
assert_eq!(SeverityType::from(0.1), SeverityType::Low);
assert_eq!(SeverityType::from(0.3), SeverityType::Low);
assert_eq!(SeverityType::from(1.0), SeverityType::Low);
assert_eq!(SeverityType::from(1.6), SeverityType::Low);
assert_eq!(SeverityType::from(4.0), SeverityType::Medium);
assert_eq!(SeverityType::from(5.0), SeverityType::Medium);
assert_eq!(SeverityType::from(6.0), SeverityType::Medium);
assert_eq!(SeverityType::from(6.9), SeverityType::Medium);
assert_eq!(SeverityType::from(7.0), SeverityType::High);
assert_eq!(SeverityType::from(9.0), SeverityType::Critical);
assert_eq!(SeverityType::from(10.0), SeverityType::Critical);
}
}
4 changes: 2 additions & 2 deletions diesel.toml
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@
# see https://diesel.rs/guides/configuring-diesel-cli

[print_schema]
file = "nvd-api/src/schema.rs"
file = "nvd-server/src/schema.rs"
custom_type_derives = ["diesel::query_builder::QueryId", "diesel::sql_types::SqlType"]

[migrations_directory]
dir = "nvd-api/migrations"
dir = "nvd-server/migrations"
14 changes: 14 additions & 0 deletions nvd-api/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
[package]
name = "nvd-api"
version = "0.1.0"
edition = "2021"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
reqwest = { version = "0.11", features = ["json", "cookies", "gzip", "native-tls"] }
serde = { version = "1", features = ["derive"] }
serde_json = "1.0"
thiserror = "1.0"
uuid = { version = "1.3.3", features = ["v4"] }
cvss = { path = "../cvss" }
Loading

0 comments on commit cffebc0

Please sign in to comment.