38 lines
1.8 KiB
Rust
38 lines
1.8 KiB
Rust
//! Run with: cargo run --example fetch_bambu_cert -- <printer_id> <output_path>
|
|
//!
|
|
//! "Trust on first connect": connects to one printer from printers.toml
|
|
//! with certificate verification disabled, captures whatever certificate
|
|
//! it presents, and saves it as PEM. Meant for a printer like P1P that
|
|
//! doesn't chain to the bundled CA - after running this, point that
|
|
//! printer's `ca_cert_path` in printers.toml at the saved file and
|
|
//! `test_bambu_certs` should report it as verified from then on.
|
|
//!
|
|
//! This trusts whoever answers on the network *right now* - only run it on
|
|
//! a network you trust, ideally right after unboxing the printer.
|
|
|
|
use continuum_proxy::fleet;
|
|
use continuum_proxy::printer::{GenericPrinter, PrinterHandle};
|
|
|
|
fn main() -> anyhow::Result<()> {
|
|
let mut args = std::env::args().skip(1);
|
|
let printer_id = args.next().ok_or_else(|| anyhow::anyhow!("usage: fetch_bambu_cert <printer_id> <output_path>"))?;
|
|
let output_path = args.next().ok_or_else(|| anyhow::anyhow!("usage: fetch_bambu_cert <printer_id> <output_path>"))?;
|
|
|
|
let printers = fleet::load(std::path::Path::new("printers.toml"))?;
|
|
|
|
let pem = printers
|
|
.iter()
|
|
.find_map(|printer| match printer {
|
|
PrinterHandle::BambuV1(bambu) if bambu.base().id == printer_id => Some(bambu.fetch_certificate()),
|
|
PrinterHandle::BambuV2(bambu) if bambu.base().id == printer_id => Some(bambu.fetch_certificate()),
|
|
_ => None,
|
|
})
|
|
.ok_or_else(|| anyhow::anyhow!("no Bambu printer with id '{printer_id}' in printers.toml"))??;
|
|
|
|
std::fs::write(&output_path, &pem)?;
|
|
println!("saved {printer_id}'s certificate to {output_path}");
|
|
println!("now set ca_cert_path = \"{output_path}\" for {printer_id} in printers.toml");
|
|
|
|
Ok(())
|
|
}
|