43 lines
1.1 KiB
Rust
43 lines
1.1 KiB
Rust
extern crate hyper_rustls;
|
|
extern crate iron;
|
|
extern crate rustls;
|
|
|
|
use self::hyper_rustls::TlsServer;
|
|
use self::iron::prelude::*;
|
|
|
|
use std::net::{IpAddr, SocketAddr};
|
|
use std::sync::Arc;
|
|
|
|
const PHRASE: &'static str = "Hello, World!";
|
|
|
|
fn hello_world(_: &mut Request) -> IronResult<Response> {
|
|
Ok(Response::with((iron::status::Ok, PHRASE)))
|
|
}
|
|
|
|
fn listener() -> TlsServer {
|
|
let mut tls_config = rustls::ServerConfig::new();
|
|
let cache = rustls::ServerSessionMemoryCache::new(1024);
|
|
tls_config.set_persistence(cache);
|
|
tls_config.ticketer = rustls::Ticketer::new();
|
|
|
|
// TODO: Look up the cert + key dynamically at runtime, creating a new one
|
|
// on the fly if necessary
|
|
//tls_config.cert_resolver = null;
|
|
|
|
TlsServer {
|
|
cfg: Arc::new(tls_config)
|
|
}
|
|
}
|
|
|
|
pub fn boil(ip: IpAddr) {
|
|
let listener = listener();
|
|
let http_chain = Chain::new(hello_world);
|
|
let https_chain = Chain::new(hello_world);
|
|
|
|
let http = Iron::new(http_chain).http(SocketAddr::new(ip, 3000));
|
|
let https = Iron::new(https_chain).https(SocketAddr::new(ip, 3443), listener);
|
|
|
|
http.unwrap();
|
|
https.unwrap();
|
|
}
|