]> Untitled Git - lemmy.git/commitdiff
Enforce post lock in federation inbox
authorFelix Ableitner <me@nutomic.com>
Mon, 9 Nov 2020 16:06:54 +0000 (17:06 +0100)
committerFelix Ableitner <me@nutomic.com>
Mon, 9 Nov 2020 16:06:54 +0000 (17:06 +0100)
lemmy_apub/src/activities/receive/comment.rs
lemmy_apub/src/fetcher.rs

index b60d4c950af188aa62c511993a46956dce245e00..d104d5e191641a65d6b699b748f9f556f2664a91 100644 (file)
@@ -9,7 +9,7 @@ use activitystreams::{
   base::ExtendsExt,
   object::Note,
 };
-use anyhow::Context;
+use anyhow::{anyhow, Context};
 use lemmy_db::{
   comment::{Comment, CommentForm, CommentLike, CommentLikeForm},
   comment_view::CommentView,
@@ -33,12 +33,15 @@ pub(crate) async fn receive_create_comment(
   let comment =
     CommentForm::from_apub(&note, context, Some(user.actor_id()?), request_counter).await?;
 
+  let post_id = comment.post_id;
+  let post = blocking(context.pool(), move |conn| Post::read(conn, post_id)).await??;
+  if post.locked {
+    return Err(anyhow!("Post is locked").into());
+  }
+
   let inserted_comment =
     blocking(context.pool(), move |conn| Comment::upsert(conn, &comment)).await??;
 
-  let post_id = inserted_comment.post_id;
-  let post = blocking(context.pool(), move |conn| Post::read(conn, post_id)).await??;
-
   // Note:
   // Although mentions could be gotten from the post tags (they are included there), or the ccs,
   // Its much easier to scrape them from the comment body, since the API has to do that
index ff3b03d34bc54fefc62161a33701b4d1abf9cf9d..acf94ec9e101998b45dda284191905d00b88302b 100644 (file)
@@ -497,6 +497,12 @@ pub(crate) async fn get_or_fetch_and_insert_comment(
       )
       .await?;
 
+      let post_id = comment_form.post_id;
+      let post = blocking(context.pool(), move |conn| Post::read(conn, post_id)).await??;
+      if post.locked {
+        return Err(anyhow!("Post is locked").into());
+      }
+
       let comment = blocking(context.pool(), move |conn| {
         Comment::upsert(conn, &comment_form)
       })