From 40af25345096ec1c0f02779243f4ee9a90783548 Mon Sep 17 00:00:00 2001 From: April John Date: Fri, 28 Feb 2025 18:15:54 +0100 Subject: [PATCH 1/2] migrate to rust version 2024 --- Cargo.toml | 2 +- rustfmt.toml | 1 + src/gui.rs | 1 - src/main.rs | 19 ++++++++++++++----- 4 files changed, 16 insertions(+), 7 deletions(-) create mode 100644 rustfmt.toml diff --git a/Cargo.toml b/Cargo.toml index d4cfb70..4b128ea 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,7 +2,7 @@ name = "hai" version = "0.1.0" authors = ["April Faye John "] -edition = "2021" +edition = "2024" publish = false license = "AGPL-3.0-or-later" diff --git a/rustfmt.toml b/rustfmt.toml new file mode 100644 index 0000000..c5cf55d --- /dev/null +++ b/rustfmt.toml @@ -0,0 +1 @@ +style_edition = "2024" \ No newline at end of file diff --git a/src/gui.rs b/src/gui.rs index 7021b7e..fd895a7 100644 --- a/src/gui.rs +++ b/src/gui.rs @@ -6,7 +6,6 @@ use egui::{TextureOptions, Vec2}; pub fn gui_main() -> eframe::Result { - env_logger::init(); // Log to stderr (if you run with `RUST_LOG=debug`). let options = eframe::NativeOptions { viewport: egui::ViewportBuilder::default().with_inner_size([600.0, 540.0]), ..Default::default() diff --git a/src/main.rs b/src/main.rs index 4258c33..0946f0f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -10,10 +10,13 @@ mod gui; mod pman; mod quic; +use std::fs::File; +use std::net::SocketAddr; +use std::str::FromStr; use bunt::println; use clap::{Parser, Subcommand}; -use config::{Config, Source}; -use log::info; +use config::{Config, FileFormat, Source}; +use log::{debug, info}; use pman::{init_process_manager, ProcessCommand, ProcessManager}; use shadow_rs::shadow; use std::sync::{Arc, Mutex, OnceLock}; @@ -41,7 +44,7 @@ struct Args { #[derive(Debug, Subcommand)] enum Commands { - #[command(arg_required_else_help = true, about = "Start client without GUI")] + #[command(about = "Start client without GUI")] CliClient, #[command(about = "List compile time backed info to audit binary")] Shadow, @@ -66,7 +69,10 @@ static CONFIG_FILE: OnceLock> = OnceLock::new(); fn get_config_file_source() -> impl Source { let file = CONFIG_FILE.get(); let default_dir = dirs::config_dir().unwrap(); - config::File::from_str(s, format) + let file_buf = default_dir.join("hai").join("config.toml"); + println!("{}", file_buf.to_string_lossy()); + let file_content = std::fs::read_to_string(file_buf).unwrap(); + config::File::from_str(&*file_content, FileFormat::Toml) } #[tokio::main] @@ -81,7 +87,10 @@ async fn main() { let _ = init_process_manager(); match args.command { - Commands::CliClient => {} + Commands::CliClient => { + let ip_addr_str = config().get_string("remote_endpoint").unwrap(); + let ip_sock = SocketAddr::from_str(&ip_addr_str).unwrap(); + } Commands::Shadow => { bininfo::print_info(); From 17fb7ed1209807e5f8f7940fcb2186db9c2e6686 Mon Sep 17 00:00:00 2001 From: April John Date: Fri, 7 Mar 2025 08:43:23 +0100 Subject: [PATCH 2/2] mewo --- src/main.rs | 14 +++++++++----- src/quic/client.rs | 18 +++++++++++------- src/quic/mod.rs | 4 ++-- 3 files changed, 22 insertions(+), 14 deletions(-) diff --git a/src/main.rs b/src/main.rs index 0946f0f..937d6ab 100644 --- a/src/main.rs +++ b/src/main.rs @@ -76,7 +76,7 @@ fn get_config_file_source() -> impl Source { } #[tokio::main] -async fn main() { +async fn main() -> anyhow::Result<()> { env_logger::init(); let args = Args::parse(); @@ -88,13 +88,16 @@ async fn main() { match args.command { Commands::CliClient => { - let ip_addr_str = config().get_string("remote_endpoint").unwrap(); - let ip_sock = SocketAddr::from_str(&ip_addr_str).unwrap(); + let ip_addr_str = config().get_string("remote_endpoint")?; + let ip_sock = SocketAddr::from_str(&ip_addr_str)?; + let client_endpoint = quic::client::make_client_endpoint(ip_sock.clone(), None)?; + let client = client_endpoint.connect(ip_sock, "localhost")?.await?; + println!("[client] connected: addr={}", client.remote_address()); } Commands::Shadow => { bininfo::print_info(); - return; + return Ok(()); } Commands::GuiClient => { @@ -102,7 +105,7 @@ async fn main() { if let Err(e) = res { println!("{}", e); } - return; + return Ok(()); } Commands::Devtest => { @@ -121,4 +124,5 @@ async fn main() { //handling anything here for gui wont work println!("exit"); + Ok(()) } diff --git a/src/quic/client.rs b/src/quic/client.rs index eeb6f12..7b42544 100644 --- a/src/quic/client.rs +++ b/src/quic/client.rs @@ -10,14 +10,18 @@ use rustls::pki_types::CertificateDer; /// /// - server_certs: a list of trusted certificates in DER format. fn configure_client( - server_certs: &[&[u8]], + server_certs: Option<&[&[u8]]>, ) -> Result> { - let mut certs = rustls::RootCertStore::empty(); - for cert in server_certs { - certs.add(CertificateDer::from(*cert))?; - } + if let Some(server_certs) = server_certs { + let mut certs = rustls::RootCertStore::empty(); + for cert in server_certs { + certs.add(CertificateDer::from(*cert))?; + } - Ok(ClientConfig::with_root_certificates(Arc::new(certs))?) + Ok(ClientConfig::with_root_certificates(Arc::new(certs))?) + } else { + Ok(ClientConfig::with_platform_verifier()) + } } /// Constructs a QUIC endpoint configured for use a client only. @@ -28,7 +32,7 @@ fn configure_client( #[allow(unused)] pub fn make_client_endpoint( bind_addr: SocketAddr, - server_certs: &[&[u8]], + server_certs: Option<&[&[u8]]>, ) -> Result> { let client_cfg = configure_client(server_certs)?; let mut endpoint = Endpoint::client(bind_addr)?; diff --git a/src/quic/mod.rs b/src/quic/mod.rs index 76c4929..92b78e2 100644 --- a/src/quic/mod.rs +++ b/src/quic/mod.rs @@ -1,2 +1,2 @@ -mod server; -mod client; \ No newline at end of file +pub(crate) mod server; +pub(crate) mod client; \ No newline at end of file