refactor: use option type for certain server arguments
Diff
src/config.rs | 30 +++++++++-------------------
src/server.rs | 58 ++++++++++++++++++++++++++++++++-----------------------
src/staticfiles.rs | 5 ++++-
3 files changed, 48 insertions(+), 45 deletions(-)
@@ -3,14 +3,9 @@ use structopt::StructOpt;
#[derive(Debug, StructOpt)]
pub struct Options {
#[structopt(
long,
short = "l",
default_value = "my-static-server",
env = "SERVER_NAME"
)]
#[structopt(long, short = "l", env = "SERVER_NAME")]
pub name: String,
pub name: Option<String>,
#[structopt(long, short = "a", default_value = "[::]", env = "SERVER_HOST")]
@@ -51,15 +46,15 @@ pub struct Options {
#[structopt(long, short = "t", env = "SERVER_TLS")]
pub tls: bool,
pub tls: Option<bool>,
#[structopt(long, default_value = "", env = "SERVER_TLS_PKCS12")]
#[structopt(long, env = "SERVER_TLS_PKCS12")]
pub tls_pkcs12: String,
pub tls_pkcs12: Option<String>,
#[structopt(long, default_value = "", env = "SERVER_TLS_PKCS12_PASSWD")]
#[structopt(long, env = "SERVER_TLS_PKCS12_PASSWD")]
pub tls_pkcs12_passwd: String,
pub tls_pkcs12_passwd: Option<String>,
#[structopt(long, env = "SERVER_TLS_REDIRECT_FROM")]
@@ -73,16 +68,11 @@ pub struct Options {
pub log_level: String,
#[structopt(
long,
short = "c",
default_value = "",
env = "SERVER_CORS_ALLOW_ORIGINS"
)]
#[structopt(long, short = "c", env = "SERVER_CORS_ALLOW_ORIGINS")]
pub cors_allow_origins: String,
pub cors_allow_origins: Option<String>,
#[structopt(long, short = "i", env = "SERVER_DIRECTORY_LISTING")]
pub directory_listing: bool,
pub directory_listing: Option<bool>,
}
@@ -13,25 +13,6 @@ struct RunningServer {
server_type: String,
}
fn on_server_running(server_name: &str, running_servers: &[RunningServer]) {
running_servers.iter().for_each(|server| {
logger::log_server(&format!(
"{} Server ({}) is listening on {}",
server.server_type, server_name, server.listening.socket
))
});
signal_manager::wait_for_signal(|sig: signal::Signal| {
let code = signal_manager::signal_to_int(sig);
println!();
warn!("Signal {} caught. Server execution exited.", code);
std::process::exit(code)
})
}
pub fn run(opts: Options) {
logger::init(&opts.log_level);
@@ -44,14 +25,18 @@ pub fn run(opts: Options) {
assets_dir: opts.assets,
page_50x_path: opts.page50x,
page_404_path: opts.page404,
cors_allow_origins: opts.cors_allow_origins,
directory_listing: opts.directory_listing,
cors_allow_origins: opts.cors_allow_origins.unwrap_or_default(),
directory_listing: opts.directory_listing.unwrap_or_default(),
});
let mut running_servers = Vec::new();
if opts.tls {
if opts.tls.unwrap_or_default() {
let ssl = NativeTlsServer::new(opts.tls_pkcs12, &opts.tls_pkcs12_passwd).unwrap();
let ssl = NativeTlsServer::new(
opts.tls_pkcs12.unwrap_or_default(),
&opts.tls_pkcs12_passwd.unwrap_or_default(),
)
.unwrap();
match Iron::new(files.handle()).https(addr, ssl) {
Ok(listening) => running_servers.push(RunningServer {
@@ -88,5 +73,30 @@ pub fn run(opts: Options) {
Err(err) => panic!("{:?}", err),
}
}
on_server_running(&opts.name, &running_servers);
on_server_running(&opts.name.unwrap_or_default(), &running_servers);
}
fn on_server_running(server_name: &str, running_servers: &[RunningServer]) {
running_servers.iter().for_each(|server| {
let mut servername = String::new();
if !server_name.is_empty() {
servername = format!(" ({})", servername);
}
logger::log_server(&format!(
"{} Server{} is listening on {}",
server.server_type, servername, server.listening.socket
))
});
signal_manager::wait_for_signal(|sig: signal::Signal| {
let code = signal_manager::signal_to_int(sig);
println!();
warn!("Signal {} caught. Server execution exited.", code);
std::process::exit(code)
})
}
@@ -59,6 +59,10 @@ impl StaticFiles {
Ok(v) => v,
};
if self.opts.directory_listing {
log_server("Directory listing enabled");
}
let mut chain = Chain::new(
Staticfile::new(root_dir, assets_dir, self.opts.directory_listing)
@@ -72,7 +76,6 @@ impl StaticFiles {
let allowed_hosts = &self.opts.cors_allow_origins;
if !allowed_hosts.is_empty() {
log_server("CORS enabled");
log_server(&format!("Access-Control-Allow-Origin: {}", allowed_hosts));