use axum::{Extension, Json}; use axum_auth::AuthBearer; use homedisk_database::{Database, Error}; use homedisk_types::{ auth::whoami::Response, config::Config, errors::{AuthError, ServerError}, }; use crate::middleware::validate_jwt; pub async fn handle( db: Extension, config: Extension, AuthBearer(token): AuthBearer, ) -> Result, ServerError> { // validate user token let token = validate_jwt(config.jwt.secret.as_bytes(), &token)?; // search for a user in database let response = match db.find_user_by_id(&token.claims.sub).await { Ok(user) => Response { username: user.username, }, // error while searching for a user Err(err) => match err { // user not found Error::UserNotFound => return Err(ServerError::AuthError(AuthError::UserNotFound)), // other error _ => return Err(ServerError::AuthError(AuthError::Other(err.to_string()))), }, }; // send response Ok(Json(response)) }