mirror of
https://github.com/LemmyNet/lemmy.git
synced 2024-11-22 20:31:19 +00:00
This commit is contained in:
parent
b41f7f3eca
commit
f9d563d80a
7 changed files with 123 additions and 20 deletions
|
@ -31,7 +31,7 @@ use lemmy_db_schema::{
|
|||
CommunityPersonBan,
|
||||
CommunityPersonBanForm,
|
||||
},
|
||||
moderator::{ModBan, ModBanForm},
|
||||
moderator::{ModBan, ModBanForm, ModBanFromCommunity, ModBanFromCommunityForm},
|
||||
person::Person,
|
||||
},
|
||||
traits::{Bannable, Crud, Followable},
|
||||
|
@ -213,14 +213,18 @@ impl ActivityHandler for BlockUser {
|
|||
}
|
||||
|
||||
// write to mod log
|
||||
let form = ModBanForm {
|
||||
let form = ModBanFromCommunityForm {
|
||||
mod_person_id: mod_person.id,
|
||||
other_person_id: blocked_person.id,
|
||||
community_id: community.id,
|
||||
reason: self.summary,
|
||||
banned: Some(true),
|
||||
expires,
|
||||
};
|
||||
blocking(context.pool(), move |conn| ModBan::create(conn, &form)).await??;
|
||||
blocking(context.pool(), move |conn| {
|
||||
ModBanFromCommunity::create(conn, &form)
|
||||
})
|
||||
.await??;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -22,7 +22,7 @@ use lemmy_apub_lib::{
|
|||
use lemmy_db_schema::{
|
||||
source::{
|
||||
community::{CommunityPersonBan, CommunityPersonBanForm},
|
||||
moderator::{ModBan, ModBanForm},
|
||||
moderator::{ModBan, ModBanForm, ModBanFromCommunity, ModBanFromCommunityForm},
|
||||
person::Person,
|
||||
},
|
||||
traits::{Bannable, Crud},
|
||||
|
@ -136,14 +136,18 @@ impl ActivityHandler for UndoBlockUser {
|
|||
.await??;
|
||||
|
||||
// write to mod log
|
||||
let form = ModBanForm {
|
||||
let form = ModBanFromCommunityForm {
|
||||
mod_person_id: mod_person.id,
|
||||
other_person_id: blocked_person.id,
|
||||
community_id: community.id,
|
||||
reason: self.object.summary,
|
||||
banned: Some(false),
|
||||
expires,
|
||||
};
|
||||
blocking(context.pool(), move |conn| ModBan::create(conn, &form)).await??;
|
||||
blocking(context.pool(), move |conn| {
|
||||
ModBanFromCommunity::create(conn, &form)
|
||||
})
|
||||
.await??;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -25,8 +25,11 @@ use lemmy_apub_lib::{
|
|||
traits::{ActivityHandler, ActorType},
|
||||
};
|
||||
use lemmy_db_schema::{
|
||||
source::community::{CommunityModerator, CommunityModeratorForm},
|
||||
traits::Joinable,
|
||||
source::{
|
||||
community::{CommunityModerator, CommunityModeratorForm},
|
||||
moderator::{ModAddCommunity, ModAddCommunityForm},
|
||||
},
|
||||
traits::{Crud, Joinable},
|
||||
};
|
||||
use lemmy_utils::LemmyError;
|
||||
use lemmy_websocket::LemmyContext;
|
||||
|
@ -114,6 +117,22 @@ impl ActivityHandler for AddMod {
|
|||
CommunityModerator::join(conn, &form)
|
||||
})
|
||||
.await??;
|
||||
|
||||
// write mod log
|
||||
let actor = self
|
||||
.actor
|
||||
.dereference(context, context.client(), request_counter)
|
||||
.await?;
|
||||
let form = ModAddCommunityForm {
|
||||
mod_person_id: actor.id,
|
||||
other_person_id: new_mod.id,
|
||||
community_id: community.id,
|
||||
removed: Some(false),
|
||||
};
|
||||
blocking(context.pool(), move |conn| {
|
||||
ModAddCommunity::create(conn, &form)
|
||||
})
|
||||
.await??;
|
||||
}
|
||||
// TODO: send websocket notification about added mod
|
||||
Ok(())
|
||||
|
|
|
@ -25,8 +25,11 @@ use lemmy_apub_lib::{
|
|||
traits::{ActivityHandler, ActorType},
|
||||
};
|
||||
use lemmy_db_schema::{
|
||||
source::community::{CommunityModerator, CommunityModeratorForm},
|
||||
traits::Joinable,
|
||||
source::{
|
||||
community::{CommunityModerator, CommunityModeratorForm},
|
||||
moderator::{ModAddCommunity, ModAddCommunityForm},
|
||||
},
|
||||
traits::{Crud, Joinable},
|
||||
};
|
||||
use lemmy_utils::LemmyError;
|
||||
use lemmy_websocket::LemmyContext;
|
||||
|
@ -106,6 +109,23 @@ impl ActivityHandler for RemoveMod {
|
|||
CommunityModerator::leave(conn, &form)
|
||||
})
|
||||
.await??;
|
||||
|
||||
// write mod log
|
||||
let actor = self
|
||||
.actor
|
||||
.dereference(context, context.client(), request_counter)
|
||||
.await?;
|
||||
let form = ModAddCommunityForm {
|
||||
mod_person_id: actor.id,
|
||||
other_person_id: remove_mod.id,
|
||||
community_id: community.id,
|
||||
removed: Some(true),
|
||||
};
|
||||
blocking(context.pool(), move |conn| {
|
||||
ModAddCommunity::create(conn, &form)
|
||||
})
|
||||
.await??;
|
||||
|
||||
// TODO: send websocket notification about removed mod
|
||||
Ok(())
|
||||
}
|
||||
|
|
|
@ -67,11 +67,13 @@ impl ActivityHandler for Delete {
|
|||
Some(reason)
|
||||
};
|
||||
receive_remove_action(
|
||||
&self.actor,
|
||||
&self
|
||||
.actor
|
||||
.dereference(context, context.client(), request_counter)
|
||||
.await?,
|
||||
self.object.id(),
|
||||
reason,
|
||||
context,
|
||||
request_counter,
|
||||
)
|
||||
.await
|
||||
} else {
|
||||
|
@ -119,15 +121,11 @@ impl Delete {
|
|||
|
||||
#[tracing::instrument(skip_all)]
|
||||
pub(in crate::activities) async fn receive_remove_action(
|
||||
actor: &ObjectId<ApubPerson>,
|
||||
actor: &ApubPerson,
|
||||
object: &Url,
|
||||
reason: Option<String>,
|
||||
context: &LemmyContext,
|
||||
request_counter: &mut i32,
|
||||
) -> Result<(), LemmyError> {
|
||||
let actor = actor
|
||||
.dereference(context, context.client(), request_counter)
|
||||
.await?;
|
||||
use UserOperationCrud::*;
|
||||
match DeletableObjects::read_from_db(object, context).await? {
|
||||
DeletableObjects::Community(community) => {
|
||||
|
|
|
@ -5,13 +5,29 @@ use crate::{
|
|||
generate_activity_id,
|
||||
verify_activity,
|
||||
},
|
||||
objects::community::ApubCommunity,
|
||||
objects::{community::ApubCommunity, person::ApubPerson},
|
||||
protocol::activities::deletion::{delete::Delete, undo_delete::UndoDelete},
|
||||
};
|
||||
use activitystreams_kinds::activity::UndoType;
|
||||
use lemmy_api_common::blocking;
|
||||
use lemmy_apub_lib::{data::Data, object_id::ObjectId, traits::ActivityHandler};
|
||||
use lemmy_db_schema::source::{comment::Comment, community::Community, person::Person, post::Post};
|
||||
use lemmy_db_schema::{
|
||||
source::{
|
||||
comment::Comment,
|
||||
community::Community,
|
||||
moderator::{
|
||||
ModRemoveComment,
|
||||
ModRemoveCommentForm,
|
||||
ModRemoveCommunity,
|
||||
ModRemoveCommunityForm,
|
||||
ModRemovePost,
|
||||
ModRemovePostForm,
|
||||
},
|
||||
person::Person,
|
||||
post::Post,
|
||||
},
|
||||
traits::Crud,
|
||||
};
|
||||
use lemmy_utils::LemmyError;
|
||||
use lemmy_websocket::{
|
||||
send::{send_comment_ws_message_simple, send_community_ws_message, send_post_ws_message},
|
||||
|
@ -49,7 +65,15 @@ impl ActivityHandler for UndoDelete {
|
|||
request_counter: &mut i32,
|
||||
) -> Result<(), LemmyError> {
|
||||
if self.object.summary.is_some() {
|
||||
UndoDelete::receive_undo_remove_action(self.object.object.id(), context).await
|
||||
UndoDelete::receive_undo_remove_action(
|
||||
&self
|
||||
.actor
|
||||
.dereference(context, context.client(), request_counter)
|
||||
.await?,
|
||||
self.object.object.id(),
|
||||
context,
|
||||
)
|
||||
.await
|
||||
} else {
|
||||
receive_delete_action(
|
||||
self.object.object.id(),
|
||||
|
@ -93,6 +117,7 @@ impl UndoDelete {
|
|||
|
||||
#[tracing::instrument(skip_all)]
|
||||
pub(in crate::activities) async fn receive_undo_remove_action(
|
||||
actor: &ApubPerson,
|
||||
object: &Url,
|
||||
context: &LemmyContext,
|
||||
) -> Result<(), LemmyError> {
|
||||
|
@ -104,6 +129,17 @@ impl UndoDelete {
|
|||
"Only local admin can restore community",
|
||||
));
|
||||
}
|
||||
let form = ModRemoveCommunityForm {
|
||||
mod_person_id: actor.id,
|
||||
community_id: community.id,
|
||||
removed: Some(false),
|
||||
reason: None,
|
||||
expires: None,
|
||||
};
|
||||
blocking(context.pool(), move |conn| {
|
||||
ModRemoveCommunity::create(conn, &form)
|
||||
})
|
||||
.await??;
|
||||
let deleted_community = blocking(context.pool(), move |conn| {
|
||||
Community::update_removed(conn, community.id, false)
|
||||
})
|
||||
|
@ -111,6 +147,16 @@ impl UndoDelete {
|
|||
send_community_ws_message(deleted_community.id, EditCommunity, None, None, context).await?;
|
||||
}
|
||||
DeletableObjects::Post(post) => {
|
||||
let form = ModRemovePostForm {
|
||||
mod_person_id: actor.id,
|
||||
post_id: post.id,
|
||||
removed: Some(false),
|
||||
reason: None,
|
||||
};
|
||||
blocking(context.pool(), move |conn| {
|
||||
ModRemovePost::create(conn, &form)
|
||||
})
|
||||
.await??;
|
||||
let removed_post = blocking(context.pool(), move |conn| {
|
||||
Post::update_removed(conn, post.id, false)
|
||||
})
|
||||
|
@ -118,6 +164,16 @@ impl UndoDelete {
|
|||
send_post_ws_message(removed_post.id, EditPost, None, None, context).await?;
|
||||
}
|
||||
DeletableObjects::Comment(comment) => {
|
||||
let form = ModRemoveCommentForm {
|
||||
mod_person_id: actor.id,
|
||||
comment_id: comment.id,
|
||||
removed: Some(false),
|
||||
reason: None,
|
||||
};
|
||||
blocking(context.pool(), move |conn| {
|
||||
ModRemoveComment::create(conn, &form)
|
||||
})
|
||||
.await??;
|
||||
let removed_comment = blocking(context.pool(), move |conn| {
|
||||
Comment::update_removed(conn, comment.id, false)
|
||||
})
|
||||
|
|
|
@ -161,6 +161,8 @@ impl ApubObject for ApubPost {
|
|||
.await?;
|
||||
let community = page.extract_community(context, request_counter).await?;
|
||||
|
||||
// TODO: write mod log if stickied or locked changed
|
||||
|
||||
let url = if let Some(attachment) = page.attachment.first() {
|
||||
Some(attachment.href.clone())
|
||||
} else {
|
||||
|
|
Loading…
Reference in a new issue