From 1a6a8a809b3df0e02eb3e943ca5bcbbdd3d0743a Mon Sep 17 00:00:00 2001 From: Paul Makles Date: Tue, 10 Sep 2024 16:53:02 +0100 Subject: [PATCH] feat(core/database): axum implementation for User --- crates/core/database/Cargo.toml | 4 ++++ crates/core/database/src/models/users/axum.rs | 24 +++++++++++++++++++ crates/core/database/src/models/users/mod.rs | 4 ++++ .../core/database/src/models/users/model.rs | 2 +- 4 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 crates/core/database/src/models/users/axum.rs diff --git a/crates/core/database/Cargo.toml b/crates/core/database/Cargo.toml index 038547bf..43fd69e4 100644 --- a/crates/core/database/Cargo.toml +++ b/crates/core/database/Cargo.toml @@ -16,6 +16,7 @@ mongodb = ["dep:mongodb", "bson"] tasks = ["isahc", "linkify", "url-escape"] async-std-runtime = ["async-std"] rocket-impl = ["rocket", "schemars", "revolt_okapi", "revolt_rocket_okapi"] +axum-impl = ["axum"] redis-is-patched = ["revolt-presence/redis-is-patched"] # Default Features @@ -76,6 +77,9 @@ async-recursion = "1.0.4" # Async async-std = { version = "1.8.0", features = ["attributes"], optional = true } +# Axum Impl +axum = { version = "0.7.5", optional = true } + # Rocket Impl schemars = { version = "0.8.8", optional = true } rocket = { version = "0.5.0-rc.2", default-features = false, features = [ diff --git a/crates/core/database/src/models/users/axum.rs b/crates/core/database/src/models/users/axum.rs new file mode 100644 index 00000000..da108a45 --- /dev/null +++ b/crates/core/database/src/models/users/axum.rs @@ -0,0 +1,24 @@ +use axum::{extract::FromRequestParts, http::request::Parts}; + +use revolt_result::{create_error, Error, Result}; + +use crate::{Database, User}; + +#[async_trait::async_trait] +impl FromRequestParts for User { + type Rejection = Error; + + async fn from_request_parts(parts: &mut Parts, db: &Database) -> Result { + if let Some(Ok(bot_token)) = parts.headers.get("x-bot-token").map(|v| v.to_str()) { + let bot = db.fetch_bot_by_token(bot_token).await?; + db.fetch_user(&bot.id).await + } else if let Some(Ok(session_token)) = + parts.headers.get("x-session-token").map(|v| v.to_str()) + { + let session = db.fetch_session_by_token(session_token).await?; + db.fetch_user(&session.user_id).await + } else { + Err(create_error!(InvalidCredentials)) + } + } +} diff --git a/crates/core/database/src/models/users/mod.rs b/crates/core/database/src/models/users/mod.rs index 84935c6f..748a87c0 100644 --- a/crates/core/database/src/models/users/mod.rs +++ b/crates/core/database/src/models/users/mod.rs @@ -1,3 +1,5 @@ +#[cfg(feature = "axum-impl")] +mod axum; mod model; mod ops; #[cfg(feature = "rocket-impl")] @@ -5,6 +7,8 @@ mod rocket; #[cfg(feature = "rocket-impl")] mod schema; +#[cfg(feature = "axum-impl")] +pub use self::axum::*; #[cfg(feature = "rocket-impl")] pub use self::rocket::*; #[cfg(feature = "rocket-impl")] diff --git a/crates/core/database/src/models/users/model.rs b/crates/core/database/src/models/users/model.rs index 6942ae64..9a250ad6 100644 --- a/crates/core/database/src/models/users/model.rs +++ b/crates/core/database/src/models/users/model.rs @@ -218,7 +218,7 @@ impl User { .datetime() .elapsed() .expect("time went backwards") - <= Duration::from_secs(86400u64 * config.features.limits.global.new_user_days as u64) + <= Duration::from_secs(3600u64 * config.features.limits.global.new_user_hours as u64) { config.features.limits.new_user } else {