summaryrefslogtreecommitdiffstats
path: root/src/server/routes/users
diff options
context:
space:
mode:
authorrtkay123 <dev@kanjala.com>2025-07-12 16:46:32 +0200
committerrtkay123 <dev@kanjala.com>2025-07-12 16:46:32 +0200
commita56b12621d9f8c34017995a518e61ef7ee2b0f64 (patch)
tree0a2ea448bffe44ad7724091dfd276b10ca671908 /src/server/routes/users
parent93ce338cba3e4488fc36ea9159167884d6cd9eb9 (diff)
downloadsellershut-a56b12621d9f8c34017995a518e61ef7ee2b0f64.tar.bz2
sellershut-a56b12621d9f8c34017995a518e61ef7ee2b0f64.zip
feat: get user
Diffstat (limited to 'src/server/routes/users')
-rw-r--r--src/server/routes/users/get_user.rs57
1 files changed, 57 insertions, 0 deletions
diff --git a/src/server/routes/users/get_user.rs b/src/server/routes/users/get_user.rs
new file mode 100644
index 0000000..8020923
--- /dev/null
+++ b/src/server/routes/users/get_user.rs
@@ -0,0 +1,57 @@
+use activitypub_federation::{
+ axum::json::FederationJson, config::Data, protocol::context::WithContext, traits::Object,
+};
+use axum::{debug_handler, extract::Path, http::StatusCode, response::IntoResponse};
+
+use crate::{error::AppError, state::AppHandle};
+
+#[debug_handler]
+pub async fn http_get_user(
+ Path(name): Path<String>,
+ data: Data<AppHandle>,
+) -> Result<impl IntoResponse, AppError> {
+ let read = data.users.read().await;
+ if let Some(a) = read
+ .iter()
+ .find(|value| value.username.eq(&name))
+ .map(ToOwned::to_owned)
+ {
+ let json_user = a.into_json(&data).await?;
+ Ok((
+ StatusCode::OK,
+ FederationJson(WithContext::new_default(json_user)),
+ )
+ .into_response())
+ } else {
+ Ok((StatusCode::NOT_FOUND, "").into_response())
+ }
+}
+
+#[cfg(test)]
+mod tests {
+ use axum::{
+ body::Body,
+ http::{Request, StatusCode},
+ };
+ use tower::ServiceExt;
+
+ use crate::{server, state::AppState};
+
+ #[tokio::test]
+ async fn get_user() {
+ let state = AppState::new().await.unwrap();
+ let app = server::router(state);
+
+ let response = app
+ .oneshot(
+ Request::builder()
+ .uri("/users/sellershut")
+ .body(Body::empty())
+ .unwrap(),
+ )
+ .await
+ .unwrap();
+
+ assert_eq!(response.status(), StatusCode::OK);
+ }
+}