vulnera_advisor/lib.rs
1//! # Vulnera Advisors
2//!
3//! A Rust library for aggregating and querying security vulnerability advisories
4//! from multiple sources including GitHub Security Advisories (GHSA), NIST NVD,
5//! and Google OSV.
6//!
7//! ## Features
8//!
9//! - **Multi-source aggregation**: Fetch from GHSA, NVD, OSV, CISA KEV, and OSS Index
10//! - **Unified data model**: All sources are normalized to a common Advisory format
11//! - **Enrichment**: EPSS scores and KEV status for prioritization
12//! - **Efficient storage**: Redis/DragonflyDB with zstd compression
13//! - **Flexible matching**: SemVer and ecosystem-specific version matching
14//!
15//! ## Quick Start
16//!
17//! ```rust,ignore
18//! use vulnera_advisors::{VulnerabilityManager, Config};
19//!
20//! #[tokio::main]
21//! async fn main() -> Result<(), Box<dyn std::error::Error>> {
22//! // Load config from environment
23//! let config = Config::from_env()?;
24//! let manager = VulnerabilityManager::new(config).await?;
25//!
26//! // Sync advisories from all sources
27//! manager.sync_all().await?;
28//!
29//! // Query vulnerabilities for a package
30//! let advisories = manager.query("npm", "lodash").await?;
31//!
32//! // Check if a specific version is affected
33//! let affected = manager.matches("npm", "lodash", "4.17.20").await?;
34//!
35//! Ok(())
36//! }
37//! ```
38//!
39//! ## Builder Pattern
40//!
41//! For more control over configuration:
42//!
43//! ```rust,ignore
44//! use vulnera_advisors::VulnerabilityManager;
45//!
46//! let manager = VulnerabilityManager::builder()
47//! .redis_url("redis://localhost:6379")
48//! .with_osv_defaults()
49//! .with_nvd(Some("your-api-key".to_string()))
50//! .with_ghsa("your-github-token".to_string())
51//! .build()?;
52//! ```
53
54pub mod aggregator;
55pub mod config;
56pub mod error;
57pub mod logging;
58pub mod manager;
59pub mod models;
60pub mod purl;
61pub mod remediation;
62pub mod sources;
63pub mod store;
64pub mod version_registry;
65
66// Re-export main types
67pub use config::{Config, NvdConfig, OssIndexConfig, StoreConfig};
68pub use error::{AdvisoryError, Result};
69pub use manager::{MatchOptions, PackageKey, VulnerabilityManager, VulnerabilityManagerBuilder};
70pub use models::{
71 Advisory, Affected, Enrichment, Event, Package, Range, RangeType, Reference, ReferenceType,
72 Severity,
73};
74pub use store::{AdvisoryStore, DragonflyStore, EnrichmentData, HealthStatus, OssIndexCache};
75
76// Re-export remediation types
77pub use remediation::{Remediation, UpgradeImpact, build_remediation, classify_upgrade_impact};
78pub use version_registry::{PackageRegistry, VersionRegistry};
79
80// Re-export PURL helper
81pub use purl::{KNOWN_ECOSYSTEMS, Purl, PurlError, purl, purls_from_packages, purls_to_strings};
82
83// Re-export source types
84pub use sources::{
85 AdvisorySource,
86 epss::{EpssScore, EpssSource},
87 ghsa::GHSASource,
88 kev::{KevEntry, KevSource},
89 nvd::NVDSource,
90 ossindex::{ComponentReport, OssIndexSource, OssVulnerability},
91 osv::OSVSource,
92};