session-open-group-server/src/main.rs

45 lines
1.3 KiB
Rust

use std::fs;
use futures::join;
use tokio;
use warp::Filter;
mod crypto;
mod errors;
mod handlers;
mod models;
mod onion_requests;
mod routes;
mod rpc;
mod storage;
#[cfg(test)]
mod tests;
#[tokio::main]
async fn main() {
// 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);
// Create the main database
storage::create_main_database_if_needed();
// Create required folders
fs::create_dir_all("./rooms").unwrap();
fs::create_dir_all("./files").unwrap();
// Create the main room
let main_room = "main";
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);
}