mirror of https://github.com/LemmyNet/lemmy.git
Remove compat for RemovePostCommentOrCommunity
parent
32970d735d
commit
dd53f44c4d
|
@ -12,7 +12,6 @@ use crate::{
|
|||
deletion::{delete::Delete, undo_delete::UndoDelete},
|
||||
generate_activity_id,
|
||||
post::create_or_update::CreateOrUpdatePost,
|
||||
undo_remove::UndoRemovePostCommentOrCommunity,
|
||||
verify_activity,
|
||||
verify_community,
|
||||
voting::{undo_vote::UndoVote, vote::Vote},
|
||||
|
@ -51,7 +50,6 @@ pub enum AnnouncableActivities {
|
|||
UndoVote(UndoVote),
|
||||
Delete(Delete),
|
||||
UndoDelete(UndoDelete),
|
||||
UndoRemovePostCommentOrCommunity(UndoRemovePostCommentOrCommunity),
|
||||
UpdateCommunity(Box<UpdateCommunity>),
|
||||
BlockUserFromCommunity(BlockUserFromCommunity),
|
||||
UndoBlockUserFromCommunity(UndoBlockUserFromCommunity),
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
use crate::{
|
||||
activities::{
|
||||
community::{announce::AnnouncableActivities, send_to_community},
|
||||
deletion::{delete::receive_remove_action, verify_delete_activity},
|
||||
generate_activity_id,
|
||||
verify_activity,
|
||||
verify_add_remove_moderator_target,
|
||||
|
@ -44,7 +43,7 @@ pub struct RemoveMod {
|
|||
#[serde(rename = "type")]
|
||||
kind: RemoveType,
|
||||
// if target is set, this is means remove mod from community
|
||||
pub(in crate::activities) target: Option<Url>,
|
||||
pub(in crate::activities) target: Url,
|
||||
id: Url,
|
||||
#[serde(rename = "@context")]
|
||||
context: OneOrMany<AnyBase>,
|
||||
|
@ -67,7 +66,7 @@ impl RemoveMod {
|
|||
actor: ObjectId::new(actor.actor_id()),
|
||||
to: PublicUrlMigration::create(),
|
||||
object: ObjectId::new(removed_mod.actor_id()),
|
||||
target: Some(generate_moderators_url(&community.actor_id)?.into()),
|
||||
target: generate_moderators_url(&community.actor_id)?.into(),
|
||||
id: id.clone(),
|
||||
context: lemmy_context(),
|
||||
cc: [ObjectId::new(community.actor_id())],
|
||||
|
@ -90,21 +89,9 @@ impl ActivityHandler for RemoveMod {
|
|||
request_counter: &mut i32,
|
||||
) -> Result<(), LemmyError> {
|
||||
verify_activity(self, &context.settings())?;
|
||||
if let Some(target) = &self.target {
|
||||
verify_person_in_community(&self.actor, &self.cc[0], context, request_counter).await?;
|
||||
verify_mod_action(&self.actor, &self.cc[0], context, request_counter).await?;
|
||||
verify_add_remove_moderator_target(target, &self.cc[0])?;
|
||||
} else {
|
||||
verify_delete_activity(
|
||||
self.object.inner(),
|
||||
self,
|
||||
&self.cc[0],
|
||||
true,
|
||||
context,
|
||||
request_counter,
|
||||
)
|
||||
.await?;
|
||||
}
|
||||
verify_person_in_community(&self.actor, &self.cc[0], context, request_counter).await?;
|
||||
verify_mod_action(&self.actor, &self.cc[0], context, request_counter).await?;
|
||||
verify_add_remove_moderator_target(&self.target, &self.cc[0])?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
@ -113,29 +100,18 @@ impl ActivityHandler for RemoveMod {
|
|||
context: &Data<LemmyContext>,
|
||||
request_counter: &mut i32,
|
||||
) -> Result<(), LemmyError> {
|
||||
if self.target.is_some() {
|
||||
let community = self.cc[0].dereference(context, request_counter).await?;
|
||||
let remove_mod = self.object.dereference(context, request_counter).await?;
|
||||
let community = self.cc[0].dereference(context, request_counter).await?;
|
||||
let remove_mod = self.object.dereference(context, request_counter).await?;
|
||||
|
||||
let form = CommunityModeratorForm {
|
||||
community_id: community.id,
|
||||
person_id: remove_mod.id,
|
||||
};
|
||||
blocking(context.pool(), move |conn| {
|
||||
CommunityModerator::leave(conn, &form)
|
||||
})
|
||||
.await??;
|
||||
// TODO: send websocket notification about removed mod
|
||||
Ok(())
|
||||
} else {
|
||||
receive_remove_action(
|
||||
&self.actor,
|
||||
self.object.inner(),
|
||||
None,
|
||||
context,
|
||||
request_counter,
|
||||
)
|
||||
.await
|
||||
}
|
||||
let form = CommunityModeratorForm {
|
||||
community_id: community.id,
|
||||
person_id: remove_mod.id,
|
||||
};
|
||||
blocking(context.pool(), move |conn| {
|
||||
CommunityModerator::leave(conn, &form)
|
||||
})
|
||||
.await??;
|
||||
// TODO: send websocket notification about removed mod
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
|
|
@ -26,7 +26,6 @@ pub mod following;
|
|||
pub mod post;
|
||||
pub mod private_message;
|
||||
pub mod report;
|
||||
pub mod undo_remove;
|
||||
pub mod voting;
|
||||
|
||||
#[derive(Clone, Debug, ToString, Deserialize, Serialize)]
|
||||
|
|
|
@ -1,73 +0,0 @@
|
|||
use crate::{
|
||||
activities::{
|
||||
community::remove_mod::RemoveMod,
|
||||
deletion::{undo_delete::UndoDelete, verify_delete_activity},
|
||||
verify_activity,
|
||||
},
|
||||
fetcher::object_id::ObjectId,
|
||||
migrations::PublicUrlMigration,
|
||||
objects::{community::ApubCommunity, person::ApubPerson},
|
||||
};
|
||||
use activitystreams::{
|
||||
activity::kind::UndoType,
|
||||
base::AnyBase,
|
||||
primitives::OneOrMany,
|
||||
unparsed::Unparsed,
|
||||
};
|
||||
use lemmy_apub_lib::{
|
||||
data::Data,
|
||||
traits::{ActivityFields, ActivityHandler},
|
||||
};
|
||||
use lemmy_utils::LemmyError;
|
||||
use lemmy_websocket::LemmyContext;
|
||||
use serde::{Deserialize, Serialize};
|
||||
use url::Url;
|
||||
|
||||
#[derive(Clone, Debug, Deserialize, Serialize, ActivityFields)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
pub struct UndoRemovePostCommentOrCommunity {
|
||||
actor: ObjectId<ApubPerson>,
|
||||
to: PublicUrlMigration,
|
||||
// Note, there is no such thing as Undo/Remove/Mod, so we ignore that
|
||||
object: RemoveMod,
|
||||
cc: [ObjectId<ApubCommunity>; 1],
|
||||
#[serde(rename = "type")]
|
||||
kind: UndoType,
|
||||
id: Url,
|
||||
#[serde(rename = "@context")]
|
||||
context: OneOrMany<AnyBase>,
|
||||
#[serde(flatten)]
|
||||
unparsed: Unparsed,
|
||||
}
|
||||
|
||||
#[async_trait::async_trait(?Send)]
|
||||
impl ActivityHandler for UndoRemovePostCommentOrCommunity {
|
||||
type DataType = LemmyContext;
|
||||
async fn verify(
|
||||
&self,
|
||||
context: &Data<LemmyContext>,
|
||||
request_counter: &mut i32,
|
||||
) -> Result<(), LemmyError> {
|
||||
verify_activity(self, &context.settings())?;
|
||||
self.object.verify(context, request_counter).await?;
|
||||
|
||||
verify_delete_activity(
|
||||
self.object.object.inner(),
|
||||
self,
|
||||
&self.cc[0],
|
||||
true,
|
||||
context,
|
||||
request_counter,
|
||||
)
|
||||
.await?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
async fn receive(
|
||||
self,
|
||||
context: &Data<LemmyContext>,
|
||||
_request_counter: &mut i32,
|
||||
) -> Result<(), LemmyError> {
|
||||
UndoDelete::receive_undo_remove_action(self.object.object.inner(), context).await
|
||||
}
|
||||
}
|
|
@ -1,18 +1,6 @@
|
|||
use lemmy_apub_lib::values::PublicUrl;
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
// Another migration we are doing is to handle all deletions and removals using Delete activity.
|
||||
// This is because Remove is for removing an object from a collection, so using it that way doesn't
|
||||
// really make sense. It is also a problem because we have a RemoveMod activity, which was awkward
|
||||
// to handle together with removing posts etc.
|
||||
//
|
||||
// v0.11: send and receive mod removals as Remove
|
||||
// v0.12: receive removals as Remove, send as Delete (compatible with v0.11)
|
||||
// v0.13: send and receive mod removals as Delete (compatible with v0.12)
|
||||
//
|
||||
// For v0.13, delete [`UndoRemovePostCommentOrCommunity`], and don't handle object deletion in
|
||||
// [`RemoveMod`] handler.
|
||||
|
||||
/// Migrate value of field `to` from single value to vec.
|
||||
///
|
||||
/// v0.14: send as single value, accept both
|
||||
|
|
Loading…
Reference in New Issue