Compare commits

..

No commits in common. "17fb7ed1209807e5f8f7940fcb2186db9c2e6686" and "c099817e9a83ccb26e5b6b6c25434b0783e9488e" have entirely different histories.

6 changed files with 19 additions and 36 deletions

View file

@ -2,7 +2,7 @@
name = "hai" name = "hai"
version = "0.1.0" version = "0.1.0"
authors = ["April Faye John <april.john@denic.de>"] authors = ["April Faye John <april.john@denic.de>"]
edition = "2024" edition = "2021"
publish = false publish = false
license = "AGPL-3.0-or-later" license = "AGPL-3.0-or-later"

View file

@ -1 +0,0 @@
style_edition = "2024"

View file

@ -6,6 +6,7 @@
use egui::{TextureOptions, Vec2}; use egui::{TextureOptions, Vec2};
pub fn gui_main() -> eframe::Result { pub fn gui_main() -> eframe::Result {
env_logger::init(); // Log to stderr (if you run with `RUST_LOG=debug`).
let options = eframe::NativeOptions { let options = eframe::NativeOptions {
viewport: egui::ViewportBuilder::default().with_inner_size([600.0, 540.0]), viewport: egui::ViewportBuilder::default().with_inner_size([600.0, 540.0]),
..Default::default() ..Default::default()

View file

@ -10,13 +10,10 @@ mod gui;
mod pman; mod pman;
mod quic; mod quic;
use std::fs::File;
use std::net::SocketAddr;
use std::str::FromStr;
use bunt::println; use bunt::println;
use clap::{Parser, Subcommand}; use clap::{Parser, Subcommand};
use config::{Config, FileFormat, Source}; use config::{Config, Source};
use log::{debug, info}; use log::info;
use pman::{init_process_manager, ProcessCommand, ProcessManager}; use pman::{init_process_manager, ProcessCommand, ProcessManager};
use shadow_rs::shadow; use shadow_rs::shadow;
use std::sync::{Arc, Mutex, OnceLock}; use std::sync::{Arc, Mutex, OnceLock};
@ -44,7 +41,7 @@ struct Args {
#[derive(Debug, Subcommand)] #[derive(Debug, Subcommand)]
enum Commands { enum Commands {
#[command(about = "Start client without GUI")] #[command(arg_required_else_help = true, about = "Start client without GUI")]
CliClient, CliClient,
#[command(about = "List compile time backed info to audit binary")] #[command(about = "List compile time backed info to audit binary")]
Shadow, Shadow,
@ -69,14 +66,11 @@ static CONFIG_FILE: OnceLock<Option<String>> = OnceLock::new();
fn get_config_file_source() -> impl Source { fn get_config_file_source() -> impl Source {
let file = CONFIG_FILE.get(); let file = CONFIG_FILE.get();
let default_dir = dirs::config_dir().unwrap(); let default_dir = dirs::config_dir().unwrap();
let file_buf = default_dir.join("hai").join("config.toml"); config::File::from_str(s, format)
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] #[tokio::main]
async fn main() -> anyhow::Result<()> { async fn main() {
env_logger::init(); env_logger::init();
let args = Args::parse(); let args = Args::parse();
@ -87,17 +81,11 @@ async fn main() -> anyhow::Result<()> {
let _ = init_process_manager(); let _ = init_process_manager();
match args.command { match args.command {
Commands::CliClient => { Commands::CliClient => {}
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 => { Commands::Shadow => {
bininfo::print_info(); bininfo::print_info();
return Ok(()); return;
} }
Commands::GuiClient => { Commands::GuiClient => {
@ -105,7 +93,7 @@ async fn main() -> anyhow::Result<()> {
if let Err(e) = res { if let Err(e) = res {
println!("{}", e); println!("{}", e);
} }
return Ok(()); return;
} }
Commands::Devtest => { Commands::Devtest => {
@ -124,5 +112,4 @@ async fn main() -> anyhow::Result<()> {
//handling anything here for gui wont work //handling anything here for gui wont work
println!("exit"); println!("exit");
Ok(())
} }

View file

@ -10,18 +10,14 @@ use rustls::pki_types::CertificateDer;
/// ///
/// - server_certs: a list of trusted certificates in DER format. /// - server_certs: a list of trusted certificates in DER format.
fn configure_client( fn configure_client(
server_certs: Option<&[&[u8]]>, server_certs: &[&[u8]],
) -> Result<ClientConfig, Box<dyn Error + Send + Sync + 'static>> { ) -> Result<ClientConfig, Box<dyn Error + Send + Sync + 'static>> {
if let Some(server_certs) = server_certs {
let mut certs = rustls::RootCertStore::empty(); let mut certs = rustls::RootCertStore::empty();
for cert in server_certs { for cert in server_certs {
certs.add(CertificateDer::from(*cert))?; 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. /// Constructs a QUIC endpoint configured for use a client only.
@ -32,7 +28,7 @@ fn configure_client(
#[allow(unused)] #[allow(unused)]
pub fn make_client_endpoint( pub fn make_client_endpoint(
bind_addr: SocketAddr, bind_addr: SocketAddr,
server_certs: Option<&[&[u8]]>, server_certs: &[&[u8]],
) -> Result<Endpoint, Box<dyn Error + Send + Sync + 'static>> { ) -> Result<Endpoint, Box<dyn Error + Send + Sync + 'static>> {
let client_cfg = configure_client(server_certs)?; let client_cfg = configure_client(server_certs)?;
let mut endpoint = Endpoint::client(bind_addr)?; let mut endpoint = Endpoint::client(bind_addr)?;

View file

@ -1,2 +1,2 @@
pub(crate) mod server; mod server;
pub(crate) mod client; mod client;