diff --git a/src/common_queries/query_tts_result.rs b/src/common_queries/query_tts_result.rs index 632b2d6ac8..e6636a2d14 100644 --- a/src/common_queries/query_tts_result.rs +++ b/src/common_queries/query_tts_result.rs @@ -42,6 +42,14 @@ pub struct TtsResultRecordForResponse { pub created_at: DateTime, pub updated_at: DateTime, + pub maybe_moderator_fields: Option, +} + +/// "Moderator-only fields" that we wouldn't want to expose to ordinary users. +/// It's the web endpoint controller's responsibility to clear these for non-mods. +#[derive(Serialize)] +pub struct TtsResultModeratorFields { + pub creator_ip_address: String, pub user_deleted_at: Option>, pub mod_deleted_at: Option>, } @@ -76,6 +84,8 @@ pub struct TtsResultRecordRaw { pub created_at: DateTime, pub updated_at: DateTime, + // Moderator fields + pub creator_ip_address: String, pub user_deleted_at: Option>, pub mod_deleted_at: Option>, } @@ -136,8 +146,12 @@ pub async fn select_tts_result_by_token( created_at: ir.created_at.clone(), updated_at: ir.updated_at.clone(), - user_deleted_at: ir.user_deleted_at.clone(), - mod_deleted_at: ir.mod_deleted_at.clone(), + + maybe_moderator_fields: Some(TtsResultModeratorFields { + creator_ip_address: ir.creator_ip_address.clone(), + user_deleted_at: ir.user_deleted_at.clone(), + mod_deleted_at: ir.mod_deleted_at.clone(), + }), }; Ok(Some(ir_for_response)) @@ -175,6 +189,8 @@ SELECT tts_results.duration_millis, tts_results.created_at, tts_results.updated_at, + + tts_results.creator_ip_address, tts_results.user_deleted_at, tts_results.mod_deleted_at @@ -226,6 +242,8 @@ SELECT tts_results.duration_millis, tts_results.created_at, tts_results.updated_at, + + tts_results.creator_ip_address, tts_results.user_deleted_at, tts_results.mod_deleted_at diff --git a/src/http_server/endpoints/tts/get_tts_result.rs b/src/http_server/endpoints/tts/get_tts_result.rs index b762ed20cb..fdf6597276 100644 --- a/src/http_server/endpoints/tts/get_tts_result.rs +++ b/src/http_server/endpoints/tts/get_tts_result.rs @@ -78,11 +78,15 @@ pub async fn get_tts_inference_result_handler( })?; let mut show_deleted_results = false; + let mut is_moderator = false; if let Some(user_session) = maybe_user_session { // NB: Moderators can see deleted results. // Original creators cannot see them (unless they're moderators!) show_deleted_results = user_session.can_delete_other_users_tts_results; + // Moderators get to see all the fields. + is_moderator = user_session.can_delete_other_users_tts_results + || user_session.can_edit_other_users_tts_models; } let inference_result_query_result = select_tts_result_by_token( @@ -91,7 +95,7 @@ pub async fn get_tts_inference_result_handler( &server_state.mysql_pool ).await; - let inference_result = match inference_result_query_result { + let mut inference_result = match inference_result_query_result { Err(e) => { warn!("query error: {:?}", e); return Err(GetTtsResultError::ServerError); @@ -100,6 +104,10 @@ pub async fn get_tts_inference_result_handler( Ok(Some(inference_result)) => inference_result, }; + if !is_moderator { + inference_result.maybe_moderator_fields = None; + } + let response = GetTtsResultSuccessResponse { success: true, result: inference_result,