diff --git a/Cargo.toml b/Cargo.toml index ce951c7..389e0fd 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -4,3 +4,4 @@ version = "0.1.0" edition = "2021" [dependencies] +clap = { version = "4.0", features = ["derive"] } diff --git a/src/cli.rs b/src/cli.rs new file mode 100644 index 0000000..1025d99 --- /dev/null +++ b/src/cli.rs @@ -0,0 +1,48 @@ +use clap::{Parser, command}; + +/// CULinux Vulnerability Analyze Tool (简称 CULinux-VAT) 是一个用于分析是一个用于分析和检测 Linux +/// 系统漏洞的工具。该工具旨在帮助系统管理员和安全专业人员识别和修复潜在的安全漏洞,以确保 CULinux +/// 系统的安全性和稳定性 +#[derive(Parser, Debug)] +#[command(author, version, about, long_about = None)] +pub struct Cli { + /// 显示当前系统的整体安全情况 + #[arg(short, long, default_value_t = true)] + pub summary: bool, + + /// 列出所有已发布但未修复的安全公告 + #[arg(short, long, default_value_t = false)] + pub list: bool, + + /// 列出并查看已修复但尚未更新的 cve 漏洞信息 + #[arg(long, default_value_t = false)] + pub cves: bool, + + /// 列出并查看已修复但尚未更新的 sa 安全公告信息 + #[arg(long, default_value_t = false)] + pub sas: bool, + + /// 查看对应 sa / cve 的详情信息 + #[arg(long, default_value_t = false)] + pub info: bool, + + /// 使用 --cves 或 --sas 时, 指定要查看的 id 列表 + #[arg(action = clap::ArgAction::Append)] + pub sources: Vec, + + /// 设置过滤级别,由高到低为:[Critical, Important, Moderate, Low] + #[arg(long, default_value_t = String::from("Low"))] + pub severity: String, + + /// 生成漏洞扫描报告 + #[arg(long, default_value_t = false)] + pub report: bool, + + /// 使用 dnf 后端进行安全扫描 + #[arg(long, default_value_t = false)] + pub dnf: bool, +} + +pub fn parse() -> Cli { + Cli::parse() +} diff --git a/src/lib.rs b/src/lib.rs new file mode 100644 index 0000000..b3cd904 --- /dev/null +++ b/src/lib.rs @@ -0,0 +1,13 @@ +pub mod cli; + +/// 定义 crate::Error +/// 大部分函数返回的错误 +pub type Error = Box; + +/// 定义 crate::Result +pub type Result = std::result::Result; + +pub fn cumain() -> Result<()> { + let _cli = cli::parse(); + Ok(()) +} diff --git a/src/main.rs b/src/main.rs index e7a11a9..e2614e6 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,3 +1,3 @@ -fn main() { - println!("Hello, world!"); +fn main() -> cuvat_rs::Result<()> { + cuvat_rs::cumain() }