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
This commit is contained in:
Dessalines 2021-10-27 09:34:18 -04:00 committed by GitHub
parent f4bac6a17f
commit d9ecabee87
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 73 additions and 68 deletions

View file

@ -75,7 +75,7 @@ test('Delete community', async () => {
communityRes.community_view.community.id communityRes.community_view.community.id
); );
expect(deleteCommunityRes.community_view.community.deleted).toBe(true); 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 // Make sure it got deleted on A
let communityOnAlphaDeleted = await getCommunity( let communityOnAlphaDeleted = await getCommunity(
@ -126,7 +126,7 @@ test('Remove community', async () => {
communityRes.community_view.community.id communityRes.community_view.community.id
); );
expect(removeCommunityRes.community_view.community.removed).toBe(true); 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 // Make sure it got Removed on A
let communityOnAlphaRemoved = await getCommunity( let communityOnAlphaRemoved = await getCommunity(

View file

@ -206,7 +206,7 @@ test('Delete a post', async () => {
let deletedPost = await deletePost(alpha, true, postRes.post_view.post); let deletedPost = await deletePost(alpha, true, postRes.post_view.post);
expect(deletedPost.post_view.post.deleted).toBe(true); 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 // Make sure lemmy beta sees post is deleted
let betaPost = (await resolvePost(beta, postRes.post_view.post)).post; 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); let removedPost = await removePost(alpha, true, postRes.post_view.post);
expect(removedPost.post_view.post.removed).toBe(true); 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 // Make sure lemmy beta sees post is NOT removed
let betaPost = (await resolvePost(beta, postRes.post_view.post)).post; let betaPost = (await resolvePost(beta, postRes.post_view.post)).post;

View file

@ -339,26 +339,28 @@ impl Perform for Search {
} }
}; };
// Blank out deleted or removed info // Blank out deleted or removed info for non logged in users
for cv in comments if person_id.is_none() {
.iter_mut() for cv in communities
.filter(|cv| cv.comment.deleted || cv.comment.removed) .iter_mut()
{ .filter(|cv| cv.community.deleted || cv.community.removed)
cv.comment = cv.to_owned().comment.blank_out_deleted_or_removed_info(); {
} cv.community = cv.to_owned().community.blank_out_deleted_or_removed_info();
}
for cv in communities for pv in posts
.iter_mut() .iter_mut()
.filter(|cv| cv.community.deleted || cv.community.removed) .filter(|p| p.post.deleted || p.post.removed)
{ {
cv.community = cv.to_owned().community.blank_out_deleted_or_removed_info(); pv.post = pv.to_owned().post.blank_out_deleted_or_removed_info();
} }
for pv in posts for cv in comments
.iter_mut() .iter_mut()
.filter(|p| p.post.deleted || p.post.removed) .filter(|cv| cv.comment.deleted || cv.comment.removed)
{ {
pv.post = pv.to_owned().post.blank_out_deleted_or_removed_info(); cv.comment = cv.to_owned().comment.blank_out_deleted_or_removed_info();
}
} }
// Return the jwt // Return the jwt

View file

@ -55,8 +55,9 @@ impl PerformCrud for GetCommunity {
.await? .await?
.map_err(|e| ApiError::err("couldnt_find_community", e))?; .map_err(|e| ApiError::err("couldnt_find_community", e))?;
// Blank out deleted or removed info // Blank out deleted or removed info for non-logged in users
if community_view.community.deleted || community_view.community.removed { 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(); community_view.community = community_view.community.blank_out_deleted_or_removed_info();
} }
@ -121,12 +122,14 @@ impl PerformCrud for ListCommunities {
}) })
.await??; .await??;
// Blank out deleted or removed info // Blank out deleted or removed info for non-logged in users
for cv in communities if person_id.is_none() {
.iter_mut() for cv in communities
.filter(|cv| cv.community.deleted || cv.community.removed) .iter_mut()
{ .filter(|cv| cv.community.deleted || cv.community.removed)
cv.community = cv.to_owned().community.blank_out_deleted_or_removed_info(); {
cv.community = cv.to_owned().community.blank_out_deleted_or_removed_info();
}
} }
// Return the jwt // Return the jwt

View file

@ -44,11 +44,6 @@ impl PerformCrud for GetPost {
.await? .await?
.map_err(|e| ApiError::err("couldnt_find_post", e))?; .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 // Mark the post as read
if let Some(person_id) = person_id { if let Some(person_id) = person_id {
mark_post_as_read(person_id, id, context.pool()).await?; mark_post_as_read(person_id, id, context.pool()).await?;
@ -65,32 +60,36 @@ impl PerformCrud for GetPost {
}) })
.await??; .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 // Necessary for the sidebar
let community_id = post_view.community.id;
let mut community_view = blocking(context.pool(), move |conn| { let mut community_view = blocking(context.pool(), move |conn| {
CommunityView::read(conn, community_id, person_id) CommunityView::read(conn, community_id, person_id)
}) })
.await? .await?
.map_err(|e| ApiError::err("couldnt_find_community", e))?; .map_err(|e| ApiError::err("couldnt_find_community", e))?;
// Blank out deleted or removed info // Blank out deleted or removed info for non-logged in users
if community_view.community.deleted || community_view.community.removed { if person_id.is_none() {
community_view.community = community_view.community.blank_out_deleted_or_removed_info(); 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 let online = context
.chat_server() .chat_server()
.send(GetPostUsersOnline { post_id: data.id }) .send(GetPostUsersOnline { post_id: data.id })
@ -162,12 +161,21 @@ impl PerformCrud for GetPosts {
.await? .await?
.map_err(|e| ApiError::err("couldnt_get_posts", e))?; .map_err(|e| ApiError::err("couldnt_get_posts", e))?;
// Blank out deleted or removed info // Blank out deleted or removed info for non-logged in users
for pv in posts if person_id.is_none() {
.iter_mut() for pv in posts
.filter(|p| p.post.deleted || p.post.removed) .iter_mut()
{ .filter(|p| p.post.deleted || p.post.removed)
pv.post = pv.to_owned().post.blank_out_deleted_or_removed_info(); {
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 }) Ok(GetPostsResponse { posts })

View file

@ -43,15 +43,11 @@ pub async fn send_post_ws_message<OP: ToString + Send + OperationType + 'static>
person_id: Option<PersonId>, person_id: Option<PersonId>,
context: &LemmyContext, context: &LemmyContext,
) -> Result<PostResponse, LemmyError> { ) -> 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) PostView::read(conn, post_id, person_id)
}) })
.await??; .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 }; let res = PostResponse { post_view };
context.chat_server().do_send(SendPost { 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>, person_id: Option<PersonId>,
context: &LemmyContext, context: &LemmyContext,
) -> Result<CommunityResponse, LemmyError> { ) -> 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) CommunityView::read(conn, community_id, person_id)
}) })
.await??; .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 }; let res = CommunityResponse { community_view };