use anyhow::{bail, Context, Result};
use owo_colors::OwoColorize;
use std::path::Path;
use kx_fides_core::verify::verify_media;
use super::VerifyArgs;
pub fn run(args: VerifyArgs) -> Result<()> {
let media = args.media;
let manifest = args.manifest;
if !Path::new(&media).exists() {
bail!("media file not found: {}", media.display());
}
if !Path::new(&manifest).exists() {
bail!("manifest file not found: {}", manifest.display());
}
let report = verify_media(&media, &manifest)
.with_context(|| format!("verification failed for {}", media.display()))?;
if report.ok && report.hash_match && report.signature_valid {
println!(
"{} {}",
"✓ verified".green().bold(),
media.display()
);
println!("{} {}", "hash match:".cyan(), report.hash_match);
println!("{} {}", "signature valid:".cyan(), report.signature_valid);
return Ok(());
}
eprintln!(
"{} {}",
"✗ verification failed".red().bold(),
media.display()
);
for msg in report.messages {
eprintln!(" - {}", msg);
}
bail!("verification failed")
}