summaryrefslogtreecommitdiff
path: root/src/server
diff options
context:
space:
mode:
Diffstat (limited to 'src/server')
-rw-r--r--src/server/handler.rs12
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,