diff options
| author | Jan Wolff <janw@mailbox.org> | 2020-05-17 15:18:50 +0000 |
|---|---|---|
| committer | Jan Wolff <janw@mailbox.org> | 2020-05-17 15:18:50 +0000 |
| commit | 72c1e3c8132a8269833396ab955586185e7b0e58 (patch) | |
| tree | 395892d019d8300398bed25b89c00b5e13b07e52 /src/server | |
| parent | 39885844a2b7c0fdf03e501379cdc9acd6cd6f30 (diff) | |
config file support
Diffstat (limited to 'src/server')
| -rw-r--r-- | src/server/mod.rs | 32 |
1 files changed, 26 insertions, 6 deletions
diff --git a/src/server/mod.rs b/src/server/mod.rs index 643c15b..8359c32 100644 --- a/src/server/mod.rs +++ b/src/server/mod.rs @@ -17,6 +17,8 @@ pub struct ServerConfig { addrs: Vec<SocketAddr>, user: unistd::Uid, group: unistd::Gid, + cert_key: String, + cert_chain: String, } impl ServerConfig { @@ -27,6 +29,8 @@ impl ServerConfig { addrs: Vec::new(), user: unistd::getuid(), group: unistd::getgid(), + cert_key: "".to_string(), + cert_chain: "".to_string(), } } @@ -53,17 +57,31 @@ impl ServerConfig { pub fn set_user(&mut self, uname: String) { self.user = match unistd::User::from_name(&uname) { - Ok(user) => user.unwrap().uid, + Ok(user) => match user { + Some(user) => user.uid, + None => panic!("unknown user {}", uname), + }, Err(e) => panic!(e), }; } pub fn set_group(&mut self, gname: String) { self.group = match unistd::Group::from_name(&gname) { - Ok(group) => group.unwrap().gid, + Ok(group) => match group { + Some(group) => group.gid, + None => panic!("unknown group {}", gname), + }, Err(e) => panic!(e), }; } + + pub fn set_cert_key(&mut self, fname: String) { + self.cert_key = fname; + } + + pub fn set_cert_chain(&mut self, fname: String) { + self.cert_chain = fname; + } } pub struct Server { @@ -77,18 +95,20 @@ impl Server { } } - fn build_acceptor() -> std::sync::Arc<SslAcceptor> { + fn build_acceptor(config: &ServerConfig) -> std::sync::Arc<SslAcceptor> { let mut acceptor = SslAcceptor::mozilla_intermediate_v5(SslMethod::tls()).unwrap(); acceptor - .set_private_key_file("doc/key.pem", SslFiletype::PEM) + .set_private_key_file(config.cert_key.as_str(), SslFiletype::PEM) + .unwrap(); + acceptor + .set_certificate_chain_file(config.cert_chain.as_str()) .unwrap(); - acceptor.set_certificate_chain_file("doc/cert.pem").unwrap(); acceptor.check_private_key().unwrap(); return Arc::new(acceptor.build()); } pub fn serve(&self) { - let acceptor = Server::build_acceptor(); + let acceptor = Server::build_acceptor(&self.config); let listener = TcpListener::bind(&self.config.addrs[..]).unwrap(); if self.config.user.is_root() { |
