45 lines
1.3 KiB
Rust
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);
|
|
}
|