summaryrefslogtreecommitdiff
path: root/angelsharkd/src/main.rs
diff options
context:
space:
mode:
Diffstat (limited to 'angelsharkd/src/main.rs')
-rw-r--r--angelsharkd/src/main.rs59
1 files changed, 59 insertions, 0 deletions
diff --git a/angelsharkd/src/main.rs b/angelsharkd/src/main.rs
new file mode 100644
index 0000000..22e4161
--- /dev/null
+++ b/angelsharkd/src/main.rs
@@ -0,0 +1,59 @@
+use crate::config::Config;
+use anyhow::{Context, Result};
+use log::{debug, error, info, LevelFilter};
+use tokio::{signal, task};
+use warp::{hyper::Method, Filter};
+
+mod config;
+mod routes;
+
+#[tokio::main]
+async fn main() -> Result<()> {
+ // Init config.
+ let config = Config::init().with_context(|| "Failed to initialize config.")?;
+
+ // Init logging.
+ env_logger::Builder::new()
+ .filter(
+ None,
+ if config.debug_mode {
+ LevelFilter::Debug
+ } else {
+ LevelFilter::Info
+ },
+ )
+ .init();
+
+ if config.debug_mode {
+ debug!("**** DEBUGGING MODE ENABLED ****");
+ }
+
+ let routes = routes::index()
+ .or(routes::ossi(&config))
+ .with(if config.debug_mode {
+ warp::cors()
+ .allow_any_origin()
+ .allow_methods(&[Method::GET, Method::POST])
+ } else {
+ warp::cors()
+ .allow_origin(config.origin.as_str())
+ .allow_methods(&[Method::GET, Method::POST])
+ })
+ .with(warp::log("angelsharkd"));
+
+ // Create server with shutdown signal.
+ let (addr, server) = warp::serve(routes).bind_with_graceful_shutdown(config.bind_addr, async {
+ signal::ctrl_c()
+ .await
+ .expect("Failed to install CTRL+C signal handler.");
+ });
+
+ // Run server to completion.
+ info!("Starting server on {} ...", addr);
+ if let Err(e) = task::spawn(server).await {
+ error!("Server died unexpectedly: {}", e.to_string());
+ }
+ info!("Stopping server...");
+
+ Ok(())
+}