From: Dessalines Date: Sun, 31 Jan 2021 04:55:14 +0000 (-0500) Subject: Make sure banned users cant subscribe, and the ban unsubs them. Fixes #1324 X-Git-Url: http://these/git/%22https:/www.exeterceilidhs.net/static/git-logo.png?a=commitdiff_plain;h=cd08fdf76f60964e1bba7735c69e053d98d5a730;p=lemmy.git Make sure banned users cant subscribe, and the ban unsubs them. Fixes #1324 --- diff --git a/crates/api/src/community.rs b/crates/api/src/community.rs index 26687b98..d2e0e841 100644 --- a/crates/api/src/community.rs +++ b/crates/api/src/community.rs @@ -1,4 +1,5 @@ use crate::{ + check_community_ban, check_optional_url, get_user_from_jwt, get_user_from_jwt_opt, @@ -495,6 +496,8 @@ impl Perform for FollowCommunity { if community.local { if data.follow { + check_community_ban(user.id, community_id, context.pool()).await?; + let follow = move |conn: &'_ _| CommunityFollower::follow(conn, &community_follower_form); if blocking(context.pool(), follow).await?.is_err() { return Err(APIError::err("community_follower_already_exists").into()); @@ -591,6 +594,18 @@ impl Perform for BanFromCommunity { if blocking(context.pool(), ban).await?.is_err() { return Err(APIError::err("community_user_already_banned").into()); } + + // Also unsubscribe them from the community, if they are subscribed + let community_follower_form = CommunityFollowerForm { + community_id: data.community_id, + user_id: banned_user_id, + pending: false, + }; + blocking(context.pool(), move |conn: &'_ _| { + CommunityFollower::unfollow(conn, &community_follower_form) + }) + .await? + .ok(); } else { let unban = move |conn: &'_ _| CommunityUserBan::unban(conn, &community_user_ban_form); if blocking(context.pool(), unban).await?.is_err() {