use std::env; use std::fs::File; use std::io::{stdout, Read, Write}; use std::path::Path; use anyhow::{bail, Result}; use curl::easy::Easy; fn read_file(path: impl AsRef) -> Result> { let mut f = File::open(path)?; let mut buf = Vec::new(); f.read_to_end(&mut buf)?; Ok(buf) } fn main() -> Result<()> { let argv = env::args().collect::>(); if argv.len() < 4 { bail!("usage: ssl_cert_blob URL CERT KEY"); } let url = &argv[1]; let cert_path = &argv[2]; let key_path = &argv[3]; let mut handle = Easy::new(); handle.url(url)?; handle.verbose(true)?; handle.write_function(|data| { stdout().write_all(data).unwrap(); Ok(data.len()) })?; let cert_blob = read_file(cert_path)?; let key_blob = read_file(key_path)?; handle.ssl_cert_blob(&cert_blob)?; handle.ssl_key_blob(&key_blob)?; handle.perform()?; Ok(()) }