feat: account deletion request and active-user check

This commit is contained in:
2026-10-26 02:11:44 +01:00
parent 83bb5d9847
commit 0b5d18c4ee
27 changed files with 577 additions and 151 deletions

View File

@@ -8,6 +8,11 @@ use axum::{
};
use domain::{errors::DomainError, value_objects::UserId};
async fn ensure_active(state: &AppState, user_id: &UserId) -> Result<(), DomainError> {
application::users::ensure_active::execute(&state.app_ctx.deps.users.ensure_active, user_id)
.await
}
use crate::{errors::ApiError, state::AppState};
pub struct AuthenticatedUser(pub UserId);
@@ -37,6 +42,7 @@ where
.auth
.validate_token(token)
.await?;
ensure_active(&app_state, &user_id).await?;
Ok(AuthenticatedUser(user_id))
}
}
@@ -75,6 +81,10 @@ where
.validate_token(&token)
.await
.ok();
let user_id = match user_id {
Some(id) if ensure_active(&app_state, &id).await.is_ok() => Some(id),
_ => None,
};
Ok(OptionalCookieUser(user_id))
}
}
@@ -97,6 +107,14 @@ where
.validate_token(&token)
.await
.map_err(|_| Redirect::to("/login").into_response())?;
ensure_active(&app_state, &user_id)
.await
.map_err(|e| match e {
DomainError::InfrastructureError(_) => {
StatusCode::INTERNAL_SERVER_ERROR.into_response()
}
_ => Redirect::to("/login").into_response(),
})?;
Ok(RequiredCookieUser(user_id))
}
}