diff --git a/backend/Cargo.lock b/backend/Cargo.lock index 9dabdb7..a399de1 100644 --- a/backend/Cargo.lock +++ b/backend/Cargo.lock @@ -102,12 +102,70 @@ dependencies = [ "syn", ] +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + [[package]] name = "autocfg" version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" +[[package]] +name = "axum" +version = "0.8.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b52af3cb4058c895d37317bb27508dccc8e5f2d39454016b297bf4a400597b8" +dependencies = [ + "axum-core", + "bytes 1.11.0", + "form_urlencoded", + "futures-util", + "http 1.4.0", + "http-body 1.0.1", + "http-body-util", + "hyper 1.8.1", + "hyper-util", + "itoa 1.0.17", + "matchit", + "memchr", + "mime", + "percent-encoding", + "pin-project-lite 0.2.16", + "serde_core", + "serde_json", + "serde_path_to_error", + "serde_urlencoded", + "sync_wrapper", + "tokio 1.49.0", + "tower", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "axum-core" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08c78f31d7b1291f7ee735c1c6780ccde7785daae9a9206026862dab7d8792d1" +dependencies = [ + "bytes 1.11.0", + "futures-core", + "http 1.4.0", + "http-body 1.0.1", + "http-body-util", + "mime", + "pin-project-lite 0.2.16", + "sync_wrapper", + "tower-layer", + "tower-service", + "tracing", +] + [[package]] name = "backtrace" version = "0.3.76" @@ -709,7 +767,7 @@ dependencies = [ "futures-core", "futures-sink", "futures-util", - "http", + "http 0.2.12", "indexmap", "slab", "tokio 0.2.25", @@ -789,6 +847,16 @@ dependencies = [ "itoa 1.0.17", ] +[[package]] +name = "http" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3ba2a386d7f85a81f119ad7498ebe444d2e22c2af0b86b069416ace48b3311a" +dependencies = [ + "bytes 1.11.0", + "itoa 1.0.17", +] + [[package]] name = "http-body" version = "0.3.1" @@ -796,7 +864,30 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13d5ff830006f7646652e057693569bfe0d51760c0085a071769d142a205111b" dependencies = [ "bytes 0.5.6", - "http", + "http 0.2.12", +] + +[[package]] +name = "http-body" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" +dependencies = [ + "bytes 1.11.0", + "http 1.4.0", +] + +[[package]] +name = "http-body-util" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" +dependencies = [ + "bytes 1.11.0", + "futures-core", + "http 1.4.0", + "http-body 1.0.1", + "pin-project-lite 0.2.16", ] [[package]] @@ -811,6 +902,12 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "494b4d60369511e7dea41cf646832512a94e542f68bb9c49e54518e0f468eb47" +[[package]] +name = "httpdate" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" + [[package]] name = "hyper" version = "0.13.10" @@ -822,10 +919,10 @@ dependencies = [ "futures-core", "futures-util", "h2", - "http", - "http-body", + "http 0.2.12", + "http-body 0.3.1", "httparse", - "httpdate", + "httpdate 0.3.2", "itoa 0.4.8", "pin-project", "socket2 0.3.19", @@ -835,6 +932,27 @@ dependencies = [ "want", ] +[[package]] +name = "hyper" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ab2d4f250c3d7b1c9fcdff1cece94ea4e2dfbec68614f7b87cb205f24ca9d11" +dependencies = [ + "atomic-waker", + "bytes 1.11.0", + "futures-channel", + "futures-core", + "http 1.4.0", + "http-body 1.0.1", + "httparse", + "httpdate 1.0.3", + "itoa 1.0.17", + "pin-project-lite 0.2.16", + "pin-utils", + "smallvec 1.15.1", + "tokio 1.49.0", +] + [[package]] name = "hyper-tls" version = "0.4.3" @@ -842,12 +960,27 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d979acc56dcb5b8dddba3917601745e877576475aa046df3226eabdecef78eed" dependencies = [ "bytes 0.5.6", - "hyper", + "hyper 0.13.10", "native-tls", "tokio 0.2.25", "tokio-tls", ] +[[package]] +name = "hyper-util" +version = "0.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0" +dependencies = [ + "bytes 1.11.0", + "http 1.4.0", + "http-body 1.0.1", + "hyper 1.8.1", + "pin-project-lite 0.2.16", + "tokio 1.49.0", + "tower-service", +] + [[package]] name = "iana-time-zone" version = "0.1.64" @@ -1159,6 +1292,12 @@ version = "0.4.29" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" +[[package]] +name = "matchit" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47e1ffaa40ddd1f3ed91f717a33c8c0ee23fff369e3aa8772b9605cc1d22f4c3" + [[package]] name = "maybe-uninit" version = "2.0.0" @@ -1336,6 +1475,7 @@ checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" name = "oott" version = "0.1.0" dependencies = [ + "axum", "chrono", "clap", "config", @@ -1765,9 +1905,9 @@ dependencies = [ "encoding_rs", "futures-core", "futures-util", - "http", - "http-body", - "hyper", + "http 0.2.12", + "http-body 0.3.1", + "hyper 0.13.10", "hyper-tls", "ipnet", "js-sys", @@ -2005,6 +2145,17 @@ dependencies = [ "zmij", ] +[[package]] +name = "serde_path_to_error" +version = "0.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10a9ff822e371bb5403e391ecd83e182e0e77ba7f6fe0160b795797109d1b457" +dependencies = [ + "itoa 1.0.17", + "serde", + "serde_core", +] + [[package]] name = "serde_spanned" version = "1.0.4" @@ -2130,6 +2281,12 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "sync_wrapper" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" + [[package]] name = "synstructure" version = "0.13.2" @@ -2506,6 +2663,28 @@ dependencies = [ "winnow", ] +[[package]] +name = "tower" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebe5ef63511595f1344e2d5cfa636d973292adc0eec1f0ad45fae9f0851ab1d4" +dependencies = [ + "futures-core", + "futures-util", + "pin-project-lite 0.2.16", + "sync_wrapper", + "tokio 1.49.0", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower-layer" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" + [[package]] name = "tower-service" version = "0.3.3" diff --git a/backend/Cargo.toml b/backend/Cargo.toml index 4ddf681..afd6de1 100644 --- a/backend/Cargo.toml +++ b/backend/Cargo.toml @@ -19,3 +19,4 @@ config = "0.15.19" lazy_static = "1.5.0" duration-string = { version="0.5.3", features = ["serde"] } clap = {version="4.5.54", features=["derive"]} +axum = "0.8.8" diff --git a/backend/src/main.rs b/backend/src/main.rs index 17da636..55af07b 100644 --- a/backend/src/main.rs +++ b/backend/src/main.rs @@ -1,7 +1,10 @@ use crate::settings::CONFIG; +use axum::{Router, routing::get}; use log::{LevelFilter, debug, info}; +use rusqlite::Connection; +use std::net::SocketAddr; use std::sync::{Arc, Mutex}; -use tokio::time::{Duration, sleep}; +use tokio::time::{self, Duration, sleep}; mod db; mod device_finders; @@ -30,6 +33,26 @@ async fn main() -> Result<(), String> { // Now onto the important stuff info!("Starting up oott"); + let result = tokio::join!(scanner(), web_server()); + + Ok(()) +} + +async fn web_server() -> Result<(), String> { + info!("Starting web server"); + let app = Router::new().route("/", get(root)); + info!("Server running at http://0.0.0.0:3000"); + // Start the server + let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap(); + axum::serve(listener, app).await.unwrap(); + Ok(()) +} + +async fn root() -> &'static str { + "Welcome to the Rust Web Server!" +} + +async fn scanner() -> Result<(), String> { // Get database connection - thread protected let db_conn = Arc::new(Mutex::new(db::init_db().unwrap()));