drawbridge_server/users/
get.rs1use super::super::{OidcClaims, ScopeContext, ScopeLevel, Store};
5
6use drawbridge_type::UserContext;
7
8use async_std::sync::Arc;
9use axum::response::IntoResponse;
10use axum::Extension;
11use tracing::{debug, trace};
12
13pub async fn get(
14 Extension(store): Extension<Arc<Store>>,
15 claims: OidcClaims,
16 cx: UserContext,
17) -> impl IntoResponse {
18 trace!(target: "app::users::get", "called for `{cx}`");
19
20 let user = claims
21 .assert_user(&store, &cx, ScopeContext::User, ScopeLevel::Read)
22 .await
23 .map_err(IntoResponse::into_response)?;
24
25 let mut body = vec![];
28 user.get_to_writer(&mut body)
29 .await
30 .map_err(|e| {
31 debug!(target: "app::users::get", "failed for `{cx}`: {:?}", e);
32 e.into_response()
33 })
34 .map(|meta| (meta, body))
35}