drawbridge_server/users/
get.rs

1// SPDX-FileCopyrightText: 2022 Profian Inc. <opensource@profian.com>
2// SPDX-License-Identifier: Apache-2.0
3
4use 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    // TODO: Stream body
26    // https://github.com/profianinc/drawbridge/issues/56
27    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}