Notify system

This commit is contained in:
2025-08-16 16:30:16 +02:00
parent bc298fe0fa
commit 8308b9e011
7 changed files with 198 additions and 59 deletions
+24 -11
View File
@@ -4,25 +4,32 @@ use std::{
time::{Duration, Instant},
};
use openssl::{rsa::Rsa, pkey::Private};
use openssl::{pkey::Private, rsa::Rsa};
use crate::methods::SocketMap;
pub mod cosmetics;
pub mod database;
pub mod encryption;
pub mod methods;
pub mod parser;
pub mod response;
pub mod cosmetics;
fn main() -> Result<(), response::Error> {
let rsa = Rsa::generate(2048)
.map_err(|e| response::Error::EncryptionError(format!("Failed to generate RSA keys: {}", e)))?;
let rsa = Rsa::generate(2048).map_err(|e| {
response::Error::EncryptionError(format!("Failed to generate RSA keys: {}", e))
})?;
let client = mongodb::sync::Client::with_uri_str("mongodb://admin:admin@localhost/")
.map_err(|e| response::Error::DatabaseError(format!("Failed to connect to MongoDB: {}", e)))?;
let client =
mongodb::sync::Client::with_uri_str("mongodb://admin:[email protected]/").map_err(|e| {
response::Error::DatabaseError(format!("Failed to connect to MongoDB: {}", e))
})?;
let database = Arc::new(database::Database::new(&client));
let sockets = SocketMap::default();
let listener = TcpListener::bind("0.0.0.0:8080")
.map_err(|e| response::Error::NetworkError(format!("Failed to bind to port 8080: {}", e)))?;
let listener = TcpListener::bind("0.0.0.0:8080").map_err(|e| {
response::Error::NetworkError(format!("Failed to bind to port 8080: {}", e))
})?;
println!("Server listening on port 8080");
@@ -37,10 +44,11 @@ fn main() -> Result<(), response::Error> {
println!("New connection");
let database = Arc::clone(&database);
let sockets = Arc::clone(&sockets);
let rsa = rsa.clone();
std::thread::spawn(move || {
if let Err(e) = handle_client(stream, rsa, database) {
if let Err(e) = handle_client(stream, rsa, database, sockets) {
eprintln!("Client error: {}", e);
}
});
@@ -49,11 +57,16 @@ fn main() -> Result<(), response::Error> {
Ok(())
}
fn handle_client(stream: TcpStream, rsa: Rsa<Private>, database: Arc<database::Database>) -> Result<(), response::Error> {
fn handle_client(
stream: TcpStream,
rsa: Rsa<Private>,
database: Arc<database::Database>,
sockets: SocketMap,
) -> Result<(), response::Error> {
let mut stream = encryption::handshake(stream, rsa)?;
let mut last_activity = Instant::now();
match methods::Session::new(stream.clone()?, database) {
match methods::Session::new(stream.try_clone()?, database, sockets) {
Ok((session, res)) => {
stream.send(res)?;