1 use crate::check_report_reason;
2 use activitypub_federation::config::Data;
3 use actix_web::web::Json;
4 use lemmy_api_common::{
5 comment::{CommentReportResponse, CreateCommentReport},
7 send_activity::{ActivityChannel, SendActivityData},
10 local_user_view_from_jwt,
12 send_new_report_email_to_admins,
15 use lemmy_db_schema::{
17 comment_report::{CommentReport, CommentReportForm},
18 local_site::LocalSite,
22 use lemmy_db_views::structs::{CommentReportView, CommentView};
23 use lemmy_utils::error::{LemmyError, LemmyErrorExt, LemmyErrorType};
25 /// Creates a comment report and notifies the moderators of the community
26 #[tracing::instrument(skip(context))]
27 pub async fn create_comment_report(
28 data: Json<CreateCommentReport>,
29 context: Data<LemmyContext>,
30 ) -> Result<Json<CommentReportResponse>, LemmyError> {
31 let local_user_view = local_user_view_from_jwt(&data.auth, &context).await?;
32 let local_site = LocalSite::read(&mut context.pool()).await?;
34 let reason = sanitize_html(data.reason.trim());
35 check_report_reason(&reason, &local_site)?;
37 let person_id = local_user_view.person.id;
38 let comment_id = data.comment_id;
39 let comment_view = CommentView::read(&mut context.pool(), comment_id, None).await?;
41 check_community_ban(person_id, comment_view.community.id, &mut context.pool()).await?;
43 let report_form = CommentReportForm {
44 creator_id: person_id,
46 original_comment_text: comment_view.comment.content,
50 let report = CommentReport::report(&mut context.pool(), &report_form)
52 .with_lemmy_type(LemmyErrorType::CouldntCreateReport)?;
54 let comment_report_view =
55 CommentReportView::read(&mut context.pool(), report.id, person_id).await?;
58 if local_site.reports_email_admins {
59 send_new_report_email_to_admins(
60 &comment_report_view.creator.name,
61 &comment_report_view.comment_creator.name,
68 ActivityChannel::submit_activity(
69 SendActivityData::CreateReport(
70 comment_view.comment.ap_id.inner().clone(),
71 local_user_view.person,
72 comment_view.community,
79 Ok(Json(CommentReportResponse {