diff --git a/Cargo.toml b/Cargo.toml index aecded5..357abb7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,3 +1,3 @@ [workspace] resolver = "2" -members = ["acrate-core", "acrate-hostmeta", "acrate-inbox", "acrate-nodeinfo"] +members = ["acrate-core", "acrate-hostmeta", "acrate-inbox", "acrate-nodeinfo", "acrate-webfinger"] diff --git a/acrate-webfinger/Cargo.toml b/acrate-webfinger/Cargo.toml new file mode 100644 index 0000000..4640b18 --- /dev/null +++ b/acrate-webfinger/Cargo.toml @@ -0,0 +1,12 @@ +[package] +name = "acrate-webfinger" +version = "0.1.0" +edition = "2021" + +[dependencies] +anyhow = "1.0.93" +axum = "0.7.7" +log = "0.4.22" +micronfig = "0.3.0" +pretty_env_logger = "0.5.0" +tokio = { version = "1.41.1", features = ["macros", "net", "rt-multi-thread"] } diff --git a/acrate-webfinger/src/config.rs b/acrate-webfinger/src/config.rs new file mode 100644 index 0000000..63babb0 --- /dev/null +++ b/acrate-webfinger/src/config.rs @@ -0,0 +1,3 @@ +micronfig::config!( + ACRATE_INBOX_BIND_ADDRESS: String, +); diff --git a/acrate-webfinger/src/main.rs b/acrate-webfinger/src/main.rs new file mode 100644 index 0000000..8958b4c --- /dev/null +++ b/acrate-webfinger/src/main.rs @@ -0,0 +1,31 @@ +use anyhow::Context; + +mod config; +mod route; + + +#[tokio::main] +async fn main() -> anyhow::Result { + pretty_env_logger::init(); + log::debug!("Logging initialized!"); + + log::trace!("Creating Axum router..."); + let app = axum::Router::new() + .route("/inbox", axum::routing::post(route::inbox_handler)); + log::trace!("Axum router created successfully!"); + + log::trace!("Creating Tokio listener..."); + let bind_address = config::ACRATE_INBOX_BIND_ADDRESS(); + let listener = tokio::net::TcpListener::bind(bind_address) + .await + .context("failed to bind listener to address")?; + log::trace!("Tokio listener bound to: {bind_address}"); + + log::debug!("Starting server..."); + axum::serve(listener, app) + .await + .context("server exited with error")?; + + log::error!("Server exited with no error, panicking."); + panic!("server exited with no error"); +} diff --git a/acrate-webfinger/src/route.rs b/acrate-webfinger/src/route.rs new file mode 100644 index 0000000..ca9ec6b --- /dev/null +++ b/acrate-webfinger/src/route.rs @@ -0,0 +1,8 @@ +#[allow(unreachable_code)] +pub async fn inbox_handler() { + todo!("pre-validation hook"); + todo!("validate signature"); + todo!("post-validation hook"); + todo!("database storage"); + todo!("post-storage hook"); +}