mirror of
https://github.com/OMGeeky/advisory-db.git
synced 2025-12-27 14:59:21 +01:00
Switch to using crates_io_api crate
This commit is contained in:
@@ -16,6 +16,4 @@ name = "rustsec-advisory-db"
|
||||
gumdrop = "0.4"
|
||||
gumdrop_derive = "0.4"
|
||||
rustsec = "0.9"
|
||||
reqwest = "0.9"
|
||||
serde = "1.0"
|
||||
serde_derive = "1.0"
|
||||
crates_io_api = "0.3"
|
||||
|
||||
45
src/main.rs
45
src/main.rs
@@ -1,11 +1,8 @@
|
||||
extern crate crates_io_api;
|
||||
extern crate gumdrop;
|
||||
#[macro_use]
|
||||
extern crate gumdrop_derive;
|
||||
extern crate reqwest;
|
||||
extern crate rustsec;
|
||||
extern crate serde;
|
||||
#[macro_use]
|
||||
extern crate serde_derive;
|
||||
|
||||
use gumdrop::Options;
|
||||
use rustsec::{AdvisoryDatabase, Repository};
|
||||
@@ -86,44 +83,22 @@ fn check() {
|
||||
);
|
||||
}
|
||||
|
||||
let http_client = reqwest::Client::new();
|
||||
let cratesio_client = crates_io_api::SyncClient::new();
|
||||
for advisory in advisories {
|
||||
check_advisory(&http_client, advisory);
|
||||
check_advisory(&cratesio_client, advisory);
|
||||
}
|
||||
println!("*** Check succeeded! All advisories refer to valid crates.");
|
||||
}
|
||||
|
||||
#[derive(Deserialize)]
|
||||
struct CratesResponse {
|
||||
#[serde(rename = "crate")]
|
||||
krate: Crate,
|
||||
}
|
||||
|
||||
#[derive(Deserialize)]
|
||||
struct Crate {
|
||||
name: String,
|
||||
}
|
||||
|
||||
fn check_advisory(http_client: &reqwest::Client, advisory: &rustsec::Advisory) {
|
||||
let mut response = http_client
|
||||
.get(&format!(
|
||||
"https://crates.io/api/v1/crates/{}",
|
||||
fn check_advisory(cratesio_client: &crates_io_api::SyncClient, advisory: &rustsec::Advisory) {
|
||||
let response = cratesio_client
|
||||
.get_crate(advisory.package.as_str())
|
||||
.expect(&format!(
|
||||
"Failed to get package from crates.io: {}",
|
||||
advisory.package.as_str()
|
||||
))
|
||||
.send()
|
||||
.expect("Failed to make HTTP request to crates.io");
|
||||
if !response.status().is_success() {
|
||||
panic!(
|
||||
"crates.io returned an HTTP error ({}) trying to lookup the crate '{}', does it exist?",
|
||||
response.status(),
|
||||
advisory.package.as_str()
|
||||
);
|
||||
}
|
||||
));
|
||||
|
||||
let parsed_response = response
|
||||
.json::<CratesResponse>()
|
||||
.expect("Failed to parse crates.io response as JSON");
|
||||
if parsed_response.krate.name != advisory.package.as_str() {
|
||||
if response.crate_data.name != advisory.package.as_str() {
|
||||
panic!(
|
||||
"crates.io package name does not match package name in advisory for {}",
|
||||
advisory.package.as_str()
|
||||
|
||||
Reference in New Issue
Block a user