From: Dessalines <dessalines@users.noreply.github.com>
Date: Wed, 27 Oct 2021 13:34:18 +0000 (-0400)
Subject: Dont blank out post or community info. Fixes #1813 (#1841)
X-Git-Url: http://these/git/readmes/%7B%60%24%7BwebArchiveUrl%7D/save/static/README.es.md?a=commitdiff_plain;h=d9ecabee87a82dbc7f9284a5c87ba4ed5a2e67ca;p=lemmy.git

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
---

diff --git a/api_tests/src/community.spec.ts b/api_tests/src/community.spec.ts
index cdbb99e0..e1f6825a 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 64c54eec..b3b52ee0 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 105412b0..2797955a 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 d18ef99f..91effae8 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 ee05b723..901d1e93 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 95780c32..85f24f12 100644
--- a/crates/websocket/src/send.rs
+++ b/crates/websocket/src/send.rs
@@ -43,15 +43,11 @@ pub async fn send_post_ws_message<OP: ToString + Send + OperationType + 'static>
   person_id: Option<PersonId>,
   context: &LemmyContext,
 ) -> Result<PostResponse, LemmyError> {
-  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<OP: ToString + Send + OperationType + 'st
   person_id: Option<PersonId>,
   context: &LemmyContext,
 ) -> Result<CommunityResponse, LemmyError> {
-  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 };