]> Untitled Git - lemmy.git/commitdiff
Reject federated downvotes if downvotes are disabled (fixes #2124) (#2128)
authorNutomic <me@nutomic.com>
Mon, 14 Mar 2022 18:20:18 +0000 (18:20 +0000)
committerGitHub <noreply@github.com>
Mon, 14 Mar 2022 18:20:18 +0000 (18:20 +0000)
crates/apub/src/activities/voting/vote.rs
crates/apub/src/protocol/activities/voting/vote.rs

index 789a4c67d2345de97e18c0bdf4ce2785d71901af..11ed9b3606ae0a0562475dc1c6b80423bf54a1a7 100644 (file)
@@ -13,6 +13,7 @@ use crate::{
   PostOrComment,
 };
 use activitystreams_kinds::public;
+use anyhow::anyhow;
 use lemmy_api_common::blocking;
 use lemmy_apub_lib::{
   data::Data,
@@ -21,7 +22,7 @@ use lemmy_apub_lib::{
 };
 use lemmy_db_schema::{
   newtypes::CommunityId,
-  source::{community::Community, post::Post},
+  source::{community::Community, post::Post, site::Site},
   traits::Crud,
 };
 use lemmy_utils::LemmyError;
@@ -81,6 +82,10 @@ impl ActivityHandler for Vote {
     verify_activity(&self.id, self.actor.inner(), &context.settings())?;
     let community = self.get_community(context, request_counter).await?;
     verify_person_in_community(&self.actor, &community, context, request_counter).await?;
+    let site = blocking(context.pool(), Site::read_local_site).await??;
+    if self.kind == VoteType::Dislike && !site.enable_downvotes {
+      return Err(anyhow!("Downvotes disabled").into());
+    }
     Ok(())
   }
 
index cafd6bbc34cf022cd61205f3add70336e64fa3e3..763d862335ccf3600ccff06381409dfebee98033 100644 (file)
@@ -27,7 +27,7 @@ pub struct Vote {
   pub(crate) unparsed: Unparsed,
 }
 
-#[derive(Clone, Debug, Display, Deserialize, Serialize)]
+#[derive(Clone, Debug, Display, Deserialize, Serialize, PartialEq)]
 pub enum VoteType {
   Like,
   Dislike,