From d9ecabee87a82dbc7f9284a5c87ba4ed5a2e67ca Mon Sep 17 00:00:00 2001 From: Dessalines Date: Wed, 27 Oct 2021 09:34:18 -0400 Subject: [PATCH] Dont blank out post or community info. Fixes #1813 (#1841) * Dont blank out post or community info. Fixes #1813 * Fix federation tests * Only blank out info for non-logged in users. * Remove pointless trait. * Blank the community if deleted for post * Fix hook * Fixing again * Fixing again * Fixing again --- api_tests/src/community.spec.ts | 4 +- api_tests/src/post.spec.ts | 4 +- crates/api/src/site.rs | 38 ++++++++-------- crates/api_crud/src/community/read.rs | 19 ++++---- crates/api_crud/src/post/read.rs | 64 +++++++++++++++------------ crates/websocket/src/send.rs | 12 +---- 6 files changed, 73 insertions(+), 68 deletions(-) diff --git a/api_tests/src/community.spec.ts b/api_tests/src/community.spec.ts index cdbb99e00..e1f6825ae 100644 --- a/api_tests/src/community.spec.ts +++ b/api_tests/src/community.spec.ts @@ -75,7 +75,7 @@ test('Delete community', async () => { communityRes.community_view.community.id ); expect(deleteCommunityRes.community_view.community.deleted).toBe(true); - expect(deleteCommunityRes.community_view.community.title).toBe(""); + expect(deleteCommunityRes.community_view.community.title).toBe(communityRes.community_view.community.title); // Make sure it got deleted on A let communityOnAlphaDeleted = await getCommunity( @@ -126,7 +126,7 @@ test('Remove community', async () => { communityRes.community_view.community.id ); expect(removeCommunityRes.community_view.community.removed).toBe(true); - expect(removeCommunityRes.community_view.community.title).toBe(""); + expect(removeCommunityRes.community_view.community.title).toBe(communityRes.community_view.community.title); // Make sure it got Removed on A let communityOnAlphaRemoved = await getCommunity( diff --git a/api_tests/src/post.spec.ts b/api_tests/src/post.spec.ts index 64c54eec0..b3b52ee0b 100644 --- a/api_tests/src/post.spec.ts +++ b/api_tests/src/post.spec.ts @@ -206,7 +206,7 @@ test('Delete a post', async () => { let deletedPost = await deletePost(alpha, true, postRes.post_view.post); expect(deletedPost.post_view.post.deleted).toBe(true); - expect(deletedPost.post_view.post.name).toBe(""); + expect(deletedPost.post_view.post.name).toBe(postRes.post_view.post.name); // Make sure lemmy beta sees post is deleted let betaPost = (await resolvePost(beta, postRes.post_view.post)).post; @@ -232,7 +232,7 @@ test('Remove a post from admin and community on different instance', async () => let removedPost = await removePost(alpha, true, postRes.post_view.post); expect(removedPost.post_view.post.removed).toBe(true); - expect(removedPost.post_view.post.name).toBe(""); + expect(removedPost.post_view.post.name).toBe(postRes.post_view.post.name); // Make sure lemmy beta sees post is NOT removed let betaPost = (await resolvePost(beta, postRes.post_view.post)).post; diff --git a/crates/api/src/site.rs b/crates/api/src/site.rs index 105412b0e..2797955a5 100644 --- a/crates/api/src/site.rs +++ b/crates/api/src/site.rs @@ -339,26 +339,28 @@ impl Perform for Search { } }; - // Blank out deleted or removed info - for cv in comments - .iter_mut() - .filter(|cv| cv.comment.deleted || cv.comment.removed) - { - cv.comment = cv.to_owned().comment.blank_out_deleted_or_removed_info(); - } + // Blank out deleted or removed info for non logged in users + if person_id.is_none() { + for cv in communities + .iter_mut() + .filter(|cv| cv.community.deleted || cv.community.removed) + { + cv.community = cv.to_owned().community.blank_out_deleted_or_removed_info(); + } - for cv in communities - .iter_mut() - .filter(|cv| cv.community.deleted || cv.community.removed) - { - cv.community = cv.to_owned().community.blank_out_deleted_or_removed_info(); - } + for pv in posts + .iter_mut() + .filter(|p| p.post.deleted || p.post.removed) + { + pv.post = pv.to_owned().post.blank_out_deleted_or_removed_info(); + } - for pv in posts - .iter_mut() - .filter(|p| p.post.deleted || p.post.removed) - { - pv.post = pv.to_owned().post.blank_out_deleted_or_removed_info(); + for cv in comments + .iter_mut() + .filter(|cv| cv.comment.deleted || cv.comment.removed) + { + cv.comment = cv.to_owned().comment.blank_out_deleted_or_removed_info(); + } } // Return the jwt diff --git a/crates/api_crud/src/community/read.rs b/crates/api_crud/src/community/read.rs index d18ef99f6..91effae87 100644 --- a/crates/api_crud/src/community/read.rs +++ b/crates/api_crud/src/community/read.rs @@ -55,8 +55,9 @@ impl PerformCrud for GetCommunity { .await? .map_err(|e| ApiError::err("couldnt_find_community", e))?; - // Blank out deleted or removed info - if community_view.community.deleted || community_view.community.removed { + // Blank out deleted or removed info for non-logged in users + if person_id.is_none() && (community_view.community.deleted || community_view.community.removed) + { community_view.community = community_view.community.blank_out_deleted_or_removed_info(); } @@ -121,12 +122,14 @@ impl PerformCrud for ListCommunities { }) .await??; - // Blank out deleted or removed info - for cv in communities - .iter_mut() - .filter(|cv| cv.community.deleted || cv.community.removed) - { - cv.community = cv.to_owned().community.blank_out_deleted_or_removed_info(); + // Blank out deleted or removed info for non-logged in users + if person_id.is_none() { + for cv in communities + .iter_mut() + .filter(|cv| cv.community.deleted || cv.community.removed) + { + cv.community = cv.to_owned().community.blank_out_deleted_or_removed_info(); + } } // Return the jwt diff --git a/crates/api_crud/src/post/read.rs b/crates/api_crud/src/post/read.rs index ee05b7231..901d1e935 100644 --- a/crates/api_crud/src/post/read.rs +++ b/crates/api_crud/src/post/read.rs @@ -44,11 +44,6 @@ impl PerformCrud for GetPost { .await? .map_err(|e| ApiError::err("couldnt_find_post", e))?; - // Blank out deleted info - if post_view.post.deleted || post_view.post.removed { - post_view.post = post_view.post.blank_out_deleted_or_removed_info(); - } - // Mark the post as read if let Some(person_id) = person_id { mark_post_as_read(person_id, id, context.pool()).await?; @@ -65,32 +60,36 @@ impl PerformCrud for GetPost { }) .await??; - // Blank out deleted or removed info - for cv in comments - .iter_mut() - .filter(|cv| cv.comment.deleted || cv.comment.removed) - { - cv.comment = cv.to_owned().comment.blank_out_deleted_or_removed_info(); - } - - let community_id = post_view.community.id; - let moderators = blocking(context.pool(), move |conn| { - CommunityModeratorView::for_community(conn, community_id) - }) - .await??; - // Necessary for the sidebar + let community_id = post_view.community.id; let mut community_view = blocking(context.pool(), move |conn| { CommunityView::read(conn, community_id, person_id) }) .await? .map_err(|e| ApiError::err("couldnt_find_community", e))?; - // Blank out deleted or removed info - if community_view.community.deleted || community_view.community.removed { - community_view.community = community_view.community.blank_out_deleted_or_removed_info(); + // Blank out deleted or removed info for non-logged in users + if person_id.is_none() { + if post_view.post.deleted || post_view.post.removed { + post_view.post = post_view.post.blank_out_deleted_or_removed_info(); + } + + for cv in comments + .iter_mut() + .filter(|cv| cv.comment.deleted || cv.comment.removed) + { + cv.comment = cv.to_owned().comment.blank_out_deleted_or_removed_info(); + } + if community_view.community.deleted || community_view.community.removed { + community_view.community = community_view.community.blank_out_deleted_or_removed_info(); + } } + let moderators = blocking(context.pool(), move |conn| { + CommunityModeratorView::for_community(conn, community_id) + }) + .await??; + let online = context .chat_server() .send(GetPostUsersOnline { post_id: data.id }) @@ -162,12 +161,21 @@ impl PerformCrud for GetPosts { .await? .map_err(|e| ApiError::err("couldnt_get_posts", e))?; - // Blank out deleted or removed info - for pv in posts - .iter_mut() - .filter(|p| p.post.deleted || p.post.removed) - { - pv.post = pv.to_owned().post.blank_out_deleted_or_removed_info(); + // Blank out deleted or removed info for non-logged in users + if person_id.is_none() { + for pv in posts + .iter_mut() + .filter(|p| p.post.deleted || p.post.removed) + { + pv.post = pv.to_owned().post.blank_out_deleted_or_removed_info(); + } + + for pv in posts + .iter_mut() + .filter(|p| p.community.deleted || p.community.removed) + { + pv.community = pv.to_owned().community.blank_out_deleted_or_removed_info(); + } } Ok(GetPostsResponse { posts }) diff --git a/crates/websocket/src/send.rs b/crates/websocket/src/send.rs index 95780c329..85f24f12e 100644 --- a/crates/websocket/src/send.rs +++ b/crates/websocket/src/send.rs @@ -43,15 +43,11 @@ pub async fn send_post_ws_message person_id: Option, context: &LemmyContext, ) -> Result { - let mut post_view = blocking(context.pool(), move |conn| { + let post_view = blocking(context.pool(), move |conn| { PostView::read(conn, post_id, person_id) }) .await??; - if post_view.post.deleted || post_view.post.removed { - post_view.post = post_view.post.blank_out_deleted_or_removed_info(); - } - let res = PostResponse { post_view }; context.chat_server().do_send(SendPost { @@ -118,14 +114,10 @@ pub async fn send_community_ws_message, context: &LemmyContext, ) -> Result { - let mut community_view = blocking(context.pool(), move |conn| { + let community_view = blocking(context.pool(), move |conn| { CommunityView::read(conn, community_id, person_id) }) .await??; - // Blank out deleted or removed info - if community_view.community.deleted || community_view.community.removed { - community_view.community = community_view.community.blank_out_deleted_or_removed_info(); - } let res = CommunityResponse { community_view };