Better tracing of API endpoints

This commit is contained in:
Natty 2024-03-06 16:09:01 +01:00
parent cbf6c7fe43
commit 236502ad05
Signed by: natty
GPG Key ID: BF6CB659ADEE60EC
4 changed files with 32 additions and 19 deletions

View File

@ -11,6 +11,7 @@ use crate::service::MagnetarService;
use crate::web::auth::MaybeUser;
use crate::web::{ApiError, ObjectNotFound};
#[tracing::instrument(err, skip_all)]
pub async fn handle_note(
Path(id): Path<String>,
Query(NoteByIdReq {

View File

@ -20,6 +20,7 @@ use std::collections::HashMap;
use std::sync::Arc;
use strum::IntoEnumIterator;
#[tracing::instrument(err, skip_all)]
pub async fn handle_user_info_self(
Query(req): Query<Req<GetUserSelf>>,
State(service): State<Arc<MagnetarService>>,
@ -41,6 +42,7 @@ pub async fn handle_user_info_self(
Ok(Json(user))
}
#[tracing::instrument(err, skip_all)]
pub async fn handle_user_info(
Path(id): Path<String>,
Query(req): Query<Req<GetUserById>>,
@ -69,6 +71,7 @@ pub async fn handle_user_info(
Ok(Json(user))
}
#[tracing::instrument(err, skip_all)]
pub async fn handle_user_info_by_acct(
Path(tag_str): Path<String>,
Query(req): Query<Req<GetUserByAcct>>,
@ -102,6 +105,7 @@ pub async fn handle_user_info_by_acct(
Ok(Json(user))
}
#[tracing::instrument(err, skip_all)]
pub async fn handle_user_by_id_many(
Query(ManyUsersByIdReq { id }): Query<Req<GetManyUsersById>>,
State(service): State<Arc<MagnetarService>>,
@ -145,6 +149,7 @@ pub async fn handle_user_by_id_many(
Ok(Json(users_ordered))
}
#[tracing::instrument(err, skip_all)]
pub async fn handle_notifications(
Query(NotificationsReq {
ref exclude_types,
@ -179,6 +184,7 @@ pub async fn handle_notifications(
Ok((pagination, Json(notifications)))
}
#[tracing::instrument(err, skip_all)]
pub async fn handle_following_self(
Query(_): Query<Req<GetFollowingSelf>>,
State(service): State<Arc<MagnetarService>>,
@ -194,6 +200,7 @@ pub async fn handle_following_self(
Ok((pagination, Json(users)))
}
#[tracing::instrument(err, skip_all)]
pub async fn handle_followers_self(
Query(_): Query<Req<GetFollowersSelf>>,
State(service): State<Arc<MagnetarService>>,
@ -209,6 +216,7 @@ pub async fn handle_followers_self(
Ok((pagination, Json(users)))
}
#[tracing::instrument(err, skip_all)]
pub async fn handle_following(
Query(_): Query<Req<GetFollowingById>>,
Path(id): Path<String>,
@ -223,6 +231,7 @@ pub async fn handle_following(
Ok((pagination, Json(users)))
}
#[tracing::instrument(err, skip_all)]
pub async fn handle_followers(
Query(_): Query<Req<GetFollowersById>>,
Path(id): Path<String>,
@ -237,6 +246,7 @@ pub async fn handle_followers(
Ok((pagination, Json(users)))
}
#[tracing::instrument(err, skip_all)]
pub async fn handle_follow_requests_self(
Query(_): Query<Req<GetFollowRequestsSelf>>,
State(service): State<Arc<MagnetarService>>,

View File

@ -26,7 +26,7 @@ use magnetar_sdk::types::{Id, MmXml};
use magnetar_sdk::{mmm, Optional, Packed, Required};
use serde::{Deserialize, Serialize};
use tokio::{join, try_join};
use tracing::warn;
use tracing::{instrument, warn};
use url::Url;
pub trait UserShapedData<'a>: Send + Sync {
@ -566,24 +566,26 @@ impl UserModel {
ctx: &PackingContext,
id: &str,
) -> Result<(), ApiError> {
if !ctx.is_id_self(id) {
let profile = self.get_profile_by_id(ctx, id).await?;
if ctx.is_id_self(id) {
return Ok(());
}
match (&ctx.self_user, &profile.ff_visibility) {
(_, UserProfileFfvisibilityEnum::Public) => {}
(Some(self_user), UserProfileFfvisibilityEnum::Followers)
if ctx
.is_relationship_between(
Either::Right(self_user),
Either::Left(id),
UserRelationship::Follow,
)
.await? => {}
_ => {
Err(AccessForbidden(
"Follower information not visible".to_string(),
))?;
}
let profile = self.get_profile_by_id(ctx, id).await?;
match (&ctx.self_user, &profile.ff_visibility) {
(_, UserProfileFfvisibilityEnum::Public) => {}
(Some(self_user), UserProfileFfvisibilityEnum::Followers)
if ctx
.is_relationship_between(
Either::Right(self_user),
Either::Left(id),
UserRelationship::Follow,
)
.await? => {}
_ => {
Err(AccessForbidden(
"Follower information not visible".to_string(),
))?;
}
}

View File

@ -28,7 +28,7 @@ impl<T: ?Sized> IntoErrorCode for T {
where
&'a Self: Into<&'b str>,
{
ErrorCode(self.into().to_string())
ErrorCode(<&Self as Into<&'b str>>::into(self).to_string())
}
}