2022-10-10 21:20:08 +02:00
|
|
|
#![allow(unused_must_use)]
|
2021-10-03 11:13:07 +02:00
|
|
|
#[macro_use]
|
|
|
|
extern crate rocket;
|
|
|
|
|
|
|
|
#[macro_use]
|
|
|
|
extern crate serde_with;
|
|
|
|
|
|
|
|
pub mod empty;
|
|
|
|
pub mod garbage;
|
|
|
|
pub mod get_ip;
|
2021-10-03 16:57:12 +02:00
|
|
|
pub mod haversine;
|
2021-10-03 11:13:07 +02:00
|
|
|
pub mod serialized_ip_info;
|
|
|
|
pub mod util;
|
|
|
|
|
|
|
|
use std::error::Error;
|
|
|
|
|
2022-10-10 21:20:08 +02:00
|
|
|
use clap::{arg, Command, value_parser};
|
2021-10-04 14:05:22 +02:00
|
|
|
use rocket::fs::FileServer;
|
2021-10-03 11:13:07 +02:00
|
|
|
|
|
|
|
use empty::*;
|
|
|
|
use garbage::*;
|
|
|
|
use get_ip::*;
|
2022-10-10 21:20:08 +02:00
|
|
|
use util::Config;
|
2021-10-03 11:13:07 +02:00
|
|
|
|
|
|
|
#[rocket::main]
|
|
|
|
async fn main() -> Result<(), Box<dyn Error>> {
|
2022-10-10 21:20:08 +02:00
|
|
|
|
|
|
|
let args = Command::new("speedtest-rs")
|
|
|
|
.version("1.0.0")
|
|
|
|
.author("Emmanuel Garette <egarette@silique.fr>")
|
|
|
|
.about("Alternative implemention of the Librespeed server API")
|
|
|
|
.arg(arg!(-i --ip <VALUE>).default_value("127.0.0.1"))
|
|
|
|
.arg(arg!(-p --port <VALUE>).value_parser(value_parser!(u16)).default_value("8000"))
|
|
|
|
.arg(arg!(-a --assets <VALUE>).default_value("assets"))
|
|
|
|
.arg(arg!(-t --ipinfo_token <VALUE>).default_value(""))
|
|
|
|
.arg(arg!(-l --latitude <VALUE>).value_parser(value_parser!(f64)).default_value("0.0"))
|
|
|
|
.arg(arg!(-o --longitude <VALUE>).value_parser(value_parser!(f64)).default_value("0.0"))
|
2022-10-15 17:21:04 +02:00
|
|
|
.arg(arg!(--cert <VALUE>).default_value(""))
|
|
|
|
.arg(arg!(--key <VALUE>).default_value(""))
|
|
|
|
.arg(arg!(--ca_cert <VALUE>).default_value(""))
|
2022-10-10 21:20:08 +02:00
|
|
|
.get_matches();
|
2021-10-03 11:13:07 +02:00
|
|
|
|
|
|
|
let routes = routes![get_ip::get_ip, get_backend_ip_php];
|
|
|
|
|
|
|
|
let garbage_routes = routes![
|
|
|
|
garbage::garbage,
|
|
|
|
garbage_php,
|
|
|
|
backend_garbage,
|
|
|
|
backend_garbage_php
|
|
|
|
];
|
|
|
|
|
|
|
|
let empty_routes = routes![
|
|
|
|
empty::empty,
|
|
|
|
backend_empty,
|
|
|
|
get_empty,
|
|
|
|
empty_php,
|
|
|
|
backend_empty_php,
|
|
|
|
get_backend_empty_php
|
|
|
|
];
|
|
|
|
|
2021-10-03 16:57:12 +02:00
|
|
|
let routes = vec![routes, garbage_routes, empty_routes].concat();
|
2022-10-10 21:20:08 +02:00
|
|
|
let config = Config {
|
|
|
|
ip: args.get_one::<String>("ip").expect("required").to_string(),
|
|
|
|
port: *args.get_one::<u16>("port").expect("required"),
|
|
|
|
assets: args.get_one::<String>("assets").expect("required").to_string(),
|
|
|
|
ipinfo_token: args.get_one::<String>("ipinfo_token").expect("required").to_string(),
|
|
|
|
latitude: *args.get_one::<f64>("latitude").expect("required"),
|
|
|
|
longitude: *args.get_one::<f64>("longitude").expect("required"),
|
2022-10-15 17:21:04 +02:00
|
|
|
tls_cert: args.get_one::<String>("cert").expect("required").to_string(),
|
|
|
|
tls_key: args.get_one::<String>("key").expect("required").to_string(),
|
|
|
|
tls_ca_cert: args.get_one::<String>("ca_cert").expect("required").to_string(),
|
2022-10-10 21:20:08 +02:00
|
|
|
};
|
2022-10-15 17:21:04 +02:00
|
|
|
let mut figment = rocket::Config::figment()
|
2022-10-10 21:20:08 +02:00
|
|
|
.merge(("address", &config.ip))
|
|
|
|
.merge(("port", &config.port));
|
2022-10-15 17:21:04 +02:00
|
|
|
if !config.tls_cert.is_empty() && !config.tls_key.is_empty() {
|
|
|
|
figment = figment.merge(("tls.certs", &config.tls_cert))
|
|
|
|
.merge(("tls.key", &config.tls_key));
|
|
|
|
}
|
|
|
|
if !config.tls_ca_cert.is_empty() {
|
|
|
|
figment = figment.merge(("tls.mutual.ca_certs", &config.tls_ca_cert))
|
|
|
|
.merge(("tls.mutual.mandatory", true));
|
|
|
|
}
|
2022-10-10 21:20:08 +02:00
|
|
|
let asset_path = std::env::current_dir().unwrap().join(args.get_one::<String>("assets").expect("required"));
|
|
|
|
rocket::custom(figment).mount("/", routes)
|
|
|
|
.manage(config)
|
|
|
|
.mount("/", FileServer::from(asset_path))
|
|
|
|
.launch().await?;
|
2021-10-03 16:57:12 +02:00
|
|
|
|
2021-10-03 11:13:07 +02:00
|
|
|
Ok(())
|
|
|
|
}
|