mirror of
https://github.com/LemmyNet/lemmy.git
synced 2024-11-23 04:41:19 +00:00
Revert "Get rid of repetitive &mut *context.conn().await?
"
This reverts commit d2c6263ea1
.
This commit is contained in:
parent
c1c17ab63b
commit
cc1a725c8a
134 changed files with 1017 additions and 820 deletions
|
@ -18,24 +18,22 @@ impl Perform for DistinguishComment {
|
||||||
|
|
||||||
#[tracing::instrument(skip(context))]
|
#[tracing::instrument(skip(context))]
|
||||||
async fn perform(&self, context: &Data<LemmyContext>) -> Result<CommentResponse, LemmyError> {
|
async fn perform(&self, context: &Data<LemmyContext>) -> Result<CommentResponse, LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
|
|
||||||
let data: &DistinguishComment = self;
|
let data: &DistinguishComment = self;
|
||||||
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
||||||
|
|
||||||
let comment_id = data.comment_id;
|
let comment_id = data.comment_id;
|
||||||
let orig_comment = CommentView::read(&mut conn, comment_id, None).await?;
|
let orig_comment = CommentView::read(&mut *context.conn().await?, comment_id, None).await?;
|
||||||
|
|
||||||
check_community_ban(
|
check_community_ban(
|
||||||
local_user_view.person.id,
|
local_user_view.person.id,
|
||||||
orig_comment.community.id,
|
orig_comment.community.id,
|
||||||
&mut conn,
|
&mut *context.conn().await?,
|
||||||
)
|
)
|
||||||
.await?;
|
.await?;
|
||||||
|
|
||||||
// Verify that only a mod or admin can distinguish a comment
|
// Verify that only a mod or admin can distinguish a comment
|
||||||
is_mod_or_admin(
|
is_mod_or_admin(
|
||||||
&mut conn,
|
&mut *context.conn().await?,
|
||||||
local_user_view.person.id,
|
local_user_view.person.id,
|
||||||
orig_comment.community.id,
|
orig_comment.community.id,
|
||||||
)
|
)
|
||||||
|
@ -46,13 +44,14 @@ impl Perform for DistinguishComment {
|
||||||
let form = CommentUpdateForm::builder()
|
let form = CommentUpdateForm::builder()
|
||||||
.distinguished(Some(data.distinguished))
|
.distinguished(Some(data.distinguished))
|
||||||
.build();
|
.build();
|
||||||
Comment::update(&mut conn, comment_id, &form)
|
Comment::update(&mut *context.conn().await?, comment_id, &form)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| LemmyError::from_error_message(e, "couldnt_update_comment"))?;
|
.map_err(|e| LemmyError::from_error_message(e, "couldnt_update_comment"))?;
|
||||||
|
|
||||||
let comment_id = data.comment_id;
|
let comment_id = data.comment_id;
|
||||||
let person_id = local_user_view.person.id;
|
let person_id = local_user_view.person.id;
|
||||||
let comment_view = CommentView::read(&mut conn, comment_id, Some(person_id)).await?;
|
let comment_view =
|
||||||
|
CommentView::read(&mut *context.conn().await?, comment_id, Some(person_id)).await?;
|
||||||
|
|
||||||
Ok(CommentResponse {
|
Ok(CommentResponse {
|
||||||
comment_view,
|
comment_view,
|
||||||
|
|
|
@ -24,10 +24,8 @@ impl Perform for CreateCommentLike {
|
||||||
|
|
||||||
#[tracing::instrument(skip(context))]
|
#[tracing::instrument(skip(context))]
|
||||||
async fn perform(&self, context: &Data<LemmyContext>) -> Result<CommentResponse, LemmyError> {
|
async fn perform(&self, context: &Data<LemmyContext>) -> Result<CommentResponse, LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
|
|
||||||
let data: &CreateCommentLike = self;
|
let data: &CreateCommentLike = self;
|
||||||
let local_site = LocalSite::read(&mut conn).await?;
|
let local_site = LocalSite::read(&mut *context.conn().await?).await?;
|
||||||
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
||||||
|
|
||||||
let mut recipient_ids = Vec::<LocalUserId>::new();
|
let mut recipient_ids = Vec::<LocalUserId>::new();
|
||||||
|
@ -36,20 +34,23 @@ impl Perform for CreateCommentLike {
|
||||||
check_downvotes_enabled(data.score, &local_site)?;
|
check_downvotes_enabled(data.score, &local_site)?;
|
||||||
|
|
||||||
let comment_id = data.comment_id;
|
let comment_id = data.comment_id;
|
||||||
let orig_comment = CommentView::read(&mut conn, comment_id, None).await?;
|
let orig_comment = CommentView::read(&mut *context.conn().await?, comment_id, None).await?;
|
||||||
|
|
||||||
check_community_ban(
|
check_community_ban(
|
||||||
local_user_view.person.id,
|
local_user_view.person.id,
|
||||||
orig_comment.community.id,
|
orig_comment.community.id,
|
||||||
&mut conn,
|
&mut *context.conn().await?,
|
||||||
)
|
)
|
||||||
.await?;
|
.await?;
|
||||||
|
|
||||||
// Add parent poster or commenter to recipients
|
// Add parent poster or commenter to recipients
|
||||||
let comment_reply = CommentReply::read_by_comment(&mut conn, comment_id).await;
|
let comment_reply =
|
||||||
|
CommentReply::read_by_comment(&mut *context.conn().await?, comment_id).await;
|
||||||
if let Ok(reply) = comment_reply {
|
if let Ok(reply) = comment_reply {
|
||||||
let recipient_id = reply.recipient_id;
|
let recipient_id = reply.recipient_id;
|
||||||
if let Ok(local_recipient) = LocalUserView::read_person(&mut conn, recipient_id).await {
|
if let Ok(local_recipient) =
|
||||||
|
LocalUserView::read_person(&mut *context.conn().await?, recipient_id).await
|
||||||
|
{
|
||||||
recipient_ids.push(local_recipient.local_user.id);
|
recipient_ids.push(local_recipient.local_user.id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -64,12 +65,12 @@ impl Perform for CreateCommentLike {
|
||||||
// Remove any likes first
|
// Remove any likes first
|
||||||
let person_id = local_user_view.person.id;
|
let person_id = local_user_view.person.id;
|
||||||
|
|
||||||
CommentLike::remove(&mut conn, person_id, comment_id).await?;
|
CommentLike::remove(&mut *context.conn().await?, person_id, comment_id).await?;
|
||||||
|
|
||||||
// Only add the like if the score isnt 0
|
// Only add the like if the score isnt 0
|
||||||
let do_add = like_form.score != 0 && (like_form.score == 1 || like_form.score == -1);
|
let do_add = like_form.score != 0 && (like_form.score == 1 || like_form.score == -1);
|
||||||
if do_add {
|
if do_add {
|
||||||
CommentLike::like(&mut conn, &like_form)
|
CommentLike::like(&mut *context.conn().await?, &like_form)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| LemmyError::from_error_message(e, "couldnt_like_comment"))?;
|
.map_err(|e| LemmyError::from_error_message(e, "couldnt_like_comment"))?;
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,7 +18,6 @@ impl Perform for SaveComment {
|
||||||
|
|
||||||
#[tracing::instrument(skip(context))]
|
#[tracing::instrument(skip(context))]
|
||||||
async fn perform(&self, context: &Data<LemmyContext>) -> Result<CommentResponse, LemmyError> {
|
async fn perform(&self, context: &Data<LemmyContext>) -> Result<CommentResponse, LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
let data: &SaveComment = self;
|
let data: &SaveComment = self;
|
||||||
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
||||||
|
|
||||||
|
@ -28,18 +27,19 @@ impl Perform for SaveComment {
|
||||||
};
|
};
|
||||||
|
|
||||||
if data.save {
|
if data.save {
|
||||||
CommentSaved::save(&mut conn, &comment_saved_form)
|
CommentSaved::save(&mut *context.conn().await?, &comment_saved_form)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| LemmyError::from_error_message(e, "couldnt_save_comment"))?;
|
.map_err(|e| LemmyError::from_error_message(e, "couldnt_save_comment"))?;
|
||||||
} else {
|
} else {
|
||||||
CommentSaved::unsave(&mut conn, &comment_saved_form)
|
CommentSaved::unsave(&mut *context.conn().await?, &comment_saved_form)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| LemmyError::from_error_message(e, "couldnt_save_comment"))?;
|
.map_err(|e| LemmyError::from_error_message(e, "couldnt_save_comment"))?;
|
||||||
}
|
}
|
||||||
|
|
||||||
let comment_id = data.comment_id;
|
let comment_id = data.comment_id;
|
||||||
let person_id = local_user_view.person.id;
|
let person_id = local_user_view.person.id;
|
||||||
let comment_view = CommentView::read(&mut conn, comment_id, Some(person_id)).await?;
|
let comment_view =
|
||||||
|
CommentView::read(&mut *context.conn().await?, comment_id, Some(person_id)).await?;
|
||||||
|
|
||||||
Ok(CommentResponse {
|
Ok(CommentResponse {
|
||||||
comment_view,
|
comment_view,
|
||||||
|
|
|
@ -25,19 +25,23 @@ impl Perform for CreateCommentReport {
|
||||||
&self,
|
&self,
|
||||||
context: &Data<LemmyContext>,
|
context: &Data<LemmyContext>,
|
||||||
) -> Result<CommentReportResponse, LemmyError> {
|
) -> Result<CommentReportResponse, LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
let data: &CreateCommentReport = self;
|
let data: &CreateCommentReport = self;
|
||||||
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
||||||
let local_site = LocalSite::read(&mut conn).await?;
|
let local_site = LocalSite::read(&mut *context.conn().await?).await?;
|
||||||
|
|
||||||
let reason = self.reason.trim();
|
let reason = self.reason.trim();
|
||||||
check_report_reason(reason, &local_site)?;
|
check_report_reason(reason, &local_site)?;
|
||||||
|
|
||||||
let person_id = local_user_view.person.id;
|
let person_id = local_user_view.person.id;
|
||||||
let comment_id = data.comment_id;
|
let comment_id = data.comment_id;
|
||||||
let comment_view = CommentView::read(&mut conn, comment_id, None).await?;
|
let comment_view = CommentView::read(&mut *context.conn().await?, comment_id, None).await?;
|
||||||
|
|
||||||
check_community_ban(person_id, comment_view.community.id, &mut conn).await?;
|
check_community_ban(
|
||||||
|
person_id,
|
||||||
|
comment_view.community.id,
|
||||||
|
&mut *context.conn().await?,
|
||||||
|
)
|
||||||
|
.await?;
|
||||||
|
|
||||||
let report_form = CommentReportForm {
|
let report_form = CommentReportForm {
|
||||||
creator_id: person_id,
|
creator_id: person_id,
|
||||||
|
@ -46,18 +50,19 @@ impl Perform for CreateCommentReport {
|
||||||
reason: reason.to_owned(),
|
reason: reason.to_owned(),
|
||||||
};
|
};
|
||||||
|
|
||||||
let report = CommentReport::report(&mut conn, &report_form)
|
let report = CommentReport::report(&mut *context.conn().await?, &report_form)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| LemmyError::from_error_message(e, "couldnt_create_report"))?;
|
.map_err(|e| LemmyError::from_error_message(e, "couldnt_create_report"))?;
|
||||||
|
|
||||||
let comment_report_view = CommentReportView::read(&mut conn, report.id, person_id).await?;
|
let comment_report_view =
|
||||||
|
CommentReportView::read(&mut *context.conn().await?, report.id, person_id).await?;
|
||||||
|
|
||||||
// Email the admins
|
// Email the admins
|
||||||
if local_site.reports_email_admins {
|
if local_site.reports_email_admins {
|
||||||
send_new_report_email_to_admins(
|
send_new_report_email_to_admins(
|
||||||
&comment_report_view.creator.name,
|
&comment_report_view.creator.name,
|
||||||
&comment_report_view.comment_creator.name,
|
&comment_report_view.comment_creator.name,
|
||||||
&mut conn,
|
&mut *context.conn().await?,
|
||||||
context.settings(),
|
context.settings(),
|
||||||
)
|
)
|
||||||
.await?;
|
.await?;
|
||||||
|
|
|
@ -30,7 +30,6 @@ impl Perform for ListCommentReports {
|
||||||
let page = data.page;
|
let page = data.page;
|
||||||
let limit = data.limit;
|
let limit = data.limit;
|
||||||
let mut conn = context.conn().await?;
|
let mut conn = context.conn().await?;
|
||||||
|
|
||||||
let comment_reports = CommentReportQuery::builder()
|
let comment_reports = CommentReportQuery::builder()
|
||||||
.conn(&mut conn)
|
.conn(&mut conn)
|
||||||
.my_person_id(person_id)
|
.my_person_id(person_id)
|
||||||
|
|
|
@ -19,29 +19,29 @@ impl Perform for ResolveCommentReport {
|
||||||
&self,
|
&self,
|
||||||
context: &Data<LemmyContext>,
|
context: &Data<LemmyContext>,
|
||||||
) -> Result<CommentReportResponse, LemmyError> {
|
) -> Result<CommentReportResponse, LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
let data: &ResolveCommentReport = self;
|
let data: &ResolveCommentReport = self;
|
||||||
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
||||||
|
|
||||||
let report_id = data.report_id;
|
let report_id = data.report_id;
|
||||||
let person_id = local_user_view.person.id;
|
let person_id = local_user_view.person.id;
|
||||||
let report = CommentReportView::read(&mut conn, report_id, person_id).await?;
|
let report = CommentReportView::read(&mut *context.conn().await?, report_id, person_id).await?;
|
||||||
|
|
||||||
let person_id = local_user_view.person.id;
|
let person_id = local_user_view.person.id;
|
||||||
is_mod_or_admin(&mut conn, person_id, report.community.id).await?;
|
is_mod_or_admin(&mut *context.conn().await?, person_id, report.community.id).await?;
|
||||||
|
|
||||||
if data.resolved {
|
if data.resolved {
|
||||||
CommentReport::resolve(&mut conn, report_id, person_id)
|
CommentReport::resolve(&mut *context.conn().await?, report_id, person_id)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| LemmyError::from_error_message(e, "couldnt_resolve_report"))?;
|
.map_err(|e| LemmyError::from_error_message(e, "couldnt_resolve_report"))?;
|
||||||
} else {
|
} else {
|
||||||
CommentReport::unresolve(&mut conn, report_id, person_id)
|
CommentReport::unresolve(&mut *context.conn().await?, report_id, person_id)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| LemmyError::from_error_message(e, "couldnt_resolve_report"))?;
|
.map_err(|e| LemmyError::from_error_message(e, "couldnt_resolve_report"))?;
|
||||||
}
|
}
|
||||||
|
|
||||||
let report_id = data.report_id;
|
let report_id = data.report_id;
|
||||||
let comment_report_view = CommentReportView::read(&mut conn, report_id, person_id).await?;
|
let comment_report_view =
|
||||||
|
CommentReportView::read(&mut *context.conn().await?, report_id, person_id).await?;
|
||||||
|
|
||||||
Ok(CommentReportResponse {
|
Ok(CommentReportResponse {
|
||||||
comment_report_view,
|
comment_report_view,
|
||||||
|
|
|
@ -24,15 +24,19 @@ impl Perform for AddModToCommunity {
|
||||||
&self,
|
&self,
|
||||||
context: &Data<LemmyContext>,
|
context: &Data<LemmyContext>,
|
||||||
) -> Result<AddModToCommunityResponse, LemmyError> {
|
) -> Result<AddModToCommunityResponse, LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
let data: &AddModToCommunity = self;
|
let data: &AddModToCommunity = self;
|
||||||
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
||||||
|
|
||||||
let community_id = data.community_id;
|
let community_id = data.community_id;
|
||||||
|
|
||||||
// Verify that only mods or admins can add mod
|
// Verify that only mods or admins can add mod
|
||||||
is_mod_or_admin(&mut conn, local_user_view.person.id, community_id).await?;
|
is_mod_or_admin(
|
||||||
let community = Community::read(&mut conn, community_id).await?;
|
&mut *context.conn().await?,
|
||||||
|
local_user_view.person.id,
|
||||||
|
community_id,
|
||||||
|
)
|
||||||
|
.await?;
|
||||||
|
let community = Community::read(&mut *context.conn().await?, community_id).await?;
|
||||||
if local_user_view.person.admin && !community.local {
|
if local_user_view.person.admin && !community.local {
|
||||||
return Err(LemmyError::from_message("not_a_moderator"));
|
return Err(LemmyError::from_message("not_a_moderator"));
|
||||||
}
|
}
|
||||||
|
@ -43,11 +47,11 @@ impl Perform for AddModToCommunity {
|
||||||
person_id: data.person_id,
|
person_id: data.person_id,
|
||||||
};
|
};
|
||||||
if data.added {
|
if data.added {
|
||||||
CommunityModerator::join(&mut conn, &community_moderator_form)
|
CommunityModerator::join(&mut *context.conn().await?, &community_moderator_form)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| LemmyError::from_error_message(e, "community_moderator_already_exists"))?;
|
.map_err(|e| LemmyError::from_error_message(e, "community_moderator_already_exists"))?;
|
||||||
} else {
|
} else {
|
||||||
CommunityModerator::leave(&mut conn, &community_moderator_form)
|
CommunityModerator::leave(&mut *context.conn().await?, &community_moderator_form)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| LemmyError::from_error_message(e, "community_moderator_already_exists"))?;
|
.map_err(|e| LemmyError::from_error_message(e, "community_moderator_already_exists"))?;
|
||||||
}
|
}
|
||||||
|
@ -60,12 +64,13 @@ impl Perform for AddModToCommunity {
|
||||||
removed: Some(!data.added),
|
removed: Some(!data.added),
|
||||||
};
|
};
|
||||||
|
|
||||||
ModAddCommunity::create(&mut conn, &form).await?;
|
ModAddCommunity::create(&mut *context.conn().await?, &form).await?;
|
||||||
|
|
||||||
// Note: in case a remote mod is added, this returns the old moderators list, it will only get
|
// Note: in case a remote mod is added, this returns the old moderators list, it will only get
|
||||||
// updated once we receive an activity from the community (like `Announce/Add/Moderator`)
|
// updated once we receive an activity from the community (like `Announce/Add/Moderator`)
|
||||||
let community_id = data.community_id;
|
let community_id = data.community_id;
|
||||||
let moderators = CommunityModeratorView::for_community(&mut conn, community_id).await?;
|
let moderators =
|
||||||
|
CommunityModeratorView::for_community(&mut *context.conn().await?, community_id).await?;
|
||||||
|
|
||||||
Ok(AddModToCommunityResponse { moderators })
|
Ok(AddModToCommunityResponse { moderators })
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,7 +32,6 @@ impl Perform for BanFromCommunity {
|
||||||
&self,
|
&self,
|
||||||
context: &Data<LemmyContext>,
|
context: &Data<LemmyContext>,
|
||||||
) -> Result<BanFromCommunityResponse, LemmyError> {
|
) -> Result<BanFromCommunityResponse, LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
let data: &BanFromCommunity = self;
|
let data: &BanFromCommunity = self;
|
||||||
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
||||||
|
|
||||||
|
@ -42,7 +41,12 @@ impl Perform for BanFromCommunity {
|
||||||
let expires = data.expires.map(naive_from_unix);
|
let expires = data.expires.map(naive_from_unix);
|
||||||
|
|
||||||
// Verify that only mods or admins can ban
|
// Verify that only mods or admins can ban
|
||||||
is_mod_or_admin(&mut conn, local_user_view.person.id, community_id).await?;
|
is_mod_or_admin(
|
||||||
|
&mut *context.conn().await?,
|
||||||
|
local_user_view.person.id,
|
||||||
|
community_id,
|
||||||
|
)
|
||||||
|
.await?;
|
||||||
is_valid_body_field(&data.reason, false)?;
|
is_valid_body_field(&data.reason, false)?;
|
||||||
|
|
||||||
let community_user_ban_form = CommunityPersonBanForm {
|
let community_user_ban_form = CommunityPersonBanForm {
|
||||||
|
@ -52,7 +56,7 @@ impl Perform for BanFromCommunity {
|
||||||
};
|
};
|
||||||
|
|
||||||
if data.ban {
|
if data.ban {
|
||||||
CommunityPersonBan::ban(&mut conn, &community_user_ban_form)
|
CommunityPersonBan::ban(&mut *context.conn().await?, &community_user_ban_form)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| LemmyError::from_error_message(e, "community_user_already_banned"))?;
|
.map_err(|e| LemmyError::from_error_message(e, "community_user_already_banned"))?;
|
||||||
|
|
||||||
|
@ -63,18 +67,19 @@ impl Perform for BanFromCommunity {
|
||||||
pending: false,
|
pending: false,
|
||||||
};
|
};
|
||||||
|
|
||||||
CommunityFollower::unfollow(&mut conn, &community_follower_form)
|
CommunityFollower::unfollow(&mut *context.conn().await?, &community_follower_form)
|
||||||
.await
|
.await
|
||||||
.ok();
|
.ok();
|
||||||
} else {
|
} else {
|
||||||
CommunityPersonBan::unban(&mut conn, &community_user_ban_form)
|
CommunityPersonBan::unban(&mut *context.conn().await?, &community_user_ban_form)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| LemmyError::from_error_message(e, "community_user_already_banned"))?;
|
.map_err(|e| LemmyError::from_error_message(e, "community_user_already_banned"))?;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Remove/Restore their data if that's desired
|
// Remove/Restore their data if that's desired
|
||||||
if remove_data {
|
if remove_data {
|
||||||
remove_user_data_in_community(community_id, banned_person_id, &mut conn).await?;
|
remove_user_data_in_community(community_id, banned_person_id, &mut *context.conn().await?)
|
||||||
|
.await?;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Mod tables
|
// Mod tables
|
||||||
|
@ -87,10 +92,10 @@ impl Perform for BanFromCommunity {
|
||||||
expires,
|
expires,
|
||||||
};
|
};
|
||||||
|
|
||||||
ModBanFromCommunity::create(&mut conn, &form).await?;
|
ModBanFromCommunity::create(&mut *context.conn().await?, &form).await?;
|
||||||
|
|
||||||
let person_id = data.person_id;
|
let person_id = data.person_id;
|
||||||
let person_view = PersonView::read(&mut conn, person_id).await?;
|
let person_view = PersonView::read(&mut *context.conn().await?, person_id).await?;
|
||||||
|
|
||||||
Ok(BanFromCommunityResponse {
|
Ok(BanFromCommunityResponse {
|
||||||
person_view,
|
person_view,
|
||||||
|
|
|
@ -24,7 +24,6 @@ impl Perform for BlockCommunity {
|
||||||
&self,
|
&self,
|
||||||
context: &Data<LemmyContext>,
|
context: &Data<LemmyContext>,
|
||||||
) -> Result<BlockCommunityResponse, LemmyError> {
|
) -> Result<BlockCommunityResponse, LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
let data: &BlockCommunity = self;
|
let data: &BlockCommunity = self;
|
||||||
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
||||||
|
|
||||||
|
@ -36,7 +35,7 @@ impl Perform for BlockCommunity {
|
||||||
};
|
};
|
||||||
|
|
||||||
if data.block {
|
if data.block {
|
||||||
CommunityBlock::block(&mut conn, &community_block_form)
|
CommunityBlock::block(&mut *context.conn().await?, &community_block_form)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| LemmyError::from_error_message(e, "community_block_already_exists"))?;
|
.map_err(|e| LemmyError::from_error_message(e, "community_block_already_exists"))?;
|
||||||
|
|
||||||
|
@ -47,17 +46,22 @@ impl Perform for BlockCommunity {
|
||||||
pending: false,
|
pending: false,
|
||||||
};
|
};
|
||||||
|
|
||||||
CommunityFollower::unfollow(&mut conn, &community_follower_form)
|
CommunityFollower::unfollow(&mut *context.conn().await?, &community_follower_form)
|
||||||
.await
|
.await
|
||||||
.ok();
|
.ok();
|
||||||
} else {
|
} else {
|
||||||
CommunityBlock::unblock(&mut conn, &community_block_form)
|
CommunityBlock::unblock(&mut *context.conn().await?, &community_block_form)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| LemmyError::from_error_message(e, "community_block_already_exists"))?;
|
.map_err(|e| LemmyError::from_error_message(e, "community_block_already_exists"))?;
|
||||||
}
|
}
|
||||||
|
|
||||||
let community_view =
|
let community_view = CommunityView::read(
|
||||||
CommunityView::read(&mut conn, community_id, Some(person_id), None).await?;
|
&mut *context.conn().await?,
|
||||||
|
community_id,
|
||||||
|
Some(person_id),
|
||||||
|
None,
|
||||||
|
)
|
||||||
|
.await?;
|
||||||
|
|
||||||
Ok(BlockCommunityResponse {
|
Ok(BlockCommunityResponse {
|
||||||
blocked: data.block,
|
blocked: data.block,
|
||||||
|
|
|
@ -21,12 +21,11 @@ impl Perform for FollowCommunity {
|
||||||
|
|
||||||
#[tracing::instrument(skip(context))]
|
#[tracing::instrument(skip(context))]
|
||||||
async fn perform(&self, context: &Data<LemmyContext>) -> Result<CommunityResponse, LemmyError> {
|
async fn perform(&self, context: &Data<LemmyContext>) -> Result<CommunityResponse, LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
let data: &FollowCommunity = self;
|
let data: &FollowCommunity = self;
|
||||||
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
||||||
|
|
||||||
let community_id = data.community_id;
|
let community_id = data.community_id;
|
||||||
let community = Community::read(&mut conn, community_id).await?;
|
let community = Community::read(&mut *context.conn().await?, community_id).await?;
|
||||||
let community_follower_form = CommunityFollowerForm {
|
let community_follower_form = CommunityFollowerForm {
|
||||||
community_id: data.community_id,
|
community_id: data.community_id,
|
||||||
person_id: local_user_view.person.id,
|
person_id: local_user_view.person.id,
|
||||||
|
@ -34,24 +33,35 @@ impl Perform for FollowCommunity {
|
||||||
};
|
};
|
||||||
|
|
||||||
if community.local && data.follow {
|
if community.local && data.follow {
|
||||||
check_community_ban(local_user_view.person.id, community_id, &mut conn).await?;
|
check_community_ban(
|
||||||
check_community_deleted_or_removed(community_id, &mut conn).await?;
|
local_user_view.person.id,
|
||||||
|
community_id,
|
||||||
|
&mut *context.conn().await?,
|
||||||
|
)
|
||||||
|
.await?;
|
||||||
|
check_community_deleted_or_removed(community_id, &mut *context.conn().await?).await?;
|
||||||
|
|
||||||
CommunityFollower::follow(&mut conn, &community_follower_form)
|
CommunityFollower::follow(&mut *context.conn().await?, &community_follower_form)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| LemmyError::from_error_message(e, "community_follower_already_exists"))?;
|
.map_err(|e| LemmyError::from_error_message(e, "community_follower_already_exists"))?;
|
||||||
}
|
}
|
||||||
if !data.follow {
|
if !data.follow {
|
||||||
CommunityFollower::unfollow(&mut conn, &community_follower_form)
|
CommunityFollower::unfollow(&mut *context.conn().await?, &community_follower_form)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| LemmyError::from_error_message(e, "community_follower_already_exists"))?;
|
.map_err(|e| LemmyError::from_error_message(e, "community_follower_already_exists"))?;
|
||||||
}
|
}
|
||||||
|
|
||||||
let community_id = data.community_id;
|
let community_id = data.community_id;
|
||||||
let person_id = local_user_view.person.id;
|
let person_id = local_user_view.person.id;
|
||||||
let community_view =
|
let community_view = CommunityView::read(
|
||||||
CommunityView::read(&mut conn, community_id, Some(person_id), None).await?;
|
&mut *context.conn().await?,
|
||||||
let discussion_languages = CommunityLanguage::read(&mut conn, community_id).await?;
|
community_id,
|
||||||
|
Some(person_id),
|
||||||
|
None,
|
||||||
|
)
|
||||||
|
.await?;
|
||||||
|
let discussion_languages =
|
||||||
|
CommunityLanguage::read(&mut *context.conn().await?, community_id).await?;
|
||||||
|
|
||||||
Ok(Self::Response {
|
Ok(Self::Response {
|
||||||
community_view,
|
community_view,
|
||||||
|
|
|
@ -21,7 +21,6 @@ impl Perform for HideCommunity {
|
||||||
|
|
||||||
#[tracing::instrument(skip(context))]
|
#[tracing::instrument(skip(context))]
|
||||||
async fn perform(&self, context: &Data<LemmyContext>) -> Result<CommunityResponse, LemmyError> {
|
async fn perform(&self, context: &Data<LemmyContext>) -> Result<CommunityResponse, LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
let data: &HideCommunity = self;
|
let data: &HideCommunity = self;
|
||||||
|
|
||||||
// Verify its a admin (only admin can hide or unhide it)
|
// Verify its a admin (only admin can hide or unhide it)
|
||||||
|
@ -40,11 +39,11 @@ impl Perform for HideCommunity {
|
||||||
};
|
};
|
||||||
|
|
||||||
let community_id = data.community_id;
|
let community_id = data.community_id;
|
||||||
Community::update(&mut conn, community_id, &community_form)
|
Community::update(&mut *context.conn().await?, community_id, &community_form)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| LemmyError::from_error_message(e, "couldnt_update_community_hidden_status"))?;
|
.map_err(|e| LemmyError::from_error_message(e, "couldnt_update_community_hidden_status"))?;
|
||||||
|
|
||||||
ModHideCommunity::create(&mut conn, &mod_hide_community_form).await?;
|
ModHideCommunity::create(&mut *context.conn().await?, &mod_hide_community_form).await?;
|
||||||
|
|
||||||
build_community_response(context, local_user_view, community_id).await
|
build_community_response(context, local_user_view, community_id).await
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,13 +27,13 @@ impl Perform for TransferCommunity {
|
||||||
&self,
|
&self,
|
||||||
context: &Data<LemmyContext>,
|
context: &Data<LemmyContext>,
|
||||||
) -> Result<GetCommunityResponse, LemmyError> {
|
) -> Result<GetCommunityResponse, LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
let data: &TransferCommunity = self;
|
let data: &TransferCommunity = self;
|
||||||
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
||||||
|
|
||||||
// Fetch the community mods
|
// Fetch the community mods
|
||||||
let community_id = data.community_id;
|
let community_id = data.community_id;
|
||||||
let mut community_mods = CommunityModeratorView::for_community(&mut conn, community_id).await?;
|
let mut community_mods =
|
||||||
|
CommunityModeratorView::for_community(&mut *context.conn().await?, community_id).await?;
|
||||||
|
|
||||||
// Make sure transferrer is either the top community mod, or an admin
|
// Make sure transferrer is either the top community mod, or an admin
|
||||||
if !(is_top_mod(&local_user_view, &community_mods).is_ok()
|
if !(is_top_mod(&local_user_view, &community_mods).is_ok()
|
||||||
|
@ -54,7 +54,7 @@ impl Perform for TransferCommunity {
|
||||||
// Delete all the mods
|
// Delete all the mods
|
||||||
let community_id = data.community_id;
|
let community_id = data.community_id;
|
||||||
|
|
||||||
CommunityModerator::delete_for_community(&mut conn, community_id).await?;
|
CommunityModerator::delete_for_community(&mut *context.conn().await?, community_id).await?;
|
||||||
|
|
||||||
// TODO: this should probably be a bulk operation
|
// TODO: this should probably be a bulk operation
|
||||||
// Re-add the mods, in the new order
|
// Re-add the mods, in the new order
|
||||||
|
@ -64,7 +64,7 @@ impl Perform for TransferCommunity {
|
||||||
person_id: cmod.moderator.id,
|
person_id: cmod.moderator.id,
|
||||||
};
|
};
|
||||||
|
|
||||||
CommunityModerator::join(&mut conn, &community_moderator_form)
|
CommunityModerator::join(&mut *context.conn().await?, &community_moderator_form)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| LemmyError::from_error_message(e, "community_moderator_already_exists"))?;
|
.map_err(|e| LemmyError::from_error_message(e, "community_moderator_already_exists"))?;
|
||||||
}
|
}
|
||||||
|
@ -76,18 +76,24 @@ impl Perform for TransferCommunity {
|
||||||
community_id: data.community_id,
|
community_id: data.community_id,
|
||||||
};
|
};
|
||||||
|
|
||||||
ModTransferCommunity::create(&mut conn, &form).await?;
|
ModTransferCommunity::create(&mut *context.conn().await?, &form).await?;
|
||||||
|
|
||||||
let community_id = data.community_id;
|
let community_id = data.community_id;
|
||||||
let person_id = local_user_view.person.id;
|
let person_id = local_user_view.person.id;
|
||||||
let community_view = CommunityView::read(&mut conn, community_id, Some(person_id), None)
|
let community_view = CommunityView::read(
|
||||||
.await
|
&mut *context.conn().await?,
|
||||||
.map_err(|e| LemmyError::from_error_message(e, "couldnt_find_community"))?;
|
community_id,
|
||||||
|
Some(person_id),
|
||||||
|
None,
|
||||||
|
)
|
||||||
|
.await
|
||||||
|
.map_err(|e| LemmyError::from_error_message(e, "couldnt_find_community"))?;
|
||||||
|
|
||||||
let community_id = data.community_id;
|
let community_id = data.community_id;
|
||||||
let moderators = CommunityModeratorView::for_community(&mut conn, community_id)
|
let moderators =
|
||||||
.await
|
CommunityModeratorView::for_community(&mut *context.conn().await?, community_id)
|
||||||
.map_err(|e| LemmyError::from_error_message(e, "couldnt_find_community"))?;
|
.await
|
||||||
|
.map_err(|e| LemmyError::from_error_message(e, "couldnt_find_community"))?;
|
||||||
|
|
||||||
// Return the jwt
|
// Return the jwt
|
||||||
Ok(GetCommunityResponse {
|
Ok(GetCommunityResponse {
|
||||||
|
|
|
@ -21,7 +21,6 @@ impl Perform for AddAdmin {
|
||||||
|
|
||||||
#[tracing::instrument(skip(context))]
|
#[tracing::instrument(skip(context))]
|
||||||
async fn perform(&self, context: &Data<LemmyContext>) -> Result<AddAdminResponse, LemmyError> {
|
async fn perform(&self, context: &Data<LemmyContext>) -> Result<AddAdminResponse, LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
let data: &AddAdmin = self;
|
let data: &AddAdmin = self;
|
||||||
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
||||||
|
|
||||||
|
@ -31,7 +30,7 @@ impl Perform for AddAdmin {
|
||||||
let added = data.added;
|
let added = data.added;
|
||||||
let added_person_id = data.person_id;
|
let added_person_id = data.person_id;
|
||||||
let added_admin = Person::update(
|
let added_admin = Person::update(
|
||||||
&mut conn,
|
&mut *context.conn().await?,
|
||||||
added_person_id,
|
added_person_id,
|
||||||
&PersonUpdateForm::builder().admin(Some(added)).build(),
|
&PersonUpdateForm::builder().admin(Some(added)).build(),
|
||||||
)
|
)
|
||||||
|
@ -45,9 +44,9 @@ impl Perform for AddAdmin {
|
||||||
removed: Some(!data.added),
|
removed: Some(!data.added),
|
||||||
};
|
};
|
||||||
|
|
||||||
ModAdd::create(&mut conn, &form).await?;
|
ModAdd::create(&mut *context.conn().await?, &form).await?;
|
||||||
|
|
||||||
let admins = PersonView::admins(&mut conn).await?;
|
let admins = PersonView::admins(&mut *context.conn().await?).await?;
|
||||||
|
|
||||||
Ok(AddAdminResponse { admins })
|
Ok(AddAdminResponse { admins })
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,7 +24,6 @@ impl Perform for BanPerson {
|
||||||
|
|
||||||
#[tracing::instrument(skip(context))]
|
#[tracing::instrument(skip(context))]
|
||||||
async fn perform(&self, context: &Data<LemmyContext>) -> Result<BanPersonResponse, LemmyError> {
|
async fn perform(&self, context: &Data<LemmyContext>) -> Result<BanPersonResponse, LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
let data: &BanPerson = self;
|
let data: &BanPerson = self;
|
||||||
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
||||||
|
|
||||||
|
@ -38,7 +37,7 @@ impl Perform for BanPerson {
|
||||||
let expires = data.expires.map(naive_from_unix);
|
let expires = data.expires.map(naive_from_unix);
|
||||||
|
|
||||||
let person = Person::update(
|
let person = Person::update(
|
||||||
&mut conn,
|
&mut *context.conn().await?,
|
||||||
banned_person_id,
|
banned_person_id,
|
||||||
&PersonUpdateForm::builder()
|
&PersonUpdateForm::builder()
|
||||||
.banned(Some(ban))
|
.banned(Some(ban))
|
||||||
|
@ -51,7 +50,13 @@ impl Perform for BanPerson {
|
||||||
// Remove their data if that's desired
|
// Remove their data if that's desired
|
||||||
let remove_data = data.remove_data.unwrap_or(false);
|
let remove_data = data.remove_data.unwrap_or(false);
|
||||||
if remove_data {
|
if remove_data {
|
||||||
remove_user_data(person.id, &mut conn, context.settings(), context.client()).await?;
|
remove_user_data(
|
||||||
|
person.id,
|
||||||
|
&mut *context.conn().await?,
|
||||||
|
context.settings(),
|
||||||
|
context.client(),
|
||||||
|
)
|
||||||
|
.await?;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Mod tables
|
// Mod tables
|
||||||
|
@ -63,10 +68,10 @@ impl Perform for BanPerson {
|
||||||
expires,
|
expires,
|
||||||
};
|
};
|
||||||
|
|
||||||
ModBan::create(&mut conn, &form).await?;
|
ModBan::create(&mut *context.conn().await?, &form).await?;
|
||||||
|
|
||||||
let person_id = data.person_id;
|
let person_id = data.person_id;
|
||||||
let person_view = PersonView::read(&mut conn, person_id).await?;
|
let person_view = PersonView::read(&mut *context.conn().await?, person_id).await?;
|
||||||
|
|
||||||
Ok(BanPersonResponse {
|
Ok(BanPersonResponse {
|
||||||
person_view,
|
person_view,
|
||||||
|
|
|
@ -18,7 +18,6 @@ impl Perform for BlockPerson {
|
||||||
|
|
||||||
#[tracing::instrument(skip(context))]
|
#[tracing::instrument(skip(context))]
|
||||||
async fn perform(&self, context: &Data<LemmyContext>) -> Result<BlockPersonResponse, LemmyError> {
|
async fn perform(&self, context: &Data<LemmyContext>) -> Result<BlockPersonResponse, LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
let data: &BlockPerson = self;
|
let data: &BlockPerson = self;
|
||||||
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
||||||
|
|
||||||
|
@ -35,18 +34,18 @@ impl Perform for BlockPerson {
|
||||||
target_id,
|
target_id,
|
||||||
};
|
};
|
||||||
|
|
||||||
let target_person_view = PersonView::read(&mut conn, target_id).await?;
|
let target_person_view = PersonView::read(&mut *context.conn().await?, target_id).await?;
|
||||||
|
|
||||||
if target_person_view.person.admin {
|
if target_person_view.person.admin {
|
||||||
return Err(LemmyError::from_message("cant_block_admin"));
|
return Err(LemmyError::from_message("cant_block_admin"));
|
||||||
}
|
}
|
||||||
|
|
||||||
if data.block {
|
if data.block {
|
||||||
PersonBlock::block(&mut conn, &person_block_form)
|
PersonBlock::block(&mut *context.conn().await?, &person_block_form)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| LemmyError::from_error_message(e, "person_block_already_exists"))?;
|
.map_err(|e| LemmyError::from_error_message(e, "person_block_already_exists"))?;
|
||||||
} else {
|
} else {
|
||||||
PersonBlock::unblock(&mut conn, &person_block_form)
|
PersonBlock::unblock(&mut *context.conn().await?, &person_block_form)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| LemmyError::from_error_message(e, "person_block_already_exists"))?;
|
.map_err(|e| LemmyError::from_error_message(e, "person_block_already_exists"))?;
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,7 +15,6 @@ impl Perform for ChangePassword {
|
||||||
|
|
||||||
#[tracing::instrument(skip(self, context))]
|
#[tracing::instrument(skip(self, context))]
|
||||||
async fn perform(&self, context: &Data<LemmyContext>) -> Result<LoginResponse, LemmyError> {
|
async fn perform(&self, context: &Data<LemmyContext>) -> Result<LoginResponse, LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
let data: &ChangePassword = self;
|
let data: &ChangePassword = self;
|
||||||
let local_user_view = local_user_view_from_jwt(data.auth.as_ref(), context).await?;
|
let local_user_view = local_user_view_from_jwt(data.auth.as_ref(), context).await?;
|
||||||
|
|
||||||
|
@ -39,7 +38,7 @@ impl Perform for ChangePassword {
|
||||||
let local_user_id = local_user_view.local_user.id;
|
let local_user_id = local_user_view.local_user.id;
|
||||||
let new_password = data.new_password.clone();
|
let new_password = data.new_password.clone();
|
||||||
let updated_local_user =
|
let updated_local_user =
|
||||||
LocalUser::update_password(&mut conn, local_user_id, &new_password).await?;
|
LocalUser::update_password(&mut *context.conn().await?, local_user_id, &new_password).await?;
|
||||||
|
|
||||||
// Return the jwt
|
// Return the jwt
|
||||||
Ok(LoginResponse {
|
Ok(LoginResponse {
|
||||||
|
|
|
@ -18,12 +18,11 @@ impl Perform for PasswordChangeAfterReset {
|
||||||
|
|
||||||
#[tracing::instrument(skip(self, context))]
|
#[tracing::instrument(skip(self, context))]
|
||||||
async fn perform(&self, context: &Data<LemmyContext>) -> Result<LoginResponse, LemmyError> {
|
async fn perform(&self, context: &Data<LemmyContext>) -> Result<LoginResponse, LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
let data: &PasswordChangeAfterReset = self;
|
let data: &PasswordChangeAfterReset = self;
|
||||||
|
|
||||||
// Fetch the user_id from the token
|
// Fetch the user_id from the token
|
||||||
let token = data.token.clone();
|
let token = data.token.clone();
|
||||||
let local_user_id = PasswordResetRequest::read_from_token(&mut conn, &token)
|
let local_user_id = PasswordResetRequest::read_from_token(&mut *context.conn().await?, &token)
|
||||||
.await
|
.await
|
||||||
.map(|p| p.local_user_id)?;
|
.map(|p| p.local_user_id)?;
|
||||||
|
|
||||||
|
@ -36,12 +35,13 @@ impl Perform for PasswordChangeAfterReset {
|
||||||
|
|
||||||
// Update the user with the new password
|
// Update the user with the new password
|
||||||
let password = data.password.clone();
|
let password = data.password.clone();
|
||||||
let updated_local_user = LocalUser::update_password(&mut conn, local_user_id, &password)
|
let updated_local_user =
|
||||||
.await
|
LocalUser::update_password(&mut *context.conn().await?, local_user_id, &password)
|
||||||
.map_err(|e| LemmyError::from_error_message(e, "couldnt_update_user"))?;
|
.await
|
||||||
|
.map_err(|e| LemmyError::from_error_message(e, "couldnt_update_user"))?;
|
||||||
|
|
||||||
// Return the jwt if login is allowed
|
// Return the jwt if login is allowed
|
||||||
let site_view = SiteView::read_local(&mut conn).await?;
|
let site_view = SiteView::read_local(&mut *context.conn().await?).await?;
|
||||||
let jwt = if site_view.local_site.registration_mode == RegistrationMode::RequireApplication
|
let jwt = if site_view.local_site.registration_mode == RegistrationMode::RequireApplication
|
||||||
&& !updated_local_user.accepted_application
|
&& !updated_local_user.accepted_application
|
||||||
{
|
{
|
||||||
|
|
|
@ -17,8 +17,7 @@ impl Perform for GetCaptcha {
|
||||||
|
|
||||||
#[tracing::instrument(skip(context))]
|
#[tracing::instrument(skip(context))]
|
||||||
async fn perform(&self, context: &Data<LemmyContext>) -> Result<Self::Response, LemmyError> {
|
async fn perform(&self, context: &Data<LemmyContext>) -> Result<Self::Response, LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
let local_site = LocalSite::read(&mut *context.conn().await?).await?;
|
||||||
let local_site = LocalSite::read(&mut conn).await?;
|
|
||||||
|
|
||||||
if !local_site.captcha_enabled {
|
if !local_site.captcha_enabled {
|
||||||
return Ok(GetCaptchaResponse { ok: None });
|
return Ok(GetCaptchaResponse { ok: None });
|
||||||
|
|
|
@ -13,14 +13,13 @@ impl Perform for GetBannedPersons {
|
||||||
type Response = BannedPersonsResponse;
|
type Response = BannedPersonsResponse;
|
||||||
|
|
||||||
async fn perform(&self, context: &Data<LemmyContext>) -> Result<Self::Response, LemmyError> {
|
async fn perform(&self, context: &Data<LemmyContext>) -> Result<Self::Response, LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
let data: &GetBannedPersons = self;
|
let data: &GetBannedPersons = self;
|
||||||
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
||||||
|
|
||||||
// Make sure user is an admin
|
// Make sure user is an admin
|
||||||
is_admin(&local_user_view)?;
|
is_admin(&local_user_view)?;
|
||||||
|
|
||||||
let banned = PersonView::banned(&mut conn).await?;
|
let banned = PersonView::banned(&mut *context.conn().await?).await?;
|
||||||
|
|
||||||
Ok(Self::Response { banned })
|
Ok(Self::Response { banned })
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,16 +15,16 @@ impl Perform for Login {
|
||||||
|
|
||||||
#[tracing::instrument(skip(context))]
|
#[tracing::instrument(skip(context))]
|
||||||
async fn perform(&self, context: &Data<LemmyContext>) -> Result<LoginResponse, LemmyError> {
|
async fn perform(&self, context: &Data<LemmyContext>) -> Result<LoginResponse, LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
let data: &Login = self;
|
let data: &Login = self;
|
||||||
|
|
||||||
let site_view = SiteView::read_local(&mut conn).await?;
|
let site_view = SiteView::read_local(&mut *context.conn().await?).await?;
|
||||||
|
|
||||||
// Fetch that username / email
|
// Fetch that username / email
|
||||||
let username_or_email = data.username_or_email.clone();
|
let username_or_email = data.username_or_email.clone();
|
||||||
let local_user_view = LocalUserView::find_by_email_or_name(&mut conn, &username_or_email)
|
let local_user_view =
|
||||||
.await
|
LocalUserView::find_by_email_or_name(&mut *context.conn().await?, &username_or_email)
|
||||||
.map_err(|e| LemmyError::from_error_message(e, "couldnt_find_that_username_or_email"))?;
|
.await
|
||||||
|
.map_err(|e| LemmyError::from_error_message(e, "couldnt_find_that_username_or_email"))?;
|
||||||
|
|
||||||
// Verify the password
|
// Verify the password
|
||||||
let valid: bool = verify(
|
let valid: bool = verify(
|
||||||
|
@ -50,7 +50,12 @@ impl Perform for Login {
|
||||||
return Err(LemmyError::from_message("email_not_verified"));
|
return Err(LemmyError::from_message("email_not_verified"));
|
||||||
}
|
}
|
||||||
|
|
||||||
check_registration_application(&local_user_view, &site_view.local_site, &mut conn).await?;
|
check_registration_application(
|
||||||
|
&local_user_view,
|
||||||
|
&site_view.local_site,
|
||||||
|
&mut *context.conn().await?,
|
||||||
|
)
|
||||||
|
.await?;
|
||||||
|
|
||||||
// Check the totp
|
// Check the totp
|
||||||
check_totp_2fa_valid(
|
check_totp_2fa_valid(
|
||||||
|
|
|
@ -18,23 +18,22 @@ impl Perform for MarkAllAsRead {
|
||||||
|
|
||||||
#[tracing::instrument(skip(context))]
|
#[tracing::instrument(skip(context))]
|
||||||
async fn perform(&self, context: &Data<LemmyContext>) -> Result<GetRepliesResponse, LemmyError> {
|
async fn perform(&self, context: &Data<LemmyContext>) -> Result<GetRepliesResponse, LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
let data: &MarkAllAsRead = self;
|
let data: &MarkAllAsRead = self;
|
||||||
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
||||||
let person_id = local_user_view.person.id;
|
let person_id = local_user_view.person.id;
|
||||||
|
|
||||||
// Mark all comment_replies as read
|
// Mark all comment_replies as read
|
||||||
CommentReply::mark_all_as_read(&mut conn, person_id)
|
CommentReply::mark_all_as_read(&mut *context.conn().await?, person_id)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| LemmyError::from_error_message(e, "couldnt_update_comment"))?;
|
.map_err(|e| LemmyError::from_error_message(e, "couldnt_update_comment"))?;
|
||||||
|
|
||||||
// Mark all user mentions as read
|
// Mark all user mentions as read
|
||||||
PersonMention::mark_all_as_read(&mut conn, person_id)
|
PersonMention::mark_all_as_read(&mut *context.conn().await?, person_id)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| LemmyError::from_error_message(e, "couldnt_update_comment"))?;
|
.map_err(|e| LemmyError::from_error_message(e, "couldnt_update_comment"))?;
|
||||||
|
|
||||||
// Mark all private_messages as read
|
// Mark all private_messages as read
|
||||||
PrivateMessage::mark_all_as_read(&mut conn, person_id)
|
PrivateMessage::mark_all_as_read(&mut *context.conn().await?, person_id)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| LemmyError::from_error_message(e, "couldnt_update_private_message"))?;
|
.map_err(|e| LemmyError::from_error_message(e, "couldnt_update_private_message"))?;
|
||||||
|
|
||||||
|
|
|
@ -21,12 +21,12 @@ impl Perform for MarkPersonMentionAsRead {
|
||||||
&self,
|
&self,
|
||||||
context: &Data<LemmyContext>,
|
context: &Data<LemmyContext>,
|
||||||
) -> Result<PersonMentionResponse, LemmyError> {
|
) -> Result<PersonMentionResponse, LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
let data: &MarkPersonMentionAsRead = self;
|
let data: &MarkPersonMentionAsRead = self;
|
||||||
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
||||||
|
|
||||||
let person_mention_id = data.person_mention_id;
|
let person_mention_id = data.person_mention_id;
|
||||||
let read_person_mention = PersonMention::read(&mut conn, person_mention_id).await?;
|
let read_person_mention =
|
||||||
|
PersonMention::read(&mut *context.conn().await?, person_mention_id).await?;
|
||||||
|
|
||||||
if local_user_view.person.id != read_person_mention.recipient_id {
|
if local_user_view.person.id != read_person_mention.recipient_id {
|
||||||
return Err(LemmyError::from_message("couldnt_update_comment"));
|
return Err(LemmyError::from_message("couldnt_update_comment"));
|
||||||
|
@ -35,7 +35,7 @@ impl Perform for MarkPersonMentionAsRead {
|
||||||
let person_mention_id = read_person_mention.id;
|
let person_mention_id = read_person_mention.id;
|
||||||
let read = Some(data.read);
|
let read = Some(data.read);
|
||||||
PersonMention::update(
|
PersonMention::update(
|
||||||
&mut conn,
|
&mut *context.conn().await?,
|
||||||
person_mention_id,
|
person_mention_id,
|
||||||
&PersonMentionUpdateForm { read },
|
&PersonMentionUpdateForm { read },
|
||||||
)
|
)
|
||||||
|
@ -44,8 +44,12 @@ impl Perform for MarkPersonMentionAsRead {
|
||||||
|
|
||||||
let person_mention_id = read_person_mention.id;
|
let person_mention_id = read_person_mention.id;
|
||||||
let person_id = local_user_view.person.id;
|
let person_id = local_user_view.person.id;
|
||||||
let person_mention_view =
|
let person_mention_view = PersonMentionView::read(
|
||||||
PersonMentionView::read(&mut conn, person_mention_id, Some(person_id)).await?;
|
&mut *context.conn().await?,
|
||||||
|
person_mention_id,
|
||||||
|
Some(person_id),
|
||||||
|
)
|
||||||
|
.await?;
|
||||||
|
|
||||||
Ok(PersonMentionResponse {
|
Ok(PersonMentionResponse {
|
||||||
person_mention_view,
|
person_mention_view,
|
||||||
|
|
|
@ -21,12 +21,12 @@ impl Perform for MarkCommentReplyAsRead {
|
||||||
&self,
|
&self,
|
||||||
context: &Data<LemmyContext>,
|
context: &Data<LemmyContext>,
|
||||||
) -> Result<CommentReplyResponse, LemmyError> {
|
) -> Result<CommentReplyResponse, LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
let data = self;
|
let data = self;
|
||||||
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
||||||
|
|
||||||
let comment_reply_id = data.comment_reply_id;
|
let comment_reply_id = data.comment_reply_id;
|
||||||
let read_comment_reply = CommentReply::read(&mut conn, comment_reply_id).await?;
|
let read_comment_reply =
|
||||||
|
CommentReply::read(&mut *context.conn().await?, comment_reply_id).await?;
|
||||||
|
|
||||||
if local_user_view.person.id != read_comment_reply.recipient_id {
|
if local_user_view.person.id != read_comment_reply.recipient_id {
|
||||||
return Err(LemmyError::from_message("couldnt_update_comment"));
|
return Err(LemmyError::from_message("couldnt_update_comment"));
|
||||||
|
@ -36,7 +36,7 @@ impl Perform for MarkCommentReplyAsRead {
|
||||||
let read = Some(data.read);
|
let read = Some(data.read);
|
||||||
|
|
||||||
CommentReply::update(
|
CommentReply::update(
|
||||||
&mut conn,
|
&mut *context.conn().await?,
|
||||||
comment_reply_id,
|
comment_reply_id,
|
||||||
&CommentReplyUpdateForm { read },
|
&CommentReplyUpdateForm { read },
|
||||||
)
|
)
|
||||||
|
@ -45,8 +45,12 @@ impl Perform for MarkCommentReplyAsRead {
|
||||||
|
|
||||||
let comment_reply_id = read_comment_reply.id;
|
let comment_reply_id = read_comment_reply.id;
|
||||||
let person_id = local_user_view.person.id;
|
let person_id = local_user_view.person.id;
|
||||||
let comment_reply_view =
|
let comment_reply_view = CommentReplyView::read(
|
||||||
CommentReplyView::read(&mut conn, comment_reply_id, Some(person_id)).await?;
|
&mut *context.conn().await?,
|
||||||
|
comment_reply_id,
|
||||||
|
Some(person_id),
|
||||||
|
)
|
||||||
|
.await?;
|
||||||
|
|
||||||
Ok(CommentReplyResponse { comment_reply_view })
|
Ok(CommentReplyResponse { comment_reply_view })
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,17 +15,19 @@ impl Perform for GetUnreadCount {
|
||||||
|
|
||||||
#[tracing::instrument(skip(context))]
|
#[tracing::instrument(skip(context))]
|
||||||
async fn perform(&self, context: &Data<LemmyContext>) -> Result<Self::Response, LemmyError> {
|
async fn perform(&self, context: &Data<LemmyContext>) -> Result<Self::Response, LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
let data = self;
|
let data = self;
|
||||||
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
||||||
|
|
||||||
let person_id = local_user_view.person.id;
|
let person_id = local_user_view.person.id;
|
||||||
|
|
||||||
let replies = CommentReplyView::get_unread_replies(&mut conn, person_id).await?;
|
let replies =
|
||||||
|
CommentReplyView::get_unread_replies(&mut *context.conn().await?, person_id).await?;
|
||||||
|
|
||||||
let mentions = PersonMentionView::get_unread_mentions(&mut conn, person_id).await?;
|
let mentions =
|
||||||
|
PersonMentionView::get_unread_mentions(&mut *context.conn().await?, person_id).await?;
|
||||||
|
|
||||||
let private_messages = PrivateMessageView::get_unread_messages(&mut conn, person_id).await?;
|
let private_messages =
|
||||||
|
PrivateMessageView::get_unread_messages(&mut *context.conn().await?, person_id).await?;
|
||||||
|
|
||||||
Ok(Self::Response {
|
Ok(Self::Response {
|
||||||
replies,
|
replies,
|
||||||
|
|
|
@ -17,7 +17,6 @@ impl Perform for GetReportCount {
|
||||||
&self,
|
&self,
|
||||||
context: &Data<LemmyContext>,
|
context: &Data<LemmyContext>,
|
||||||
) -> Result<GetReportCountResponse, LemmyError> {
|
) -> Result<GetReportCountResponse, LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
let data: &GetReportCount = self;
|
let data: &GetReportCount = self;
|
||||||
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
||||||
|
|
||||||
|
@ -25,14 +24,20 @@ impl Perform for GetReportCount {
|
||||||
let admin = local_user_view.person.admin;
|
let admin = local_user_view.person.admin;
|
||||||
let community_id = data.community_id;
|
let community_id = data.community_id;
|
||||||
|
|
||||||
let comment_reports =
|
let comment_reports = CommentReportView::get_report_count(
|
||||||
CommentReportView::get_report_count(&mut conn, person_id, admin, community_id).await?;
|
&mut *context.conn().await?,
|
||||||
|
person_id,
|
||||||
|
admin,
|
||||||
|
community_id,
|
||||||
|
)
|
||||||
|
.await?;
|
||||||
|
|
||||||
let post_reports =
|
let post_reports =
|
||||||
PostReportView::get_report_count(&mut conn, person_id, admin, community_id).await?;
|
PostReportView::get_report_count(&mut *context.conn().await?, person_id, admin, community_id)
|
||||||
|
.await?;
|
||||||
|
|
||||||
let private_message_reports = if admin && community_id.is_none() {
|
let private_message_reports = if admin && community_id.is_none() {
|
||||||
Some(PrivateMessageReportView::get_report_count(&mut conn).await?)
|
Some(PrivateMessageReportView::get_report_count(&mut *context.conn().await?).await?)
|
||||||
} else {
|
} else {
|
||||||
None
|
None
|
||||||
};
|
};
|
||||||
|
|
|
@ -18,18 +18,17 @@ impl Perform for PasswordReset {
|
||||||
&self,
|
&self,
|
||||||
context: &Data<LemmyContext>,
|
context: &Data<LemmyContext>,
|
||||||
) -> Result<PasswordResetResponse, LemmyError> {
|
) -> Result<PasswordResetResponse, LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
let data: &PasswordReset = self;
|
let data: &PasswordReset = self;
|
||||||
|
|
||||||
// Fetch that email
|
// Fetch that email
|
||||||
let email = data.email.to_lowercase();
|
let email = data.email.to_lowercase();
|
||||||
let local_user_view = LocalUserView::find_by_email(&mut conn, &email)
|
let local_user_view = LocalUserView::find_by_email(&mut *context.conn().await?, &email)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| LemmyError::from_error_message(e, "couldnt_find_that_username_or_email"))?;
|
.map_err(|e| LemmyError::from_error_message(e, "couldnt_find_that_username_or_email"))?;
|
||||||
|
|
||||||
// Check for too many attempts (to limit potential abuse)
|
// Check for too many attempts (to limit potential abuse)
|
||||||
let recent_resets_count = PasswordResetRequest::get_recent_password_resets_count(
|
let recent_resets_count = PasswordResetRequest::get_recent_password_resets_count(
|
||||||
&mut conn,
|
&mut *context.conn().await?,
|
||||||
local_user_view.local_user.id,
|
local_user_view.local_user.id,
|
||||||
)
|
)
|
||||||
.await?;
|
.await?;
|
||||||
|
@ -38,7 +37,12 @@ impl Perform for PasswordReset {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Email the pure token to the user.
|
// Email the pure token to the user.
|
||||||
send_password_reset_email(&local_user_view, &mut conn, context.settings()).await?;
|
send_password_reset_email(
|
||||||
|
&local_user_view,
|
||||||
|
&mut *context.conn().await?,
|
||||||
|
context.settings(),
|
||||||
|
)
|
||||||
|
.await?;
|
||||||
Ok(PasswordResetResponse {})
|
Ok(PasswordResetResponse {})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,10 +33,9 @@ impl Perform for SaveUserSettings {
|
||||||
|
|
||||||
#[tracing::instrument(skip(context))]
|
#[tracing::instrument(skip(context))]
|
||||||
async fn perform(&self, context: &Data<LemmyContext>) -> Result<LoginResponse, LemmyError> {
|
async fn perform(&self, context: &Data<LemmyContext>) -> Result<LoginResponse, LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
let data: &SaveUserSettings = self;
|
let data: &SaveUserSettings = self;
|
||||||
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
||||||
let site_view = SiteView::read_local(&mut conn).await?;
|
let site_view = SiteView::read_local(&mut *context.conn().await?).await?;
|
||||||
|
|
||||||
let avatar = diesel_option_overwrite_to_url(&data.avatar)?;
|
let avatar = diesel_option_overwrite_to_url(&data.avatar)?;
|
||||||
let banner = diesel_option_overwrite_to_url(&data.banner)?;
|
let banner = diesel_option_overwrite_to_url(&data.banner)?;
|
||||||
|
@ -50,7 +49,13 @@ impl Perform for SaveUserSettings {
|
||||||
let previous_email = local_user_view.local_user.email.clone().unwrap_or_default();
|
let previous_email = local_user_view.local_user.email.clone().unwrap_or_default();
|
||||||
// Only send the verification email if there was an email change
|
// Only send the verification email if there was an email change
|
||||||
if previous_email.ne(email) {
|
if previous_email.ne(email) {
|
||||||
send_verification_email(&local_user_view, email, &mut conn, context.settings()).await?;
|
send_verification_email(
|
||||||
|
&local_user_view,
|
||||||
|
email,
|
||||||
|
&mut *context.conn().await?,
|
||||||
|
context.settings(),
|
||||||
|
)
|
||||||
|
.await?;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -90,12 +95,17 @@ impl Perform for SaveUserSettings {
|
||||||
.banner(banner)
|
.banner(banner)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
Person::update(&mut conn, person_id, &person_form)
|
Person::update(&mut *context.conn().await?, person_id, &person_form)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| LemmyError::from_error_message(e, "user_already_exists"))?;
|
.map_err(|e| LemmyError::from_error_message(e, "user_already_exists"))?;
|
||||||
|
|
||||||
if let Some(discussion_languages) = data.discussion_languages.clone() {
|
if let Some(discussion_languages) = data.discussion_languages.clone() {
|
||||||
LocalUserLanguage::update(&mut conn, discussion_languages, local_user_id).await?;
|
LocalUserLanguage::update(
|
||||||
|
&mut *context.conn().await?,
|
||||||
|
discussion_languages,
|
||||||
|
local_user_id,
|
||||||
|
)
|
||||||
|
.await?;
|
||||||
}
|
}
|
||||||
|
|
||||||
// If generate_totp is Some(false), this will clear it out from the database.
|
// If generate_totp is Some(false), this will clear it out from the database.
|
||||||
|
@ -129,7 +139,8 @@ impl Perform for SaveUserSettings {
|
||||||
.totp_2fa_url(totp_2fa_url)
|
.totp_2fa_url(totp_2fa_url)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
let local_user_res = LocalUser::update(&mut conn, local_user_id, &local_user_form).await;
|
let local_user_res =
|
||||||
|
LocalUser::update(&mut *context.conn().await?, local_user_id, &local_user_form).await;
|
||||||
let updated_local_user = match local_user_res {
|
let updated_local_user = match local_user_res {
|
||||||
Ok(u) => u,
|
Ok(u) => u,
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
|
|
|
@ -18,9 +18,8 @@ impl Perform for VerifyEmail {
|
||||||
type Response = VerifyEmailResponse;
|
type Response = VerifyEmailResponse;
|
||||||
|
|
||||||
async fn perform(&self, context: &Data<LemmyContext>) -> Result<Self::Response, LemmyError> {
|
async fn perform(&self, context: &Data<LemmyContext>) -> Result<Self::Response, LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
let token = self.token.clone();
|
let token = self.token.clone();
|
||||||
let verification = EmailVerification::read_for_token(&mut conn, &token)
|
let verification = EmailVerification::read_for_token(&mut *context.conn().await?, &token)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| LemmyError::from_error_message(e, "token_not_found"))?;
|
.map_err(|e| LemmyError::from_error_message(e, "token_not_found"))?;
|
||||||
|
|
||||||
|
@ -32,9 +31,10 @@ impl Perform for VerifyEmail {
|
||||||
.build();
|
.build();
|
||||||
let local_user_id = verification.local_user_id;
|
let local_user_id = verification.local_user_id;
|
||||||
|
|
||||||
LocalUser::update(&mut conn, local_user_id, &form).await?;
|
LocalUser::update(&mut *context.conn().await?, local_user_id, &form).await?;
|
||||||
|
|
||||||
EmailVerification::delete_old_tokens_for_local_user(&mut conn, local_user_id).await?;
|
EmailVerification::delete_old_tokens_for_local_user(&mut *context.conn().await?, local_user_id)
|
||||||
|
.await?;
|
||||||
|
|
||||||
Ok(VerifyEmailResponse {})
|
Ok(VerifyEmailResponse {})
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,19 +28,28 @@ impl Perform for FeaturePost {
|
||||||
|
|
||||||
#[tracing::instrument(skip(context))]
|
#[tracing::instrument(skip(context))]
|
||||||
async fn perform(&self, context: &Data<LemmyContext>) -> Result<PostResponse, LemmyError> {
|
async fn perform(&self, context: &Data<LemmyContext>) -> Result<PostResponse, LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
let data: &FeaturePost = self;
|
let data: &FeaturePost = self;
|
||||||
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
||||||
|
|
||||||
let post_id = data.post_id;
|
let post_id = data.post_id;
|
||||||
let orig_post = Post::read(&mut conn, post_id).await?;
|
let orig_post = Post::read(&mut *context.conn().await?, post_id).await?;
|
||||||
|
|
||||||
check_community_ban(local_user_view.person.id, orig_post.community_id, &mut conn).await?;
|
check_community_ban(
|
||||||
check_community_deleted_or_removed(orig_post.community_id, &mut conn).await?;
|
local_user_view.person.id,
|
||||||
|
orig_post.community_id,
|
||||||
|
&mut *context.conn().await?,
|
||||||
|
)
|
||||||
|
.await?;
|
||||||
|
check_community_deleted_or_removed(orig_post.community_id, &mut *context.conn().await?).await?;
|
||||||
|
|
||||||
if data.feature_type == PostFeatureType::Community {
|
if data.feature_type == PostFeatureType::Community {
|
||||||
// Verify that only the mods can feature in community
|
// Verify that only the mods can feature in community
|
||||||
is_mod_or_admin(&mut conn, local_user_view.person.id, orig_post.community_id).await?;
|
is_mod_or_admin(
|
||||||
|
&mut *context.conn().await?,
|
||||||
|
local_user_view.person.id,
|
||||||
|
orig_post.community_id,
|
||||||
|
)
|
||||||
|
.await?;
|
||||||
} else {
|
} else {
|
||||||
is_admin(&local_user_view)?;
|
is_admin(&local_user_view)?;
|
||||||
}
|
}
|
||||||
|
@ -56,7 +65,7 @@ impl Perform for FeaturePost {
|
||||||
.featured_local(Some(data.featured))
|
.featured_local(Some(data.featured))
|
||||||
.build()
|
.build()
|
||||||
};
|
};
|
||||||
Post::update(&mut conn, post_id, &new_post).await?;
|
Post::update(&mut *context.conn().await?, post_id, &new_post).await?;
|
||||||
|
|
||||||
// Mod tables
|
// Mod tables
|
||||||
let form = ModFeaturePostForm {
|
let form = ModFeaturePostForm {
|
||||||
|
@ -66,7 +75,7 @@ impl Perform for FeaturePost {
|
||||||
is_featured_community: data.feature_type == PostFeatureType::Community,
|
is_featured_community: data.feature_type == PostFeatureType::Community,
|
||||||
};
|
};
|
||||||
|
|
||||||
ModFeaturePost::create(&mut conn, &form).await?;
|
ModFeaturePost::create(&mut *context.conn().await?, &form).await?;
|
||||||
|
|
||||||
build_post_response(
|
build_post_response(
|
||||||
context,
|
context,
|
||||||
|
|
|
@ -27,20 +27,24 @@ impl Perform for CreatePostLike {
|
||||||
|
|
||||||
#[tracing::instrument(skip(context))]
|
#[tracing::instrument(skip(context))]
|
||||||
async fn perform(&self, context: &Data<LemmyContext>) -> Result<PostResponse, LemmyError> {
|
async fn perform(&self, context: &Data<LemmyContext>) -> Result<PostResponse, LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
let data: &CreatePostLike = self;
|
let data: &CreatePostLike = self;
|
||||||
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
||||||
let local_site = LocalSite::read(&mut conn).await?;
|
let local_site = LocalSite::read(&mut *context.conn().await?).await?;
|
||||||
|
|
||||||
// Don't do a downvote if site has downvotes disabled
|
// Don't do a downvote if site has downvotes disabled
|
||||||
check_downvotes_enabled(data.score, &local_site)?;
|
check_downvotes_enabled(data.score, &local_site)?;
|
||||||
|
|
||||||
// Check for a community ban
|
// Check for a community ban
|
||||||
let post_id = data.post_id;
|
let post_id = data.post_id;
|
||||||
let post = Post::read(&mut conn, post_id).await?;
|
let post = Post::read(&mut *context.conn().await?, post_id).await?;
|
||||||
|
|
||||||
check_community_ban(local_user_view.person.id, post.community_id, &mut conn).await?;
|
check_community_ban(
|
||||||
check_community_deleted_or_removed(post.community_id, &mut conn).await?;
|
local_user_view.person.id,
|
||||||
|
post.community_id,
|
||||||
|
&mut *context.conn().await?,
|
||||||
|
)
|
||||||
|
.await?;
|
||||||
|
check_community_deleted_or_removed(post.community_id, &mut *context.conn().await?).await?;
|
||||||
|
|
||||||
let like_form = PostLikeForm {
|
let like_form = PostLikeForm {
|
||||||
post_id: data.post_id,
|
post_id: data.post_id,
|
||||||
|
@ -51,18 +55,18 @@ impl Perform for CreatePostLike {
|
||||||
// Remove any likes first
|
// Remove any likes first
|
||||||
let person_id = local_user_view.person.id;
|
let person_id = local_user_view.person.id;
|
||||||
|
|
||||||
PostLike::remove(&mut conn, person_id, post_id).await?;
|
PostLike::remove(&mut *context.conn().await?, person_id, post_id).await?;
|
||||||
|
|
||||||
// Only add the like if the score isnt 0
|
// Only add the like if the score isnt 0
|
||||||
let do_add = like_form.score != 0 && (like_form.score == 1 || like_form.score == -1);
|
let do_add = like_form.score != 0 && (like_form.score == 1 || like_form.score == -1);
|
||||||
if do_add {
|
if do_add {
|
||||||
PostLike::like(&mut conn, &like_form)
|
PostLike::like(&mut *context.conn().await?, &like_form)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| LemmyError::from_error_message(e, "couldnt_like_post"))?;
|
.map_err(|e| LemmyError::from_error_message(e, "couldnt_like_post"))?;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Mark the post as read
|
// Mark the post as read
|
||||||
mark_post_as_read(person_id, post_id, &mut conn).await?;
|
mark_post_as_read(person_id, post_id, &mut *context.conn().await?).await?;
|
||||||
|
|
||||||
build_post_response(
|
build_post_response(
|
||||||
context,
|
context,
|
||||||
|
|
|
@ -26,24 +26,33 @@ impl Perform for LockPost {
|
||||||
|
|
||||||
#[tracing::instrument(skip(context))]
|
#[tracing::instrument(skip(context))]
|
||||||
async fn perform(&self, context: &Data<LemmyContext>) -> Result<PostResponse, LemmyError> {
|
async fn perform(&self, context: &Data<LemmyContext>) -> Result<PostResponse, LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
let data: &LockPost = self;
|
let data: &LockPost = self;
|
||||||
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
||||||
|
|
||||||
let post_id = data.post_id;
|
let post_id = data.post_id;
|
||||||
let orig_post = Post::read(&mut conn, post_id).await?;
|
let orig_post = Post::read(&mut *context.conn().await?, post_id).await?;
|
||||||
|
|
||||||
check_community_ban(local_user_view.person.id, orig_post.community_id, &mut conn).await?;
|
check_community_ban(
|
||||||
check_community_deleted_or_removed(orig_post.community_id, &mut conn).await?;
|
local_user_view.person.id,
|
||||||
|
orig_post.community_id,
|
||||||
|
&mut *context.conn().await?,
|
||||||
|
)
|
||||||
|
.await?;
|
||||||
|
check_community_deleted_or_removed(orig_post.community_id, &mut *context.conn().await?).await?;
|
||||||
|
|
||||||
// Verify that only the mods can lock
|
// Verify that only the mods can lock
|
||||||
is_mod_or_admin(&mut conn, local_user_view.person.id, orig_post.community_id).await?;
|
is_mod_or_admin(
|
||||||
|
&mut *context.conn().await?,
|
||||||
|
local_user_view.person.id,
|
||||||
|
orig_post.community_id,
|
||||||
|
)
|
||||||
|
.await?;
|
||||||
|
|
||||||
// Update the post
|
// Update the post
|
||||||
let post_id = data.post_id;
|
let post_id = data.post_id;
|
||||||
let locked = data.locked;
|
let locked = data.locked;
|
||||||
Post::update(
|
Post::update(
|
||||||
&mut conn,
|
&mut *context.conn().await?,
|
||||||
post_id,
|
post_id,
|
||||||
&PostUpdateForm::builder().locked(Some(locked)).build(),
|
&PostUpdateForm::builder().locked(Some(locked)).build(),
|
||||||
)
|
)
|
||||||
|
@ -55,7 +64,7 @@ impl Perform for LockPost {
|
||||||
post_id: data.post_id,
|
post_id: data.post_id,
|
||||||
locked: Some(locked),
|
locked: Some(locked),
|
||||||
};
|
};
|
||||||
ModLockPost::create(&mut conn, &form).await?;
|
ModLockPost::create(&mut *context.conn().await?, &form).await?;
|
||||||
|
|
||||||
build_post_response(
|
build_post_response(
|
||||||
context,
|
context,
|
||||||
|
|
|
@ -14,7 +14,6 @@ impl Perform for MarkPostAsRead {
|
||||||
|
|
||||||
#[tracing::instrument(skip(context))]
|
#[tracing::instrument(skip(context))]
|
||||||
async fn perform(&self, context: &Data<LemmyContext>) -> Result<Self::Response, LemmyError> {
|
async fn perform(&self, context: &Data<LemmyContext>) -> Result<Self::Response, LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
let data = self;
|
let data = self;
|
||||||
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
||||||
|
|
||||||
|
@ -23,13 +22,14 @@ impl Perform for MarkPostAsRead {
|
||||||
|
|
||||||
// Mark the post as read / unread
|
// Mark the post as read / unread
|
||||||
if data.read {
|
if data.read {
|
||||||
mark_post_as_read(person_id, post_id, &mut conn).await?;
|
mark_post_as_read(person_id, post_id, &mut *context.conn().await?).await?;
|
||||||
} else {
|
} else {
|
||||||
mark_post_as_unread(person_id, post_id, &mut conn).await?;
|
mark_post_as_unread(person_id, post_id, &mut *context.conn().await?).await?;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Fetch it
|
// Fetch it
|
||||||
let post_view = PostView::read(&mut conn, post_id, Some(person_id), None).await?;
|
let post_view =
|
||||||
|
PostView::read(&mut *context.conn().await?, post_id, Some(person_id), None).await?;
|
||||||
|
|
||||||
Ok(Self::Response { post_view })
|
Ok(Self::Response { post_view })
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,7 +18,6 @@ impl Perform for SavePost {
|
||||||
|
|
||||||
#[tracing::instrument(skip(context))]
|
#[tracing::instrument(skip(context))]
|
||||||
async fn perform(&self, context: &Data<LemmyContext>) -> Result<PostResponse, LemmyError> {
|
async fn perform(&self, context: &Data<LemmyContext>) -> Result<PostResponse, LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
let data: &SavePost = self;
|
let data: &SavePost = self;
|
||||||
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
||||||
|
|
||||||
|
@ -28,21 +27,22 @@ impl Perform for SavePost {
|
||||||
};
|
};
|
||||||
|
|
||||||
if data.save {
|
if data.save {
|
||||||
PostSaved::save(&mut conn, &post_saved_form)
|
PostSaved::save(&mut *context.conn().await?, &post_saved_form)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| LemmyError::from_error_message(e, "couldnt_save_post"))?;
|
.map_err(|e| LemmyError::from_error_message(e, "couldnt_save_post"))?;
|
||||||
} else {
|
} else {
|
||||||
PostSaved::unsave(&mut conn, &post_saved_form)
|
PostSaved::unsave(&mut *context.conn().await?, &post_saved_form)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| LemmyError::from_error_message(e, "couldnt_save_post"))?;
|
.map_err(|e| LemmyError::from_error_message(e, "couldnt_save_post"))?;
|
||||||
}
|
}
|
||||||
|
|
||||||
let post_id = data.post_id;
|
let post_id = data.post_id;
|
||||||
let person_id = local_user_view.person.id;
|
let person_id = local_user_view.person.id;
|
||||||
let post_view = PostView::read(&mut conn, post_id, Some(person_id), None).await?;
|
let post_view =
|
||||||
|
PostView::read(&mut *context.conn().await?, post_id, Some(person_id), None).await?;
|
||||||
|
|
||||||
// Mark the post as read
|
// Mark the post as read
|
||||||
mark_post_as_read(person_id, post_id, &mut conn).await?;
|
mark_post_as_read(person_id, post_id, &mut *context.conn().await?).await?;
|
||||||
|
|
||||||
Ok(PostResponse { post_view })
|
Ok(PostResponse { post_view })
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,19 +22,23 @@ impl Perform for CreatePostReport {
|
||||||
|
|
||||||
#[tracing::instrument(skip(context))]
|
#[tracing::instrument(skip(context))]
|
||||||
async fn perform(&self, context: &Data<LemmyContext>) -> Result<PostReportResponse, LemmyError> {
|
async fn perform(&self, context: &Data<LemmyContext>) -> Result<PostReportResponse, LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
let data: &CreatePostReport = self;
|
let data: &CreatePostReport = self;
|
||||||
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
||||||
let local_site = LocalSite::read(&mut conn).await?;
|
let local_site = LocalSite::read(&mut *context.conn().await?).await?;
|
||||||
|
|
||||||
let reason = self.reason.trim();
|
let reason = self.reason.trim();
|
||||||
check_report_reason(reason, &local_site)?;
|
check_report_reason(reason, &local_site)?;
|
||||||
|
|
||||||
let person_id = local_user_view.person.id;
|
let person_id = local_user_view.person.id;
|
||||||
let post_id = data.post_id;
|
let post_id = data.post_id;
|
||||||
let post_view = PostView::read(&mut conn, post_id, None, None).await?;
|
let post_view = PostView::read(&mut *context.conn().await?, post_id, None, None).await?;
|
||||||
|
|
||||||
check_community_ban(person_id, post_view.community.id, &mut conn).await?;
|
check_community_ban(
|
||||||
|
person_id,
|
||||||
|
post_view.community.id,
|
||||||
|
&mut *context.conn().await?,
|
||||||
|
)
|
||||||
|
.await?;
|
||||||
|
|
||||||
let report_form = PostReportForm {
|
let report_form = PostReportForm {
|
||||||
creator_id: person_id,
|
creator_id: person_id,
|
||||||
|
@ -45,18 +49,19 @@ impl Perform for CreatePostReport {
|
||||||
reason: reason.to_owned(),
|
reason: reason.to_owned(),
|
||||||
};
|
};
|
||||||
|
|
||||||
let report = PostReport::report(&mut conn, &report_form)
|
let report = PostReport::report(&mut *context.conn().await?, &report_form)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| LemmyError::from_error_message(e, "couldnt_create_report"))?;
|
.map_err(|e| LemmyError::from_error_message(e, "couldnt_create_report"))?;
|
||||||
|
|
||||||
let post_report_view = PostReportView::read(&mut conn, report.id, person_id).await?;
|
let post_report_view =
|
||||||
|
PostReportView::read(&mut *context.conn().await?, report.id, person_id).await?;
|
||||||
|
|
||||||
// Email the admins
|
// Email the admins
|
||||||
if local_site.reports_email_admins {
|
if local_site.reports_email_admins {
|
||||||
send_new_report_email_to_admins(
|
send_new_report_email_to_admins(
|
||||||
&post_report_view.creator.name,
|
&post_report_view.creator.name,
|
||||||
&post_report_view.post_creator.name,
|
&post_report_view.post_creator.name,
|
||||||
&mut conn,
|
&mut *context.conn().await?,
|
||||||
context.settings(),
|
context.settings(),
|
||||||
)
|
)
|
||||||
.await?;
|
.await?;
|
||||||
|
|
|
@ -16,28 +16,28 @@ impl Perform for ResolvePostReport {
|
||||||
|
|
||||||
#[tracing::instrument(skip(context))]
|
#[tracing::instrument(skip(context))]
|
||||||
async fn perform(&self, context: &Data<LemmyContext>) -> Result<PostReportResponse, LemmyError> {
|
async fn perform(&self, context: &Data<LemmyContext>) -> Result<PostReportResponse, LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
let data: &ResolvePostReport = self;
|
let data: &ResolvePostReport = self;
|
||||||
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
||||||
|
|
||||||
let report_id = data.report_id;
|
let report_id = data.report_id;
|
||||||
let person_id = local_user_view.person.id;
|
let person_id = local_user_view.person.id;
|
||||||
let report = PostReportView::read(&mut conn, report_id, person_id).await?;
|
let report = PostReportView::read(&mut *context.conn().await?, report_id, person_id).await?;
|
||||||
|
|
||||||
let person_id = local_user_view.person.id;
|
let person_id = local_user_view.person.id;
|
||||||
is_mod_or_admin(&mut conn, person_id, report.community.id).await?;
|
is_mod_or_admin(&mut *context.conn().await?, person_id, report.community.id).await?;
|
||||||
|
|
||||||
if data.resolved {
|
if data.resolved {
|
||||||
PostReport::resolve(&mut conn, report_id, person_id)
|
PostReport::resolve(&mut *context.conn().await?, report_id, person_id)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| LemmyError::from_error_message(e, "couldnt_resolve_report"))?;
|
.map_err(|e| LemmyError::from_error_message(e, "couldnt_resolve_report"))?;
|
||||||
} else {
|
} else {
|
||||||
PostReport::unresolve(&mut conn, report_id, person_id)
|
PostReport::unresolve(&mut *context.conn().await?, report_id, person_id)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| LemmyError::from_error_message(e, "couldnt_resolve_report"))?;
|
.map_err(|e| LemmyError::from_error_message(e, "couldnt_resolve_report"))?;
|
||||||
}
|
}
|
||||||
|
|
||||||
let post_report_view = PostReportView::read(&mut conn, report_id, person_id).await?;
|
let post_report_view =
|
||||||
|
PostReportView::read(&mut *context.conn().await?, report_id, person_id).await?;
|
||||||
|
|
||||||
Ok(PostReportResponse { post_report_view })
|
Ok(PostReportResponse { post_report_view })
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,13 +21,13 @@ impl Perform for MarkPrivateMessageAsRead {
|
||||||
&self,
|
&self,
|
||||||
context: &Data<LemmyContext>,
|
context: &Data<LemmyContext>,
|
||||||
) -> Result<PrivateMessageResponse, LemmyError> {
|
) -> Result<PrivateMessageResponse, LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
let data: &MarkPrivateMessageAsRead = self;
|
let data: &MarkPrivateMessageAsRead = self;
|
||||||
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
||||||
|
|
||||||
// Checking permissions
|
// Checking permissions
|
||||||
let private_message_id = data.private_message_id;
|
let private_message_id = data.private_message_id;
|
||||||
let orig_private_message = PrivateMessage::read(&mut conn, private_message_id).await?;
|
let orig_private_message =
|
||||||
|
PrivateMessage::read(&mut *context.conn().await?, private_message_id).await?;
|
||||||
if local_user_view.person.id != orig_private_message.recipient_id {
|
if local_user_view.person.id != orig_private_message.recipient_id {
|
||||||
return Err(LemmyError::from_message("couldnt_update_private_message"));
|
return Err(LemmyError::from_message("couldnt_update_private_message"));
|
||||||
}
|
}
|
||||||
|
@ -36,14 +36,14 @@ impl Perform for MarkPrivateMessageAsRead {
|
||||||
let private_message_id = data.private_message_id;
|
let private_message_id = data.private_message_id;
|
||||||
let read = data.read;
|
let read = data.read;
|
||||||
PrivateMessage::update(
|
PrivateMessage::update(
|
||||||
&mut conn,
|
&mut *context.conn().await?,
|
||||||
private_message_id,
|
private_message_id,
|
||||||
&PrivateMessageUpdateForm::builder().read(Some(read)).build(),
|
&PrivateMessageUpdateForm::builder().read(Some(read)).build(),
|
||||||
)
|
)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| LemmyError::from_error_message(e, "couldnt_update_private_message"))?;
|
.map_err(|e| LemmyError::from_error_message(e, "couldnt_update_private_message"))?;
|
||||||
|
|
||||||
let view = PrivateMessageView::read(&mut conn, private_message_id).await?;
|
let view = PrivateMessageView::read(&mut *context.conn().await?, private_message_id).await?;
|
||||||
Ok(PrivateMessageResponse {
|
Ok(PrivateMessageResponse {
|
||||||
private_message_view: view,
|
private_message_view: view,
|
||||||
})
|
})
|
||||||
|
|
|
@ -22,16 +22,16 @@ impl Perform for CreatePrivateMessageReport {
|
||||||
|
|
||||||
#[tracing::instrument(skip(context))]
|
#[tracing::instrument(skip(context))]
|
||||||
async fn perform(&self, context: &Data<LemmyContext>) -> Result<Self::Response, LemmyError> {
|
async fn perform(&self, context: &Data<LemmyContext>) -> Result<Self::Response, LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
let local_user_view = local_user_view_from_jwt(&self.auth, context).await?;
|
let local_user_view = local_user_view_from_jwt(&self.auth, context).await?;
|
||||||
let local_site = LocalSite::read(&mut conn).await?;
|
let local_site = LocalSite::read(&mut *context.conn().await?).await?;
|
||||||
|
|
||||||
let reason = self.reason.trim();
|
let reason = self.reason.trim();
|
||||||
check_report_reason(reason, &local_site)?;
|
check_report_reason(reason, &local_site)?;
|
||||||
|
|
||||||
let person_id = local_user_view.person.id;
|
let person_id = local_user_view.person.id;
|
||||||
let private_message_id = self.private_message_id;
|
let private_message_id = self.private_message_id;
|
||||||
let private_message = PrivateMessage::read(&mut conn, private_message_id).await?;
|
let private_message =
|
||||||
|
PrivateMessage::read(&mut *context.conn().await?, private_message_id).await?;
|
||||||
|
|
||||||
let report_form = PrivateMessageReportForm {
|
let report_form = PrivateMessageReportForm {
|
||||||
creator_id: person_id,
|
creator_id: person_id,
|
||||||
|
@ -40,18 +40,19 @@ impl Perform for CreatePrivateMessageReport {
|
||||||
reason: reason.to_owned(),
|
reason: reason.to_owned(),
|
||||||
};
|
};
|
||||||
|
|
||||||
let report = PrivateMessageReport::report(&mut conn, &report_form)
|
let report = PrivateMessageReport::report(&mut *context.conn().await?, &report_form)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| LemmyError::from_error_message(e, "couldnt_create_report"))?;
|
.map_err(|e| LemmyError::from_error_message(e, "couldnt_create_report"))?;
|
||||||
|
|
||||||
let private_message_report_view = PrivateMessageReportView::read(&mut conn, report.id).await?;
|
let private_message_report_view =
|
||||||
|
PrivateMessageReportView::read(&mut *context.conn().await?, report.id).await?;
|
||||||
|
|
||||||
// Email the admins
|
// Email the admins
|
||||||
if local_site.reports_email_admins {
|
if local_site.reports_email_admins {
|
||||||
send_new_report_email_to_admins(
|
send_new_report_email_to_admins(
|
||||||
&private_message_report_view.creator.name,
|
&private_message_report_view.creator.name,
|
||||||
&private_message_report_view.private_message_creator.name,
|
&private_message_report_view.private_message_creator.name,
|
||||||
&mut conn,
|
&mut *context.conn().await?,
|
||||||
context.settings(),
|
context.settings(),
|
||||||
)
|
)
|
||||||
.await?;
|
.await?;
|
||||||
|
|
|
@ -15,7 +15,6 @@ impl Perform for ResolvePrivateMessageReport {
|
||||||
|
|
||||||
#[tracing::instrument(skip(context))]
|
#[tracing::instrument(skip(context))]
|
||||||
async fn perform(&self, context: &Data<LemmyContext>) -> Result<Self::Response, LemmyError> {
|
async fn perform(&self, context: &Data<LemmyContext>) -> Result<Self::Response, LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
let local_user_view = local_user_view_from_jwt(&self.auth, context).await?;
|
let local_user_view = local_user_view_from_jwt(&self.auth, context).await?;
|
||||||
|
|
||||||
is_admin(&local_user_view)?;
|
is_admin(&local_user_view)?;
|
||||||
|
@ -23,16 +22,17 @@ impl Perform for ResolvePrivateMessageReport {
|
||||||
let report_id = self.report_id;
|
let report_id = self.report_id;
|
||||||
let person_id = local_user_view.person.id;
|
let person_id = local_user_view.person.id;
|
||||||
if self.resolved {
|
if self.resolved {
|
||||||
PrivateMessageReport::resolve(&mut conn, report_id, person_id)
|
PrivateMessageReport::resolve(&mut *context.conn().await?, report_id, person_id)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| LemmyError::from_error_message(e, "couldnt_resolve_report"))?;
|
.map_err(|e| LemmyError::from_error_message(e, "couldnt_resolve_report"))?;
|
||||||
} else {
|
} else {
|
||||||
PrivateMessageReport::unresolve(&mut conn, report_id, person_id)
|
PrivateMessageReport::unresolve(&mut *context.conn().await?, report_id, person_id)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| LemmyError::from_error_message(e, "couldnt_resolve_report"))?;
|
.map_err(|e| LemmyError::from_error_message(e, "couldnt_resolve_report"))?;
|
||||||
}
|
}
|
||||||
|
|
||||||
let private_message_report_view = PrivateMessageReportView::read(&mut conn, report_id).await?;
|
let private_message_report_view =
|
||||||
|
PrivateMessageReportView::read(&mut *context.conn().await?, report_id).await?;
|
||||||
|
|
||||||
Ok(PrivateMessageReportResponse {
|
Ok(PrivateMessageReportResponse {
|
||||||
private_message_report_view,
|
private_message_report_view,
|
||||||
|
|
|
@ -14,8 +14,7 @@ impl Perform for GetFederatedInstances {
|
||||||
|
|
||||||
#[tracing::instrument(skip(context))]
|
#[tracing::instrument(skip(context))]
|
||||||
async fn perform(&self, context: &Data<LemmyContext>) -> Result<Self::Response, LemmyError> {
|
async fn perform(&self, context: &Data<LemmyContext>) -> Result<Self::Response, LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
let site_view = SiteView::read_local(&mut *context.conn().await?).await?;
|
||||||
let site_view = SiteView::read_local(&mut conn).await?;
|
|
||||||
let federated_instances =
|
let federated_instances =
|
||||||
build_federated_instances(&site_view.local_site, context.pool()).await?;
|
build_federated_instances(&site_view.local_site, context.pool()).await?;
|
||||||
|
|
||||||
|
|
|
@ -25,21 +25,20 @@ impl Perform for LeaveAdmin {
|
||||||
|
|
||||||
#[tracing::instrument(skip(context))]
|
#[tracing::instrument(skip(context))]
|
||||||
async fn perform(&self, context: &Data<LemmyContext>) -> Result<GetSiteResponse, LemmyError> {
|
async fn perform(&self, context: &Data<LemmyContext>) -> Result<GetSiteResponse, LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
let data: &LeaveAdmin = self;
|
let data: &LeaveAdmin = self;
|
||||||
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
||||||
|
|
||||||
is_admin(&local_user_view)?;
|
is_admin(&local_user_view)?;
|
||||||
|
|
||||||
// Make sure there isn't just one admin (so if one leaves, there will still be one left)
|
// Make sure there isn't just one admin (so if one leaves, there will still be one left)
|
||||||
let admins = PersonView::admins(&mut conn).await?;
|
let admins = PersonView::admins(&mut *context.conn().await?).await?;
|
||||||
if admins.len() == 1 {
|
if admins.len() == 1 {
|
||||||
return Err(LemmyError::from_message("cannot_leave_admin"));
|
return Err(LemmyError::from_message("cannot_leave_admin"));
|
||||||
}
|
}
|
||||||
|
|
||||||
let person_id = local_user_view.person.id;
|
let person_id = local_user_view.person.id;
|
||||||
Person::update(
|
Person::update(
|
||||||
&mut conn,
|
&mut *context.conn().await?,
|
||||||
person_id,
|
person_id,
|
||||||
&PersonUpdateForm::builder().admin(Some(false)).build(),
|
&PersonUpdateForm::builder().admin(Some(false)).build(),
|
||||||
)
|
)
|
||||||
|
@ -52,16 +51,17 @@ impl Perform for LeaveAdmin {
|
||||||
removed: Some(true),
|
removed: Some(true),
|
||||||
};
|
};
|
||||||
|
|
||||||
ModAdd::create(&mut conn, &form).await?;
|
ModAdd::create(&mut *context.conn().await?, &form).await?;
|
||||||
|
|
||||||
// Reread site and admins
|
// Reread site and admins
|
||||||
let site_view = SiteView::read_local(&mut conn).await?;
|
let site_view = SiteView::read_local(&mut *context.conn().await?).await?;
|
||||||
let admins = PersonView::admins(&mut conn).await?;
|
let admins = PersonView::admins(&mut *context.conn().await?).await?;
|
||||||
|
|
||||||
let all_languages = Language::read_all(&mut conn).await?;
|
let all_languages = Language::read_all(&mut *context.conn().await?).await?;
|
||||||
let discussion_languages = SiteLanguage::read_local_raw(&mut conn).await?;
|
let discussion_languages = SiteLanguage::read_local_raw(&mut *context.conn().await?).await?;
|
||||||
let taglines = Tagline::get_all(&mut conn, site_view.local_site.id).await?;
|
let taglines = Tagline::get_all(&mut *context.conn().await?, site_view.local_site.id).await?;
|
||||||
let custom_emojis = CustomEmojiView::get_all(&mut conn, site_view.local_site.id).await?;
|
let custom_emojis =
|
||||||
|
CustomEmojiView::get_all(&mut *context.conn().await?, site_view.local_site.id).await?;
|
||||||
|
|
||||||
Ok(GetSiteResponse {
|
Ok(GetSiteResponse {
|
||||||
site_view,
|
site_view,
|
||||||
|
|
|
@ -37,11 +37,10 @@ impl Perform for GetModlog {
|
||||||
|
|
||||||
#[tracing::instrument(skip(context))]
|
#[tracing::instrument(skip(context))]
|
||||||
async fn perform(&self, context: &Data<LemmyContext>) -> Result<GetModlogResponse, LemmyError> {
|
async fn perform(&self, context: &Data<LemmyContext>) -> Result<GetModlogResponse, LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
let data: &GetModlog = self;
|
let data: &GetModlog = self;
|
||||||
|
|
||||||
let local_user_view = local_user_view_from_jwt_opt(data.auth.as_ref(), context).await;
|
let local_user_view = local_user_view_from_jwt_opt(data.auth.as_ref(), context).await;
|
||||||
let local_site = LocalSite::read(&mut conn).await?;
|
let local_site = LocalSite::read(&mut *context.conn().await?).await?;
|
||||||
|
|
||||||
check_private_instance(&local_user_view, &local_site)?;
|
check_private_instance(&local_user_view, &local_site)?;
|
||||||
|
|
||||||
|
@ -57,9 +56,13 @@ impl Perform for GetModlog {
|
||||||
None => CommunityId(-1),
|
None => CommunityId(-1),
|
||||||
};
|
};
|
||||||
let is_mod_of_community = data.community_id.is_some()
|
let is_mod_of_community = data.community_id.is_some()
|
||||||
&& is_mod_or_admin(&mut conn, local_person_id, community_id_value)
|
&& is_mod_or_admin(
|
||||||
.await
|
&mut *context.conn().await?,
|
||||||
.is_ok();
|
local_person_id,
|
||||||
|
community_id_value,
|
||||||
|
)
|
||||||
|
.await
|
||||||
|
.is_ok();
|
||||||
let hide_modlog_names = local_site.hide_modlog_mod_names && !is_mod_of_community && !is_admin;
|
let hide_modlog_names = local_site.hide_modlog_mod_names && !is_mod_of_community && !is_admin;
|
||||||
|
|
||||||
let mod_person_id = if hide_modlog_names {
|
let mod_person_id = if hide_modlog_names {
|
||||||
|
@ -77,43 +80,51 @@ impl Perform for GetModlog {
|
||||||
hide_modlog_names,
|
hide_modlog_names,
|
||||||
};
|
};
|
||||||
let removed_posts = match type_ {
|
let removed_posts = match type_ {
|
||||||
All | ModRemovePost => ModRemovePostView::list(&mut conn, params).await?,
|
All | ModRemovePost => ModRemovePostView::list(&mut *context.conn().await?, params).await?,
|
||||||
_ => Default::default(),
|
_ => Default::default(),
|
||||||
};
|
};
|
||||||
|
|
||||||
let locked_posts = match type_ {
|
let locked_posts = match type_ {
|
||||||
All | ModLockPost => ModLockPostView::list(&mut conn, params).await?,
|
All | ModLockPost => ModLockPostView::list(&mut *context.conn().await?, params).await?,
|
||||||
_ => Default::default(),
|
_ => Default::default(),
|
||||||
};
|
};
|
||||||
|
|
||||||
let featured_posts = match type_ {
|
let featured_posts = match type_ {
|
||||||
All | ModFeaturePost => ModFeaturePostView::list(&mut conn, params).await?,
|
All | ModFeaturePost => ModFeaturePostView::list(&mut *context.conn().await?, params).await?,
|
||||||
_ => Default::default(),
|
_ => Default::default(),
|
||||||
};
|
};
|
||||||
|
|
||||||
let removed_comments = match type_ {
|
let removed_comments = match type_ {
|
||||||
All | ModRemoveComment => ModRemoveCommentView::list(&mut conn, params).await?,
|
All | ModRemoveComment => {
|
||||||
|
ModRemoveCommentView::list(&mut *context.conn().await?, params).await?
|
||||||
|
}
|
||||||
_ => Default::default(),
|
_ => Default::default(),
|
||||||
};
|
};
|
||||||
|
|
||||||
let banned_from_community = match type_ {
|
let banned_from_community = match type_ {
|
||||||
All | ModBanFromCommunity => ModBanFromCommunityView::list(&mut conn, params).await?,
|
All | ModBanFromCommunity => {
|
||||||
|
ModBanFromCommunityView::list(&mut *context.conn().await?, params).await?
|
||||||
|
}
|
||||||
_ => Default::default(),
|
_ => Default::default(),
|
||||||
};
|
};
|
||||||
|
|
||||||
let added_to_community = match type_ {
|
let added_to_community = match type_ {
|
||||||
All | ModAddCommunity => ModAddCommunityView::list(&mut conn, params).await?,
|
All | ModAddCommunity => {
|
||||||
|
ModAddCommunityView::list(&mut *context.conn().await?, params).await?
|
||||||
|
}
|
||||||
_ => Default::default(),
|
_ => Default::default(),
|
||||||
};
|
};
|
||||||
|
|
||||||
let transferred_to_community = match type_ {
|
let transferred_to_community = match type_ {
|
||||||
All | ModTransferCommunity => ModTransferCommunityView::list(&mut conn, params).await?,
|
All | ModTransferCommunity => {
|
||||||
|
ModTransferCommunityView::list(&mut *context.conn().await?, params).await?
|
||||||
|
}
|
||||||
_ => Default::default(),
|
_ => Default::default(),
|
||||||
};
|
};
|
||||||
|
|
||||||
let hidden_communities = match type_ {
|
let hidden_communities = match type_ {
|
||||||
All | ModHideCommunity if other_person_id.is_none() => {
|
All | ModHideCommunity if other_person_id.is_none() => {
|
||||||
ModHideCommunityView::list(&mut conn, params).await?
|
ModHideCommunityView::list(&mut *context.conn().await?, params).await?
|
||||||
}
|
}
|
||||||
_ => Default::default(),
|
_ => Default::default(),
|
||||||
};
|
};
|
||||||
|
@ -130,40 +141,40 @@ impl Perform for GetModlog {
|
||||||
) = if data.community_id.is_none() {
|
) = if data.community_id.is_none() {
|
||||||
(
|
(
|
||||||
match type_ {
|
match type_ {
|
||||||
All | ModBan => ModBanView::list(&mut conn, params).await?,
|
All | ModBan => ModBanView::list(&mut *context.conn().await?, params).await?,
|
||||||
_ => Default::default(),
|
_ => Default::default(),
|
||||||
},
|
},
|
||||||
match type_ {
|
match type_ {
|
||||||
All | ModAdd => ModAddView::list(&mut conn, params).await?,
|
All | ModAdd => ModAddView::list(&mut *context.conn().await?, params).await?,
|
||||||
_ => Default::default(),
|
_ => Default::default(),
|
||||||
},
|
},
|
||||||
match type_ {
|
match type_ {
|
||||||
All | ModRemoveCommunity if other_person_id.is_none() => {
|
All | ModRemoveCommunity if other_person_id.is_none() => {
|
||||||
ModRemoveCommunityView::list(&mut conn, params).await?
|
ModRemoveCommunityView::list(&mut *context.conn().await?, params).await?
|
||||||
}
|
}
|
||||||
_ => Default::default(),
|
_ => Default::default(),
|
||||||
},
|
},
|
||||||
match type_ {
|
match type_ {
|
||||||
All | AdminPurgePerson if other_person_id.is_none() => {
|
All | AdminPurgePerson if other_person_id.is_none() => {
|
||||||
AdminPurgePersonView::list(&mut conn, params).await?
|
AdminPurgePersonView::list(&mut *context.conn().await?, params).await?
|
||||||
}
|
}
|
||||||
_ => Default::default(),
|
_ => Default::default(),
|
||||||
},
|
},
|
||||||
match type_ {
|
match type_ {
|
||||||
All | AdminPurgeCommunity if other_person_id.is_none() => {
|
All | AdminPurgeCommunity if other_person_id.is_none() => {
|
||||||
AdminPurgeCommunityView::list(&mut conn, params).await?
|
AdminPurgeCommunityView::list(&mut *context.conn().await?, params).await?
|
||||||
}
|
}
|
||||||
_ => Default::default(),
|
_ => Default::default(),
|
||||||
},
|
},
|
||||||
match type_ {
|
match type_ {
|
||||||
All | AdminPurgePost if other_person_id.is_none() => {
|
All | AdminPurgePost if other_person_id.is_none() => {
|
||||||
AdminPurgePostView::list(&mut conn, params).await?
|
AdminPurgePostView::list(&mut *context.conn().await?, params).await?
|
||||||
}
|
}
|
||||||
_ => Default::default(),
|
_ => Default::default(),
|
||||||
},
|
},
|
||||||
match type_ {
|
match type_ {
|
||||||
All | AdminPurgeComment if other_person_id.is_none() => {
|
All | AdminPurgeComment if other_person_id.is_none() => {
|
||||||
AdminPurgeCommentView::list(&mut conn, params).await?
|
AdminPurgeCommentView::list(&mut *context.conn().await?, params).await?
|
||||||
}
|
}
|
||||||
_ => Default::default(),
|
_ => Default::default(),
|
||||||
},
|
},
|
||||||
|
|
|
@ -20,7 +20,6 @@ impl Perform for PurgeComment {
|
||||||
|
|
||||||
#[tracing::instrument(skip(context))]
|
#[tracing::instrument(skip(context))]
|
||||||
async fn perform(&self, context: &Data<LemmyContext>) -> Result<Self::Response, LemmyError> {
|
async fn perform(&self, context: &Data<LemmyContext>) -> Result<Self::Response, LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
let data: &Self = self;
|
let data: &Self = self;
|
||||||
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
||||||
|
|
||||||
|
@ -30,13 +29,13 @@ impl Perform for PurgeComment {
|
||||||
let comment_id = data.comment_id;
|
let comment_id = data.comment_id;
|
||||||
|
|
||||||
// Read the comment to get the post_id
|
// Read the comment to get the post_id
|
||||||
let comment = Comment::read(&mut conn, comment_id).await?;
|
let comment = Comment::read(&mut *context.conn().await?, comment_id).await?;
|
||||||
|
|
||||||
let post_id = comment.post_id;
|
let post_id = comment.post_id;
|
||||||
|
|
||||||
// TODO read comments for pictrs images and purge them
|
// TODO read comments for pictrs images and purge them
|
||||||
|
|
||||||
Comment::delete(&mut conn, comment_id).await?;
|
Comment::delete(&mut *context.conn().await?, comment_id).await?;
|
||||||
|
|
||||||
// Mod tables
|
// Mod tables
|
||||||
let reason = data.reason.clone();
|
let reason = data.reason.clone();
|
||||||
|
@ -46,7 +45,7 @@ impl Perform for PurgeComment {
|
||||||
post_id,
|
post_id,
|
||||||
};
|
};
|
||||||
|
|
||||||
AdminPurgeComment::create(&mut conn, &form).await?;
|
AdminPurgeComment::create(&mut *context.conn().await?, &form).await?;
|
||||||
|
|
||||||
Ok(PurgeItemResponse { success: true })
|
Ok(PurgeItemResponse { success: true })
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,7 +21,6 @@ impl Perform for PurgeCommunity {
|
||||||
|
|
||||||
#[tracing::instrument(skip(context))]
|
#[tracing::instrument(skip(context))]
|
||||||
async fn perform(&self, context: &Data<LemmyContext>) -> Result<Self::Response, LemmyError> {
|
async fn perform(&self, context: &Data<LemmyContext>) -> Result<Self::Response, LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
let data: &Self = self;
|
let data: &Self = self;
|
||||||
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
||||||
|
|
||||||
|
@ -31,7 +30,7 @@ impl Perform for PurgeCommunity {
|
||||||
let community_id = data.community_id;
|
let community_id = data.community_id;
|
||||||
|
|
||||||
// Read the community to get its images
|
// Read the community to get its images
|
||||||
let community = Community::read(&mut conn, community_id).await?;
|
let community = Community::read(&mut *context.conn().await?, community_id).await?;
|
||||||
|
|
||||||
if let Some(banner) = community.banner {
|
if let Some(banner) = community.banner {
|
||||||
purge_image_from_pictrs(context.client(), context.settings(), &banner)
|
purge_image_from_pictrs(context.client(), context.settings(), &banner)
|
||||||
|
@ -47,13 +46,13 @@ impl Perform for PurgeCommunity {
|
||||||
|
|
||||||
purge_image_posts_for_community(
|
purge_image_posts_for_community(
|
||||||
community_id,
|
community_id,
|
||||||
&mut conn,
|
&mut *context.conn().await?,
|
||||||
context.settings(),
|
context.settings(),
|
||||||
context.client(),
|
context.client(),
|
||||||
)
|
)
|
||||||
.await?;
|
.await?;
|
||||||
|
|
||||||
Community::delete(&mut conn, community_id).await?;
|
Community::delete(&mut *context.conn().await?, community_id).await?;
|
||||||
|
|
||||||
// Mod tables
|
// Mod tables
|
||||||
let reason = data.reason.clone();
|
let reason = data.reason.clone();
|
||||||
|
@ -62,7 +61,7 @@ impl Perform for PurgeCommunity {
|
||||||
reason,
|
reason,
|
||||||
};
|
};
|
||||||
|
|
||||||
AdminPurgeCommunity::create(&mut conn, &form).await?;
|
AdminPurgeCommunity::create(&mut *context.conn().await?, &form).await?;
|
||||||
|
|
||||||
Ok(PurgeItemResponse { success: true })
|
Ok(PurgeItemResponse { success: true })
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,7 +21,6 @@ impl Perform for PurgePerson {
|
||||||
|
|
||||||
#[tracing::instrument(skip(context))]
|
#[tracing::instrument(skip(context))]
|
||||||
async fn perform(&self, context: &Data<LemmyContext>) -> Result<Self::Response, LemmyError> {
|
async fn perform(&self, context: &Data<LemmyContext>) -> Result<Self::Response, LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
let data: &Self = self;
|
let data: &Self = self;
|
||||||
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
||||||
|
|
||||||
|
@ -30,7 +29,7 @@ impl Perform for PurgePerson {
|
||||||
|
|
||||||
// Read the person to get their images
|
// Read the person to get their images
|
||||||
let person_id = data.person_id;
|
let person_id = data.person_id;
|
||||||
let person = Person::read(&mut conn, person_id).await?;
|
let person = Person::read(&mut *context.conn().await?, person_id).await?;
|
||||||
|
|
||||||
if let Some(banner) = person.banner {
|
if let Some(banner) = person.banner {
|
||||||
purge_image_from_pictrs(context.client(), context.settings(), &banner)
|
purge_image_from_pictrs(context.client(), context.settings(), &banner)
|
||||||
|
@ -44,10 +43,15 @@ impl Perform for PurgePerson {
|
||||||
.ok();
|
.ok();
|
||||||
}
|
}
|
||||||
|
|
||||||
purge_image_posts_for_person(person_id, &mut conn, context.settings(), context.client())
|
purge_image_posts_for_person(
|
||||||
.await?;
|
person_id,
|
||||||
|
&mut *context.conn().await?,
|
||||||
|
context.settings(),
|
||||||
|
context.client(),
|
||||||
|
)
|
||||||
|
.await?;
|
||||||
|
|
||||||
Person::delete(&mut conn, person_id).await?;
|
Person::delete(&mut *context.conn().await?, person_id).await?;
|
||||||
|
|
||||||
// Mod tables
|
// Mod tables
|
||||||
let reason = data.reason.clone();
|
let reason = data.reason.clone();
|
||||||
|
@ -56,7 +60,7 @@ impl Perform for PurgePerson {
|
||||||
reason,
|
reason,
|
||||||
};
|
};
|
||||||
|
|
||||||
AdminPurgePerson::create(&mut conn, &form).await?;
|
AdminPurgePerson::create(&mut *context.conn().await?, &form).await?;
|
||||||
|
|
||||||
Ok(PurgeItemResponse { success: true })
|
Ok(PurgeItemResponse { success: true })
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,7 +21,6 @@ impl Perform for PurgePost {
|
||||||
|
|
||||||
#[tracing::instrument(skip(context))]
|
#[tracing::instrument(skip(context))]
|
||||||
async fn perform(&self, context: &Data<LemmyContext>) -> Result<Self::Response, LemmyError> {
|
async fn perform(&self, context: &Data<LemmyContext>) -> Result<Self::Response, LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
let data: &Self = self;
|
let data: &Self = self;
|
||||||
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
||||||
|
|
||||||
|
@ -31,7 +30,7 @@ impl Perform for PurgePost {
|
||||||
let post_id = data.post_id;
|
let post_id = data.post_id;
|
||||||
|
|
||||||
// Read the post to get the community_id
|
// Read the post to get the community_id
|
||||||
let post = Post::read(&mut conn, post_id).await?;
|
let post = Post::read(&mut *context.conn().await?, post_id).await?;
|
||||||
|
|
||||||
// Purge image
|
// Purge image
|
||||||
if let Some(url) = post.url {
|
if let Some(url) = post.url {
|
||||||
|
@ -48,7 +47,7 @@ impl Perform for PurgePost {
|
||||||
|
|
||||||
let community_id = post.community_id;
|
let community_id = post.community_id;
|
||||||
|
|
||||||
Post::delete(&mut conn, post_id).await?;
|
Post::delete(&mut *context.conn().await?, post_id).await?;
|
||||||
|
|
||||||
// Mod tables
|
// Mod tables
|
||||||
let reason = data.reason.clone();
|
let reason = data.reason.clone();
|
||||||
|
@ -58,7 +57,7 @@ impl Perform for PurgePost {
|
||||||
community_id,
|
community_id,
|
||||||
};
|
};
|
||||||
|
|
||||||
AdminPurgePost::create(&mut conn, &form).await?;
|
AdminPurgePost::create(&mut *context.conn().await?, &form).await?;
|
||||||
|
|
||||||
Ok(PurgeItemResponse { success: true })
|
Ok(PurgeItemResponse { success: true })
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,7 +21,6 @@ impl Perform for ApproveRegistrationApplication {
|
||||||
type Response = RegistrationApplicationResponse;
|
type Response = RegistrationApplicationResponse;
|
||||||
|
|
||||||
async fn perform(&self, context: &Data<LemmyContext>) -> Result<Self::Response, LemmyError> {
|
async fn perform(&self, context: &Data<LemmyContext>) -> Result<Self::Response, LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
let data = self;
|
let data = self;
|
||||||
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
||||||
|
|
||||||
|
@ -38,7 +37,7 @@ impl Perform for ApproveRegistrationApplication {
|
||||||
};
|
};
|
||||||
|
|
||||||
let registration_application =
|
let registration_application =
|
||||||
RegistrationApplication::update(&mut conn, app_id, &app_form).await?;
|
RegistrationApplication::update(&mut *context.conn().await?, app_id, &app_form).await?;
|
||||||
|
|
||||||
// Update the local_user row
|
// Update the local_user row
|
||||||
let local_user_form = LocalUserUpdateForm::builder()
|
let local_user_form = LocalUserUpdateForm::builder()
|
||||||
|
@ -46,10 +45,16 @@ impl Perform for ApproveRegistrationApplication {
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
let approved_user_id = registration_application.local_user_id;
|
let approved_user_id = registration_application.local_user_id;
|
||||||
LocalUser::update(&mut conn, approved_user_id, &local_user_form).await?;
|
LocalUser::update(
|
||||||
|
&mut *context.conn().await?,
|
||||||
|
approved_user_id,
|
||||||
|
&local_user_form,
|
||||||
|
)
|
||||||
|
.await?;
|
||||||
|
|
||||||
if data.approve {
|
if data.approve {
|
||||||
let approved_local_user_view = LocalUserView::read(&mut conn, approved_user_id).await?;
|
let approved_local_user_view =
|
||||||
|
LocalUserView::read(&mut *context.conn().await?, approved_user_id).await?;
|
||||||
|
|
||||||
if approved_local_user_view.local_user.email.is_some() {
|
if approved_local_user_view.local_user.email.is_some() {
|
||||||
send_application_approved_email(&approved_local_user_view, context.settings())?;
|
send_application_approved_email(&approved_local_user_view, context.settings())?;
|
||||||
|
@ -57,7 +62,8 @@ impl Perform for ApproveRegistrationApplication {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Read the view
|
// Read the view
|
||||||
let registration_application = RegistrationApplicationView::read(&mut conn, app_id).await?;
|
let registration_application =
|
||||||
|
RegistrationApplicationView::read(&mut *context.conn().await?, app_id).await?;
|
||||||
|
|
||||||
Ok(Self::Response {
|
Ok(Self::Response {
|
||||||
registration_application,
|
registration_application,
|
||||||
|
|
|
@ -15,10 +15,9 @@ impl Perform for ListRegistrationApplications {
|
||||||
type Response = ListRegistrationApplicationsResponse;
|
type Response = ListRegistrationApplicationsResponse;
|
||||||
|
|
||||||
async fn perform(&self, context: &Data<LemmyContext>) -> Result<Self::Response, LemmyError> {
|
async fn perform(&self, context: &Data<LemmyContext>) -> Result<Self::Response, LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
let data = self;
|
let data = self;
|
||||||
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
||||||
let local_site = LocalSite::read(&mut conn).await?;
|
let local_site = LocalSite::read(&mut *context.conn().await?).await?;
|
||||||
|
|
||||||
// Make sure user is an admin
|
// Make sure user is an admin
|
||||||
is_admin(&local_user_view)?;
|
is_admin(&local_user_view)?;
|
||||||
|
|
|
@ -14,18 +14,20 @@ impl Perform for GetUnreadRegistrationApplicationCount {
|
||||||
type Response = GetUnreadRegistrationApplicationCountResponse;
|
type Response = GetUnreadRegistrationApplicationCountResponse;
|
||||||
|
|
||||||
async fn perform(&self, context: &Data<LemmyContext>) -> Result<Self::Response, LemmyError> {
|
async fn perform(&self, context: &Data<LemmyContext>) -> Result<Self::Response, LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
let data = self;
|
let data = self;
|
||||||
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
||||||
let local_site = LocalSite::read(&mut conn).await?;
|
let local_site = LocalSite::read(&mut *context.conn().await?).await?;
|
||||||
|
|
||||||
// Only let admins do this
|
// Only let admins do this
|
||||||
is_admin(&local_user_view)?;
|
is_admin(&local_user_view)?;
|
||||||
|
|
||||||
let verified_email_only = local_site.require_email_verification;
|
let verified_email_only = local_site.require_email_verification;
|
||||||
|
|
||||||
let registration_applications =
|
let registration_applications = RegistrationApplicationView::get_unread_count(
|
||||||
RegistrationApplicationView::get_unread_count(&mut conn, verified_email_only).await?;
|
&mut *context.conn().await?,
|
||||||
|
verified_email_only,
|
||||||
|
)
|
||||||
|
.await?;
|
||||||
|
|
||||||
Ok(Self::Response {
|
Ok(Self::Response {
|
||||||
registration_applications,
|
registration_applications,
|
||||||
|
|
|
@ -29,10 +29,8 @@ pub async fn build_comment_response(
|
||||||
form_id: Option<String>,
|
form_id: Option<String>,
|
||||||
recipient_ids: Vec<LocalUserId>,
|
recipient_ids: Vec<LocalUserId>,
|
||||||
) -> Result<CommentResponse, LemmyError> {
|
) -> Result<CommentResponse, LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
|
|
||||||
let person_id = local_user_view.map(|l| l.person.id);
|
let person_id = local_user_view.map(|l| l.person.id);
|
||||||
let comment_view = CommentView::read(&mut conn, comment_id, person_id).await?;
|
let comment_view = CommentView::read(&mut *context.conn().await?, comment_id, person_id).await?;
|
||||||
Ok(CommentResponse {
|
Ok(CommentResponse {
|
||||||
comment_view,
|
comment_view,
|
||||||
recipient_ids,
|
recipient_ids,
|
||||||
|
@ -45,20 +43,23 @@ pub async fn build_community_response(
|
||||||
local_user_view: LocalUserView,
|
local_user_view: LocalUserView,
|
||||||
community_id: CommunityId,
|
community_id: CommunityId,
|
||||||
) -> Result<CommunityResponse, LemmyError> {
|
) -> Result<CommunityResponse, LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
let is_mod_or_admin = is_mod_or_admin(
|
||||||
|
&mut *context.conn().await?,
|
||||||
let is_mod_or_admin = is_mod_or_admin(&mut conn, local_user_view.person.id, community_id)
|
local_user_view.person.id,
|
||||||
.await
|
community_id,
|
||||||
.is_ok();
|
)
|
||||||
|
.await
|
||||||
|
.is_ok();
|
||||||
let person_id = local_user_view.person.id;
|
let person_id = local_user_view.person.id;
|
||||||
let community_view = CommunityView::read(
|
let community_view = CommunityView::read(
|
||||||
&mut conn,
|
&mut *context.conn().await?,
|
||||||
community_id,
|
community_id,
|
||||||
Some(person_id),
|
Some(person_id),
|
||||||
Some(is_mod_or_admin),
|
Some(is_mod_or_admin),
|
||||||
)
|
)
|
||||||
.await?;
|
.await?;
|
||||||
let discussion_languages = CommunityLanguage::read(&mut conn, community_id).await?;
|
let discussion_languages =
|
||||||
|
CommunityLanguage::read(&mut *context.conn().await?, community_id).await?;
|
||||||
|
|
||||||
Ok(CommunityResponse {
|
Ok(CommunityResponse {
|
||||||
community_view,
|
community_view,
|
||||||
|
@ -72,13 +73,16 @@ pub async fn build_post_response(
|
||||||
person_id: PersonId,
|
person_id: PersonId,
|
||||||
post_id: PostId,
|
post_id: PostId,
|
||||||
) -> Result<PostResponse, LemmyError> {
|
) -> Result<PostResponse, LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
let is_mod_or_admin = is_mod_or_admin(&mut *context.conn().await?, person_id, community_id)
|
||||||
|
|
||||||
let is_mod_or_admin = is_mod_or_admin(&mut conn, person_id, community_id)
|
|
||||||
.await
|
.await
|
||||||
.is_ok();
|
.is_ok();
|
||||||
let post_view =
|
let post_view = PostView::read(
|
||||||
PostView::read(&mut conn, post_id, Some(person_id), Some(is_mod_or_admin)).await?;
|
&mut *context.conn().await?,
|
||||||
|
post_id,
|
||||||
|
Some(person_id),
|
||||||
|
Some(is_mod_or_admin),
|
||||||
|
)
|
||||||
|
.await?;
|
||||||
Ok(PostResponse { post_view })
|
Ok(PostResponse { post_view })
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -92,8 +96,6 @@ pub async fn send_local_notifs(
|
||||||
do_send_email: bool,
|
do_send_email: bool,
|
||||||
context: &LemmyContext,
|
context: &LemmyContext,
|
||||||
) -> Result<Vec<LocalUserId>, LemmyError> {
|
) -> Result<Vec<LocalUserId>, LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
|
|
||||||
let mut recipient_ids = Vec::new();
|
let mut recipient_ids = Vec::new();
|
||||||
let inbox_link = format!("{}/inbox", context.settings().get_protocol_and_hostname());
|
let inbox_link = format!("{}/inbox", context.settings().get_protocol_and_hostname());
|
||||||
|
|
||||||
|
@ -103,7 +105,7 @@ pub async fn send_local_notifs(
|
||||||
.filter(|m| m.is_local(&context.settings().hostname) && m.name.ne(&person.name))
|
.filter(|m| m.is_local(&context.settings().hostname) && m.name.ne(&person.name))
|
||||||
{
|
{
|
||||||
let mention_name = mention.name.clone();
|
let mention_name = mention.name.clone();
|
||||||
let user_view = LocalUserView::read_from_name(&mut conn, &mention_name).await;
|
let user_view = LocalUserView::read_from_name(&mut *context.conn().await?, &mention_name).await;
|
||||||
if let Ok(mention_user_view) = user_view {
|
if let Ok(mention_user_view) = user_view {
|
||||||
// TODO
|
// TODO
|
||||||
// At some point, make it so you can't tag the parent creator either
|
// At some point, make it so you can't tag the parent creator either
|
||||||
|
@ -118,7 +120,7 @@ pub async fn send_local_notifs(
|
||||||
|
|
||||||
// Allow this to fail softly, since comment edits might re-update or replace it
|
// Allow this to fail softly, since comment edits might re-update or replace it
|
||||||
// Let the uniqueness handle this fail
|
// Let the uniqueness handle this fail
|
||||||
PersonMention::create(&mut conn, &user_mention_form)
|
PersonMention::create(&mut *context.conn().await?, &user_mention_form)
|
||||||
.await
|
.await
|
||||||
.ok();
|
.ok();
|
||||||
|
|
||||||
|
@ -137,19 +139,21 @@ pub async fn send_local_notifs(
|
||||||
|
|
||||||
// Send comment_reply to the parent commenter / poster
|
// Send comment_reply to the parent commenter / poster
|
||||||
if let Some(parent_comment_id) = comment.parent_comment_id() {
|
if let Some(parent_comment_id) = comment.parent_comment_id() {
|
||||||
let parent_comment = Comment::read(&mut conn, parent_comment_id).await?;
|
let parent_comment = Comment::read(&mut *context.conn().await?, parent_comment_id).await?;
|
||||||
|
|
||||||
// Get the parent commenter local_user
|
// Get the parent commenter local_user
|
||||||
let parent_creator_id = parent_comment.creator_id;
|
let parent_creator_id = parent_comment.creator_id;
|
||||||
|
|
||||||
// Only add to recipients if that person isn't blocked
|
// Only add to recipients if that person isn't blocked
|
||||||
let creator_blocked = check_person_block(person.id, parent_creator_id, &mut conn)
|
let creator_blocked =
|
||||||
.await
|
check_person_block(person.id, parent_creator_id, &mut *context.conn().await?)
|
||||||
.is_err();
|
.await
|
||||||
|
.is_err();
|
||||||
|
|
||||||
// Don't send a notif to yourself
|
// Don't send a notif to yourself
|
||||||
if parent_comment.creator_id != person.id && !creator_blocked {
|
if parent_comment.creator_id != person.id && !creator_blocked {
|
||||||
let user_view = LocalUserView::read_person(&mut conn, parent_creator_id).await;
|
let user_view =
|
||||||
|
LocalUserView::read_person(&mut *context.conn().await?, parent_creator_id).await;
|
||||||
if let Ok(parent_user_view) = user_view {
|
if let Ok(parent_user_view) = user_view {
|
||||||
recipient_ids.push(parent_user_view.local_user.id);
|
recipient_ids.push(parent_user_view.local_user.id);
|
||||||
|
|
||||||
|
@ -161,7 +165,7 @@ pub async fn send_local_notifs(
|
||||||
|
|
||||||
// Allow this to fail softly, since comment edits might re-update or replace it
|
// Allow this to fail softly, since comment edits might re-update or replace it
|
||||||
// Let the uniqueness handle this fail
|
// Let the uniqueness handle this fail
|
||||||
CommentReply::create(&mut conn, &comment_reply_form)
|
CommentReply::create(&mut *context.conn().await?, &comment_reply_form)
|
||||||
.await
|
.await
|
||||||
.ok();
|
.ok();
|
||||||
|
|
||||||
|
@ -179,13 +183,14 @@ pub async fn send_local_notifs(
|
||||||
} else {
|
} else {
|
||||||
// If there's no parent, its the post creator
|
// If there's no parent, its the post creator
|
||||||
// Only add to recipients if that person isn't blocked
|
// Only add to recipients if that person isn't blocked
|
||||||
let creator_blocked = check_person_block(person.id, post.creator_id, &mut conn)
|
let creator_blocked =
|
||||||
.await
|
check_person_block(person.id, post.creator_id, &mut *context.conn().await?)
|
||||||
.is_err();
|
.await
|
||||||
|
.is_err();
|
||||||
|
|
||||||
if post.creator_id != person.id && !creator_blocked {
|
if post.creator_id != person.id && !creator_blocked {
|
||||||
let creator_id = post.creator_id;
|
let creator_id = post.creator_id;
|
||||||
let parent_user = LocalUserView::read_person(&mut conn, creator_id).await;
|
let parent_user = LocalUserView::read_person(&mut *context.conn().await?, creator_id).await;
|
||||||
if let Ok(parent_user_view) = parent_user {
|
if let Ok(parent_user_view) = parent_user {
|
||||||
recipient_ids.push(parent_user_view.local_user.id);
|
recipient_ids.push(parent_user_view.local_user.id);
|
||||||
|
|
||||||
|
@ -197,7 +202,7 @@ pub async fn send_local_notifs(
|
||||||
|
|
||||||
// Allow this to fail softly, since comment edits might re-update or replace it
|
// Allow this to fail softly, since comment edits might re-update or replace it
|
||||||
// Let the uniqueness handle this fail
|
// Let the uniqueness handle this fail
|
||||||
CommentReply::create(&mut conn, &comment_reply_form)
|
CommentReply::create(&mut *context.conn().await?, &comment_reply_form)
|
||||||
.await
|
.await
|
||||||
.ok();
|
.ok();
|
||||||
|
|
||||||
|
|
|
@ -138,12 +138,11 @@ pub async fn local_user_view_from_jwt(
|
||||||
jwt: &str,
|
jwt: &str,
|
||||||
context: &LemmyContext,
|
context: &LemmyContext,
|
||||||
) -> Result<LocalUserView, LemmyError> {
|
) -> Result<LocalUserView, LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
let claims = Claims::decode(jwt, &context.secret().jwt_secret)
|
let claims = Claims::decode(jwt, &context.secret().jwt_secret)
|
||||||
.map_err(|e| e.with_message("not_logged_in"))?
|
.map_err(|e| e.with_message("not_logged_in"))?
|
||||||
.claims;
|
.claims;
|
||||||
let local_user_id = LocalUserId(claims.sub);
|
let local_user_id = LocalUserId(claims.sub);
|
||||||
let local_user_view = LocalUserView::read(&mut conn, local_user_id).await?;
|
let local_user_view = LocalUserView::read(&mut *context.conn().await?, local_user_id).await?;
|
||||||
check_user_valid(
|
check_user_valid(
|
||||||
local_user_view.person.banned,
|
local_user_view.person.banned,
|
||||||
local_user_view.person.ban_expires,
|
local_user_view.person.ban_expires,
|
||||||
|
|
|
@ -41,10 +41,9 @@ impl PerformCrud for CreateComment {
|
||||||
|
|
||||||
#[tracing::instrument(skip(context))]
|
#[tracing::instrument(skip(context))]
|
||||||
async fn perform(&self, context: &Data<LemmyContext>) -> Result<CommentResponse, LemmyError> {
|
async fn perform(&self, context: &Data<LemmyContext>) -> Result<CommentResponse, LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
let data: &CreateComment = self;
|
let data: &CreateComment = self;
|
||||||
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
||||||
let local_site = LocalSite::read(&mut conn).await?;
|
let local_site = LocalSite::read(&mut *context.conn().await?).await?;
|
||||||
|
|
||||||
let content_slurs_removed = remove_slurs(
|
let content_slurs_removed = remove_slurs(
|
||||||
&data.content.clone(),
|
&data.content.clone(),
|
||||||
|
@ -54,11 +53,16 @@ impl PerformCrud for CreateComment {
|
||||||
|
|
||||||
// Check for a community ban
|
// Check for a community ban
|
||||||
let post_id = data.post_id;
|
let post_id = data.post_id;
|
||||||
let post = get_post(post_id, &mut conn).await?;
|
let post = get_post(post_id, &mut *context.conn().await?).await?;
|
||||||
let community_id = post.community_id;
|
let community_id = post.community_id;
|
||||||
|
|
||||||
check_community_ban(local_user_view.person.id, community_id, &mut conn).await?;
|
check_community_ban(
|
||||||
check_community_deleted_or_removed(community_id, &mut conn).await?;
|
local_user_view.person.id,
|
||||||
|
community_id,
|
||||||
|
&mut *context.conn().await?,
|
||||||
|
)
|
||||||
|
.await?;
|
||||||
|
check_community_deleted_or_removed(community_id, &mut *context.conn().await?).await?;
|
||||||
check_post_deleted_or_removed(&post)?;
|
check_post_deleted_or_removed(&post)?;
|
||||||
|
|
||||||
// Check if post is locked, no new comments
|
// Check if post is locked, no new comments
|
||||||
|
@ -68,7 +72,9 @@ impl PerformCrud for CreateComment {
|
||||||
|
|
||||||
// Fetch the parent, if it exists
|
// Fetch the parent, if it exists
|
||||||
let parent_opt = if let Some(parent_id) = data.parent_id {
|
let parent_opt = if let Some(parent_id) = data.parent_id {
|
||||||
Comment::read(&mut conn, parent_id).await.ok()
|
Comment::read(&mut *context.conn().await?, parent_id)
|
||||||
|
.await
|
||||||
|
.ok()
|
||||||
} else {
|
} else {
|
||||||
None
|
None
|
||||||
};
|
};
|
||||||
|
@ -89,8 +95,12 @@ impl PerformCrud for CreateComment {
|
||||||
.unwrap_or(post.language_id);
|
.unwrap_or(post.language_id);
|
||||||
let language_id = data.language_id.unwrap_or(parent_language);
|
let language_id = data.language_id.unwrap_or(parent_language);
|
||||||
|
|
||||||
CommunityLanguage::is_allowed_community_language(&mut conn, Some(language_id), community_id)
|
CommunityLanguage::is_allowed_community_language(
|
||||||
.await?;
|
&mut *context.conn().await?,
|
||||||
|
Some(language_id),
|
||||||
|
community_id,
|
||||||
|
)
|
||||||
|
.await?;
|
||||||
|
|
||||||
let comment_form = CommentInsertForm::builder()
|
let comment_form = CommentInsertForm::builder()
|
||||||
.content(content_slurs_removed.clone())
|
.content(content_slurs_removed.clone())
|
||||||
|
@ -101,9 +111,13 @@ impl PerformCrud for CreateComment {
|
||||||
|
|
||||||
// Create the comment
|
// Create the comment
|
||||||
let parent_path = parent_opt.clone().map(|t| t.path);
|
let parent_path = parent_opt.clone().map(|t| t.path);
|
||||||
let inserted_comment = Comment::create(&mut conn, &comment_form, parent_path.as_ref())
|
let inserted_comment = Comment::create(
|
||||||
.await
|
&mut *context.conn().await?,
|
||||||
.map_err(|e| LemmyError::from_error_message(e, "couldnt_create_comment"))?;
|
&comment_form,
|
||||||
|
parent_path.as_ref(),
|
||||||
|
)
|
||||||
|
.await
|
||||||
|
.map_err(|e| LemmyError::from_error_message(e, "couldnt_create_comment"))?;
|
||||||
|
|
||||||
// Necessary to update the ap_id
|
// Necessary to update the ap_id
|
||||||
let inserted_comment_id = inserted_comment.id;
|
let inserted_comment_id = inserted_comment.id;
|
||||||
|
@ -115,7 +129,7 @@ impl PerformCrud for CreateComment {
|
||||||
&protocol_and_hostname,
|
&protocol_and_hostname,
|
||||||
)?;
|
)?;
|
||||||
let updated_comment = Comment::update(
|
let updated_comment = Comment::update(
|
||||||
&mut conn,
|
&mut *context.conn().await?,
|
||||||
inserted_comment_id,
|
inserted_comment_id,
|
||||||
&CommentUpdateForm::builder().ap_id(Some(apub_id)).build(),
|
&CommentUpdateForm::builder().ap_id(Some(apub_id)).build(),
|
||||||
)
|
)
|
||||||
|
@ -142,17 +156,18 @@ impl PerformCrud for CreateComment {
|
||||||
score: 1,
|
score: 1,
|
||||||
};
|
};
|
||||||
|
|
||||||
CommentLike::like(&mut conn, &like_form)
|
CommentLike::like(&mut *context.conn().await?, &like_form)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| LemmyError::from_error_message(e, "couldnt_like_comment"))?;
|
.map_err(|e| LemmyError::from_error_message(e, "couldnt_like_comment"))?;
|
||||||
|
|
||||||
// If its a reply, mark the parent as read
|
// If its a reply, mark the parent as read
|
||||||
if let Some(parent) = parent_opt {
|
if let Some(parent) = parent_opt {
|
||||||
let parent_id = parent.id;
|
let parent_id = parent.id;
|
||||||
let comment_reply = CommentReply::read_by_comment(&mut conn, parent_id).await;
|
let comment_reply =
|
||||||
|
CommentReply::read_by_comment(&mut *context.conn().await?, parent_id).await;
|
||||||
if let Ok(reply) = comment_reply {
|
if let Ok(reply) = comment_reply {
|
||||||
CommentReply::update(
|
CommentReply::update(
|
||||||
&mut conn,
|
&mut *context.conn().await?,
|
||||||
reply.id,
|
reply.id,
|
||||||
&CommentReplyUpdateForm { read: Some(true) },
|
&CommentReplyUpdateForm { read: Some(true) },
|
||||||
)
|
)
|
||||||
|
@ -162,11 +177,15 @@ impl PerformCrud for CreateComment {
|
||||||
|
|
||||||
// If the parent has PersonMentions mark them as read too
|
// If the parent has PersonMentions mark them as read too
|
||||||
let person_id = local_user_view.person.id;
|
let person_id = local_user_view.person.id;
|
||||||
let person_mention =
|
let person_mention = PersonMention::read_by_comment_and_person(
|
||||||
PersonMention::read_by_comment_and_person(&mut conn, parent_id, person_id).await;
|
&mut *context.conn().await?,
|
||||||
|
parent_id,
|
||||||
|
person_id,
|
||||||
|
)
|
||||||
|
.await;
|
||||||
if let Ok(mention) = person_mention {
|
if let Ok(mention) = person_mention {
|
||||||
PersonMention::update(
|
PersonMention::update(
|
||||||
&mut conn,
|
&mut *context.conn().await?,
|
||||||
mention.id,
|
mention.id,
|
||||||
&PersonMentionUpdateForm { read: Some(true) },
|
&PersonMentionUpdateForm { read: Some(true) },
|
||||||
)
|
)
|
||||||
|
|
|
@ -22,12 +22,11 @@ impl PerformCrud for DeleteComment {
|
||||||
|
|
||||||
#[tracing::instrument(skip(context))]
|
#[tracing::instrument(skip(context))]
|
||||||
async fn perform(&self, context: &Data<LemmyContext>) -> Result<CommentResponse, LemmyError> {
|
async fn perform(&self, context: &Data<LemmyContext>) -> Result<CommentResponse, LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
let data: &DeleteComment = self;
|
let data: &DeleteComment = self;
|
||||||
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
||||||
|
|
||||||
let comment_id = data.comment_id;
|
let comment_id = data.comment_id;
|
||||||
let orig_comment = CommentView::read(&mut conn, comment_id, None).await?;
|
let orig_comment = CommentView::read(&mut *context.conn().await?, comment_id, None).await?;
|
||||||
|
|
||||||
// Dont delete it if its already been deleted.
|
// Dont delete it if its already been deleted.
|
||||||
if orig_comment.comment.deleted == data.deleted {
|
if orig_comment.comment.deleted == data.deleted {
|
||||||
|
@ -37,7 +36,7 @@ impl PerformCrud for DeleteComment {
|
||||||
check_community_ban(
|
check_community_ban(
|
||||||
local_user_view.person.id,
|
local_user_view.person.id,
|
||||||
orig_comment.community.id,
|
orig_comment.community.id,
|
||||||
&mut conn,
|
&mut *context.conn().await?,
|
||||||
)
|
)
|
||||||
.await?;
|
.await?;
|
||||||
|
|
||||||
|
@ -49,7 +48,7 @@ impl PerformCrud for DeleteComment {
|
||||||
// Do the delete
|
// Do the delete
|
||||||
let deleted = data.deleted;
|
let deleted = data.deleted;
|
||||||
let updated_comment = Comment::update(
|
let updated_comment = Comment::update(
|
||||||
&mut conn,
|
&mut *context.conn().await?,
|
||||||
comment_id,
|
comment_id,
|
||||||
&CommentUpdateForm::builder().deleted(Some(deleted)).build(),
|
&CommentUpdateForm::builder().deleted(Some(deleted)).build(),
|
||||||
)
|
)
|
||||||
|
@ -57,7 +56,7 @@ impl PerformCrud for DeleteComment {
|
||||||
.map_err(|e| LemmyError::from_error_message(e, "couldnt_update_comment"))?;
|
.map_err(|e| LemmyError::from_error_message(e, "couldnt_update_comment"))?;
|
||||||
|
|
||||||
let post_id = updated_comment.post_id;
|
let post_id = updated_comment.post_id;
|
||||||
let post = Post::read(&mut conn, post_id).await?;
|
let post = Post::read(&mut *context.conn().await?, post_id).await?;
|
||||||
let recipient_ids = send_local_notifs(
|
let recipient_ids = send_local_notifs(
|
||||||
vec![],
|
vec![],
|
||||||
&updated_comment,
|
&updated_comment,
|
||||||
|
|
|
@ -15,10 +15,9 @@ impl PerformCrud for GetComment {
|
||||||
|
|
||||||
#[tracing::instrument(skip(context))]
|
#[tracing::instrument(skip(context))]
|
||||||
async fn perform(&self, context: &Data<LemmyContext>) -> Result<Self::Response, LemmyError> {
|
async fn perform(&self, context: &Data<LemmyContext>) -> Result<Self::Response, LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
let data = self;
|
let data = self;
|
||||||
let local_user_view = local_user_view_from_jwt_opt(data.auth.as_ref(), context).await;
|
let local_user_view = local_user_view_from_jwt_opt(data.auth.as_ref(), context).await;
|
||||||
let local_site = LocalSite::read(&mut conn).await?;
|
let local_site = LocalSite::read(&mut *context.conn().await?).await?;
|
||||||
|
|
||||||
check_private_instance(&local_user_view, &local_site)?;
|
check_private_instance(&local_user_view, &local_site)?;
|
||||||
|
|
||||||
|
|
|
@ -23,23 +23,22 @@ impl PerformCrud for RemoveComment {
|
||||||
|
|
||||||
#[tracing::instrument(skip(context))]
|
#[tracing::instrument(skip(context))]
|
||||||
async fn perform(&self, context: &Data<LemmyContext>) -> Result<CommentResponse, LemmyError> {
|
async fn perform(&self, context: &Data<LemmyContext>) -> Result<CommentResponse, LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
let data: &RemoveComment = self;
|
let data: &RemoveComment = self;
|
||||||
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
||||||
|
|
||||||
let comment_id = data.comment_id;
|
let comment_id = data.comment_id;
|
||||||
let orig_comment = CommentView::read(&mut conn, comment_id, None).await?;
|
let orig_comment = CommentView::read(&mut *context.conn().await?, comment_id, None).await?;
|
||||||
|
|
||||||
check_community_ban(
|
check_community_ban(
|
||||||
local_user_view.person.id,
|
local_user_view.person.id,
|
||||||
orig_comment.community.id,
|
orig_comment.community.id,
|
||||||
&mut conn,
|
&mut *context.conn().await?,
|
||||||
)
|
)
|
||||||
.await?;
|
.await?;
|
||||||
|
|
||||||
// Verify that only a mod or admin can remove
|
// Verify that only a mod or admin can remove
|
||||||
is_mod_or_admin(
|
is_mod_or_admin(
|
||||||
&mut conn,
|
&mut *context.conn().await?,
|
||||||
local_user_view.person.id,
|
local_user_view.person.id,
|
||||||
orig_comment.community.id,
|
orig_comment.community.id,
|
||||||
)
|
)
|
||||||
|
@ -48,7 +47,7 @@ impl PerformCrud for RemoveComment {
|
||||||
// Do the remove
|
// Do the remove
|
||||||
let removed = data.removed;
|
let removed = data.removed;
|
||||||
let updated_comment = Comment::update(
|
let updated_comment = Comment::update(
|
||||||
&mut conn,
|
&mut *context.conn().await?,
|
||||||
comment_id,
|
comment_id,
|
||||||
&CommentUpdateForm::builder().removed(Some(removed)).build(),
|
&CommentUpdateForm::builder().removed(Some(removed)).build(),
|
||||||
)
|
)
|
||||||
|
@ -62,10 +61,10 @@ impl PerformCrud for RemoveComment {
|
||||||
removed: Some(removed),
|
removed: Some(removed),
|
||||||
reason: data.reason.clone(),
|
reason: data.reason.clone(),
|
||||||
};
|
};
|
||||||
ModRemoveComment::create(&mut conn, &form).await?;
|
ModRemoveComment::create(&mut *context.conn().await?, &form).await?;
|
||||||
|
|
||||||
let post_id = updated_comment.post_id;
|
let post_id = updated_comment.post_id;
|
||||||
let post = Post::read(&mut conn, post_id).await?;
|
let post = Post::read(&mut *context.conn().await?, post_id).await?;
|
||||||
let recipient_ids = send_local_notifs(
|
let recipient_ids = send_local_notifs(
|
||||||
vec![],
|
vec![],
|
||||||
&updated_comment,
|
&updated_comment,
|
||||||
|
|
|
@ -31,18 +31,17 @@ impl PerformCrud for EditComment {
|
||||||
|
|
||||||
#[tracing::instrument(skip(context))]
|
#[tracing::instrument(skip(context))]
|
||||||
async fn perform(&self, context: &Data<LemmyContext>) -> Result<CommentResponse, LemmyError> {
|
async fn perform(&self, context: &Data<LemmyContext>) -> Result<CommentResponse, LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
let data: &EditComment = self;
|
let data: &EditComment = self;
|
||||||
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
||||||
let local_site = LocalSite::read(&mut conn).await?;
|
let local_site = LocalSite::read(&mut *context.conn().await?).await?;
|
||||||
|
|
||||||
let comment_id = data.comment_id;
|
let comment_id = data.comment_id;
|
||||||
let orig_comment = CommentView::read(&mut conn, comment_id, None).await?;
|
let orig_comment = CommentView::read(&mut *context.conn().await?, comment_id, None).await?;
|
||||||
|
|
||||||
check_community_ban(
|
check_community_ban(
|
||||||
local_user_view.person.id,
|
local_user_view.person.id,
|
||||||
orig_comment.community.id,
|
orig_comment.community.id,
|
||||||
&mut conn,
|
&mut *context.conn().await?,
|
||||||
)
|
)
|
||||||
.await?;
|
.await?;
|
||||||
|
|
||||||
|
@ -53,7 +52,7 @@ impl PerformCrud for EditComment {
|
||||||
|
|
||||||
let language_id = self.language_id;
|
let language_id = self.language_id;
|
||||||
CommunityLanguage::is_allowed_community_language(
|
CommunityLanguage::is_allowed_community_language(
|
||||||
&mut conn,
|
&mut *context.conn().await?,
|
||||||
language_id,
|
language_id,
|
||||||
orig_comment.community.id,
|
orig_comment.community.id,
|
||||||
)
|
)
|
||||||
|
@ -73,7 +72,7 @@ impl PerformCrud for EditComment {
|
||||||
.language_id(data.language_id)
|
.language_id(data.language_id)
|
||||||
.updated(Some(Some(naive_now())))
|
.updated(Some(Some(naive_now())))
|
||||||
.build();
|
.build();
|
||||||
let updated_comment = Comment::update(&mut conn, comment_id, &form)
|
let updated_comment = Comment::update(&mut *context.conn().await?, comment_id, &form)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| LemmyError::from_error_message(e, "couldnt_update_comment"))?;
|
.map_err(|e| LemmyError::from_error_message(e, "couldnt_update_comment"))?;
|
||||||
|
|
||||||
|
|
|
@ -46,10 +46,9 @@ impl PerformCrud for CreateCommunity {
|
||||||
|
|
||||||
#[tracing::instrument(skip(context))]
|
#[tracing::instrument(skip(context))]
|
||||||
async fn perform(&self, context: &Data<LemmyContext>) -> Result<CommunityResponse, LemmyError> {
|
async fn perform(&self, context: &Data<LemmyContext>) -> Result<CommunityResponse, LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
let data: &CreateCommunity = self;
|
let data: &CreateCommunity = self;
|
||||||
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
||||||
let site_view = SiteView::read_local(&mut conn).await?;
|
let site_view = SiteView::read_local(&mut *context.conn().await?).await?;
|
||||||
let local_site = site_view.local_site;
|
let local_site = site_view.local_site;
|
||||||
|
|
||||||
if local_site.community_creation_admin_only && is_admin(&local_user_view).is_err() {
|
if local_site.community_creation_admin_only && is_admin(&local_user_view).is_err() {
|
||||||
|
@ -76,7 +75,8 @@ impl PerformCrud for CreateCommunity {
|
||||||
&data.name,
|
&data.name,
|
||||||
&context.settings().get_protocol_and_hostname(),
|
&context.settings().get_protocol_and_hostname(),
|
||||||
)?;
|
)?;
|
||||||
let community_dupe = Community::read_from_apub_id(&mut conn, &community_actor_id).await?;
|
let community_dupe =
|
||||||
|
Community::read_from_apub_id(&mut *context.conn().await?, &community_actor_id).await?;
|
||||||
if community_dupe.is_some() {
|
if community_dupe.is_some() {
|
||||||
return Err(LemmyError::from_message("community_already_exists"));
|
return Err(LemmyError::from_message("community_already_exists"));
|
||||||
}
|
}
|
||||||
|
@ -101,7 +101,7 @@ impl PerformCrud for CreateCommunity {
|
||||||
.instance_id(site_view.site.instance_id)
|
.instance_id(site_view.site.instance_id)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
let inserted_community = Community::create(&mut conn, &community_form)
|
let inserted_community = Community::create(&mut *context.conn().await?, &community_form)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| LemmyError::from_error_message(e, "community_already_exists"))?;
|
.map_err(|e| LemmyError::from_error_message(e, "community_already_exists"))?;
|
||||||
|
|
||||||
|
@ -111,7 +111,7 @@ impl PerformCrud for CreateCommunity {
|
||||||
person_id: local_user_view.person.id,
|
person_id: local_user_view.person.id,
|
||||||
};
|
};
|
||||||
|
|
||||||
CommunityModerator::join(&mut conn, &community_moderator_form)
|
CommunityModerator::join(&mut *context.conn().await?, &community_moderator_form)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| LemmyError::from_error_message(e, "community_moderator_already_exists"))?;
|
.map_err(|e| LemmyError::from_error_message(e, "community_moderator_already_exists"))?;
|
||||||
|
|
||||||
|
@ -122,21 +122,21 @@ impl PerformCrud for CreateCommunity {
|
||||||
pending: false,
|
pending: false,
|
||||||
};
|
};
|
||||||
|
|
||||||
CommunityFollower::follow(&mut conn, &community_follower_form)
|
CommunityFollower::follow(&mut *context.conn().await?, &community_follower_form)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| LemmyError::from_error_message(e, "community_follower_already_exists"))?;
|
.map_err(|e| LemmyError::from_error_message(e, "community_follower_already_exists"))?;
|
||||||
|
|
||||||
// Update the discussion_languages if that's provided
|
// Update the discussion_languages if that's provided
|
||||||
let community_id = inserted_community.id;
|
let community_id = inserted_community.id;
|
||||||
if let Some(languages) = data.discussion_languages.clone() {
|
if let Some(languages) = data.discussion_languages.clone() {
|
||||||
let site_languages = SiteLanguage::read_local_raw(&mut conn).await?;
|
let site_languages = SiteLanguage::read_local_raw(&mut *context.conn().await?).await?;
|
||||||
// check that community languages are a subset of site languages
|
// check that community languages are a subset of site languages
|
||||||
// https://stackoverflow.com/a/64227550
|
// https://stackoverflow.com/a/64227550
|
||||||
let is_subset = languages.iter().all(|item| site_languages.contains(item));
|
let is_subset = languages.iter().all(|item| site_languages.contains(item));
|
||||||
if !is_subset {
|
if !is_subset {
|
||||||
return Err(LemmyError::from_message("language_not_allowed"));
|
return Err(LemmyError::from_message("language_not_allowed"));
|
||||||
}
|
}
|
||||||
CommunityLanguage::update(&mut conn, languages, community_id).await?;
|
CommunityLanguage::update(&mut *context.conn().await?, languages, community_id).await?;
|
||||||
}
|
}
|
||||||
|
|
||||||
build_community_response(context, local_user_view, community_id).await
|
build_community_response(context, local_user_view, community_id).await
|
||||||
|
|
|
@ -19,13 +19,13 @@ impl PerformCrud for DeleteCommunity {
|
||||||
|
|
||||||
#[tracing::instrument(skip(context))]
|
#[tracing::instrument(skip(context))]
|
||||||
async fn perform(&self, context: &Data<LemmyContext>) -> Result<CommunityResponse, LemmyError> {
|
async fn perform(&self, context: &Data<LemmyContext>) -> Result<CommunityResponse, LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
let data: &DeleteCommunity = self;
|
let data: &DeleteCommunity = self;
|
||||||
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
||||||
|
|
||||||
// Fetch the community mods
|
// Fetch the community mods
|
||||||
let community_id = data.community_id;
|
let community_id = data.community_id;
|
||||||
let community_mods = CommunityModeratorView::for_community(&mut conn, community_id).await?;
|
let community_mods =
|
||||||
|
CommunityModeratorView::for_community(&mut *context.conn().await?, community_id).await?;
|
||||||
|
|
||||||
// Make sure deleter is the top mod
|
// Make sure deleter is the top mod
|
||||||
is_top_mod(&local_user_view, &community_mods)?;
|
is_top_mod(&local_user_view, &community_mods)?;
|
||||||
|
@ -34,7 +34,7 @@ impl PerformCrud for DeleteCommunity {
|
||||||
let community_id = data.community_id;
|
let community_id = data.community_id;
|
||||||
let deleted = data.deleted;
|
let deleted = data.deleted;
|
||||||
Community::update(
|
Community::update(
|
||||||
&mut conn,
|
&mut *context.conn().await?,
|
||||||
community_id,
|
community_id,
|
||||||
&CommunityUpdateForm::builder()
|
&CommunityUpdateForm::builder()
|
||||||
.deleted(Some(deleted))
|
.deleted(Some(deleted))
|
||||||
|
|
|
@ -18,10 +18,9 @@ impl PerformCrud for ListCommunities {
|
||||||
&self,
|
&self,
|
||||||
context: &Data<LemmyContext>,
|
context: &Data<LemmyContext>,
|
||||||
) -> Result<ListCommunitiesResponse, LemmyError> {
|
) -> Result<ListCommunitiesResponse, LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
let data: &ListCommunities = self;
|
let data: &ListCommunities = self;
|
||||||
let local_user_view = local_user_view_from_jwt_opt(data.auth.as_ref(), context).await;
|
let local_user_view = local_user_view_from_jwt_opt(data.auth.as_ref(), context).await;
|
||||||
let local_site = LocalSite::read(&mut conn).await?;
|
let local_site = LocalSite::read(&mut *context.conn().await?).await?;
|
||||||
let is_admin = local_user_view.as_ref().map(|luv| is_admin(luv).is_ok());
|
let is_admin = local_user_view.as_ref().map(|luv| is_admin(luv).is_ok());
|
||||||
|
|
||||||
check_private_instance(&local_user_view, &local_site)?;
|
check_private_instance(&local_user_view, &local_site)?;
|
||||||
|
|
|
@ -21,7 +21,6 @@ impl PerformCrud for RemoveCommunity {
|
||||||
|
|
||||||
#[tracing::instrument(skip(context))]
|
#[tracing::instrument(skip(context))]
|
||||||
async fn perform(&self, context: &Data<LemmyContext>) -> Result<CommunityResponse, LemmyError> {
|
async fn perform(&self, context: &Data<LemmyContext>) -> Result<CommunityResponse, LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
let data: &RemoveCommunity = self;
|
let data: &RemoveCommunity = self;
|
||||||
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
||||||
|
|
||||||
|
@ -32,7 +31,7 @@ impl PerformCrud for RemoveCommunity {
|
||||||
let community_id = data.community_id;
|
let community_id = data.community_id;
|
||||||
let removed = data.removed;
|
let removed = data.removed;
|
||||||
Community::update(
|
Community::update(
|
||||||
&mut conn,
|
&mut *context.conn().await?,
|
||||||
community_id,
|
community_id,
|
||||||
&CommunityUpdateForm::builder()
|
&CommunityUpdateForm::builder()
|
||||||
.removed(Some(removed))
|
.removed(Some(removed))
|
||||||
|
@ -50,7 +49,7 @@ impl PerformCrud for RemoveCommunity {
|
||||||
reason: data.reason.clone(),
|
reason: data.reason.clone(),
|
||||||
expires,
|
expires,
|
||||||
};
|
};
|
||||||
ModRemoveCommunity::create(&mut conn, &form).await?;
|
ModRemoveCommunity::create(&mut *context.conn().await?, &form).await?;
|
||||||
|
|
||||||
build_community_response(context, local_user_view, community_id).await
|
build_community_response(context, local_user_view, community_id).await
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,10 +28,9 @@ impl PerformCrud for EditCommunity {
|
||||||
|
|
||||||
#[tracing::instrument(skip(context))]
|
#[tracing::instrument(skip(context))]
|
||||||
async fn perform(&self, context: &Data<LemmyContext>) -> Result<CommunityResponse, LemmyError> {
|
async fn perform(&self, context: &Data<LemmyContext>) -> Result<CommunityResponse, LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
let data: &EditCommunity = self;
|
let data: &EditCommunity = self;
|
||||||
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
||||||
let local_site = LocalSite::read(&mut conn).await?;
|
let local_site = LocalSite::read(&mut *context.conn().await?).await?;
|
||||||
|
|
||||||
let icon = diesel_option_overwrite_to_url(&data.icon)?;
|
let icon = diesel_option_overwrite_to_url(&data.icon)?;
|
||||||
let banner = diesel_option_overwrite_to_url(&data.banner)?;
|
let banner = diesel_option_overwrite_to_url(&data.banner)?;
|
||||||
|
@ -44,23 +43,24 @@ impl PerformCrud for EditCommunity {
|
||||||
|
|
||||||
// Verify its a mod (only mods can edit it)
|
// Verify its a mod (only mods can edit it)
|
||||||
let community_id = data.community_id;
|
let community_id = data.community_id;
|
||||||
let mods: Vec<PersonId> = CommunityModeratorView::for_community(&mut conn, community_id)
|
let mods: Vec<PersonId> =
|
||||||
.await
|
CommunityModeratorView::for_community(&mut *context.conn().await?, community_id)
|
||||||
.map(|v| v.into_iter().map(|m| m.moderator.id).collect())?;
|
.await
|
||||||
|
.map(|v| v.into_iter().map(|m| m.moderator.id).collect())?;
|
||||||
if !mods.contains(&local_user_view.person.id) {
|
if !mods.contains(&local_user_view.person.id) {
|
||||||
return Err(LemmyError::from_message("not_a_moderator"));
|
return Err(LemmyError::from_message("not_a_moderator"));
|
||||||
}
|
}
|
||||||
|
|
||||||
let community_id = data.community_id;
|
let community_id = data.community_id;
|
||||||
if let Some(languages) = data.discussion_languages.clone() {
|
if let Some(languages) = data.discussion_languages.clone() {
|
||||||
let site_languages = SiteLanguage::read_local_raw(&mut conn).await?;
|
let site_languages = SiteLanguage::read_local_raw(&mut *context.conn().await?).await?;
|
||||||
// check that community languages are a subset of site languages
|
// check that community languages are a subset of site languages
|
||||||
// https://stackoverflow.com/a/64227550
|
// https://stackoverflow.com/a/64227550
|
||||||
let is_subset = languages.iter().all(|item| site_languages.contains(item));
|
let is_subset = languages.iter().all(|item| site_languages.contains(item));
|
||||||
if !is_subset {
|
if !is_subset {
|
||||||
return Err(LemmyError::from_message("language_not_allowed"));
|
return Err(LemmyError::from_message("language_not_allowed"));
|
||||||
}
|
}
|
||||||
CommunityLanguage::update(&mut conn, languages, community_id).await?;
|
CommunityLanguage::update(&mut *context.conn().await?, languages, community_id).await?;
|
||||||
}
|
}
|
||||||
|
|
||||||
let community_form = CommunityUpdateForm::builder()
|
let community_form = CommunityUpdateForm::builder()
|
||||||
|
@ -74,7 +74,7 @@ impl PerformCrud for EditCommunity {
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
let community_id = data.community_id;
|
let community_id = data.community_id;
|
||||||
Community::update(&mut conn, community_id, &community_form)
|
Community::update(&mut *context.conn().await?, community_id, &community_form)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| LemmyError::from_error_message(e, "couldnt_update_community"))?;
|
.map_err(|e| LemmyError::from_error_message(e, "couldnt_update_community"))?;
|
||||||
|
|
||||||
|
|
|
@ -19,11 +19,10 @@ impl PerformCrud for CreateCustomEmoji {
|
||||||
|
|
||||||
#[tracing::instrument(skip(self, context))]
|
#[tracing::instrument(skip(self, context))]
|
||||||
async fn perform(&self, context: &Data<LemmyContext>) -> Result<CustomEmojiResponse, LemmyError> {
|
async fn perform(&self, context: &Data<LemmyContext>) -> Result<CustomEmojiResponse, LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
let data: &CreateCustomEmoji = self;
|
let data: &CreateCustomEmoji = self;
|
||||||
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
||||||
|
|
||||||
let local_site = LocalSite::read(&mut conn).await?;
|
let local_site = LocalSite::read(&mut *context.conn().await?).await?;
|
||||||
// Make sure user is an admin
|
// Make sure user is an admin
|
||||||
is_admin(&local_user_view)?;
|
is_admin(&local_user_view)?;
|
||||||
|
|
||||||
|
@ -34,7 +33,7 @@ impl PerformCrud for CreateCustomEmoji {
|
||||||
.category(data.category.to_string())
|
.category(data.category.to_string())
|
||||||
.image_url(data.clone().image_url.into())
|
.image_url(data.clone().image_url.into())
|
||||||
.build();
|
.build();
|
||||||
let emoji = CustomEmoji::create(&mut conn, &emoji_form).await?;
|
let emoji = CustomEmoji::create(&mut *context.conn().await?, &emoji_form).await?;
|
||||||
let mut keywords = vec![];
|
let mut keywords = vec![];
|
||||||
for keyword in &data.keywords {
|
for keyword in &data.keywords {
|
||||||
let keyword_form = CustomEmojiKeywordInsertForm::builder()
|
let keyword_form = CustomEmojiKeywordInsertForm::builder()
|
||||||
|
@ -43,8 +42,8 @@ impl PerformCrud for CreateCustomEmoji {
|
||||||
.build();
|
.build();
|
||||||
keywords.push(keyword_form);
|
keywords.push(keyword_form);
|
||||||
}
|
}
|
||||||
CustomEmojiKeyword::create(&mut conn, keywords).await?;
|
CustomEmojiKeyword::create(&mut *context.conn().await?, keywords).await?;
|
||||||
let view = CustomEmojiView::get(&mut conn, emoji.id).await?;
|
let view = CustomEmojiView::get(&mut *context.conn().await?, emoji.id).await?;
|
||||||
Ok(CustomEmojiResponse { custom_emoji: view })
|
Ok(CustomEmojiResponse { custom_emoji: view })
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,13 +17,12 @@ impl PerformCrud for DeleteCustomEmoji {
|
||||||
&self,
|
&self,
|
||||||
context: &Data<LemmyContext>,
|
context: &Data<LemmyContext>,
|
||||||
) -> Result<DeleteCustomEmojiResponse, LemmyError> {
|
) -> Result<DeleteCustomEmojiResponse, LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
let data: &DeleteCustomEmoji = self;
|
let data: &DeleteCustomEmoji = self;
|
||||||
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
||||||
|
|
||||||
// Make sure user is an admin
|
// Make sure user is an admin
|
||||||
is_admin(&local_user_view)?;
|
is_admin(&local_user_view)?;
|
||||||
CustomEmoji::delete(&mut conn, data.id).await?;
|
CustomEmoji::delete(&mut *context.conn().await?, data.id).await?;
|
||||||
Ok(DeleteCustomEmojiResponse {
|
Ok(DeleteCustomEmojiResponse {
|
||||||
id: data.id,
|
id: data.id,
|
||||||
success: true,
|
success: true,
|
||||||
|
|
|
@ -19,11 +19,10 @@ impl PerformCrud for EditCustomEmoji {
|
||||||
|
|
||||||
#[tracing::instrument(skip(self, context))]
|
#[tracing::instrument(skip(self, context))]
|
||||||
async fn perform(&self, context: &Data<LemmyContext>) -> Result<CustomEmojiResponse, LemmyError> {
|
async fn perform(&self, context: &Data<LemmyContext>) -> Result<CustomEmojiResponse, LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
let data: &EditCustomEmoji = self;
|
let data: &EditCustomEmoji = self;
|
||||||
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
||||||
|
|
||||||
let local_site = LocalSite::read(&mut conn).await?;
|
let local_site = LocalSite::read(&mut *context.conn().await?).await?;
|
||||||
// Make sure user is an admin
|
// Make sure user is an admin
|
||||||
is_admin(&local_user_view)?;
|
is_admin(&local_user_view)?;
|
||||||
|
|
||||||
|
@ -33,8 +32,8 @@ impl PerformCrud for EditCustomEmoji {
|
||||||
.category(data.category.to_string())
|
.category(data.category.to_string())
|
||||||
.image_url(data.clone().image_url.into())
|
.image_url(data.clone().image_url.into())
|
||||||
.build();
|
.build();
|
||||||
let emoji = CustomEmoji::update(&mut conn, data.id, &emoji_form).await?;
|
let emoji = CustomEmoji::update(&mut *context.conn().await?, data.id, &emoji_form).await?;
|
||||||
CustomEmojiKeyword::delete(&mut conn, data.id).await?;
|
CustomEmojiKeyword::delete(&mut *context.conn().await?, data.id).await?;
|
||||||
let mut keywords = vec![];
|
let mut keywords = vec![];
|
||||||
for keyword in &data.keywords {
|
for keyword in &data.keywords {
|
||||||
let keyword_form = CustomEmojiKeywordInsertForm::builder()
|
let keyword_form = CustomEmojiKeywordInsertForm::builder()
|
||||||
|
@ -43,8 +42,8 @@ impl PerformCrud for EditCustomEmoji {
|
||||||
.build();
|
.build();
|
||||||
keywords.push(keyword_form);
|
keywords.push(keyword_form);
|
||||||
}
|
}
|
||||||
CustomEmojiKeyword::create(&mut conn, keywords).await?;
|
CustomEmojiKeyword::create(&mut *context.conn().await?, keywords).await?;
|
||||||
let view = CustomEmojiView::get(&mut conn, emoji.id).await?;
|
let view = CustomEmojiView::get(&mut *context.conn().await?, emoji.id).await?;
|
||||||
Ok(CustomEmojiResponse { custom_emoji: view })
|
Ok(CustomEmojiResponse { custom_emoji: view })
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -44,10 +44,9 @@ impl PerformCrud for CreatePost {
|
||||||
|
|
||||||
#[tracing::instrument(skip(context))]
|
#[tracing::instrument(skip(context))]
|
||||||
async fn perform(&self, context: &Data<LemmyContext>) -> Result<PostResponse, LemmyError> {
|
async fn perform(&self, context: &Data<LemmyContext>) -> Result<PostResponse, LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
let data: &CreatePost = self;
|
let data: &CreatePost = self;
|
||||||
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
||||||
let local_site = LocalSite::read(&mut conn).await?;
|
let local_site = LocalSite::read(&mut *context.conn().await?).await?;
|
||||||
|
|
||||||
let slur_regex = local_site_to_slur_regex(&local_site);
|
let slur_regex = local_site_to_slur_regex(&local_site);
|
||||||
check_slurs(&data.name, &slur_regex)?;
|
check_slurs(&data.name, &slur_regex)?;
|
||||||
|
@ -60,15 +59,20 @@ impl PerformCrud for CreatePost {
|
||||||
is_valid_post_title(&data.name)?;
|
is_valid_post_title(&data.name)?;
|
||||||
is_valid_body_field(&data.body, true)?;
|
is_valid_body_field(&data.body, true)?;
|
||||||
|
|
||||||
check_community_ban(local_user_view.person.id, data.community_id, &mut conn).await?;
|
check_community_ban(
|
||||||
check_community_deleted_or_removed(data.community_id, &mut conn).await?;
|
local_user_view.person.id,
|
||||||
|
data.community_id,
|
||||||
|
&mut *context.conn().await?,
|
||||||
|
)
|
||||||
|
.await?;
|
||||||
|
check_community_deleted_or_removed(data.community_id, &mut *context.conn().await?).await?;
|
||||||
|
|
||||||
let community_id = data.community_id;
|
let community_id = data.community_id;
|
||||||
let community = Community::read(&mut conn, community_id).await?;
|
let community = Community::read(&mut *context.conn().await?, community_id).await?;
|
||||||
if community.posting_restricted_to_mods {
|
if community.posting_restricted_to_mods {
|
||||||
let community_id = data.community_id;
|
let community_id = data.community_id;
|
||||||
let is_mod = CommunityView::is_mod_or_admin(
|
let is_mod = CommunityView::is_mod_or_admin(
|
||||||
&mut conn,
|
&mut *context.conn().await?,
|
||||||
local_user_view.local_user.person_id,
|
local_user_view.local_user.person_id,
|
||||||
community_id,
|
community_id,
|
||||||
)
|
)
|
||||||
|
@ -87,9 +91,21 @@ impl PerformCrud for CreatePost {
|
||||||
|
|
||||||
let language_id = match data.language_id {
|
let language_id = match data.language_id {
|
||||||
Some(lid) => Some(lid),
|
Some(lid) => Some(lid),
|
||||||
None => default_post_language(&mut conn, community_id, local_user_view.local_user.id).await?,
|
None => {
|
||||||
|
default_post_language(
|
||||||
|
&mut *context.conn().await?,
|
||||||
|
community_id,
|
||||||
|
local_user_view.local_user.id,
|
||||||
|
)
|
||||||
|
.await?
|
||||||
|
}
|
||||||
};
|
};
|
||||||
CommunityLanguage::is_allowed_community_language(&mut conn, language_id, community_id).await?;
|
CommunityLanguage::is_allowed_community_language(
|
||||||
|
&mut *context.conn().await?,
|
||||||
|
language_id,
|
||||||
|
community_id,
|
||||||
|
)
|
||||||
|
.await?;
|
||||||
|
|
||||||
let post_form = PostInsertForm::builder()
|
let post_form = PostInsertForm::builder()
|
||||||
.name(data.name.trim().to_owned())
|
.name(data.name.trim().to_owned())
|
||||||
|
@ -105,7 +121,7 @@ impl PerformCrud for CreatePost {
|
||||||
.thumbnail_url(thumbnail_url)
|
.thumbnail_url(thumbnail_url)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
let inserted_post = match Post::create(&mut conn, &post_form).await {
|
let inserted_post = match Post::create(&mut *context.conn().await?, &post_form).await {
|
||||||
Ok(post) => post,
|
Ok(post) => post,
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
let err_type = if e.to_string() == "value too long for type character varying(200)" {
|
let err_type = if e.to_string() == "value too long for type character varying(200)" {
|
||||||
|
@ -126,7 +142,7 @@ impl PerformCrud for CreatePost {
|
||||||
&protocol_and_hostname,
|
&protocol_and_hostname,
|
||||||
)?;
|
)?;
|
||||||
let updated_post = Post::update(
|
let updated_post = Post::update(
|
||||||
&mut conn,
|
&mut *context.conn().await?,
|
||||||
inserted_post_id,
|
inserted_post_id,
|
||||||
&PostUpdateForm::builder().ap_id(Some(apub_id)).build(),
|
&PostUpdateForm::builder().ap_id(Some(apub_id)).build(),
|
||||||
)
|
)
|
||||||
|
@ -142,12 +158,12 @@ impl PerformCrud for CreatePost {
|
||||||
score: 1,
|
score: 1,
|
||||||
};
|
};
|
||||||
|
|
||||||
PostLike::like(&mut conn, &like_form)
|
PostLike::like(&mut *context.conn().await?, &like_form)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| LemmyError::from_error_message(e, "couldnt_like_post"))?;
|
.map_err(|e| LemmyError::from_error_message(e, "couldnt_like_post"))?;
|
||||||
|
|
||||||
// Mark the post as read
|
// Mark the post as read
|
||||||
mark_post_as_read(person_id, post_id, &mut conn).await?;
|
mark_post_as_read(person_id, post_id, &mut *context.conn().await?).await?;
|
||||||
|
|
||||||
if let Some(url) = &updated_post.url {
|
if let Some(url) = &updated_post.url {
|
||||||
let mut webmention =
|
let mut webmention =
|
||||||
|
|
|
@ -18,20 +18,24 @@ impl PerformCrud for DeletePost {
|
||||||
|
|
||||||
#[tracing::instrument(skip(context))]
|
#[tracing::instrument(skip(context))]
|
||||||
async fn perform(&self, context: &Data<LemmyContext>) -> Result<PostResponse, LemmyError> {
|
async fn perform(&self, context: &Data<LemmyContext>) -> Result<PostResponse, LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
let data: &DeletePost = self;
|
let data: &DeletePost = self;
|
||||||
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
||||||
|
|
||||||
let post_id = data.post_id;
|
let post_id = data.post_id;
|
||||||
let orig_post = Post::read(&mut conn, post_id).await?;
|
let orig_post = Post::read(&mut *context.conn().await?, post_id).await?;
|
||||||
|
|
||||||
// Dont delete it if its already been deleted.
|
// Dont delete it if its already been deleted.
|
||||||
if orig_post.deleted == data.deleted {
|
if orig_post.deleted == data.deleted {
|
||||||
return Err(LemmyError::from_message("couldnt_update_post"));
|
return Err(LemmyError::from_message("couldnt_update_post"));
|
||||||
}
|
}
|
||||||
|
|
||||||
check_community_ban(local_user_view.person.id, orig_post.community_id, &mut conn).await?;
|
check_community_ban(
|
||||||
check_community_deleted_or_removed(orig_post.community_id, &mut conn).await?;
|
local_user_view.person.id,
|
||||||
|
orig_post.community_id,
|
||||||
|
&mut *context.conn().await?,
|
||||||
|
)
|
||||||
|
.await?;
|
||||||
|
check_community_deleted_or_removed(orig_post.community_id, &mut *context.conn().await?).await?;
|
||||||
|
|
||||||
// Verify that only the creator can delete
|
// Verify that only the creator can delete
|
||||||
if !Post::is_post_creator(local_user_view.person.id, orig_post.creator_id) {
|
if !Post::is_post_creator(local_user_view.person.id, orig_post.creator_id) {
|
||||||
|
@ -42,7 +46,7 @@ impl PerformCrud for DeletePost {
|
||||||
let post_id = data.post_id;
|
let post_id = data.post_id;
|
||||||
let deleted = data.deleted;
|
let deleted = data.deleted;
|
||||||
Post::update(
|
Post::update(
|
||||||
&mut conn,
|
&mut *context.conn().await?,
|
||||||
post_id,
|
post_id,
|
||||||
&PostUpdateForm::builder().deleted(Some(deleted)).build(),
|
&PostUpdateForm::builder().deleted(Some(deleted)).build(),
|
||||||
)
|
)
|
||||||
|
|
|
@ -25,10 +25,9 @@ impl PerformCrud for GetPost {
|
||||||
|
|
||||||
#[tracing::instrument(skip(context))]
|
#[tracing::instrument(skip(context))]
|
||||||
async fn perform(&self, context: &Data<LemmyContext>) -> Result<GetPostResponse, LemmyError> {
|
async fn perform(&self, context: &Data<LemmyContext>) -> Result<GetPostResponse, LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
let data: &GetPost = self;
|
let data: &GetPost = self;
|
||||||
let local_user_view = local_user_view_from_jwt_opt(data.auth.as_ref(), context).await;
|
let local_user_view = local_user_view_from_jwt_opt(data.auth.as_ref(), context).await;
|
||||||
let local_site = LocalSite::read(&mut conn).await?;
|
let local_site = LocalSite::read(&mut *context.conn().await?).await?;
|
||||||
|
|
||||||
check_private_instance(&local_user_view, &local_site)?;
|
check_private_instance(&local_user_view, &local_site)?;
|
||||||
|
|
||||||
|
@ -38,7 +37,7 @@ impl PerformCrud for GetPost {
|
||||||
let post_id = if let Some(id) = data.id {
|
let post_id = if let Some(id) = data.id {
|
||||||
id
|
id
|
||||||
} else if let Some(comment_id) = data.comment_id {
|
} else if let Some(comment_id) = data.comment_id {
|
||||||
Comment::read(&mut conn, comment_id)
|
Comment::read(&mut *context.conn().await?, comment_id)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| LemmyError::from_error_message(e, "couldnt_find_post"))?
|
.map_err(|e| LemmyError::from_error_message(e, "couldnt_find_post"))?
|
||||||
.post_id
|
.post_id
|
||||||
|
@ -47,27 +46,41 @@ impl PerformCrud for GetPost {
|
||||||
};
|
};
|
||||||
|
|
||||||
// Check to see if the person is a mod or admin, to show deleted / removed
|
// Check to see if the person is a mod or admin, to show deleted / removed
|
||||||
let community_id = Post::read(&mut conn, post_id).await?.community_id;
|
let community_id = Post::read(&mut *context.conn().await?, post_id)
|
||||||
let is_mod_or_admin =
|
.await?
|
||||||
is_mod_or_admin_opt(&mut conn, local_user_view.as_ref(), Some(community_id))
|
.community_id;
|
||||||
.await
|
let is_mod_or_admin = is_mod_or_admin_opt(
|
||||||
.is_ok();
|
&mut *context.conn().await?,
|
||||||
|
local_user_view.as_ref(),
|
||||||
|
Some(community_id),
|
||||||
|
)
|
||||||
|
.await
|
||||||
|
.is_ok();
|
||||||
|
|
||||||
let post_view = PostView::read(&mut conn, post_id, person_id, Some(is_mod_or_admin))
|
let post_view = PostView::read(
|
||||||
.await
|
&mut *context.conn().await?,
|
||||||
.map_err(|e| LemmyError::from_error_message(e, "couldnt_find_post"))?;
|
post_id,
|
||||||
|
person_id,
|
||||||
|
Some(is_mod_or_admin),
|
||||||
|
)
|
||||||
|
.await
|
||||||
|
.map_err(|e| LemmyError::from_error_message(e, "couldnt_find_post"))?;
|
||||||
|
|
||||||
// Mark the post as read
|
// Mark the post as read
|
||||||
let post_id = post_view.post.id;
|
let post_id = post_view.post.id;
|
||||||
if let Some(person_id) = person_id {
|
if let Some(person_id) = person_id {
|
||||||
mark_post_as_read(person_id, post_id, &mut conn).await?;
|
mark_post_as_read(person_id, post_id, &mut *context.conn().await?).await?;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Necessary for the sidebar subscribed
|
// Necessary for the sidebar subscribed
|
||||||
let community_view =
|
let community_view = CommunityView::read(
|
||||||
CommunityView::read(&mut conn, community_id, person_id, Some(is_mod_or_admin))
|
&mut *context.conn().await?,
|
||||||
.await
|
community_id,
|
||||||
.map_err(|e| LemmyError::from_error_message(e, "couldnt_find_community"))?;
|
person_id,
|
||||||
|
Some(is_mod_or_admin),
|
||||||
|
)
|
||||||
|
.await
|
||||||
|
.map_err(|e| LemmyError::from_error_message(e, "couldnt_find_community"))?;
|
||||||
|
|
||||||
// Insert into PersonPostAggregates
|
// Insert into PersonPostAggregates
|
||||||
// to update the read_comments count
|
// to update the read_comments count
|
||||||
|
@ -79,17 +92,18 @@ impl PerformCrud for GetPost {
|
||||||
read_comments,
|
read_comments,
|
||||||
..PersonPostAggregatesForm::default()
|
..PersonPostAggregatesForm::default()
|
||||||
};
|
};
|
||||||
PersonPostAggregates::upsert(&mut conn, &person_post_agg_form)
|
PersonPostAggregates::upsert(&mut *context.conn().await?, &person_post_agg_form)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| LemmyError::from_error_message(e, "couldnt_find_post"))?;
|
.map_err(|e| LemmyError::from_error_message(e, "couldnt_find_post"))?;
|
||||||
}
|
}
|
||||||
|
|
||||||
let moderators = CommunityModeratorView::for_community(&mut conn, community_id).await?;
|
let moderators =
|
||||||
|
CommunityModeratorView::for_community(&mut *context.conn().await?, community_id).await?;
|
||||||
|
|
||||||
// Fetch the cross_posts
|
// Fetch the cross_posts
|
||||||
let cross_posts = if let Some(url) = &post_view.post.url {
|
let cross_posts = if let Some(url) = &post_view.post.url {
|
||||||
let mut x_posts = PostQuery::builder()
|
let mut x_posts = PostQuery::builder()
|
||||||
.conn(&mut conn)
|
.conn(&mut *context.conn().await?)
|
||||||
.url_search(Some(url.inner().as_str().into()))
|
.url_search(Some(url.inner().as_str().into()))
|
||||||
.build()
|
.build()
|
||||||
.list()
|
.list()
|
||||||
|
|
|
@ -21,23 +21,32 @@ impl PerformCrud for RemovePost {
|
||||||
|
|
||||||
#[tracing::instrument(skip(context))]
|
#[tracing::instrument(skip(context))]
|
||||||
async fn perform(&self, context: &Data<LemmyContext>) -> Result<PostResponse, LemmyError> {
|
async fn perform(&self, context: &Data<LemmyContext>) -> Result<PostResponse, LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
let data: &RemovePost = self;
|
let data: &RemovePost = self;
|
||||||
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
||||||
|
|
||||||
let post_id = data.post_id;
|
let post_id = data.post_id;
|
||||||
let orig_post = Post::read(&mut conn, post_id).await?;
|
let orig_post = Post::read(&mut *context.conn().await?, post_id).await?;
|
||||||
|
|
||||||
check_community_ban(local_user_view.person.id, orig_post.community_id, &mut conn).await?;
|
check_community_ban(
|
||||||
|
local_user_view.person.id,
|
||||||
|
orig_post.community_id,
|
||||||
|
&mut *context.conn().await?,
|
||||||
|
)
|
||||||
|
.await?;
|
||||||
|
|
||||||
// Verify that only the mods can remove
|
// Verify that only the mods can remove
|
||||||
is_mod_or_admin(&mut conn, local_user_view.person.id, orig_post.community_id).await?;
|
is_mod_or_admin(
|
||||||
|
&mut *context.conn().await?,
|
||||||
|
local_user_view.person.id,
|
||||||
|
orig_post.community_id,
|
||||||
|
)
|
||||||
|
.await?;
|
||||||
|
|
||||||
// Update the post
|
// Update the post
|
||||||
let post_id = data.post_id;
|
let post_id = data.post_id;
|
||||||
let removed = data.removed;
|
let removed = data.removed;
|
||||||
Post::update(
|
Post::update(
|
||||||
&mut conn,
|
&mut *context.conn().await?,
|
||||||
post_id,
|
post_id,
|
||||||
&PostUpdateForm::builder().removed(Some(removed)).build(),
|
&PostUpdateForm::builder().removed(Some(removed)).build(),
|
||||||
)
|
)
|
||||||
|
@ -50,7 +59,7 @@ impl PerformCrud for RemovePost {
|
||||||
removed: Some(removed),
|
removed: Some(removed),
|
||||||
reason: data.reason.clone(),
|
reason: data.reason.clone(),
|
||||||
};
|
};
|
||||||
ModRemovePost::create(&mut conn, &form).await?;
|
ModRemovePost::create(&mut *context.conn().await?, &form).await?;
|
||||||
|
|
||||||
build_post_response(
|
build_post_response(
|
||||||
context,
|
context,
|
||||||
|
|
|
@ -30,10 +30,9 @@ impl PerformCrud for EditPost {
|
||||||
|
|
||||||
#[tracing::instrument(skip(context))]
|
#[tracing::instrument(skip(context))]
|
||||||
async fn perform(&self, context: &Data<LemmyContext>) -> Result<PostResponse, LemmyError> {
|
async fn perform(&self, context: &Data<LemmyContext>) -> Result<PostResponse, LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
let data: &EditPost = self;
|
let data: &EditPost = self;
|
||||||
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
||||||
let local_site = LocalSite::read(&mut conn).await?;
|
let local_site = LocalSite::read(&mut *context.conn().await?).await?;
|
||||||
|
|
||||||
let data_url = data.url.as_ref();
|
let data_url = data.url.as_ref();
|
||||||
|
|
||||||
|
@ -53,9 +52,14 @@ impl PerformCrud for EditPost {
|
||||||
is_valid_body_field(&data.body, true)?;
|
is_valid_body_field(&data.body, true)?;
|
||||||
|
|
||||||
let post_id = data.post_id;
|
let post_id = data.post_id;
|
||||||
let orig_post = Post::read(&mut conn, post_id).await?;
|
let orig_post = Post::read(&mut *context.conn().await?, post_id).await?;
|
||||||
|
|
||||||
check_community_ban(local_user_view.person.id, orig_post.community_id, &mut conn).await?;
|
check_community_ban(
|
||||||
|
local_user_view.person.id,
|
||||||
|
orig_post.community_id,
|
||||||
|
&mut *context.conn().await?,
|
||||||
|
)
|
||||||
|
.await?;
|
||||||
|
|
||||||
// Verify that only the creator can edit
|
// Verify that only the creator can edit
|
||||||
if !Post::is_post_creator(local_user_view.person.id, orig_post.creator_id) {
|
if !Post::is_post_creator(local_user_view.person.id, orig_post.creator_id) {
|
||||||
|
@ -72,7 +76,7 @@ impl PerformCrud for EditPost {
|
||||||
|
|
||||||
let language_id = self.language_id;
|
let language_id = self.language_id;
|
||||||
CommunityLanguage::is_allowed_community_language(
|
CommunityLanguage::is_allowed_community_language(
|
||||||
&mut conn,
|
&mut *context.conn().await?,
|
||||||
language_id,
|
language_id,
|
||||||
orig_post.community_id,
|
orig_post.community_id,
|
||||||
)
|
)
|
||||||
|
@ -92,7 +96,7 @@ impl PerformCrud for EditPost {
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
let post_id = data.post_id;
|
let post_id = data.post_id;
|
||||||
let res = Post::update(&mut conn, post_id, &post_form).await;
|
let res = Post::update(&mut *context.conn().await?, post_id, &post_form).await;
|
||||||
if let Err(e) = res {
|
if let Err(e) = res {
|
||||||
let err_type = if e.to_string() == "value too long for type character varying(200)" {
|
let err_type = if e.to_string() == "value too long for type character varying(200)" {
|
||||||
"post_title_too_long"
|
"post_title_too_long"
|
||||||
|
|
|
@ -35,10 +35,9 @@ impl PerformCrud for CreatePrivateMessage {
|
||||||
&self,
|
&self,
|
||||||
context: &Data<LemmyContext>,
|
context: &Data<LemmyContext>,
|
||||||
) -> Result<PrivateMessageResponse, LemmyError> {
|
) -> Result<PrivateMessageResponse, LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
let data: &CreatePrivateMessage = self;
|
let data: &CreatePrivateMessage = self;
|
||||||
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
||||||
let local_site = LocalSite::read(&mut conn).await?;
|
let local_site = LocalSite::read(&mut *context.conn().await?).await?;
|
||||||
|
|
||||||
let content_slurs_removed = remove_slurs(
|
let content_slurs_removed = remove_slurs(
|
||||||
&data.content.clone(),
|
&data.content.clone(),
|
||||||
|
@ -46,7 +45,12 @@ impl PerformCrud for CreatePrivateMessage {
|
||||||
);
|
);
|
||||||
is_valid_body_field(&Some(content_slurs_removed.clone()), false)?;
|
is_valid_body_field(&Some(content_slurs_removed.clone()), false)?;
|
||||||
|
|
||||||
check_person_block(local_user_view.person.id, data.recipient_id, &mut conn).await?;
|
check_person_block(
|
||||||
|
local_user_view.person.id,
|
||||||
|
data.recipient_id,
|
||||||
|
&mut *context.conn().await?,
|
||||||
|
)
|
||||||
|
.await?;
|
||||||
|
|
||||||
let private_message_form = PrivateMessageInsertForm::builder()
|
let private_message_form = PrivateMessageInsertForm::builder()
|
||||||
.content(content_slurs_removed.clone())
|
.content(content_slurs_removed.clone())
|
||||||
|
@ -55,7 +59,7 @@ impl PerformCrud for CreatePrivateMessage {
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
let inserted_private_message =
|
let inserted_private_message =
|
||||||
match PrivateMessage::create(&mut conn, &private_message_form).await {
|
match PrivateMessage::create(&mut *context.conn().await?, &private_message_form).await {
|
||||||
Ok(private_message) => private_message,
|
Ok(private_message) => private_message,
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
return Err(LemmyError::from_error_message(
|
return Err(LemmyError::from_error_message(
|
||||||
|
@ -73,7 +77,7 @@ impl PerformCrud for CreatePrivateMessage {
|
||||||
&protocol_and_hostname,
|
&protocol_and_hostname,
|
||||||
)?;
|
)?;
|
||||||
PrivateMessage::update(
|
PrivateMessage::update(
|
||||||
&mut conn,
|
&mut *context.conn().await?,
|
||||||
inserted_private_message.id,
|
inserted_private_message.id,
|
||||||
&PrivateMessageUpdateForm::builder()
|
&PrivateMessageUpdateForm::builder()
|
||||||
.ap_id(Some(apub_id))
|
.ap_id(Some(apub_id))
|
||||||
|
@ -82,12 +86,14 @@ impl PerformCrud for CreatePrivateMessage {
|
||||||
.await
|
.await
|
||||||
.map_err(|e| LemmyError::from_error_message(e, "couldnt_create_private_message"))?;
|
.map_err(|e| LemmyError::from_error_message(e, "couldnt_create_private_message"))?;
|
||||||
|
|
||||||
let view = PrivateMessageView::read(&mut conn, inserted_private_message.id).await?;
|
let view =
|
||||||
|
PrivateMessageView::read(&mut *context.conn().await?, inserted_private_message.id).await?;
|
||||||
|
|
||||||
// Send email to the local recipient, if one exists
|
// Send email to the local recipient, if one exists
|
||||||
if view.recipient.local {
|
if view.recipient.local {
|
||||||
let recipient_id = data.recipient_id;
|
let recipient_id = data.recipient_id;
|
||||||
let local_recipient = LocalUserView::read_person(&mut conn, recipient_id).await?;
|
let local_recipient =
|
||||||
|
LocalUserView::read_person(&mut *context.conn().await?, recipient_id).await?;
|
||||||
let lang = get_interface_language(&local_recipient);
|
let lang = get_interface_language(&local_recipient);
|
||||||
let inbox_link = format!("{}/inbox", context.settings().get_protocol_and_hostname());
|
let inbox_link = format!("{}/inbox", context.settings().get_protocol_and_hostname());
|
||||||
let sender_name = &local_user_view.person.name;
|
let sender_name = &local_user_view.person.name;
|
||||||
|
|
|
@ -21,13 +21,13 @@ impl PerformCrud for DeletePrivateMessage {
|
||||||
&self,
|
&self,
|
||||||
context: &Data<LemmyContext>,
|
context: &Data<LemmyContext>,
|
||||||
) -> Result<PrivateMessageResponse, LemmyError> {
|
) -> Result<PrivateMessageResponse, LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
let data: &DeletePrivateMessage = self;
|
let data: &DeletePrivateMessage = self;
|
||||||
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
||||||
|
|
||||||
// Checking permissions
|
// Checking permissions
|
||||||
let private_message_id = data.private_message_id;
|
let private_message_id = data.private_message_id;
|
||||||
let orig_private_message = PrivateMessage::read(&mut conn, private_message_id).await?;
|
let orig_private_message =
|
||||||
|
PrivateMessage::read(&mut *context.conn().await?, private_message_id).await?;
|
||||||
if local_user_view.person.id != orig_private_message.creator_id {
|
if local_user_view.person.id != orig_private_message.creator_id {
|
||||||
return Err(LemmyError::from_message("no_private_message_edit_allowed"));
|
return Err(LemmyError::from_message("no_private_message_edit_allowed"));
|
||||||
}
|
}
|
||||||
|
@ -36,7 +36,7 @@ impl PerformCrud for DeletePrivateMessage {
|
||||||
let private_message_id = data.private_message_id;
|
let private_message_id = data.private_message_id;
|
||||||
let deleted = data.deleted;
|
let deleted = data.deleted;
|
||||||
PrivateMessage::update(
|
PrivateMessage::update(
|
||||||
&mut conn,
|
&mut *context.conn().await?,
|
||||||
private_message_id,
|
private_message_id,
|
||||||
&PrivateMessageUpdateForm::builder()
|
&PrivateMessageUpdateForm::builder()
|
||||||
.deleted(Some(deleted))
|
.deleted(Some(deleted))
|
||||||
|
@ -45,7 +45,7 @@ impl PerformCrud for DeletePrivateMessage {
|
||||||
.await
|
.await
|
||||||
.map_err(|e| LemmyError::from_error_message(e, "couldnt_update_private_message"))?;
|
.map_err(|e| LemmyError::from_error_message(e, "couldnt_update_private_message"))?;
|
||||||
|
|
||||||
let view = PrivateMessageView::read(&mut conn, private_message_id).await?;
|
let view = PrivateMessageView::read(&mut *context.conn().await?, private_message_id).await?;
|
||||||
Ok(PrivateMessageResponse {
|
Ok(PrivateMessageResponse {
|
||||||
private_message_view: view,
|
private_message_view: view,
|
||||||
})
|
})
|
||||||
|
|
|
@ -17,7 +17,6 @@ impl PerformCrud for GetPrivateMessages {
|
||||||
&self,
|
&self,
|
||||||
context: &Data<LemmyContext>,
|
context: &Data<LemmyContext>,
|
||||||
) -> Result<PrivateMessagesResponse, LemmyError> {
|
) -> Result<PrivateMessagesResponse, LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
let data: &GetPrivateMessages = self;
|
let data: &GetPrivateMessages = self;
|
||||||
let local_user_view = local_user_view_from_jwt(data.auth.as_ref(), context).await?;
|
let local_user_view = local_user_view_from_jwt(data.auth.as_ref(), context).await?;
|
||||||
let person_id = local_user_view.person.id;
|
let person_id = local_user_view.person.id;
|
||||||
|
@ -26,7 +25,7 @@ impl PerformCrud for GetPrivateMessages {
|
||||||
let limit = data.limit;
|
let limit = data.limit;
|
||||||
let unread_only = data.unread_only;
|
let unread_only = data.unread_only;
|
||||||
let mut messages = PrivateMessageQuery::builder()
|
let mut messages = PrivateMessageQuery::builder()
|
||||||
.conn(&mut conn)
|
.conn(&mut *context.conn().await?)
|
||||||
.recipient_id(person_id)
|
.recipient_id(person_id)
|
||||||
.page(page)
|
.page(page)
|
||||||
.limit(limit)
|
.limit(limit)
|
||||||
|
|
|
@ -28,14 +28,14 @@ impl PerformCrud for EditPrivateMessage {
|
||||||
&self,
|
&self,
|
||||||
context: &Data<LemmyContext>,
|
context: &Data<LemmyContext>,
|
||||||
) -> Result<PrivateMessageResponse, LemmyError> {
|
) -> Result<PrivateMessageResponse, LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
let data: &EditPrivateMessage = self;
|
let data: &EditPrivateMessage = self;
|
||||||
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
||||||
let local_site = LocalSite::read(&mut conn).await?;
|
let local_site = LocalSite::read(&mut *context.conn().await?).await?;
|
||||||
|
|
||||||
// Checking permissions
|
// Checking permissions
|
||||||
let private_message_id = data.private_message_id;
|
let private_message_id = data.private_message_id;
|
||||||
let orig_private_message = PrivateMessage::read(&mut conn, private_message_id).await?;
|
let orig_private_message =
|
||||||
|
PrivateMessage::read(&mut *context.conn().await?, private_message_id).await?;
|
||||||
if local_user_view.person.id != orig_private_message.creator_id {
|
if local_user_view.person.id != orig_private_message.creator_id {
|
||||||
return Err(LemmyError::from_message("no_private_message_edit_allowed"));
|
return Err(LemmyError::from_message("no_private_message_edit_allowed"));
|
||||||
}
|
}
|
||||||
|
@ -46,7 +46,7 @@ impl PerformCrud for EditPrivateMessage {
|
||||||
|
|
||||||
let private_message_id = data.private_message_id;
|
let private_message_id = data.private_message_id;
|
||||||
PrivateMessage::update(
|
PrivateMessage::update(
|
||||||
&mut conn,
|
&mut *context.conn().await?,
|
||||||
private_message_id,
|
private_message_id,
|
||||||
&PrivateMessageUpdateForm::builder()
|
&PrivateMessageUpdateForm::builder()
|
||||||
.content(Some(content_slurs_removed))
|
.content(Some(content_slurs_removed))
|
||||||
|
@ -56,7 +56,7 @@ impl PerformCrud for EditPrivateMessage {
|
||||||
.await
|
.await
|
||||||
.map_err(|e| LemmyError::from_error_message(e, "couldnt_update_private_message"))?;
|
.map_err(|e| LemmyError::from_error_message(e, "couldnt_update_private_message"))?;
|
||||||
|
|
||||||
let view = PrivateMessageView::read(&mut conn, private_message_id).await?;
|
let view = PrivateMessageView::read(&mut *context.conn().await?, private_message_id).await?;
|
||||||
|
|
||||||
Ok(PrivateMessageResponse {
|
Ok(PrivateMessageResponse {
|
||||||
private_message_view: view,
|
private_message_view: view,
|
||||||
|
|
|
@ -47,11 +47,10 @@ impl PerformCrud for CreateSite {
|
||||||
|
|
||||||
#[tracing::instrument(skip(context))]
|
#[tracing::instrument(skip(context))]
|
||||||
async fn perform(&self, context: &Data<LemmyContext>) -> Result<SiteResponse, LemmyError> {
|
async fn perform(&self, context: &Data<LemmyContext>) -> Result<SiteResponse, LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
let data: &CreateSite = self;
|
let data: &CreateSite = self;
|
||||||
|
|
||||||
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
||||||
let local_site = LocalSite::read(&mut conn).await?;
|
let local_site = LocalSite::read(&mut *context.conn().await?).await?;
|
||||||
|
|
||||||
// Make sure user is an admin; other types of users should not create site data...
|
// Make sure user is an admin; other types of users should not create site data...
|
||||||
is_admin(&local_user_view)?;
|
is_admin(&local_user_view)?;
|
||||||
|
@ -76,7 +75,7 @@ impl PerformCrud for CreateSite {
|
||||||
|
|
||||||
let site_id = local_site.site_id;
|
let site_id = local_site.site_id;
|
||||||
|
|
||||||
Site::update(&mut conn, site_id, &site_form).await?;
|
Site::update(&mut *context.conn().await?, site_id, &site_form).await?;
|
||||||
|
|
||||||
let local_site_form = LocalSiteUpdateForm::builder()
|
let local_site_form = LocalSiteUpdateForm::builder()
|
||||||
// Set the site setup to true
|
// Set the site setup to true
|
||||||
|
@ -101,7 +100,7 @@ impl PerformCrud for CreateSite {
|
||||||
.captcha_difficulty(data.captcha_difficulty.clone())
|
.captcha_difficulty(data.captcha_difficulty.clone())
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
LocalSite::update(&mut conn, &local_site_form).await?;
|
LocalSite::update(&mut *context.conn().await?, &local_site_form).await?;
|
||||||
|
|
||||||
let local_site_rate_limit_form = LocalSiteRateLimitUpdateForm::builder()
|
let local_site_rate_limit_form = LocalSiteRateLimitUpdateForm::builder()
|
||||||
.message(data.rate_limit_message)
|
.message(data.rate_limit_message)
|
||||||
|
@ -118,12 +117,13 @@ impl PerformCrud for CreateSite {
|
||||||
.search_per_second(data.rate_limit_search_per_second)
|
.search_per_second(data.rate_limit_search_per_second)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
LocalSiteRateLimit::update(&mut conn, &local_site_rate_limit_form).await?;
|
LocalSiteRateLimit::update(&mut *context.conn().await?, &local_site_rate_limit_form).await?;
|
||||||
|
|
||||||
let site_view = SiteView::read_local(&mut conn).await?;
|
let site_view = SiteView::read_local(&mut *context.conn().await?).await?;
|
||||||
|
|
||||||
let new_taglines = data.taglines.clone();
|
let new_taglines = data.taglines.clone();
|
||||||
let taglines = Tagline::replace(&mut conn, local_site.id, new_taglines).await?;
|
let taglines =
|
||||||
|
Tagline::replace(&mut *context.conn().await?, local_site.id, new_taglines).await?;
|
||||||
|
|
||||||
let rate_limit_config =
|
let rate_limit_config =
|
||||||
local_site_rate_limit_to_rate_limit_config(&site_view.local_site_rate_limit);
|
local_site_rate_limit_to_rate_limit_config(&site_view.local_site_rate_limit);
|
||||||
|
|
|
@ -30,12 +30,11 @@ impl PerformCrud for GetSite {
|
||||||
|
|
||||||
#[tracing::instrument(skip(context))]
|
#[tracing::instrument(skip(context))]
|
||||||
async fn perform(&self, context: &Data<LemmyContext>) -> Result<GetSiteResponse, LemmyError> {
|
async fn perform(&self, context: &Data<LemmyContext>) -> Result<GetSiteResponse, LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
let data: &GetSite = self;
|
let data: &GetSite = self;
|
||||||
|
|
||||||
let site_view = SiteView::read_local(&mut conn).await?;
|
let site_view = SiteView::read_local(&mut *context.conn().await?).await?;
|
||||||
|
|
||||||
let admins = PersonView::admins(&mut conn).await?;
|
let admins = PersonView::admins(&mut *context.conn().await?).await?;
|
||||||
|
|
||||||
// Build the local user
|
// Build the local user
|
||||||
let my_user = if let Some(local_user_view) =
|
let my_user = if let Some(local_user_view) =
|
||||||
|
@ -44,27 +43,28 @@ impl PerformCrud for GetSite {
|
||||||
let person_id = local_user_view.person.id;
|
let person_id = local_user_view.person.id;
|
||||||
let local_user_id = local_user_view.local_user.id;
|
let local_user_id = local_user_view.local_user.id;
|
||||||
|
|
||||||
let follows = CommunityFollowerView::for_person(&mut conn, person_id)
|
let follows = CommunityFollowerView::for_person(&mut *context.conn().await?, person_id)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| LemmyError::from_error_message(e, "system_err_login"))?;
|
.map_err(|e| LemmyError::from_error_message(e, "system_err_login"))?;
|
||||||
|
|
||||||
let person_id = local_user_view.person.id;
|
let person_id = local_user_view.person.id;
|
||||||
let community_blocks = CommunityBlockView::for_person(&mut conn, person_id)
|
let community_blocks = CommunityBlockView::for_person(&mut *context.conn().await?, person_id)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| LemmyError::from_error_message(e, "system_err_login"))?;
|
.map_err(|e| LemmyError::from_error_message(e, "system_err_login"))?;
|
||||||
|
|
||||||
let person_id = local_user_view.person.id;
|
let person_id = local_user_view.person.id;
|
||||||
let person_blocks = PersonBlockView::for_person(&mut conn, person_id)
|
let person_blocks = PersonBlockView::for_person(&mut *context.conn().await?, person_id)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| LemmyError::from_error_message(e, "system_err_login"))?;
|
.map_err(|e| LemmyError::from_error_message(e, "system_err_login"))?;
|
||||||
|
|
||||||
let moderates = CommunityModeratorView::for_person(&mut conn, person_id)
|
let moderates = CommunityModeratorView::for_person(&mut *context.conn().await?, person_id)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| LemmyError::from_error_message(e, "system_err_login"))?;
|
.map_err(|e| LemmyError::from_error_message(e, "system_err_login"))?;
|
||||||
|
|
||||||
let discussion_languages = LocalUserLanguage::read(&mut conn, local_user_id)
|
let discussion_languages =
|
||||||
.await
|
LocalUserLanguage::read(&mut *context.conn().await?, local_user_id)
|
||||||
.map_err(|e| LemmyError::from_error_message(e, "system_err_login"))?;
|
.await
|
||||||
|
.map_err(|e| LemmyError::from_error_message(e, "system_err_login"))?;
|
||||||
|
|
||||||
Some(MyUserInfo {
|
Some(MyUserInfo {
|
||||||
local_user_view,
|
local_user_view,
|
||||||
|
@ -78,10 +78,11 @@ impl PerformCrud for GetSite {
|
||||||
None
|
None
|
||||||
};
|
};
|
||||||
|
|
||||||
let all_languages = Language::read_all(&mut conn).await?;
|
let all_languages = Language::read_all(&mut *context.conn().await?).await?;
|
||||||
let discussion_languages = SiteLanguage::read_local_raw(&mut conn).await?;
|
let discussion_languages = SiteLanguage::read_local_raw(&mut *context.conn().await?).await?;
|
||||||
let taglines = Tagline::get_all(&mut conn, site_view.local_site.id).await?;
|
let taglines = Tagline::get_all(&mut *context.conn().await?, site_view.local_site.id).await?;
|
||||||
let custom_emojis = CustomEmojiView::get_all(&mut conn, site_view.local_site.id).await?;
|
let custom_emojis =
|
||||||
|
CustomEmojiView::get_all(&mut *context.conn().await?, site_view.local_site.id).await?;
|
||||||
|
|
||||||
Ok(GetSiteResponse {
|
Ok(GetSiteResponse {
|
||||||
site_view,
|
site_view,
|
||||||
|
|
|
@ -44,10 +44,9 @@ impl PerformCrud for EditSite {
|
||||||
|
|
||||||
#[tracing::instrument(skip(context))]
|
#[tracing::instrument(skip(context))]
|
||||||
async fn perform(&self, context: &Data<LemmyContext>) -> Result<SiteResponse, LemmyError> {
|
async fn perform(&self, context: &Data<LemmyContext>) -> Result<SiteResponse, LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
let data: &EditSite = self;
|
let data: &EditSite = self;
|
||||||
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
|
||||||
let site_view = SiteView::read_local(&mut conn).await?;
|
let site_view = SiteView::read_local(&mut *context.conn().await?).await?;
|
||||||
let local_site = site_view.local_site;
|
let local_site = site_view.local_site;
|
||||||
let site = site_view.site;
|
let site = site_view.site;
|
||||||
|
|
||||||
|
@ -57,7 +56,12 @@ impl PerformCrud for EditSite {
|
||||||
validate_update_payload(&local_site, data)?;
|
validate_update_payload(&local_site, data)?;
|
||||||
|
|
||||||
if let Some(discussion_languages) = data.discussion_languages.clone() {
|
if let Some(discussion_languages) = data.discussion_languages.clone() {
|
||||||
SiteLanguage::update(&mut conn, discussion_languages.clone(), &site).await?;
|
SiteLanguage::update(
|
||||||
|
&mut *context.conn().await?,
|
||||||
|
discussion_languages.clone(),
|
||||||
|
&site,
|
||||||
|
)
|
||||||
|
.await?;
|
||||||
}
|
}
|
||||||
|
|
||||||
let site_form = SiteUpdateForm::builder()
|
let site_form = SiteUpdateForm::builder()
|
||||||
|
@ -69,7 +73,7 @@ impl PerformCrud for EditSite {
|
||||||
.updated(Some(Some(naive_now())))
|
.updated(Some(Some(naive_now())))
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
Site::update(&mut conn, site.id, &site_form)
|
Site::update(&mut *context.conn().await?, site.id, &site_form)
|
||||||
.await
|
.await
|
||||||
// Ignore errors for all these, so as to not throw errors if no update occurs
|
// Ignore errors for all these, so as to not throw errors if no update occurs
|
||||||
// Diesel will throw an error for empty update forms
|
// Diesel will throw an error for empty update forms
|
||||||
|
@ -97,7 +101,9 @@ impl PerformCrud for EditSite {
|
||||||
.reports_email_admins(data.reports_email_admins)
|
.reports_email_admins(data.reports_email_admins)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
let update_local_site = LocalSite::update(&mut conn, &local_site_form).await.ok();
|
let update_local_site = LocalSite::update(&mut *context.conn().await?, &local_site_form)
|
||||||
|
.await
|
||||||
|
.ok();
|
||||||
|
|
||||||
let local_site_rate_limit_form = LocalSiteRateLimitUpdateForm::builder()
|
let local_site_rate_limit_form = LocalSiteRateLimitUpdateForm::builder()
|
||||||
.message(data.rate_limit_message)
|
.message(data.rate_limit_message)
|
||||||
|
@ -114,15 +120,15 @@ impl PerformCrud for EditSite {
|
||||||
.search_per_second(data.rate_limit_search_per_second)
|
.search_per_second(data.rate_limit_search_per_second)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
LocalSiteRateLimit::update(&mut conn, &local_site_rate_limit_form)
|
LocalSiteRateLimit::update(&mut *context.conn().await?, &local_site_rate_limit_form)
|
||||||
.await
|
.await
|
||||||
.ok();
|
.ok();
|
||||||
|
|
||||||
// Replace the blocked and allowed instances
|
// Replace the blocked and allowed instances
|
||||||
let allowed = data.allowed_instances.clone();
|
let allowed = data.allowed_instances.clone();
|
||||||
FederationAllowList::replace(&mut conn, allowed).await?;
|
FederationAllowList::replace(&mut *context.conn().await?, allowed).await?;
|
||||||
let blocked = data.blocked_instances.clone();
|
let blocked = data.blocked_instances.clone();
|
||||||
FederationBlockList::replace(&mut conn, blocked).await?;
|
FederationBlockList::replace(&mut *context.conn().await?, blocked).await?;
|
||||||
|
|
||||||
// TODO can't think of a better way to do this.
|
// TODO can't think of a better way to do this.
|
||||||
// If the server suddenly requires email verification, or required applications, no old users
|
// If the server suddenly requires email verification, or required applications, no old users
|
||||||
|
@ -136,7 +142,7 @@ impl PerformCrud for EditSite {
|
||||||
.map(|ols| ols.registration_mode == RegistrationMode::RequireApplication)
|
.map(|ols| ols.registration_mode == RegistrationMode::RequireApplication)
|
||||||
.unwrap_or(false);
|
.unwrap_or(false);
|
||||||
if !old_require_application && new_require_application {
|
if !old_require_application && new_require_application {
|
||||||
LocalUser::set_all_users_registration_applications_accepted(&mut conn)
|
LocalUser::set_all_users_registration_applications_accepted(&mut *context.conn().await?)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| LemmyError::from_error_message(e, "couldnt_set_all_registrations_accepted"))?;
|
.map_err(|e| LemmyError::from_error_message(e, "couldnt_set_all_registrations_accepted"))?;
|
||||||
}
|
}
|
||||||
|
@ -146,15 +152,16 @@ impl PerformCrud for EditSite {
|
||||||
.map(|ols| ols.require_email_verification)
|
.map(|ols| ols.require_email_verification)
|
||||||
.unwrap_or(false);
|
.unwrap_or(false);
|
||||||
if !local_site.require_email_verification && new_require_email_verification {
|
if !local_site.require_email_verification && new_require_email_verification {
|
||||||
LocalUser::set_all_users_email_verified(&mut conn)
|
LocalUser::set_all_users_email_verified(&mut *context.conn().await?)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| LemmyError::from_error_message(e, "couldnt_set_all_email_verified"))?;
|
.map_err(|e| LemmyError::from_error_message(e, "couldnt_set_all_email_verified"))?;
|
||||||
}
|
}
|
||||||
|
|
||||||
let new_taglines = data.taglines.clone();
|
let new_taglines = data.taglines.clone();
|
||||||
let taglines = Tagline::replace(&mut conn, local_site.id, new_taglines).await?;
|
let taglines =
|
||||||
|
Tagline::replace(&mut *context.conn().await?, local_site.id, new_taglines).await?;
|
||||||
|
|
||||||
let site_view = SiteView::read_local(&mut conn).await?;
|
let site_view = SiteView::read_local(&mut *context.conn().await?).await?;
|
||||||
|
|
||||||
let rate_limit_config =
|
let rate_limit_config =
|
||||||
local_site_rate_limit_to_rate_limit_config(&site_view.local_site_rate_limit);
|
local_site_rate_limit_to_rate_limit_config(&site_view.local_site_rate_limit);
|
||||||
|
|
|
@ -43,10 +43,9 @@ impl PerformCrud for Register {
|
||||||
|
|
||||||
#[tracing::instrument(skip(self, context))]
|
#[tracing::instrument(skip(self, context))]
|
||||||
async fn perform(&self, context: &Data<LemmyContext>) -> Result<LoginResponse, LemmyError> {
|
async fn perform(&self, context: &Data<LemmyContext>) -> Result<LoginResponse, LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
let data: &Register = self;
|
let data: &Register = self;
|
||||||
|
|
||||||
let site_view = SiteView::read_local(&mut conn).await?;
|
let site_view = SiteView::read_local(&mut *context.conn().await?).await?;
|
||||||
let local_site = site_view.local_site;
|
let local_site = site_view.local_site;
|
||||||
let require_registration_application =
|
let require_registration_application =
|
||||||
local_site.registration_mode == RegistrationMode::RequireApplication;
|
local_site.registration_mode == RegistrationMode::RequireApplication;
|
||||||
|
@ -105,7 +104,7 @@ impl PerformCrud for Register {
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
if let Some(email) = &data.email {
|
if let Some(email) = &data.email {
|
||||||
if LocalUser::is_email_taken(&mut conn, email).await? {
|
if LocalUser::is_email_taken(&mut *context.conn().await?, email).await? {
|
||||||
return Err(LemmyError::from_message("email_already_exists"));
|
return Err(LemmyError::from_message("email_already_exists"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -126,7 +125,7 @@ impl PerformCrud for Register {
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
// insert the person
|
// insert the person
|
||||||
let inserted_person = Person::create(&mut conn, &person_form)
|
let inserted_person = Person::create(&mut *context.conn().await?, &person_form)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| LemmyError::from_error_message(e, "user_already_exists"))?;
|
.map_err(|e| LemmyError::from_error_message(e, "user_already_exists"))?;
|
||||||
|
|
||||||
|
@ -143,7 +142,8 @@ impl PerformCrud for Register {
|
||||||
.accepted_application(accepted_application)
|
.accepted_application(accepted_application)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
let inserted_local_user = LocalUser::create(&mut conn, &local_user_form).await?;
|
let inserted_local_user =
|
||||||
|
LocalUser::create(&mut *context.conn().await?, &local_user_form).await?;
|
||||||
|
|
||||||
if local_site.site_setup && require_registration_application {
|
if local_site.site_setup && require_registration_application {
|
||||||
// Create the registration application
|
// Create the registration application
|
||||||
|
@ -153,12 +153,17 @@ impl PerformCrud for Register {
|
||||||
answer: data.answer.clone().expect("must have an answer"),
|
answer: data.answer.clone().expect("must have an answer"),
|
||||||
};
|
};
|
||||||
|
|
||||||
RegistrationApplication::create(&mut conn, &form).await?;
|
RegistrationApplication::create(&mut *context.conn().await?, &form).await?;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Email the admins
|
// Email the admins
|
||||||
if local_site.application_email_admins {
|
if local_site.application_email_admins {
|
||||||
send_new_applicant_email_to_admins(&data.username, &mut conn, context.settings()).await?;
|
send_new_applicant_email_to_admins(
|
||||||
|
&data.username,
|
||||||
|
&mut *context.conn().await?,
|
||||||
|
context.settings(),
|
||||||
|
)
|
||||||
|
.await?;
|
||||||
}
|
}
|
||||||
|
|
||||||
let mut login_response = LoginResponse {
|
let mut login_response = LoginResponse {
|
||||||
|
@ -193,7 +198,13 @@ impl PerformCrud for Register {
|
||||||
.clone()
|
.clone()
|
||||||
.expect("email was provided");
|
.expect("email was provided");
|
||||||
|
|
||||||
send_verification_email(&local_user_view, &email, &mut conn, context.settings()).await?;
|
send_verification_email(
|
||||||
|
&local_user_view,
|
||||||
|
&email,
|
||||||
|
&mut *context.conn().await?,
|
||||||
|
context.settings(),
|
||||||
|
)
|
||||||
|
.await?;
|
||||||
login_response.verify_email_sent = true;
|
login_response.verify_email_sent = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -51,8 +51,6 @@ impl BlockUser {
|
||||||
expires: Option<NaiveDateTime>,
|
expires: Option<NaiveDateTime>,
|
||||||
context: &Data<LemmyContext>,
|
context: &Data<LemmyContext>,
|
||||||
) -> Result<BlockUser, LemmyError> {
|
) -> Result<BlockUser, LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
|
|
||||||
let audience = if let SiteOrCommunity::Community(c) = target {
|
let audience = if let SiteOrCommunity::Community(c) = target {
|
||||||
Some(c.id().into())
|
Some(c.id().into())
|
||||||
} else {
|
} else {
|
||||||
|
@ -62,7 +60,7 @@ impl BlockUser {
|
||||||
actor: mod_.id().into(),
|
actor: mod_.id().into(),
|
||||||
to: vec![public()],
|
to: vec![public()],
|
||||||
object: user.id().into(),
|
object: user.id().into(),
|
||||||
cc: generate_cc(target, &mut conn).await?,
|
cc: generate_cc(target, &mut *context.conn().await?).await?,
|
||||||
target: target.id(),
|
target: target.id(),
|
||||||
kind: BlockType::Block,
|
kind: BlockType::Block,
|
||||||
remove_data,
|
remove_data,
|
||||||
|
@ -86,8 +84,6 @@ impl BlockUser {
|
||||||
expires: Option<NaiveDateTime>,
|
expires: Option<NaiveDateTime>,
|
||||||
context: &Data<LemmyContext>,
|
context: &Data<LemmyContext>,
|
||||||
) -> Result<(), LemmyError> {
|
) -> Result<(), LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
|
|
||||||
let block = BlockUser::new(
|
let block = BlockUser::new(
|
||||||
target,
|
target,
|
||||||
user,
|
user,
|
||||||
|
@ -101,7 +97,7 @@ impl BlockUser {
|
||||||
|
|
||||||
match target {
|
match target {
|
||||||
SiteOrCommunity::Site(_) => {
|
SiteOrCommunity::Site(_) => {
|
||||||
let inboxes = remote_instance_inboxes(&mut conn).await?;
|
let inboxes = remote_instance_inboxes(&mut *context.conn().await?).await?;
|
||||||
send_lemmy_activity(context, block, mod_, inboxes, false).await
|
send_lemmy_activity(context, block, mod_, inboxes, false).await
|
||||||
}
|
}
|
||||||
SiteOrCommunity::Community(c) => {
|
SiteOrCommunity::Community(c) => {
|
||||||
|
@ -151,7 +147,6 @@ impl ActivityHandler for BlockUser {
|
||||||
|
|
||||||
#[tracing::instrument(skip_all)]
|
#[tracing::instrument(skip_all)]
|
||||||
async fn receive(self, context: &Data<LemmyContext>) -> Result<(), LemmyError> {
|
async fn receive(self, context: &Data<LemmyContext>) -> Result<(), LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
insert_activity(&self.id, &self, false, false, context).await?;
|
insert_activity(&self.id, &self, false, false, context).await?;
|
||||||
let expires = self.expires.map(|u| u.naive_local());
|
let expires = self.expires.map(|u| u.naive_local());
|
||||||
let mod_person = self.actor.dereference(context).await?;
|
let mod_person = self.actor.dereference(context).await?;
|
||||||
|
@ -160,7 +155,7 @@ impl ActivityHandler for BlockUser {
|
||||||
match target {
|
match target {
|
||||||
SiteOrCommunity::Site(_site) => {
|
SiteOrCommunity::Site(_site) => {
|
||||||
let blocked_person = Person::update(
|
let blocked_person = Person::update(
|
||||||
&mut conn,
|
&mut *context.conn().await?,
|
||||||
blocked_person.id,
|
blocked_person.id,
|
||||||
&PersonUpdateForm::builder()
|
&PersonUpdateForm::builder()
|
||||||
.banned(Some(true))
|
.banned(Some(true))
|
||||||
|
@ -171,7 +166,7 @@ impl ActivityHandler for BlockUser {
|
||||||
if self.remove_data.unwrap_or(false) {
|
if self.remove_data.unwrap_or(false) {
|
||||||
remove_user_data(
|
remove_user_data(
|
||||||
blocked_person.id,
|
blocked_person.id,
|
||||||
&mut conn,
|
&mut *context.conn().await?,
|
||||||
context.settings(),
|
context.settings(),
|
||||||
context.client(),
|
context.client(),
|
||||||
)
|
)
|
||||||
|
@ -186,7 +181,7 @@ impl ActivityHandler for BlockUser {
|
||||||
banned: Some(true),
|
banned: Some(true),
|
||||||
expires,
|
expires,
|
||||||
};
|
};
|
||||||
ModBan::create(&mut conn, &form).await?;
|
ModBan::create(&mut *context.conn().await?, &form).await?;
|
||||||
}
|
}
|
||||||
SiteOrCommunity::Community(community) => {
|
SiteOrCommunity::Community(community) => {
|
||||||
let community_user_ban_form = CommunityPersonBanForm {
|
let community_user_ban_form = CommunityPersonBanForm {
|
||||||
|
@ -194,7 +189,7 @@ impl ActivityHandler for BlockUser {
|
||||||
person_id: blocked_person.id,
|
person_id: blocked_person.id,
|
||||||
expires: Some(expires),
|
expires: Some(expires),
|
||||||
};
|
};
|
||||||
CommunityPersonBan::ban(&mut conn, &community_user_ban_form).await?;
|
CommunityPersonBan::ban(&mut *context.conn().await?, &community_user_ban_form).await?;
|
||||||
|
|
||||||
// Also unsubscribe them from the community, if they are subscribed
|
// Also unsubscribe them from the community, if they are subscribed
|
||||||
let community_follower_form = CommunityFollowerForm {
|
let community_follower_form = CommunityFollowerForm {
|
||||||
|
@ -202,12 +197,17 @@ impl ActivityHandler for BlockUser {
|
||||||
person_id: blocked_person.id,
|
person_id: blocked_person.id,
|
||||||
pending: false,
|
pending: false,
|
||||||
};
|
};
|
||||||
CommunityFollower::unfollow(&mut conn, &community_follower_form)
|
CommunityFollower::unfollow(&mut *context.conn().await?, &community_follower_form)
|
||||||
.await
|
.await
|
||||||
.ok();
|
.ok();
|
||||||
|
|
||||||
if self.remove_data.unwrap_or(false) {
|
if self.remove_data.unwrap_or(false) {
|
||||||
remove_user_data_in_community(community.id, blocked_person.id, &mut conn).await?;
|
remove_user_data_in_community(
|
||||||
|
community.id,
|
||||||
|
blocked_person.id,
|
||||||
|
&mut *context.conn().await?,
|
||||||
|
)
|
||||||
|
.await?;
|
||||||
}
|
}
|
||||||
|
|
||||||
// write to mod log
|
// write to mod log
|
||||||
|
@ -219,7 +219,7 @@ impl ActivityHandler for BlockUser {
|
||||||
banned: Some(true),
|
banned: Some(true),
|
||||||
expires,
|
expires,
|
||||||
};
|
};
|
||||||
ModBanFromCommunity::create(&mut conn, &form).await?;
|
ModBanFromCommunity::create(&mut *context.conn().await?, &form).await?;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -138,10 +138,14 @@ impl SendActivity for BanPerson {
|
||||||
_response: &Self::Response,
|
_response: &Self::Response,
|
||||||
context: &Data<LemmyContext>,
|
context: &Data<LemmyContext>,
|
||||||
) -> Result<(), LemmyError> {
|
) -> Result<(), LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
let local_user_view = local_user_view_from_jwt(&request.auth, context).await?;
|
let local_user_view = local_user_view_from_jwt(&request.auth, context).await?;
|
||||||
let person = Person::read(&mut conn, request.person_id).await?;
|
let person = Person::read(&mut *context.conn().await?, request.person_id).await?;
|
||||||
let site = SiteOrCommunity::Site(SiteView::read_local(&mut conn).await?.site.into());
|
let site = SiteOrCommunity::Site(
|
||||||
|
SiteView::read_local(&mut *context.conn().await?)
|
||||||
|
.await?
|
||||||
|
.site
|
||||||
|
.into(),
|
||||||
|
);
|
||||||
let expires = request.expires.map(naive_from_unix);
|
let expires = request.expires.map(naive_from_unix);
|
||||||
|
|
||||||
// if the action affects a local user, federate to other instances
|
// if the action affects a local user, federate to other instances
|
||||||
|
@ -182,12 +186,14 @@ impl SendActivity for BanFromCommunity {
|
||||||
_response: &Self::Response,
|
_response: &Self::Response,
|
||||||
context: &Data<LemmyContext>,
|
context: &Data<LemmyContext>,
|
||||||
) -> Result<(), LemmyError> {
|
) -> Result<(), LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
let local_user_view = local_user_view_from_jwt(&request.auth, context).await?;
|
let local_user_view = local_user_view_from_jwt(&request.auth, context).await?;
|
||||||
let community: ApubCommunity = Community::read(&mut conn, request.community_id)
|
let community: ApubCommunity =
|
||||||
|
Community::read(&mut *context.conn().await?, request.community_id)
|
||||||
|
.await?
|
||||||
|
.into();
|
||||||
|
let banned_person: ApubPerson = Person::read(&mut *context.conn().await?, request.person_id)
|
||||||
.await?
|
.await?
|
||||||
.into();
|
.into();
|
||||||
let banned_person: ApubPerson = Person::read(&mut conn, request.person_id).await?.into();
|
|
||||||
let expires = request.expires.map(naive_from_unix);
|
let expires = request.expires.map(naive_from_unix);
|
||||||
|
|
||||||
if request.ban {
|
if request.ban {
|
||||||
|
|
|
@ -38,7 +38,6 @@ impl UndoBlockUser {
|
||||||
reason: Option<String>,
|
reason: Option<String>,
|
||||||
context: &Data<LemmyContext>,
|
context: &Data<LemmyContext>,
|
||||||
) -> Result<(), LemmyError> {
|
) -> Result<(), LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
let block = BlockUser::new(target, user, mod_, None, reason, None, context).await?;
|
let block = BlockUser::new(target, user, mod_, None, reason, None, context).await?;
|
||||||
let audience = if let SiteOrCommunity::Community(c) = target {
|
let audience = if let SiteOrCommunity::Community(c) = target {
|
||||||
Some(c.id().into())
|
Some(c.id().into())
|
||||||
|
@ -54,7 +53,7 @@ impl UndoBlockUser {
|
||||||
actor: mod_.id().into(),
|
actor: mod_.id().into(),
|
||||||
to: vec![public()],
|
to: vec![public()],
|
||||||
object: block,
|
object: block,
|
||||||
cc: generate_cc(target, &mut conn).await?,
|
cc: generate_cc(target, &mut *context.conn().await?).await?,
|
||||||
kind: UndoType::Undo,
|
kind: UndoType::Undo,
|
||||||
id: id.clone(),
|
id: id.clone(),
|
||||||
audience,
|
audience,
|
||||||
|
@ -63,7 +62,7 @@ impl UndoBlockUser {
|
||||||
let mut inboxes = vec![user.shared_inbox_or_inbox()];
|
let mut inboxes = vec![user.shared_inbox_or_inbox()];
|
||||||
match target {
|
match target {
|
||||||
SiteOrCommunity::Site(_) => {
|
SiteOrCommunity::Site(_) => {
|
||||||
inboxes.append(&mut remote_instance_inboxes(&mut conn).await?);
|
inboxes.append(&mut remote_instance_inboxes(&mut *context.conn().await?).await?);
|
||||||
send_lemmy_activity(context, undo, mod_, inboxes, false).await
|
send_lemmy_activity(context, undo, mod_, inboxes, false).await
|
||||||
}
|
}
|
||||||
SiteOrCommunity::Community(c) => {
|
SiteOrCommunity::Community(c) => {
|
||||||
|
@ -97,7 +96,6 @@ impl ActivityHandler for UndoBlockUser {
|
||||||
|
|
||||||
#[tracing::instrument(skip_all)]
|
#[tracing::instrument(skip_all)]
|
||||||
async fn receive(self, context: &Data<LemmyContext>) -> Result<(), LemmyError> {
|
async fn receive(self, context: &Data<LemmyContext>) -> Result<(), LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
insert_activity(&self.id, &self, false, false, context).await?;
|
insert_activity(&self.id, &self, false, false, context).await?;
|
||||||
let expires = self.object.expires.map(|u| u.naive_local());
|
let expires = self.object.expires.map(|u| u.naive_local());
|
||||||
let mod_person = self.actor.dereference(context).await?;
|
let mod_person = self.actor.dereference(context).await?;
|
||||||
|
@ -105,7 +103,7 @@ impl ActivityHandler for UndoBlockUser {
|
||||||
match self.object.target.dereference(context).await? {
|
match self.object.target.dereference(context).await? {
|
||||||
SiteOrCommunity::Site(_site) => {
|
SiteOrCommunity::Site(_site) => {
|
||||||
let blocked_person = Person::update(
|
let blocked_person = Person::update(
|
||||||
&mut conn,
|
&mut *context.conn().await?,
|
||||||
blocked_person.id,
|
blocked_person.id,
|
||||||
&PersonUpdateForm::builder()
|
&PersonUpdateForm::builder()
|
||||||
.banned(Some(false))
|
.banned(Some(false))
|
||||||
|
@ -122,7 +120,7 @@ impl ActivityHandler for UndoBlockUser {
|
||||||
banned: Some(false),
|
banned: Some(false),
|
||||||
expires,
|
expires,
|
||||||
};
|
};
|
||||||
ModBan::create(&mut conn, &form).await?;
|
ModBan::create(&mut *context.conn().await?, &form).await?;
|
||||||
}
|
}
|
||||||
SiteOrCommunity::Community(community) => {
|
SiteOrCommunity::Community(community) => {
|
||||||
let community_user_ban_form = CommunityPersonBanForm {
|
let community_user_ban_form = CommunityPersonBanForm {
|
||||||
|
@ -130,7 +128,7 @@ impl ActivityHandler for UndoBlockUser {
|
||||||
person_id: blocked_person.id,
|
person_id: blocked_person.id,
|
||||||
expires: None,
|
expires: None,
|
||||||
};
|
};
|
||||||
CommunityPersonBan::unban(&mut conn, &community_user_ban_form).await?;
|
CommunityPersonBan::unban(&mut *context.conn().await?, &community_user_ban_form).await?;
|
||||||
|
|
||||||
// write to mod log
|
// write to mod log
|
||||||
let form = ModBanFromCommunityForm {
|
let form = ModBanFromCommunityForm {
|
||||||
|
@ -141,7 +139,7 @@ impl ActivityHandler for UndoBlockUser {
|
||||||
banned: Some(false),
|
banned: Some(false),
|
||||||
expires,
|
expires,
|
||||||
};
|
};
|
||||||
ModBanFromCommunity::create(&mut conn, &form).await?;
|
ModBanFromCommunity::create(&mut *context.conn().await?, &form).await?;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -117,10 +117,9 @@ impl ActivityHandler for CollectionAdd {
|
||||||
|
|
||||||
#[tracing::instrument(skip_all)]
|
#[tracing::instrument(skip_all)]
|
||||||
async fn receive(self, context: &Data<Self::DataType>) -> Result<(), LemmyError> {
|
async fn receive(self, context: &Data<Self::DataType>) -> Result<(), LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
insert_activity(&self.id, &self, false, false, context).await?;
|
insert_activity(&self.id, &self, false, false, context).await?;
|
||||||
let (community, collection_type) =
|
let (community, collection_type) =
|
||||||
Community::get_by_collection_url(&mut conn, &self.target.into()).await?;
|
Community::get_by_collection_url(&mut *context.conn().await?, &self.target.into()).await?;
|
||||||
match collection_type {
|
match collection_type {
|
||||||
CollectionType::Moderators => {
|
CollectionType::Moderators => {
|
||||||
let new_mod = ObjectId::<ApubPerson>::from(self.object)
|
let new_mod = ObjectId::<ApubPerson>::from(self.object)
|
||||||
|
@ -130,14 +129,17 @@ impl ActivityHandler for CollectionAdd {
|
||||||
// If we had to refetch the community while parsing the activity, then the new mod has already
|
// If we had to refetch the community while parsing the activity, then the new mod has already
|
||||||
// been added. Skip it here as it would result in a duplicate key error.
|
// been added. Skip it here as it would result in a duplicate key error.
|
||||||
let new_mod_id = new_mod.id;
|
let new_mod_id = new_mod.id;
|
||||||
let moderated_communities =
|
let moderated_communities = CommunityModerator::get_person_moderated_communities(
|
||||||
CommunityModerator::get_person_moderated_communities(&mut conn, new_mod_id).await?;
|
&mut *context.conn().await?,
|
||||||
|
new_mod_id,
|
||||||
|
)
|
||||||
|
.await?;
|
||||||
if !moderated_communities.contains(&community.id) {
|
if !moderated_communities.contains(&community.id) {
|
||||||
let form = CommunityModeratorForm {
|
let form = CommunityModeratorForm {
|
||||||
community_id: community.id,
|
community_id: community.id,
|
||||||
person_id: new_mod.id,
|
person_id: new_mod.id,
|
||||||
};
|
};
|
||||||
CommunityModerator::join(&mut conn, &form).await?;
|
CommunityModerator::join(&mut *context.conn().await?, &form).await?;
|
||||||
|
|
||||||
// write mod log
|
// write mod log
|
||||||
let actor = self.actor.dereference(context).await?;
|
let actor = self.actor.dereference(context).await?;
|
||||||
|
@ -147,7 +149,7 @@ impl ActivityHandler for CollectionAdd {
|
||||||
community_id: community.id,
|
community_id: community.id,
|
||||||
removed: Some(false),
|
removed: Some(false),
|
||||||
};
|
};
|
||||||
ModAddCommunity::create(&mut conn, &form).await?;
|
ModAddCommunity::create(&mut *context.conn().await?, &form).await?;
|
||||||
}
|
}
|
||||||
// TODO: send websocket notification about added mod
|
// TODO: send websocket notification about added mod
|
||||||
}
|
}
|
||||||
|
@ -158,7 +160,7 @@ impl ActivityHandler for CollectionAdd {
|
||||||
let form = PostUpdateForm::builder()
|
let form = PostUpdateForm::builder()
|
||||||
.featured_community(Some(true))
|
.featured_community(Some(true))
|
||||||
.build();
|
.build();
|
||||||
Post::update(&mut conn, post.id, &form).await?;
|
Post::update(&mut *context.conn().await?, post.id, &form).await?;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Ok(())
|
Ok(())
|
||||||
|
@ -174,12 +176,14 @@ impl SendActivity for AddModToCommunity {
|
||||||
_response: &Self::Response,
|
_response: &Self::Response,
|
||||||
context: &Data<LemmyContext>,
|
context: &Data<LemmyContext>,
|
||||||
) -> Result<(), LemmyError> {
|
) -> Result<(), LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
let local_user_view = local_user_view_from_jwt(&request.auth, context).await?;
|
let local_user_view = local_user_view_from_jwt(&request.auth, context).await?;
|
||||||
let community: ApubCommunity = Community::read(&mut conn, request.community_id)
|
let community: ApubCommunity =
|
||||||
|
Community::read(&mut *context.conn().await?, request.community_id)
|
||||||
|
.await?
|
||||||
|
.into();
|
||||||
|
let updated_mod: ApubPerson = Person::read(&mut *context.conn().await?, request.person_id)
|
||||||
.await?
|
.await?
|
||||||
.into();
|
.into();
|
||||||
let updated_mod: ApubPerson = Person::read(&mut conn, request.person_id).await?.into();
|
|
||||||
if request.added {
|
if request.added {
|
||||||
CollectionAdd::send_add_mod(
|
CollectionAdd::send_add_mod(
|
||||||
&community,
|
&community,
|
||||||
|
@ -209,9 +213,8 @@ impl SendActivity for FeaturePost {
|
||||||
response: &Self::Response,
|
response: &Self::Response,
|
||||||
context: &Data<LemmyContext>,
|
context: &Data<LemmyContext>,
|
||||||
) -> Result<(), LemmyError> {
|
) -> Result<(), LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
let local_user_view = local_user_view_from_jwt(&request.auth, context).await?;
|
let local_user_view = local_user_view_from_jwt(&request.auth, context).await?;
|
||||||
let community = Community::read(&mut conn, response.post_view.community.id)
|
let community = Community::read(&mut *context.conn().await?, response.post_view.community.id)
|
||||||
.await?
|
.await?
|
||||||
.into();
|
.into();
|
||||||
let post = response.post_view.post.clone().into();
|
let post = response.post_view.post.clone().into();
|
||||||
|
|
|
@ -110,10 +110,9 @@ impl ActivityHandler for CollectionRemove {
|
||||||
|
|
||||||
#[tracing::instrument(skip_all)]
|
#[tracing::instrument(skip_all)]
|
||||||
async fn receive(self, context: &Data<Self::DataType>) -> Result<(), LemmyError> {
|
async fn receive(self, context: &Data<Self::DataType>) -> Result<(), LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
insert_activity(&self.id, &self, false, false, context).await?;
|
insert_activity(&self.id, &self, false, false, context).await?;
|
||||||
let (community, collection_type) =
|
let (community, collection_type) =
|
||||||
Community::get_by_collection_url(&mut conn, &self.target.into()).await?;
|
Community::get_by_collection_url(&mut *context.conn().await?, &self.target.into()).await?;
|
||||||
match collection_type {
|
match collection_type {
|
||||||
CollectionType::Moderators => {
|
CollectionType::Moderators => {
|
||||||
let remove_mod = ObjectId::<ApubPerson>::from(self.object)
|
let remove_mod = ObjectId::<ApubPerson>::from(self.object)
|
||||||
|
@ -124,7 +123,7 @@ impl ActivityHandler for CollectionRemove {
|
||||||
community_id: community.id,
|
community_id: community.id,
|
||||||
person_id: remove_mod.id,
|
person_id: remove_mod.id,
|
||||||
};
|
};
|
||||||
CommunityModerator::leave(&mut conn, &form).await?;
|
CommunityModerator::leave(&mut *context.conn().await?, &form).await?;
|
||||||
|
|
||||||
// write mod log
|
// write mod log
|
||||||
let actor = self.actor.dereference(context).await?;
|
let actor = self.actor.dereference(context).await?;
|
||||||
|
@ -134,7 +133,7 @@ impl ActivityHandler for CollectionRemove {
|
||||||
community_id: community.id,
|
community_id: community.id,
|
||||||
removed: Some(true),
|
removed: Some(true),
|
||||||
};
|
};
|
||||||
ModAddCommunity::create(&mut conn, &form).await?;
|
ModAddCommunity::create(&mut *context.conn().await?, &form).await?;
|
||||||
|
|
||||||
// TODO: send websocket notification about removed mod
|
// TODO: send websocket notification about removed mod
|
||||||
}
|
}
|
||||||
|
@ -145,7 +144,7 @@ impl ActivityHandler for CollectionRemove {
|
||||||
let form = PostUpdateForm::builder()
|
let form = PostUpdateForm::builder()
|
||||||
.featured_community(Some(false))
|
.featured_community(Some(false))
|
||||||
.build();
|
.build();
|
||||||
Post::update(&mut conn, post.id, &form).await?;
|
Post::update(&mut *context.conn().await?, post.id, &form).await?;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Ok(())
|
Ok(())
|
||||||
|
|
|
@ -58,10 +58,9 @@ impl ActivityHandler for LockPage {
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn receive(self, context: &Data<Self::DataType>) -> Result<(), Self::Error> {
|
async fn receive(self, context: &Data<Self::DataType>) -> Result<(), Self::Error> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
let form = PostUpdateForm::builder().locked(Some(true)).build();
|
let form = PostUpdateForm::builder().locked(Some(true)).build();
|
||||||
let post = self.object.dereference(context).await?;
|
let post = self.object.dereference(context).await?;
|
||||||
Post::update(&mut conn, post.id, &form).await?;
|
Post::update(&mut *context.conn().await?, post.id, &form).await?;
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -95,11 +94,10 @@ impl ActivityHandler for UndoLockPage {
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn receive(self, context: &Data<Self::DataType>) -> Result<(), Self::Error> {
|
async fn receive(self, context: &Data<Self::DataType>) -> Result<(), Self::Error> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
insert_activity(&self.id, &self, false, false, context).await?;
|
insert_activity(&self.id, &self, false, false, context).await?;
|
||||||
let form = PostUpdateForm::builder().locked(Some(false)).build();
|
let form = PostUpdateForm::builder().locked(Some(false)).build();
|
||||||
let post = self.object.object.dereference(context).await?;
|
let post = self.object.object.dereference(context).await?;
|
||||||
Post::update(&mut conn, post.id, &form).await?;
|
Post::update(&mut *context.conn().await?, post.id, &form).await?;
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -113,7 +111,6 @@ impl SendActivity for LockPost {
|
||||||
response: &Self::Response,
|
response: &Self::Response,
|
||||||
context: &Data<LemmyContext>,
|
context: &Data<LemmyContext>,
|
||||||
) -> Result<(), LemmyError> {
|
) -> Result<(), LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
let local_user_view = local_user_view_from_jwt(&request.auth, context).await?;
|
let local_user_view = local_user_view_from_jwt(&request.auth, context).await?;
|
||||||
let id = generate_activity_id(
|
let id = generate_activity_id(
|
||||||
LockType::Lock,
|
LockType::Lock,
|
||||||
|
@ -148,7 +145,8 @@ impl SendActivity for LockPost {
|
||||||
};
|
};
|
||||||
AnnouncableActivities::UndoLockPost(undo)
|
AnnouncableActivities::UndoLockPost(undo)
|
||||||
};
|
};
|
||||||
let community = Community::read(&mut conn, response.post_view.community.id).await?;
|
let community =
|
||||||
|
Community::read(&mut *context.conn().await?, response.post_view.community.id).await?;
|
||||||
send_activity_in_community(
|
send_activity_in_community(
|
||||||
activity,
|
activity,
|
||||||
&local_user_view.person.into(),
|
&local_user_view.person.into(),
|
||||||
|
|
|
@ -38,13 +38,13 @@ pub(crate) async fn send_activity_in_community(
|
||||||
is_mod_action: bool,
|
is_mod_action: bool,
|
||||||
context: &Data<LemmyContext>,
|
context: &Data<LemmyContext>,
|
||||||
) -> Result<(), LemmyError> {
|
) -> Result<(), LemmyError> {
|
||||||
let mut conn = context.conn().await?; // send to any users which are mentioned or affected directly
|
// send to any users which are mentioned or affected directly
|
||||||
let mut inboxes = extra_inboxes;
|
let mut inboxes = extra_inboxes;
|
||||||
|
|
||||||
// send to user followers
|
// send to user followers
|
||||||
if !is_mod_action {
|
if !is_mod_action {
|
||||||
inboxes.extend(
|
inboxes.extend(
|
||||||
&mut PersonFollower::list_followers(&mut conn, actor.id)
|
&mut PersonFollower::list_followers(&mut *context.conn().await?, actor.id)
|
||||||
.await?
|
.await?
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.map(|p| ApubPerson(p).shared_inbox_or_inbox()),
|
.map(|p| ApubPerson(p).shared_inbox_or_inbox()),
|
||||||
|
|
|
@ -122,7 +122,6 @@ impl ActivityHandler for Report {
|
||||||
|
|
||||||
#[tracing::instrument(skip_all)]
|
#[tracing::instrument(skip_all)]
|
||||||
async fn receive(self, context: &Data<Self::DataType>) -> Result<(), LemmyError> {
|
async fn receive(self, context: &Data<Self::DataType>) -> Result<(), LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
insert_activity(&self.id, &self, false, true, context).await?;
|
insert_activity(&self.id, &self, false, true, context).await?;
|
||||||
let actor = self.actor.dereference(context).await?;
|
let actor = self.actor.dereference(context).await?;
|
||||||
match self.object.dereference(context).await? {
|
match self.object.dereference(context).await? {
|
||||||
|
@ -135,7 +134,7 @@ impl ActivityHandler for Report {
|
||||||
reason: self.summary,
|
reason: self.summary,
|
||||||
original_post_body: post.body.clone(),
|
original_post_body: post.body.clone(),
|
||||||
};
|
};
|
||||||
PostReport::report(&mut conn, &report_form).await?;
|
PostReport::report(&mut *context.conn().await?, &report_form).await?;
|
||||||
}
|
}
|
||||||
PostOrComment::Comment(comment) => {
|
PostOrComment::Comment(comment) => {
|
||||||
let report_form = CommentReportForm {
|
let report_form = CommentReportForm {
|
||||||
|
@ -144,7 +143,7 @@ impl ActivityHandler for Report {
|
||||||
original_comment_text: comment.content.clone(),
|
original_comment_text: comment.content.clone(),
|
||||||
reason: self.summary,
|
reason: self.summary,
|
||||||
};
|
};
|
||||||
CommentReport::report(&mut conn, &report_form).await?;
|
CommentReport::report(&mut *context.conn().await?, &report_form).await?;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
Ok(())
|
Ok(())
|
||||||
|
|
|
@ -35,9 +35,8 @@ impl SendActivity for EditCommunity {
|
||||||
_response: &Self::Response,
|
_response: &Self::Response,
|
||||||
context: &Data<LemmyContext>,
|
context: &Data<LemmyContext>,
|
||||||
) -> Result<(), LemmyError> {
|
) -> Result<(), LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
let local_user_view = local_user_view_from_jwt(&request.auth, context).await?;
|
let local_user_view = local_user_view_from_jwt(&request.auth, context).await?;
|
||||||
let community = Community::read(&mut conn, request.community_id).await?;
|
let community = Community::read(&mut *context.conn().await?, request.community_id).await?;
|
||||||
UpdateCommunity::send(community.into(), &local_user_view.person.into(), context).await
|
UpdateCommunity::send(community.into(), &local_user_view.person.into(), context).await
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -93,13 +92,17 @@ impl ActivityHandler for UpdateCommunity {
|
||||||
|
|
||||||
#[tracing::instrument(skip_all)]
|
#[tracing::instrument(skip_all)]
|
||||||
async fn receive(self, context: &Data<Self::DataType>) -> Result<(), LemmyError> {
|
async fn receive(self, context: &Data<Self::DataType>) -> Result<(), LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
insert_activity(&self.id, &self, false, false, context).await?;
|
insert_activity(&self.id, &self, false, false, context).await?;
|
||||||
let community = self.community(context).await?;
|
let community = self.community(context).await?;
|
||||||
|
|
||||||
let community_update_form = self.object.into_update_form();
|
let community_update_form = self.object.into_update_form();
|
||||||
|
|
||||||
Community::update(&mut conn, community.id, &community_update_form).await?;
|
Community::update(
|
||||||
|
&mut *context.conn().await?,
|
||||||
|
community.id,
|
||||||
|
&community_update_form,
|
||||||
|
)
|
||||||
|
.await?;
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -113,9 +116,8 @@ impl SendActivity for HideCommunity {
|
||||||
_response: &Self::Response,
|
_response: &Self::Response,
|
||||||
context: &Data<LemmyContext>,
|
context: &Data<LemmyContext>,
|
||||||
) -> Result<(), LemmyError> {
|
) -> Result<(), LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
let local_user_view = local_user_view_from_jwt(&request.auth, context).await?;
|
let local_user_view = local_user_view_from_jwt(&request.auth, context).await?;
|
||||||
let community = Community::read(&mut conn, request.community_id).await?;
|
let community = Community::read(&mut *context.conn().await?, request.community_id).await?;
|
||||||
UpdateCommunity::send(community.into(), &local_user_view.person.into(), context).await
|
UpdateCommunity::send(community.into(), &local_user_view.person.into(), context).await
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -89,12 +89,16 @@ impl CreateOrUpdateNote {
|
||||||
kind: CreateOrUpdateType,
|
kind: CreateOrUpdateType,
|
||||||
context: &Data<LemmyContext>,
|
context: &Data<LemmyContext>,
|
||||||
) -> Result<(), LemmyError> {
|
) -> Result<(), LemmyError> {
|
||||||
let mut conn = context.conn().await?; // TODO: might be helpful to add a comment method to retrieve community directly
|
// TODO: might be helpful to add a comment method to retrieve community directly
|
||||||
let post_id = comment.post_id;
|
let post_id = comment.post_id;
|
||||||
let post = Post::read(&mut conn, post_id).await?;
|
let post = Post::read(&mut *context.conn().await?, post_id).await?;
|
||||||
let community_id = post.community_id;
|
let community_id = post.community_id;
|
||||||
let person: ApubPerson = Person::read(&mut conn, person_id).await?.into();
|
let person: ApubPerson = Person::read(&mut *context.conn().await?, person_id)
|
||||||
let community: ApubCommunity = Community::read(&mut conn, community_id).await?.into();
|
.await?
|
||||||
|
.into();
|
||||||
|
let community: ApubCommunity = Community::read(&mut *context.conn().await?, community_id)
|
||||||
|
.await?
|
||||||
|
.into();
|
||||||
|
|
||||||
let id = generate_activity_id(
|
let id = generate_activity_id(
|
||||||
kind.clone(),
|
kind.clone(),
|
||||||
|
@ -167,7 +171,6 @@ impl ActivityHandler for CreateOrUpdateNote {
|
||||||
|
|
||||||
#[tracing::instrument(skip_all)]
|
#[tracing::instrument(skip_all)]
|
||||||
async fn receive(self, context: &Data<Self::DataType>) -> Result<(), LemmyError> {
|
async fn receive(self, context: &Data<Self::DataType>) -> Result<(), LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
insert_activity(&self.id, &self, false, false, context).await?;
|
insert_activity(&self.id, &self, false, false, context).await?;
|
||||||
// Need to do this check here instead of Note::from_json because we need the person who
|
// Need to do this check here instead of Note::from_json because we need the person who
|
||||||
// send the activity, not the comment author.
|
// send the activity, not the comment author.
|
||||||
|
@ -178,7 +181,7 @@ impl ActivityHandler for CreateOrUpdateNote {
|
||||||
if distinguished != existing_comment.distinguished {
|
if distinguished != existing_comment.distinguished {
|
||||||
let creator = self.actor.dereference(context).await?;
|
let creator = self.actor.dereference(context).await?;
|
||||||
let (post, _) = self.object.get_parents(context).await?;
|
let (post, _) = self.object.get_parents(context).await?;
|
||||||
is_mod_or_admin(&mut conn, creator.id, post.community_id).await?;
|
is_mod_or_admin(&mut *context.conn().await?, creator.id, post.community_id).await?;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -191,14 +194,14 @@ impl ActivityHandler for CreateOrUpdateNote {
|
||||||
person_id: comment.creator_id,
|
person_id: comment.creator_id,
|
||||||
score: 1,
|
score: 1,
|
||||||
};
|
};
|
||||||
CommentLike::like(&mut conn, &like_form).await?;
|
CommentLike::like(&mut *context.conn().await?, &like_form).await?;
|
||||||
|
|
||||||
// Calculate initial hot_rank
|
// Calculate initial hot_rank
|
||||||
CommentAggregates::update_hot_rank(&mut conn, comment.id).await?;
|
CommentAggregates::update_hot_rank(&mut *context.conn().await?, comment.id).await?;
|
||||||
|
|
||||||
let do_send_email = self.kind == CreateOrUpdateType::Create;
|
let do_send_email = self.kind == CreateOrUpdateType::Create;
|
||||||
let post_id = comment.post_id;
|
let post_id = comment.post_id;
|
||||||
let post = Post::read(&mut conn, post_id).await?;
|
let post = Post::read(&mut *context.conn().await?, post_id).await?;
|
||||||
let actor = self.actor.dereference(context).await?;
|
let actor = self.actor.dereference(context).await?;
|
||||||
|
|
||||||
// Note:
|
// Note:
|
||||||
|
|
|
@ -107,11 +107,14 @@ impl CreateOrUpdatePage {
|
||||||
kind: CreateOrUpdateType,
|
kind: CreateOrUpdateType,
|
||||||
context: &Data<LemmyContext>,
|
context: &Data<LemmyContext>,
|
||||||
) -> Result<(), LemmyError> {
|
) -> Result<(), LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
let post = ApubPost(post.clone());
|
let post = ApubPost(post.clone());
|
||||||
let community_id = post.community_id;
|
let community_id = post.community_id;
|
||||||
let person: ApubPerson = Person::read(&mut conn, person_id).await?.into();
|
let person: ApubPerson = Person::read(&mut *context.conn().await?, person_id)
|
||||||
let community: ApubCommunity = Community::read(&mut conn, community_id).await?.into();
|
.await?
|
||||||
|
.into();
|
||||||
|
let community: ApubCommunity = Community::read(&mut *context.conn().await?, community_id)
|
||||||
|
.await?
|
||||||
|
.into();
|
||||||
|
|
||||||
let create_or_update =
|
let create_or_update =
|
||||||
CreateOrUpdatePage::new(post, &person, &community, kind, context).await?;
|
CreateOrUpdatePage::new(post, &person, &community, kind, context).await?;
|
||||||
|
@ -179,7 +182,6 @@ impl ActivityHandler for CreateOrUpdatePage {
|
||||||
|
|
||||||
#[tracing::instrument(skip_all)]
|
#[tracing::instrument(skip_all)]
|
||||||
async fn receive(self, context: &Data<LemmyContext>) -> Result<(), LemmyError> {
|
async fn receive(self, context: &Data<LemmyContext>) -> Result<(), LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
insert_activity(&self.id, &self, false, false, context).await?;
|
insert_activity(&self.id, &self, false, false, context).await?;
|
||||||
let post = ApubPost::from_json(self.object, context).await?;
|
let post = ApubPost::from_json(self.object, context).await?;
|
||||||
|
|
||||||
|
@ -189,10 +191,10 @@ impl ActivityHandler for CreateOrUpdatePage {
|
||||||
person_id: post.creator_id,
|
person_id: post.creator_id,
|
||||||
score: 1,
|
score: 1,
|
||||||
};
|
};
|
||||||
PostLike::like(&mut conn, &like_form).await?;
|
PostLike::like(&mut *context.conn().await?, &like_form).await?;
|
||||||
|
|
||||||
// Calculate initial hot_rank for post
|
// Calculate initial hot_rank for post
|
||||||
PostAggregates::update_hot_rank(&mut conn, post.id).await?;
|
PostAggregates::update_hot_rank(&mut *context.conn().await?, post.id).await?;
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
|
@ -70,10 +70,13 @@ impl CreateOrUpdateChatMessage {
|
||||||
kind: CreateOrUpdateType,
|
kind: CreateOrUpdateType,
|
||||||
context: &Data<LemmyContext>,
|
context: &Data<LemmyContext>,
|
||||||
) -> Result<(), LemmyError> {
|
) -> Result<(), LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
let recipient_id = private_message.recipient_id;
|
let recipient_id = private_message.recipient_id;
|
||||||
let sender: ApubPerson = Person::read(&mut conn, sender_id).await?.into();
|
let sender: ApubPerson = Person::read(&mut *context.conn().await?, sender_id)
|
||||||
let recipient: ApubPerson = Person::read(&mut conn, recipient_id).await?.into();
|
.await?
|
||||||
|
.into();
|
||||||
|
let recipient: ApubPerson = Person::read(&mut *context.conn().await?, recipient_id)
|
||||||
|
.await?
|
||||||
|
.into();
|
||||||
|
|
||||||
let id = generate_activity_id(
|
let id = generate_activity_id(
|
||||||
kind.clone(),
|
kind.clone(),
|
||||||
|
|
|
@ -105,7 +105,6 @@ pub(in crate::activities) async fn receive_remove_action(
|
||||||
reason: Option<String>,
|
reason: Option<String>,
|
||||||
context: &Data<LemmyContext>,
|
context: &Data<LemmyContext>,
|
||||||
) -> Result<(), LemmyError> {
|
) -> Result<(), LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
match DeletableObjects::read_from_db(object, context).await? {
|
match DeletableObjects::read_from_db(object, context).await? {
|
||||||
DeletableObjects::Community(community) => {
|
DeletableObjects::Community(community) => {
|
||||||
if community.local {
|
if community.local {
|
||||||
|
@ -120,9 +119,9 @@ pub(in crate::activities) async fn receive_remove_action(
|
||||||
reason,
|
reason,
|
||||||
expires: None,
|
expires: None,
|
||||||
};
|
};
|
||||||
ModRemoveCommunity::create(&mut conn, &form).await?;
|
ModRemoveCommunity::create(&mut *context.conn().await?, &form).await?;
|
||||||
Community::update(
|
Community::update(
|
||||||
&mut conn,
|
&mut *context.conn().await?,
|
||||||
community.id,
|
community.id,
|
||||||
&CommunityUpdateForm::builder().removed(Some(true)).build(),
|
&CommunityUpdateForm::builder().removed(Some(true)).build(),
|
||||||
)
|
)
|
||||||
|
@ -135,9 +134,9 @@ pub(in crate::activities) async fn receive_remove_action(
|
||||||
removed: Some(true),
|
removed: Some(true),
|
||||||
reason,
|
reason,
|
||||||
};
|
};
|
||||||
ModRemovePost::create(&mut conn, &form).await?;
|
ModRemovePost::create(&mut *context.conn().await?, &form).await?;
|
||||||
Post::update(
|
Post::update(
|
||||||
&mut conn,
|
&mut *context.conn().await?,
|
||||||
post.id,
|
post.id,
|
||||||
&PostUpdateForm::builder().removed(Some(true)).build(),
|
&PostUpdateForm::builder().removed(Some(true)).build(),
|
||||||
)
|
)
|
||||||
|
@ -150,9 +149,9 @@ pub(in crate::activities) async fn receive_remove_action(
|
||||||
removed: Some(true),
|
removed: Some(true),
|
||||||
reason,
|
reason,
|
||||||
};
|
};
|
||||||
ModRemoveComment::create(&mut conn, &form).await?;
|
ModRemoveComment::create(&mut *context.conn().await?, &form).await?;
|
||||||
Comment::update(
|
Comment::update(
|
||||||
&mut conn,
|
&mut *context.conn().await?,
|
||||||
comment.id,
|
comment.id,
|
||||||
&CommentUpdateForm::builder().removed(Some(true)).build(),
|
&CommentUpdateForm::builder().removed(Some(true)).build(),
|
||||||
)
|
)
|
||||||
|
|
|
@ -28,10 +28,15 @@ impl SendActivity for DeleteAccount {
|
||||||
_response: &Self::Response,
|
_response: &Self::Response,
|
||||||
context: &Data<LemmyContext>,
|
context: &Data<LemmyContext>,
|
||||||
) -> Result<(), LemmyError> {
|
) -> Result<(), LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
let local_user_view = local_user_view_from_jwt(&request.auth, context).await?;
|
let local_user_view = local_user_view_from_jwt(&request.auth, context).await?;
|
||||||
let actor: ApubPerson = local_user_view.person.into();
|
let actor: ApubPerson = local_user_view.person.into();
|
||||||
delete_user_account(actor.id, &mut conn, context.settings(), context.client()).await?;
|
delete_user_account(
|
||||||
|
actor.id,
|
||||||
|
&mut *context.conn().await?,
|
||||||
|
context.settings(),
|
||||||
|
context.client(),
|
||||||
|
)
|
||||||
|
.await?;
|
||||||
|
|
||||||
let id = generate_activity_id(
|
let id = generate_activity_id(
|
||||||
DeleteType::Delete,
|
DeleteType::Delete,
|
||||||
|
@ -46,7 +51,7 @@ impl SendActivity for DeleteAccount {
|
||||||
cc: vec![],
|
cc: vec![],
|
||||||
};
|
};
|
||||||
|
|
||||||
let inboxes = remote_instance_inboxes(&mut conn).await?;
|
let inboxes = remote_instance_inboxes(&mut *context.conn().await?).await?;
|
||||||
send_lemmy_activity(context, delete, &actor, inboxes, true).await?;
|
send_lemmy_activity(context, delete, &actor, inboxes, true).await?;
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
@ -75,10 +80,15 @@ impl ActivityHandler for DeleteUser {
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn receive(self, context: &Data<Self::DataType>) -> Result<(), LemmyError> {
|
async fn receive(self, context: &Data<Self::DataType>) -> Result<(), LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
insert_activity(&self.id, &self, false, false, context).await?;
|
insert_activity(&self.id, &self, false, false, context).await?;
|
||||||
let actor = self.actor.dereference(context).await?;
|
let actor = self.actor.dereference(context).await?;
|
||||||
delete_user_account(actor.id, &mut conn, context.settings(), context.client()).await?;
|
delete_user_account(
|
||||||
|
actor.id,
|
||||||
|
&mut *context.conn().await?,
|
||||||
|
context.settings(),
|
||||||
|
context.client(),
|
||||||
|
)
|
||||||
|
.await?;
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -63,9 +63,9 @@ impl SendActivity for DeletePost {
|
||||||
response: &Self::Response,
|
response: &Self::Response,
|
||||||
context: &Data<LemmyContext>,
|
context: &Data<LemmyContext>,
|
||||||
) -> Result<(), LemmyError> {
|
) -> Result<(), LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
let local_user_view = local_user_view_from_jwt(&request.auth, context).await?;
|
let local_user_view = local_user_view_from_jwt(&request.auth, context).await?;
|
||||||
let community = Community::read(&mut conn, response.post_view.community.id).await?;
|
let community =
|
||||||
|
Community::read(&mut *context.conn().await?, response.post_view.community.id).await?;
|
||||||
let deletable = DeletableObjects::Post(response.post_view.post.clone().into());
|
let deletable = DeletableObjects::Post(response.post_view.post.clone().into());
|
||||||
send_apub_delete_in_community(
|
send_apub_delete_in_community(
|
||||||
local_user_view.person,
|
local_user_view.person,
|
||||||
|
@ -88,9 +88,9 @@ impl SendActivity for RemovePost {
|
||||||
response: &Self::Response,
|
response: &Self::Response,
|
||||||
context: &Data<LemmyContext>,
|
context: &Data<LemmyContext>,
|
||||||
) -> Result<(), LemmyError> {
|
) -> Result<(), LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
let local_user_view = local_user_view_from_jwt(&request.auth, context).await?;
|
let local_user_view = local_user_view_from_jwt(&request.auth, context).await?;
|
||||||
let community = Community::read(&mut conn, response.post_view.community.id).await?;
|
let community =
|
||||||
|
Community::read(&mut *context.conn().await?, response.post_view.community.id).await?;
|
||||||
let deletable = DeletableObjects::Post(response.post_view.post.clone().into());
|
let deletable = DeletableObjects::Post(response.post_view.post.clone().into());
|
||||||
send_apub_delete_in_community(
|
send_apub_delete_in_community(
|
||||||
local_user_view.person,
|
local_user_view.person,
|
||||||
|
@ -113,10 +113,13 @@ impl SendActivity for DeleteComment {
|
||||||
response: &Self::Response,
|
response: &Self::Response,
|
||||||
context: &Data<LemmyContext>,
|
context: &Data<LemmyContext>,
|
||||||
) -> Result<(), LemmyError> {
|
) -> Result<(), LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
let community_id = response.comment_view.community.id;
|
let community_id = response.comment_view.community.id;
|
||||||
let community = Community::read(&mut conn, community_id).await?;
|
let community = Community::read(&mut *context.conn().await?, community_id).await?;
|
||||||
let person = Person::read(&mut conn, response.comment_view.creator.id).await?;
|
let person = Person::read(
|
||||||
|
&mut *context.conn().await?,
|
||||||
|
response.comment_view.creator.id,
|
||||||
|
)
|
||||||
|
.await?;
|
||||||
let deletable = DeletableObjects::Comment(response.comment_view.comment.clone().into());
|
let deletable = DeletableObjects::Comment(response.comment_view.comment.clone().into());
|
||||||
send_apub_delete_in_community(person, community, deletable, None, request.deleted, context)
|
send_apub_delete_in_community(person, community, deletable, None, request.deleted, context)
|
||||||
.await
|
.await
|
||||||
|
@ -132,10 +135,13 @@ impl SendActivity for RemoveComment {
|
||||||
response: &Self::Response,
|
response: &Self::Response,
|
||||||
context: &Data<LemmyContext>,
|
context: &Data<LemmyContext>,
|
||||||
) -> Result<(), LemmyError> {
|
) -> Result<(), LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
let local_user_view = local_user_view_from_jwt(&request.auth, context).await?;
|
let local_user_view = local_user_view_from_jwt(&request.auth, context).await?;
|
||||||
let comment = Comment::read(&mut conn, request.comment_id).await?;
|
let comment = Comment::read(&mut *context.conn().await?, request.comment_id).await?;
|
||||||
let community = Community::read(&mut conn, response.comment_view.community.id).await?;
|
let community = Community::read(
|
||||||
|
&mut *context.conn().await?,
|
||||||
|
response.comment_view.community.id,
|
||||||
|
)
|
||||||
|
.await?;
|
||||||
let deletable = DeletableObjects::Comment(comment.into());
|
let deletable = DeletableObjects::Comment(comment.into());
|
||||||
send_apub_delete_in_community(
|
send_apub_delete_in_community(
|
||||||
local_user_view.person,
|
local_user_view.person,
|
||||||
|
@ -178,9 +184,8 @@ impl SendActivity for DeleteCommunity {
|
||||||
_response: &Self::Response,
|
_response: &Self::Response,
|
||||||
context: &Data<LemmyContext>,
|
context: &Data<LemmyContext>,
|
||||||
) -> Result<(), LemmyError> {
|
) -> Result<(), LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
let local_user_view = local_user_view_from_jwt(&request.auth, context).await?;
|
let local_user_view = local_user_view_from_jwt(&request.auth, context).await?;
|
||||||
let community = Community::read(&mut conn, request.community_id).await?;
|
let community = Community::read(&mut *context.conn().await?, request.community_id).await?;
|
||||||
let deletable = DeletableObjects::Community(community.clone().into());
|
let deletable = DeletableObjects::Community(community.clone().into());
|
||||||
send_apub_delete_in_community(
|
send_apub_delete_in_community(
|
||||||
local_user_view.person,
|
local_user_view.person,
|
||||||
|
@ -203,9 +208,8 @@ impl SendActivity for RemoveCommunity {
|
||||||
_response: &Self::Response,
|
_response: &Self::Response,
|
||||||
context: &Data<LemmyContext>,
|
context: &Data<LemmyContext>,
|
||||||
) -> Result<(), LemmyError> {
|
) -> Result<(), LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
let local_user_view = local_user_view_from_jwt(&request.auth, context).await?;
|
let local_user_view = local_user_view_from_jwt(&request.auth, context).await?;
|
||||||
let community = Community::read(&mut conn, request.community_id).await?;
|
let community = Community::read(&mut *context.conn().await?, request.community_id).await?;
|
||||||
let deletable = DeletableObjects::Community(community.clone().into());
|
let deletable = DeletableObjects::Community(community.clone().into());
|
||||||
send_apub_delete_in_community(
|
send_apub_delete_in_community(
|
||||||
local_user_view.person,
|
local_user_view.person,
|
||||||
|
@ -257,9 +261,10 @@ async fn send_apub_delete_private_message(
|
||||||
deleted: bool,
|
deleted: bool,
|
||||||
context: &Data<LemmyContext>,
|
context: &Data<LemmyContext>,
|
||||||
) -> Result<(), LemmyError> {
|
) -> Result<(), LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
let recipient_id = pm.recipient_id;
|
let recipient_id = pm.recipient_id;
|
||||||
let recipient: ApubPerson = Person::read(&mut conn, recipient_id).await?.into();
|
let recipient: ApubPerson = Person::read(&mut *context.conn().await?, recipient_id)
|
||||||
|
.await?
|
||||||
|
.into();
|
||||||
|
|
||||||
let deletable = DeletableObjects::PrivateMessage(pm.into());
|
let deletable = DeletableObjects::PrivateMessage(pm.into());
|
||||||
let inbox = vec![recipient.shared_inbox_or_inbox()];
|
let inbox = vec![recipient.shared_inbox_or_inbox()];
|
||||||
|
@ -385,7 +390,6 @@ async fn receive_delete_action(
|
||||||
deleted: bool,
|
deleted: bool,
|
||||||
context: &Data<LemmyContext>,
|
context: &Data<LemmyContext>,
|
||||||
) -> Result<(), LemmyError> {
|
) -> Result<(), LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
match DeletableObjects::read_from_db(object, context).await? {
|
match DeletableObjects::read_from_db(object, context).await? {
|
||||||
DeletableObjects::Community(community) => {
|
DeletableObjects::Community(community) => {
|
||||||
if community.local {
|
if community.local {
|
||||||
|
@ -396,7 +400,7 @@ async fn receive_delete_action(
|
||||||
}
|
}
|
||||||
|
|
||||||
Community::update(
|
Community::update(
|
||||||
&mut conn,
|
&mut *context.conn().await?,
|
||||||
community.id,
|
community.id,
|
||||||
&CommunityUpdateForm::builder()
|
&CommunityUpdateForm::builder()
|
||||||
.deleted(Some(deleted))
|
.deleted(Some(deleted))
|
||||||
|
@ -407,7 +411,7 @@ async fn receive_delete_action(
|
||||||
DeletableObjects::Post(post) => {
|
DeletableObjects::Post(post) => {
|
||||||
if deleted != post.deleted {
|
if deleted != post.deleted {
|
||||||
Post::update(
|
Post::update(
|
||||||
&mut conn,
|
&mut *context.conn().await?,
|
||||||
post.id,
|
post.id,
|
||||||
&PostUpdateForm::builder().deleted(Some(deleted)).build(),
|
&PostUpdateForm::builder().deleted(Some(deleted)).build(),
|
||||||
)
|
)
|
||||||
|
@ -417,7 +421,7 @@ async fn receive_delete_action(
|
||||||
DeletableObjects::Comment(comment) => {
|
DeletableObjects::Comment(comment) => {
|
||||||
if deleted != comment.deleted {
|
if deleted != comment.deleted {
|
||||||
Comment::update(
|
Comment::update(
|
||||||
&mut conn,
|
&mut *context.conn().await?,
|
||||||
comment.id,
|
comment.id,
|
||||||
&CommentUpdateForm::builder().deleted(Some(deleted)).build(),
|
&CommentUpdateForm::builder().deleted(Some(deleted)).build(),
|
||||||
)
|
)
|
||||||
|
@ -426,7 +430,7 @@ async fn receive_delete_action(
|
||||||
}
|
}
|
||||||
DeletableObjects::PrivateMessage(pm) => {
|
DeletableObjects::PrivateMessage(pm) => {
|
||||||
PrivateMessage::update(
|
PrivateMessage::update(
|
||||||
&mut conn,
|
&mut *context.conn().await?,
|
||||||
pm.id,
|
pm.id,
|
||||||
&PrivateMessageUpdateForm::builder()
|
&PrivateMessageUpdateForm::builder()
|
||||||
.deleted(Some(deleted))
|
.deleted(Some(deleted))
|
||||||
|
|
|
@ -97,7 +97,6 @@ impl UndoDelete {
|
||||||
object: &Url,
|
object: &Url,
|
||||||
context: &Data<LemmyContext>,
|
context: &Data<LemmyContext>,
|
||||||
) -> Result<(), LemmyError> {
|
) -> Result<(), LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
match DeletableObjects::read_from_db(object, context).await? {
|
match DeletableObjects::read_from_db(object, context).await? {
|
||||||
DeletableObjects::Community(community) => {
|
DeletableObjects::Community(community) => {
|
||||||
if community.local {
|
if community.local {
|
||||||
|
@ -112,9 +111,9 @@ impl UndoDelete {
|
||||||
reason: None,
|
reason: None,
|
||||||
expires: None,
|
expires: None,
|
||||||
};
|
};
|
||||||
ModRemoveCommunity::create(&mut conn, &form).await?;
|
ModRemoveCommunity::create(&mut *context.conn().await?, &form).await?;
|
||||||
Community::update(
|
Community::update(
|
||||||
&mut conn,
|
&mut *context.conn().await?,
|
||||||
community.id,
|
community.id,
|
||||||
&CommunityUpdateForm::builder().removed(Some(false)).build(),
|
&CommunityUpdateForm::builder().removed(Some(false)).build(),
|
||||||
)
|
)
|
||||||
|
@ -127,9 +126,9 @@ impl UndoDelete {
|
||||||
removed: Some(false),
|
removed: Some(false),
|
||||||
reason: None,
|
reason: None,
|
||||||
};
|
};
|
||||||
ModRemovePost::create(&mut conn, &form).await?;
|
ModRemovePost::create(&mut *context.conn().await?, &form).await?;
|
||||||
Post::update(
|
Post::update(
|
||||||
&mut conn,
|
&mut *context.conn().await?,
|
||||||
post.id,
|
post.id,
|
||||||
&PostUpdateForm::builder().removed(Some(false)).build(),
|
&PostUpdateForm::builder().removed(Some(false)).build(),
|
||||||
)
|
)
|
||||||
|
@ -142,9 +141,9 @@ impl UndoDelete {
|
||||||
removed: Some(false),
|
removed: Some(false),
|
||||||
reason: None,
|
reason: None,
|
||||||
};
|
};
|
||||||
ModRemoveComment::create(&mut conn, &form).await?;
|
ModRemoveComment::create(&mut *context.conn().await?, &form).await?;
|
||||||
Comment::update(
|
Comment::update(
|
||||||
&mut conn,
|
&mut *context.conn().await?,
|
||||||
comment.id,
|
comment.id,
|
||||||
&CommentUpdateForm::builder().removed(Some(false)).build(),
|
&CommentUpdateForm::builder().removed(Some(false)).build(),
|
||||||
)
|
)
|
||||||
|
|
|
@ -60,14 +60,14 @@ impl ActivityHandler for AcceptFollow {
|
||||||
|
|
||||||
#[tracing::instrument(skip_all)]
|
#[tracing::instrument(skip_all)]
|
||||||
async fn receive(self, context: &Data<LemmyContext>) -> Result<(), LemmyError> {
|
async fn receive(self, context: &Data<LemmyContext>) -> Result<(), LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
insert_activity(&self.id, &self, false, true, context).await?;
|
insert_activity(&self.id, &self, false, true, context).await?;
|
||||||
let community = self.actor.dereference(context).await?;
|
let community = self.actor.dereference(context).await?;
|
||||||
let person = self.object.actor.dereference(context).await?;
|
let person = self.object.actor.dereference(context).await?;
|
||||||
// This will throw an error if no follow was requested
|
// This will throw an error if no follow was requested
|
||||||
let community_id = community.id;
|
let community_id = community.id;
|
||||||
let person_id = person.id;
|
let person_id = person.id;
|
||||||
CommunityFollower::follow_accepted(&mut conn, community_id, person_id).await?;
|
CommunityFollower::follow_accepted(&mut *context.conn().await?, community_id, person_id)
|
||||||
|
.await?;
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
|
@ -60,13 +60,12 @@ impl Follow {
|
||||||
community: &ApubCommunity,
|
community: &ApubCommunity,
|
||||||
context: &Data<LemmyContext>,
|
context: &Data<LemmyContext>,
|
||||||
) -> Result<(), LemmyError> {
|
) -> Result<(), LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
let community_follower_form = CommunityFollowerForm {
|
let community_follower_form = CommunityFollowerForm {
|
||||||
community_id: community.id,
|
community_id: community.id,
|
||||||
person_id: actor.id,
|
person_id: actor.id,
|
||||||
pending: true,
|
pending: true,
|
||||||
};
|
};
|
||||||
CommunityFollower::follow(&mut conn, &community_follower_form)
|
CommunityFollower::follow(&mut *context.conn().await?, &community_follower_form)
|
||||||
.await
|
.await
|
||||||
.ok();
|
.ok();
|
||||||
|
|
||||||
|
@ -104,7 +103,6 @@ impl ActivityHandler for Follow {
|
||||||
|
|
||||||
#[tracing::instrument(skip_all)]
|
#[tracing::instrument(skip_all)]
|
||||||
async fn receive(self, context: &Data<LemmyContext>) -> Result<(), LemmyError> {
|
async fn receive(self, context: &Data<LemmyContext>) -> Result<(), LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
insert_activity(&self.id, &self, false, true, context).await?;
|
insert_activity(&self.id, &self, false, true, context).await?;
|
||||||
let actor = self.actor.dereference(context).await?;
|
let actor = self.actor.dereference(context).await?;
|
||||||
let object = self.object.dereference(context).await?;
|
let object = self.object.dereference(context).await?;
|
||||||
|
@ -115,7 +113,7 @@ impl ActivityHandler for Follow {
|
||||||
follower_id: actor.id,
|
follower_id: actor.id,
|
||||||
pending: false,
|
pending: false,
|
||||||
};
|
};
|
||||||
PersonFollower::follow(&mut conn, &form).await?;
|
PersonFollower::follow(&mut *context.conn().await?, &form).await?;
|
||||||
}
|
}
|
||||||
UserOrCommunity::Community(c) => {
|
UserOrCommunity::Community(c) => {
|
||||||
let form = CommunityFollowerForm {
|
let form = CommunityFollowerForm {
|
||||||
|
@ -123,7 +121,7 @@ impl ActivityHandler for Follow {
|
||||||
person_id: actor.id,
|
person_id: actor.id,
|
||||||
pending: false,
|
pending: false,
|
||||||
};
|
};
|
||||||
CommunityFollower::follow(&mut conn, &form).await?;
|
CommunityFollower::follow(&mut *context.conn().await?, &form).await?;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -140,9 +138,8 @@ impl SendActivity for BlockCommunity {
|
||||||
_response: &Self::Response,
|
_response: &Self::Response,
|
||||||
context: &Data<LemmyContext>,
|
context: &Data<LemmyContext>,
|
||||||
) -> Result<(), LemmyError> {
|
) -> Result<(), LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
let local_user_view = local_user_view_from_jwt(&request.auth, context).await?;
|
let local_user_view = local_user_view_from_jwt(&request.auth, context).await?;
|
||||||
let community = Community::read(&mut conn, request.community_id).await?;
|
let community = Community::read(&mut *context.conn().await?, request.community_id).await?;
|
||||||
UndoFollow::send(&local_user_view.person.into(), &community.into(), context).await
|
UndoFollow::send(&local_user_view.person.into(), &community.into(), context).await
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,12 +25,12 @@ impl SendActivity for FollowCommunity {
|
||||||
_response: &Self::Response,
|
_response: &Self::Response,
|
||||||
context: &Data<LemmyContext>,
|
context: &Data<LemmyContext>,
|
||||||
) -> Result<(), LemmyError> {
|
) -> Result<(), LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
let local_user_view = local_user_view_from_jwt(&request.auth, context).await?;
|
let local_user_view = local_user_view_from_jwt(&request.auth, context).await?;
|
||||||
let person = local_user_view.person.clone().into();
|
let person = local_user_view.person.clone().into();
|
||||||
let community: ApubCommunity = Community::read(&mut conn, request.community_id)
|
let community: ApubCommunity =
|
||||||
.await?
|
Community::read(&mut *context.conn().await?, request.community_id)
|
||||||
.into();
|
.await?
|
||||||
|
.into();
|
||||||
if community.local {
|
if community.local {
|
||||||
Ok(())
|
Ok(())
|
||||||
} else if request.follow {
|
} else if request.follow {
|
||||||
|
|
|
@ -71,7 +71,6 @@ impl ActivityHandler for UndoFollow {
|
||||||
|
|
||||||
#[tracing::instrument(skip_all)]
|
#[tracing::instrument(skip_all)]
|
||||||
async fn receive(self, context: &Data<LemmyContext>) -> Result<(), LemmyError> {
|
async fn receive(self, context: &Data<LemmyContext>) -> Result<(), LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
insert_activity(&self.id, &self, false, true, context).await?;
|
insert_activity(&self.id, &self, false, true, context).await?;
|
||||||
let person = self.actor.dereference(context).await?;
|
let person = self.actor.dereference(context).await?;
|
||||||
let object = self.object.object.dereference(context).await?;
|
let object = self.object.object.dereference(context).await?;
|
||||||
|
@ -83,7 +82,7 @@ impl ActivityHandler for UndoFollow {
|
||||||
follower_id: person.id,
|
follower_id: person.id,
|
||||||
pending: false,
|
pending: false,
|
||||||
};
|
};
|
||||||
PersonFollower::unfollow(&mut conn, &form).await?;
|
PersonFollower::unfollow(&mut *context.conn().await?, &form).await?;
|
||||||
}
|
}
|
||||||
UserOrCommunity::Community(c) => {
|
UserOrCommunity::Community(c) => {
|
||||||
let form = CommunityFollowerForm {
|
let form = CommunityFollowerForm {
|
||||||
|
@ -91,7 +90,7 @@ impl ActivityHandler for UndoFollow {
|
||||||
person_id: person.id,
|
person_id: person.id,
|
||||||
pending: false,
|
pending: false,
|
||||||
};
|
};
|
||||||
CommunityFollower::unfollow(&mut conn, &form).await?;
|
CommunityFollower::unfollow(&mut *context.conn().await?, &form).await?;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -53,14 +53,13 @@ pub(crate) async fn verify_person_in_community(
|
||||||
community: &ApubCommunity,
|
community: &ApubCommunity,
|
||||||
context: &Data<LemmyContext>,
|
context: &Data<LemmyContext>,
|
||||||
) -> Result<(), LemmyError> {
|
) -> Result<(), LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
let person = person_id.dereference(context).await?;
|
let person = person_id.dereference(context).await?;
|
||||||
if person.banned {
|
if person.banned {
|
||||||
return Err(LemmyError::from_message("Person is banned from site"));
|
return Err(LemmyError::from_message("Person is banned from site"));
|
||||||
}
|
}
|
||||||
let person_id = person.id;
|
let person_id = person.id;
|
||||||
let community_id = community.id;
|
let community_id = community.id;
|
||||||
let is_banned = CommunityPersonBanView::get(&mut conn, person_id, community_id)
|
let is_banned = CommunityPersonBanView::get(&mut *context.conn().await?, person_id, community_id)
|
||||||
.await
|
.await
|
||||||
.is_ok();
|
.is_ok();
|
||||||
if is_banned {
|
if is_banned {
|
||||||
|
@ -82,10 +81,10 @@ pub(crate) async fn verify_mod_action(
|
||||||
community_id: CommunityId,
|
community_id: CommunityId,
|
||||||
context: &Data<LemmyContext>,
|
context: &Data<LemmyContext>,
|
||||||
) -> Result<(), LemmyError> {
|
) -> Result<(), LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
let mod_ = mod_id.dereference(context).await?;
|
let mod_ = mod_id.dereference(context).await?;
|
||||||
|
|
||||||
let is_mod_or_admin = CommunityView::is_mod_or_admin(&mut conn, mod_.id, community_id).await?;
|
let is_mod_or_admin =
|
||||||
|
CommunityView::is_mod_or_admin(&mut *context.conn().await?, mod_.id, community_id).await?;
|
||||||
if is_mod_or_admin {
|
if is_mod_or_admin {
|
||||||
return Ok(());
|
return Ok(());
|
||||||
}
|
}
|
||||||
|
|
|
@ -83,10 +83,11 @@ async fn send_activity(
|
||||||
jwt: &Sensitive<String>,
|
jwt: &Sensitive<String>,
|
||||||
context: &Data<LemmyContext>,
|
context: &Data<LemmyContext>,
|
||||||
) -> Result<(), LemmyError> {
|
) -> Result<(), LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
let community = Community::read(&mut *context.conn().await?, community_id)
|
||||||
let community = Community::read(&mut conn, community_id).await?.into();
|
.await?
|
||||||
|
.into();
|
||||||
let local_user_view = local_user_view_from_jwt(jwt, context).await?;
|
let local_user_view = local_user_view_from_jwt(jwt, context).await?;
|
||||||
let actor = Person::read(&mut conn, local_user_view.person.id)
|
let actor = Person::read(&mut *context.conn().await?, local_user_view.person.id)
|
||||||
.await?
|
.await?
|
||||||
.into();
|
.into();
|
||||||
|
|
||||||
|
@ -111,7 +112,6 @@ async fn vote_comment(
|
||||||
comment: &ApubComment,
|
comment: &ApubComment,
|
||||||
context: &Data<LemmyContext>,
|
context: &Data<LemmyContext>,
|
||||||
) -> Result<(), LemmyError> {
|
) -> Result<(), LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
let comment_id = comment.id;
|
let comment_id = comment.id;
|
||||||
let like_form = CommentLikeForm {
|
let like_form = CommentLikeForm {
|
||||||
comment_id,
|
comment_id,
|
||||||
|
@ -120,8 +120,8 @@ async fn vote_comment(
|
||||||
score: vote_type.into(),
|
score: vote_type.into(),
|
||||||
};
|
};
|
||||||
let person_id = actor.id;
|
let person_id = actor.id;
|
||||||
CommentLike::remove(&mut conn, person_id, comment_id).await?;
|
CommentLike::remove(&mut *context.conn().await?, person_id, comment_id).await?;
|
||||||
CommentLike::like(&mut conn, &like_form).await?;
|
CommentLike::like(&mut *context.conn().await?, &like_form).await?;
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -132,7 +132,6 @@ async fn vote_post(
|
||||||
post: &ApubPost,
|
post: &ApubPost,
|
||||||
context: &Data<LemmyContext>,
|
context: &Data<LemmyContext>,
|
||||||
) -> Result<(), LemmyError> {
|
) -> Result<(), LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
let post_id = post.id;
|
let post_id = post.id;
|
||||||
let like_form = PostLikeForm {
|
let like_form = PostLikeForm {
|
||||||
post_id: post.id,
|
post_id: post.id,
|
||||||
|
@ -140,8 +139,8 @@ async fn vote_post(
|
||||||
score: vote_type.into(),
|
score: vote_type.into(),
|
||||||
};
|
};
|
||||||
let person_id = actor.id;
|
let person_id = actor.id;
|
||||||
PostLike::remove(&mut conn, person_id, post_id).await?;
|
PostLike::remove(&mut *context.conn().await?, person_id, post_id).await?;
|
||||||
PostLike::like(&mut conn, &like_form).await?;
|
PostLike::like(&mut *context.conn().await?, &like_form).await?;
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -151,10 +150,9 @@ async fn undo_vote_comment(
|
||||||
comment: &ApubComment,
|
comment: &ApubComment,
|
||||||
context: &Data<LemmyContext>,
|
context: &Data<LemmyContext>,
|
||||||
) -> Result<(), LemmyError> {
|
) -> Result<(), LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
let comment_id = comment.id;
|
let comment_id = comment.id;
|
||||||
let person_id = actor.id;
|
let person_id = actor.id;
|
||||||
CommentLike::remove(&mut conn, person_id, comment_id).await?;
|
CommentLike::remove(&mut *context.conn().await?, person_id, comment_id).await?;
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -164,9 +162,8 @@ async fn undo_vote_post(
|
||||||
post: &ApubPost,
|
post: &ApubPost,
|
||||||
context: &Data<LemmyContext>,
|
context: &Data<LemmyContext>,
|
||||||
) -> Result<(), LemmyError> {
|
) -> Result<(), LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
let post_id = post.id;
|
let post_id = post.id;
|
||||||
let person_id = actor.id;
|
let person_id = actor.id;
|
||||||
PostLike::remove(&mut conn, person_id, post_id).await?;
|
PostLike::remove(&mut *context.conn().await?, person_id, post_id).await?;
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
|
@ -56,11 +56,9 @@ impl ActivityHandler for Vote {
|
||||||
|
|
||||||
#[tracing::instrument(skip_all)]
|
#[tracing::instrument(skip_all)]
|
||||||
async fn verify(&self, context: &Data<LemmyContext>) -> Result<(), LemmyError> {
|
async fn verify(&self, context: &Data<LemmyContext>) -> Result<(), LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
|
|
||||||
let community = self.community(context).await?;
|
let community = self.community(context).await?;
|
||||||
verify_person_in_community(&self.actor, &community, context).await?;
|
verify_person_in_community(&self.actor, &community, context).await?;
|
||||||
let enable_downvotes = LocalSite::read(&mut conn)
|
let enable_downvotes = LocalSite::read(&mut *context.conn().await?)
|
||||||
.await
|
.await
|
||||||
.map(|l| l.enable_downvotes)
|
.map(|l| l.enable_downvotes)
|
||||||
.unwrap_or(true);
|
.unwrap_or(true);
|
||||||
|
|
|
@ -22,10 +22,9 @@ impl PerformApub for GetComments {
|
||||||
|
|
||||||
#[tracing::instrument(skip(context))]
|
#[tracing::instrument(skip(context))]
|
||||||
async fn perform(&self, context: &Data<LemmyContext>) -> Result<GetCommentsResponse, LemmyError> {
|
async fn perform(&self, context: &Data<LemmyContext>) -> Result<GetCommentsResponse, LemmyError> {
|
||||||
let mut conn = context.conn().await?;
|
|
||||||
let data: &GetComments = self;
|
let data: &GetComments = self;
|
||||||
let local_user_view = local_user_view_from_jwt_opt(data.auth.as_ref(), context).await;
|
let local_user_view = local_user_view_from_jwt_opt(data.auth.as_ref(), context).await;
|
||||||
let local_site = LocalSite::read(&mut conn).await?;
|
let local_site = LocalSite::read(&mut *context.conn().await?).await?;
|
||||||
check_private_instance(&local_user_view, &local_site)?;
|
check_private_instance(&local_user_view, &local_site)?;
|
||||||
|
|
||||||
let community_id = if let Some(name) = &data.community_name {
|
let community_id = if let Some(name) = &data.community_name {
|
||||||
|
@ -47,7 +46,11 @@ impl PerformApub for GetComments {
|
||||||
|
|
||||||
// If a parent_id is given, fetch the comment to get the path
|
// If a parent_id is given, fetch the comment to get the path
|
||||||
let parent_path = if let Some(parent_id) = parent_id {
|
let parent_path = if let Some(parent_id) = parent_id {
|
||||||
Some(Comment::read(&mut conn, parent_id).await?.path)
|
Some(
|
||||||
|
Comment::read(&mut *context.conn().await?, parent_id)
|
||||||
|
.await?
|
||||||
|
.path,
|
||||||
|
)
|
||||||
} else {
|
} else {
|
||||||
None
|
None
|
||||||
};
|
};
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue