From: Ruben Beltran del Rio Date: Mon, 27 Jan 2025 16:00:32 +0000 (+0100) Subject: Separate client and server middleware X-Git-Tag: 1.1.0~18 X-Git-Url: https://git.r.bdr.sh/rbdr/olden-mail/commitdiff_plain/b5234d6f3aeb75365269c14bd4f553becaf59b70?hp=408fda8d8b94fdfd9ad9b9b07faa9716df3d7346 Separate client and server middleware --- diff --git a/src/middleware/mod.rs b/src/middleware/mod.rs index a1070f4..da7e64a 100644 --- a/src/middleware/mod.rs +++ b/src/middleware/mod.rs @@ -4,4 +4,5 @@ use find_mailboxes_compatibility::middleware as find_mailboxes_compatibility_mid type Middleware = fn(&[u8]) -> Vec; -pub const MIDDLEWARE: [Middleware; 1] = [find_mailboxes_compatibility_middleware]; +pub const CLIENT_MIDDLEWARE: [Middleware; 1] = [find_mailboxes_compatibility_middleware]; +pub const SERVER_MIDDLEWARE: [Middleware; 0] = []; diff --git a/src/proxy.rs b/src/proxy.rs index 2798df3..befb35b 100644 --- a/src/proxy.rs +++ b/src/proxy.rs @@ -42,7 +42,7 @@ use std::thread::{sleep, spawn, JoinHandle}; use std::time::Duration; use crate::configuration::Proxy; -use crate::middleware::MIDDLEWARE; +use crate::middleware::{SERVER_MIDDLEWARE, CLIENT_MIDDLEWARE}; /// A proxy server that listens for plaintext connections and forwards them /// via TLS. @@ -229,7 +229,7 @@ fn handle_client(client_stream: TcpStream, configuration: &Arc) { let mut command = buffer[..bytes_read].to_vec(); - for middleware in MIDDLEWARE { + for middleware in CLIENT_MIDDLEWARE { command = middleware(&command); } @@ -242,7 +242,7 @@ fn handle_client(client_stream: TcpStream, configuration: &Arc) { // Lock the TLS stream and write the data to server match tls_stream_clone.lock() { Ok(mut tls_guard) => { - if let Err(error) = tls_guard.write_all(&buffer[..bytes_read]) { + if let Err(error) = tls_guard.write_all(&command) { debug!(">>> Error writing to server: {error}"); break; } @@ -286,14 +286,20 @@ fn handle_client(client_stream: TcpStream, configuration: &Arc) { } }; - let debug_str = String::from_utf8_lossy(&buffer[..bytes_read]) + let mut command = buffer[..bytes_read].to_vec(); + + for middleware in SERVER_MIDDLEWARE { + command = middleware(&command); + } + + let debug_str = String::from_utf8_lossy(&command) .replace('\n', "\\n") .replace('\r', "\\r") .replace('\t', "\\t"); debug!("<<< {}", debug_str); // Write decrypted data to client - if client_writer.write_all(&buffer[..bytes_read]).is_err() { + if client_writer.write_all(&command).is_err() { debug!("<<< ERR"); break; }