make all options configuable on runtime
* pull in argparse to parse cli arguments * make ip and port configurable on runtime * add plaintext mode for use behind reverse proxies * make tls cert/key path configuable on runtime
This commit is contained in:
parent
02916a7bc4
commit
717734b7ae
|
@ -60,6 +60,12 @@ version = "0.4.7"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "739f4a8db6605981345c5654f3a85b056ce52f37a39d34da03f25bf2151ea16e"
|
||||
|
||||
[[package]]
|
||||
name = "argparse"
|
||||
version = "0.2.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "3f8ebf5827e4ac4fd5946560e6a99776ea73b596d80898f357007317a7141e47"
|
||||
|
||||
[[package]]
|
||||
name = "arrayvec"
|
||||
version = "0.5.2"
|
||||
|
@ -1235,6 +1241,7 @@ name = "session-open-group-server"
|
|||
version = "1.0.0"
|
||||
dependencies = [
|
||||
"aes-gcm",
|
||||
"argparse",
|
||||
"base64",
|
||||
"chrono",
|
||||
"curve25519-parser",
|
||||
|
|
|
@ -26,6 +26,7 @@ tokio = { version = "1.3", features = ["full"] }
|
|||
uuid = { version = "0.8", features = ["v4"] }
|
||||
warp = { version = "0.3", features = ["tls"] }
|
||||
x25519-dalek = "1.1"
|
||||
argparse = "0.2.2"
|
||||
|
||||
[dev-dependencies]
|
||||
tokio-test = "*"
|
||||
tokio-test = "*"
|
||||
|
|
57
src/main.rs
57
src/main.rs
|
@ -12,11 +12,45 @@ mod onion_requests;
|
|||
mod routes;
|
||||
mod rpc;
|
||||
mod storage;
|
||||
use argparse::{ArgumentParser, StoreTrue, Store};
|
||||
use std::net::{IpAddr, Ipv4Addr, SocketAddr};
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests;
|
||||
|
||||
|
||||
#[tokio::main]
|
||||
async fn main() {
|
||||
|
||||
// arguments default values
|
||||
let mut plaintext = false;
|
||||
let mut tls_certfile = "tls_certificate.pem".to_string();
|
||||
let mut tls_keyfile = "tls_private_key.pem".to_string();
|
||||
let mut port : u16 = 443;
|
||||
let mut bind_ip : Ipv4Addr = Ipv4Addr::new(0,0,0,0);
|
||||
// parse arguments
|
||||
{
|
||||
let mut ap = ArgumentParser::new();
|
||||
ap.set_description("session open group server");
|
||||
ap.refer(&mut plaintext)
|
||||
.add_option(&["--plaintext"], StoreTrue,
|
||||
"run in plaintext mode for use behind a reverse proxy");
|
||||
ap.refer(&mut tls_certfile)
|
||||
.add_option(&["--tls-cert"], Store,
|
||||
"path to tls certificate");
|
||||
ap.refer(&mut tls_keyfile)
|
||||
.add_option(&["--tls-key"], Store,
|
||||
"path to tls private key");
|
||||
ap.refer(&mut port)
|
||||
.add_option(&["-P", "--port"], Store,
|
||||
"Set the port to bind on");
|
||||
ap.refer(&mut bind_ip)
|
||||
.add_option(&["-H", "--host"], Store,
|
||||
"set ip to bind on");
|
||||
ap.parse_args_or_exit();
|
||||
}
|
||||
// create socket address
|
||||
let addr = SocketAddr::new(IpAddr::V4(bind_ip), port);
|
||||
// Print the server public key
|
||||
let public_key = hex::encode(crypto::PUBLIC_KEY.as_bytes());
|
||||
println!("The public key of this server is: {}", public_key);
|
||||
|
@ -27,18 +61,23 @@ async fn main() {
|
|||
fs::create_dir_all("./files").unwrap();
|
||||
// Create the main room
|
||||
let main_room = "main";
|
||||
storage::create_database_if_needed(main_room);
|
||||
storage::create_database_if_needed(main_room);
|
||||
// Set up pruning jobs
|
||||
let prune_pending_tokens_future = storage::prune_pending_tokens_periodically();
|
||||
let prune_tokens_future = storage::prune_tokens_periodically();
|
||||
let prune_files_future = storage::prune_files_periodically();
|
||||
// Serve routes
|
||||
let routes = routes::root().or(routes::lsrpc());
|
||||
let serve_routes_future = warp::serve(routes)
|
||||
.tls()
|
||||
.cert_path("tls_certificate.pem")
|
||||
.key_path("tls_private_key.pem")
|
||||
.run(([0, 0, 0, 0], 443));
|
||||
// Keep futures alive
|
||||
join!(prune_pending_tokens_future, prune_tokens_future, prune_files_future, serve_routes_future);
|
||||
let routes = warp::serve(routes::root().or(routes::lsrpc()));
|
||||
if plaintext {
|
||||
println!("!!! running in plaintext mode on {}", addr);
|
||||
let serve_routes_future = routes.run(addr);
|
||||
join!(prune_pending_tokens_future, prune_tokens_future, prune_files_future, serve_routes_future);
|
||||
} else {
|
||||
println!("running on {} with tls", addr);
|
||||
let serve_routes_future = routes.tls()
|
||||
.cert_path(tls_certfile)
|
||||
.key_path(tls_keyfile)
|
||||
.run(addr);
|
||||
join!(prune_pending_tokens_future, prune_tokens_future, prune_files_future, serve_routes_future);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue