Enforce post lock in federation inbox

pull/1261/head
Felix Ableitner 2020-11-09 17:06:54 +01:00
parent 8803e7834f
commit 3b4c3ec074
2 changed files with 13 additions and 4 deletions

View 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

View 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)
})