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},
|
deletion::{delete::Delete, undo_delete::UndoDelete},
|
||||||
generate_activity_id,
|
generate_activity_id,
|
||||||
post::create_or_update::CreateOrUpdatePost,
|
post::create_or_update::CreateOrUpdatePost,
|
||||||
undo_remove::UndoRemovePostCommentOrCommunity,
|
|
||||||
verify_activity,
|
verify_activity,
|
||||||
verify_community,
|
verify_community,
|
||||||
voting::{undo_vote::UndoVote, vote::Vote},
|
voting::{undo_vote::UndoVote, vote::Vote},
|
||||||
|
@ -51,7 +50,6 @@ pub enum AnnouncableActivities {
|
||||||
UndoVote(UndoVote),
|
UndoVote(UndoVote),
|
||||||
Delete(Delete),
|
Delete(Delete),
|
||||||
UndoDelete(UndoDelete),
|
UndoDelete(UndoDelete),
|
||||||
UndoRemovePostCommentOrCommunity(UndoRemovePostCommentOrCommunity),
|
|
||||||
UpdateCommunity(Box<UpdateCommunity>),
|
UpdateCommunity(Box<UpdateCommunity>),
|
||||||
BlockUserFromCommunity(BlockUserFromCommunity),
|
BlockUserFromCommunity(BlockUserFromCommunity),
|
||||||
UndoBlockUserFromCommunity(UndoBlockUserFromCommunity),
|
UndoBlockUserFromCommunity(UndoBlockUserFromCommunity),
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
use crate::{
|
use crate::{
|
||||||
activities::{
|
activities::{
|
||||||
community::{announce::AnnouncableActivities, send_to_community},
|
community::{announce::AnnouncableActivities, send_to_community},
|
||||||
deletion::{delete::receive_remove_action, verify_delete_activity},
|
|
||||||
generate_activity_id,
|
generate_activity_id,
|
||||||
verify_activity,
|
verify_activity,
|
||||||
verify_add_remove_moderator_target,
|
verify_add_remove_moderator_target,
|
||||||
|
@ -44,7 +43,7 @@ pub struct RemoveMod {
|
||||||
#[serde(rename = "type")]
|
#[serde(rename = "type")]
|
||||||
kind: RemoveType,
|
kind: RemoveType,
|
||||||
// if target is set, this is means remove mod from community
|
// 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,
|
id: Url,
|
||||||
#[serde(rename = "@context")]
|
#[serde(rename = "@context")]
|
||||||
context: OneOrMany<AnyBase>,
|
context: OneOrMany<AnyBase>,
|
||||||
|
@ -67,7 +66,7 @@ impl RemoveMod {
|
||||||
actor: ObjectId::new(actor.actor_id()),
|
actor: ObjectId::new(actor.actor_id()),
|
||||||
to: PublicUrlMigration::create(),
|
to: PublicUrlMigration::create(),
|
||||||
object: ObjectId::new(removed_mod.actor_id()),
|
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(),
|
id: id.clone(),
|
||||||
context: lemmy_context(),
|
context: lemmy_context(),
|
||||||
cc: [ObjectId::new(community.actor_id())],
|
cc: [ObjectId::new(community.actor_id())],
|
||||||
|
@ -90,21 +89,9 @@ impl ActivityHandler for RemoveMod {
|
||||||
request_counter: &mut i32,
|
request_counter: &mut i32,
|
||||||
) -> Result<(), LemmyError> {
|
) -> Result<(), LemmyError> {
|
||||||
verify_activity(self, &context.settings())?;
|
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_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_mod_action(&self.actor, &self.cc[0], context, request_counter).await?;
|
verify_add_remove_moderator_target(&self.target, &self.cc[0])?;
|
||||||
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?;
|
|
||||||
}
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -113,29 +100,18 @@ impl ActivityHandler for RemoveMod {
|
||||||
context: &Data<LemmyContext>,
|
context: &Data<LemmyContext>,
|
||||||
request_counter: &mut i32,
|
request_counter: &mut i32,
|
||||||
) -> Result<(), LemmyError> {
|
) -> Result<(), LemmyError> {
|
||||||
if self.target.is_some() {
|
let community = self.cc[0].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 remove_mod = self.object.dereference(context, request_counter).await?;
|
|
||||||
|
|
||||||
let form = CommunityModeratorForm {
|
let form = CommunityModeratorForm {
|
||||||
community_id: community.id,
|
community_id: community.id,
|
||||||
person_id: remove_mod.id,
|
person_id: remove_mod.id,
|
||||||
};
|
};
|
||||||
blocking(context.pool(), move |conn| {
|
blocking(context.pool(), move |conn| {
|
||||||
CommunityModerator::leave(conn, &form)
|
CommunityModerator::leave(conn, &form)
|
||||||
})
|
})
|
||||||
.await??;
|
.await??;
|
||||||
// TODO: send websocket notification about removed mod
|
// TODO: send websocket notification about removed mod
|
||||||
Ok(())
|
Ok(())
|
||||||
} else {
|
|
||||||
receive_remove_action(
|
|
||||||
&self.actor,
|
|
||||||
self.object.inner(),
|
|
||||||
None,
|
|
||||||
context,
|
|
||||||
request_counter,
|
|
||||||
)
|
|
||||||
.await
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,7 +26,6 @@ pub mod following;
|
||||||
pub mod post;
|
pub mod post;
|
||||||
pub mod private_message;
|
pub mod private_message;
|
||||||
pub mod report;
|
pub mod report;
|
||||||
pub mod undo_remove;
|
|
||||||
pub mod voting;
|
pub mod voting;
|
||||||
|
|
||||||
#[derive(Clone, Debug, ToString, Deserialize, Serialize)]
|
#[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 lemmy_apub_lib::values::PublicUrl;
|
||||||
use serde::{Deserialize, Serialize};
|
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.
|
/// Migrate value of field `to` from single value to vec.
|
||||||
///
|
///
|
||||||
/// v0.14: send as single value, accept both
|
/// v0.14: send as single value, accept both
|
||||||
|
|
Loading…
Reference in New Issue