Enforce post lock in federation inbox #129

Merged
dessalines merged 2 commits from enforce-post-lock into main 2020-11-10 13:16:15 +00:00
2 changed files with 13 additions and 4 deletions
Showing only changes of commit 3b4c3ec074 - Show all commits

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