Update docs and prune examples superseded by real functionality
README/certs/README/.env.example/printers.example.toml were all still describing this as a learning-stage stub with no real printer protocol clients - rewritten to reflect the real Bambu MQTT client, cert auto-pinning, and marlin serial connection that now exist. - Remove examples/fetch_bambu_cert.rs: its manual fetch-and-save workflow is now what BambuPrinter::connect()'s ensure_trusted does automatically on every connect, so it has no remaining use case. - Fix examples/printer_polymorphism.rs, which no longer compiled - dispatch_gcode was replaced by real methods earlier this session; swapped in print_status() as the vendor-only-extension example. - Remove Config::bambu_ca_cert_overrides/bambu_require_valid_cert and the .env vars documenting them - confirmed dead (nothing read them), fully superseded by printers.toml's per-printer ca_cert_path/ require_valid_cert plus automatic trust-on-first-connect pinning. - Fix stale doc comments in printer/mod.rs and printer/bambu.rs that described certificate trust and MQTT as not built yet, or referencing the now-removed example. No behavior change in the daemon itself - verified with cargo build --examples and a live run of printer_polymorphism and auto_connect_bambu against the real P1P/H2C printers. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -1,12 +1,13 @@
|
||||
//! Run with: cargo run --example auto_connect_bambu
|
||||
//!
|
||||
//! The "smooth, no manual steps" version of test_bambu_certs +
|
||||
//! fetch_bambu_cert combined: for each Bambu printer in printers.toml,
|
||||
//! makes sure it has a working certificate, auto-pinning one via
|
||||
//! trust-on-first-connect if the bundled CA doesn't verify. Safe to run
|
||||
//! repeatedly - a printer that's already pinned (certs/pinned/<serial
|
||||
//! number>.pem) just gets re-verified against its pin, no network trust
|
||||
//! decision is made again.
|
||||
//! For each Bambu printer in printers.toml, makes sure it has a working
|
||||
//! certificate, auto-pinning one via trust-on-first-connect if the
|
||||
//! bundled CA doesn't verify - the exact same `ensure_trusted` step
|
||||
//! `BambuPrinter::connect()` runs before opening MQTT, isolated here so
|
||||
//! you can check/establish trust without needing a full MQTT handshake to
|
||||
//! succeed too. Safe to run repeatedly - a printer that's already pinned
|
||||
//! (certs/pinned/<serial number>.pem) just gets re-verified against its
|
||||
//! pin, no network trust decision is made again.
|
||||
|
||||
use continuum_proxy::fleet;
|
||||
use continuum_proxy::printer::PrinterHandle;
|
||||
|
||||
@@ -1,36 +0,0 @@
|
||||
//! 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::Bambu(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(())
|
||||
}
|
||||
@@ -56,9 +56,13 @@ async fn main() {
|
||||
// Vendor-only extension: reachable only after matching the concrete
|
||||
// variant back out of the enum - one arm now that Bambu is a single
|
||||
// type regardless of which protocol version `connect()` settled on.
|
||||
// `print_status()` is real Bambu-only behavior with no equivalent on
|
||||
// `GenericPrinter` (no other vendor here has an in-memory report
|
||||
// cache) - none of these connected above (fake IPs), so it's always
|
||||
// `None`, but the point is the downcast, not a live reading.
|
||||
for printer in &fleet {
|
||||
match printer {
|
||||
PrinterHandle::Bambu(bambu) => bambu.dispatch_gcode("part.gcode.3mf"),
|
||||
PrinterHandle::Bambu(bambu) => println!(" {}: cached print_status = {:?}", bambu.sn, bambu.print_status().await),
|
||||
_ => {}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user