Scanning works, but is an order of magnitude slower than expected
This commit is contained in:
@@ -19,7 +19,7 @@ use thiserror::Error;
|
||||
use tokio::io::{AsyncWriteExt, BufWriter};
|
||||
use tokio::sync::{mpsc, RwLock};
|
||||
use tokio::sync::mpsc::Sender;
|
||||
use tracing::{error, warn};
|
||||
use tracing::{error, info, warn};
|
||||
|
||||
use crate::config::OutputFormat;
|
||||
|
||||
@@ -76,9 +76,15 @@ pub struct CertInfo {
|
||||
pub authority_key_id: Vec<u8>,
|
||||
#[serde(with="hex")]
|
||||
pub subject_key_id: Vec<u8>,
|
||||
|
||||
pub verification_state: VerificationState,
|
||||
}
|
||||
|
||||
#[derive(Serialize, Debug, Copy, Clone, Eq, PartialEq)]
|
||||
pub enum VerificationState {
|
||||
Unknown,
|
||||
Valid,
|
||||
Invalid,
|
||||
}
|
||||
fn asn1time_to_datetime(date: &Asn1TimeRef) -> anyhow::Result<chrono::DateTime<Utc>> {
|
||||
let res = Asn1Time::from_unix(0).unwrap().diff(date)?;
|
||||
let timestamp = res.days as i64 * 86400 + res.secs as i64;
|
||||
@@ -120,7 +126,8 @@ impl CertInfo {
|
||||
key_type: describe_key(data.public_key()?.as_ref()),
|
||||
signature_type: data.signature_algorithm().object().nid().short_name()?.to_owned(),
|
||||
authority_key_id: data.authority_key_id().map_or(Vec::new(), |id| id.as_slice().to_vec()),
|
||||
subject_key_id: data.subject_key_id().map_or(Vec::new(), |id| id.as_slice().to_vec())
|
||||
subject_key_id: data.subject_key_id().map_or(Vec::new(), |id| id.as_slice().to_vec()),
|
||||
verification_state: VerificationState::Unknown,
|
||||
})
|
||||
}
|
||||
}
|
||||
@@ -222,6 +229,7 @@ impl Reporter {
|
||||
}
|
||||
|
||||
pub async fn report_probe(&self, report: ProbeReport) -> Result<(), ReportingError> {
|
||||
info!(ip=%report.host, "Received report");
|
||||
if self.report_chan.send(report).await.is_err() {
|
||||
error!("Report formatter has exited early");
|
||||
Err(ReportingError::ReportFormatterFailed)
|
||||
@@ -231,12 +239,12 @@ impl Reporter {
|
||||
}
|
||||
}
|
||||
|
||||
fn start_json(config: JsonConfig) -> anyhow::Result<(impl Future<Output=()>+Send, Reporter)> {
|
||||
fn start_json(config: &JsonConfig) -> anyhow::Result<(impl Future<Output=()>+Send, Reporter)> {
|
||||
let (issuer_send, mut issuer_recv) = mpsc::channel::<X509>(5);
|
||||
let (report_send, mut report_recv) = mpsc::channel(5);
|
||||
|
||||
let report_file = tokio::fs::File::from_std(std::fs::File::create(config.output_file)?);
|
||||
let issuer_writer = config.issuer_file.map(std::fs::File::create).transpose()?.map(tokio::fs::File::from_std);
|
||||
let report_file = tokio::fs::File::from_std(std::fs::File::create(&config.output_file)?);
|
||||
let issuer_writer = config.issuer_file.as_ref().map(std::fs::File::create).transpose()?.map(tokio::fs::File::from_std);
|
||||
let has_issuer = issuer_writer.is_some();
|
||||
let container = config.container;
|
||||
let issuer_fut = async move {
|
||||
@@ -313,7 +321,7 @@ fn start_json(config: JsonConfig) -> anyhow::Result<(impl Future<Output=()>+Send
|
||||
|
||||
|
||||
/// Configure the reporting backend
|
||||
pub(crate) fn configure_backend(config: OutputFormat) -> anyhow::Result<(impl Future<Output=()>+Send, Reporter)> {
|
||||
pub(crate) fn configure_backend(config: &OutputFormat) -> anyhow::Result<(impl Future<Output=()>+Send, Reporter)> {
|
||||
match config {
|
||||
OutputFormat::Json(json) => start_json(json)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user