2023-05-24 10:07:42 +08:00

118 lines
3.3 KiB
Rust

include!(concat!(env!("OUT_DIR"), "/client_hash.rs"));
// use aes_gcm::{aead::OsRng, Aes256Gcm, KeyInit};
use gpcommon::{server, SOCKET_PATH};
use env_logger::Env;
use log::error;
use tokio::signal;
// static mut HTTP_PORT: u16 = 0;
// static mut AES_KEY: [u8; 32] = [0; 32];
// async fn start_unix_server() {
// println!("Starting unix server...");
// // remove old socket file
// match std::fs::remove_file(SOCKET_PATH) {
// Ok(_) => println!("Removed old socket file"),
// Err(err) if err.kind() != std::io::ErrorKind::NotFound => {
// println!("Error: {err}");
// return;
// }
// Err(_) => (),
// }
// let listener = UnixListener::bind(SOCKET_PATH).unwrap();
// // set the socket file permissions to 666
// let Ok(metadata) = fs::metadata(SOCKET_PATH) else {
// return;
// };
// let mut permissions = metadata.permissions();
// permissions.set_mode(0o666);
// fs::set_permissions(SOCKET_PATH, permissions).unwrap();
// loop {
// let (stream, _) = listener.accept().await.unwrap();
// tokio::spawn(handle_unix_client(stream));
// }
// }
// async fn handle_unix_client(mut stream: UnixStream) {
// if !is_validate_client(&mut stream).await {
// println!("Invalid client");
// stream.shutdown().await.unwrap();
// return;
// }
// Read
// let mut message: [u8; 34] = [0; 34];
// unsafe {
// message[0..2].copy_from_slice(&HTTP_PORT.to_be_bytes());
// message[2..34].copy_from_slice(&AES_KEY[..]);
// }
// stream.write_all(&message[..]).await.unwrap();
// }
// async fn is_validate_client(stream: &mut UnixStream) -> bool {
// let Ok(ucred) = stream.peer_cred() else {
// return false;
// };
// if let Some(pid) = ucred.pid() {
// let Ok(proc) = Process::new(pid) else {
// return false;
// };
// let Ok(exe) = proc.exe() else {
// return false;
// };
// let Ok(exe_hash) = sha256_digest(exe) else {
// return false;
// };
// return exe_hash == GPCLIENT_HASH;
// }
// false
// }
// async fn start_http_server() {
// println!("Starting http server...");
// // Match any request and return hello world!
// let routes = warp::any().map(|| "Hello, World!");
// let (addr, server) =
// warp::serve(routes).bind_with_graceful_shutdown(([127, 0, 0, 1], 0), async {
// tokio::signal::ctrl_c().await.unwrap();
// });
// unsafe {
// HTTP_PORT = addr.port();
// }
// println!("Listening on http://{addr}/");
// tokio::spawn(server).await.unwrap();
// println!("Shutting down http server");
// }
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
env_logger::Builder::from_env(Env::default().default_filter_or("info")).init();
// println!("{GPCLIENT_HASH}");
// unsafe {
// let aes_key = Aes256Gcm::generate_key(&mut OsRng);
// AES_KEY = aes_key.as_slice().try_into().unwrap();
// }
// tokio::spawn(start_unix_server());
// start_http_server().await;
// server::start().await
if let Err(err) = server::run(SOCKET_PATH, signal::ctrl_c()).await {
error!("Error running server: {}", err);
}
Ok(())
}