diff options
Diffstat (limited to 'src/server/handler.rs')
| -rw-r--r-- | src/server/handler.rs | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/src/server/handler.rs b/src/server/handler.rs index 84d9d17..5f77f93 100644 --- a/src/server/handler.rs +++ b/src/server/handler.rs @@ -5,7 +5,7 @@ use openssl::ssl::SslStream; use std::fs::File; use std::io::{copy, BufReader, BufWriter}; use std::net::TcpStream; -use std::path::Path; +use std::path::{Path, PathBuf}; use url::Url; fn send_header(stream: &mut SslStream<TcpStream>, header: &response::Header) { @@ -50,6 +50,13 @@ pub fn handle_request(config: &ServerConfig, mut stream: SslStream<TcpStream>) { handle_response(config, location, &mut stream); } +fn gen_path_index(path: &Path) -> PathBuf { + match path.is_dir() { + true => path.join("index.gmi"), + false => PathBuf::from(path), + } +} + fn handle_response(config: &ServerConfig, url: Url, mut stream: &mut SslStream<TcpStream>) { if url.scheme() != "gemini" { send_header(&mut stream, &response::permanent_failure()); @@ -68,7 +75,8 @@ fn handle_response(config: &ServerConfig, url: Url, mut stream: &mut SslStream<T return; } }; - let path = config.gem_root.join(rel_path); + + let path = gen_path_index(&config.gem_root.join(rel_path)); let file = match File::open(&path) { Ok(file) => file, |
