diff --git a/src/main.rs b/src/main.rs index 4ab62f0..c57d5ba 100644 --- a/src/main.rs +++ b/src/main.rs @@ -5,14 +5,12 @@ use { task, }, async_tls::TlsAcceptor, - rustls::{ - internal::pemfile::{certs, rsa_private_keys}, - }, + rustls::internal::pemfile::{certs, rsa_private_keys}, std::{ error::Error, fs::File, io::BufReader, - path::Path, + path::{Path, PathBuf}, sync::Arc, }, url::Url, @@ -59,6 +57,14 @@ async fn connection(acceptor: TlsAcceptor, stream: TcpStream) -> Result { let url = Url::parse(request.trim())?; eprintln!("Got request: {:?}", url); + let path: PathBuf = url.path_segments().unwrap().collect(); + eprintln!("Path: {:?}", path); + let path = Path::new(".").join(path).canonicalize()?; + eprintln!("Path: {:?}", path); + + // TODO: Return a not found error + assert!(path.starts_with(std::env::current_dir()?)); + let mut stream = stream.into_inner(); stream.write_all(b"20 text/gemini\r\n").await?; stream.write_all(b"=> ").await?;