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