Adding check in createorupdate post and comment.

dont_allow_posts_to_deleted_or_removed_communities
Dessalines 2021-10-12 12:33:57 -04:00
parent 9909e18bd2
commit e30170c432
3 changed files with 13 additions and 0 deletions

View File

@ -1,5 +1,6 @@
use crate::{ use crate::{
activities::{ activities::{
check_community_deleted_or_removed,
comment::{collect_non_local_mentions, get_notif_recipients}, comment::{collect_non_local_mentions, get_notif_recipients},
community::{announce::AnnouncableActivities, send_to_community}, community::{announce::AnnouncableActivities, send_to_community},
extract_community, extract_community,
@ -98,6 +99,7 @@ impl ActivityHandler for CreateOrUpdateComment {
verify_activity(self, &context.settings())?; verify_activity(self, &context.settings())?;
verify_person_in_community(&self.actor, &community_id, context, request_counter).await?; verify_person_in_community(&self.actor, &community_id, context, request_counter).await?;
verify_domains_match(self.actor.inner(), self.object.id_unchecked())?; verify_domains_match(self.actor.inner(), self.object.id_unchecked())?;
check_community_deleted_or_removed(&community)?;
// TODO: should add a check that the correct community is in cc (probably needs changes to // TODO: should add a check that the correct community is in cc (probably needs changes to
// comment deserialization) // comment deserialization)
self.object.verify(context, request_counter).await?; self.object.verify(context, request_counter).await?;

View File

@ -133,6 +133,14 @@ fn verify_add_remove_moderator_target(
Ok(()) Ok(())
} }
pub(crate) fn check_community_deleted_or_removed(community: &Community) -> Result<(), LemmyError> {
if community.deleted || community.removed {
Err(anyhow!("New post or comment cannot be created in deleted or removed community").into())
} else {
Ok(())
}
}
/// Generate a unique ID for an activity, in the format: /// Generate a unique ID for an activity, in the format:
/// `http(s)://example.com/receive/create/202daf0a-1489-45df-8d2e-c8a3173fed36` /// `http(s)://example.com/receive/create/202daf0a-1489-45df-8d2e-c8a3173fed36`
fn generate_activity_id<T>(kind: T, protocol_and_hostname: &str) -> Result<Url, ParseError> fn generate_activity_id<T>(kind: T, protocol_and_hostname: &str) -> Result<Url, ParseError>

View File

@ -1,5 +1,6 @@
use crate::{ use crate::{
activities::{ activities::{
check_community_deleted_or_removed,
community::{announce::AnnouncableActivities, send_to_community}, community::{announce::AnnouncableActivities, send_to_community},
generate_activity_id, generate_activity_id,
verify_activity, verify_activity,
@ -87,6 +88,8 @@ impl ActivityHandler for CreateOrUpdatePost {
verify_activity(self, &context.settings())?; verify_activity(self, &context.settings())?;
let community = self.cc[0].dereference(context, request_counter).await?; let community = self.cc[0].dereference(context, request_counter).await?;
verify_person_in_community(&self.actor, &self.cc[0], context, request_counter).await?; verify_person_in_community(&self.actor, &self.cc[0], context, request_counter).await?;
check_community_deleted_or_removed(&community)?;
match self.kind { match self.kind {
CreateOrUpdateType::Create => { CreateOrUpdateType::Create => {
verify_domains_match(self.actor.inner(), self.object.id_unchecked())?; verify_domains_match(self.actor.inner(), self.object.id_unchecked())?;