omikron/src/main.rs

70 lines
1.8 KiB
Rust

mod anonymous_clients;
mod calls;
mod data;
mod omega;
mod rho;
mod util;
use std::env;
use std::path::PathBuf;
use dotenv::dotenv;
use once_cell::sync::Lazy;
pub static WORKING_DIR: Lazy<PathBuf> =
Lazy::new(|| std::env::current_dir().unwrap_or_else(|_| PathBuf::from(".")));
use rustls::crypto::aws_lc_rs::default_provider;
use mtp::crypto::Keyring;
use mtp::files::{load_keyring as load_keyring_file, save_keyring, save_public_key_bundle};
use crate::{
calls::call_util::garbage_collect_calls, omega::omega_connection::get_omega_connection,
rho::server::start, util::logger::startup,
};
const KEYRING_PATH: &str = "./omikron.mk";
const PUBLIC_KEY_PATH: &str = "./omikron.mpkb";
static KEYRING: Lazy<Keyring> = Lazy::new(|| {
load_keyring_file(KEYRING_PATH).unwrap_or_else(|_| {
let kr = Keyring::generate();
save_keyring(&kr, KEYRING_PATH).expect("Failed to save generated keyring");
save_public_key_bundle(&kr.public_key_bundle(), PUBLIC_KEY_PATH)
.expect("Failed to save generated public key bundle");
eprintln!("Generated new keyring at {}", KEYRING_PATH);
kr
})
});
pub fn get_keyring() -> &'static Keyring {
&KEYRING
}
pub fn load_keyring() -> Keyring {
Keyring::from_bytes(&KEYRING.to_bytes()).unwrap()
}
#[tokio::main]
async fn main() {
if let Err(_) = default_provider().install_default() {
println!("Error loading Provider");
return;
}
dotenv().ok();
startup();
let rho_port = env::var("RHO_PORT")
.ok()
.and_then(|s| s.parse().ok())
.unwrap_or(959);
get_omega_connection();
tokio::spawn(async move {
if let Err(e) = start(rho_port).await {
log_err!(0, util::logger::PrintType::General, "{}", e);
}
});
garbage_collect_calls();
tokio::signal::ctrl_c().await.unwrap();
}