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