diff options
| author | Jan Wolff <janw@mailbox.org> | 2020-05-17 19:46:48 +0200 |
|---|---|---|
| committer | Jan Wolff <janw@mailbox.org> | 2020-05-17 19:46:48 +0200 |
| commit | faab34d44f11af3821c23d7075575f6570f984bd (patch) | |
| tree | 5e534c15acc2cf9ba2567036381f547747a3f689 /src | |
| parent | 72c1e3c8132a8269833396ab955586185e7b0e58 (diff) | |
update readme, default configuration path
Diffstat (limited to 'src')
| -rw-r--r-- | src/main.rs | 16 | ||||
| -rw-r--r-- | src/mime/mod.rs | 1 | ||||
| -rw-r--r-- | src/server/handler.rs | 12 |
3 files changed, 21 insertions, 8 deletions
diff --git a/src/main.rs b/src/main.rs index 5639158..7e5787a 100644 --- a/src/main.rs +++ b/src/main.rs @@ -20,6 +20,10 @@ fn parse_args() -> Option<String> { loop { match args.next() { Some(arg) => { + if arg == "-h" || arg == "--help" { + help(); + return None; + } if arg == "-c" || arg == "--config" { let config_fname = args.next().unwrap(); return Some(config_fname); @@ -29,7 +33,7 @@ fn parse_args() -> Option<String> { } } - None + Some("/etc/sheldond.conf".to_string()) } fn parse_config(fname: String) -> server::ServerConfig { @@ -38,8 +42,8 @@ fn parse_config(fname: String) -> server::ServerConfig { let file = match File::open(path) { Ok(file) => BufReader::new(file), - Err(e) => { - panic!(e); + Err(_) => { + panic!("could not open config file: {}", fname); } }; @@ -77,13 +81,13 @@ fn parse_config(fname: String) -> server::ServerConfig { } fn main() { - let config = match parse_args() { - Some(config_fname) => parse_config(config_fname), + let config_fname = match parse_args() { + Some(config_fname) => config_fname, None => { - help(); return; } }; + let config = parse_config(config_fname); let server = server::Server::new(&config); server.serve(); diff --git a/src/mime/mod.rs b/src/mime/mod.rs index 6fc0f9f..156dd0d 100644 --- a/src/mime/mod.rs +++ b/src/mime/mod.rs @@ -14,6 +14,7 @@ pub fn get_mime_type(extension: &OsStr) -> &'static str { match ext_str { "gmi" => "text/gemini", + "gemini" => "text/gemini", "txt" => "text/plain", _ => default_mime_type(), } 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, |
