use crate::{
activities::{
check_community_deleted_or_removed,
- community::{announce::GetCommunity, send_activity_in_community},
+ community::send_activity_in_community,
generate_activity_id,
verify_is_public,
verify_mod_action,
},
activity_lists::AnnouncableActivities,
objects::{community::ApubCommunity, person::ApubPerson, post::ApubPost},
- protocol::activities::{create_or_update::post::CreateOrUpdatePost, CreateOrUpdateType},
+ protocol::{
+ activities::{create_or_update::page::CreateOrUpdatePage, CreateOrUpdateType},
+ InCommunity,
+ },
ActorType,
};
use activitypub_federation::{
use lemmy_websocket::{send::send_post_ws_message, LemmyContext, UserOperationCrud};
use url::Url;
-impl CreateOrUpdatePost {
+impl CreateOrUpdatePage {
pub(crate) async fn new(
post: ApubPost,
actor: &ApubPerson,
community: &ApubCommunity,
kind: CreateOrUpdateType,
context: &LemmyContext,
- ) -> Result<CreateOrUpdatePost, LemmyError> {
+ ) -> Result<CreateOrUpdatePage, LemmyError> {
let id = generate_activity_id(
kind.clone(),
&context.settings().get_protocol_and_hostname(),
)?;
- Ok(CreateOrUpdatePost {
+ Ok(CreateOrUpdatePage {
actor: ObjectId::new(actor.actor_id()),
to: vec![public()],
object: post.into_apub(context).await?,
cc: vec![community.actor_id()],
kind,
id: id.clone(),
+ audience: Some(ObjectId::new(community.actor_id())),
})
}
let community_id = post.community_id;
let community: ApubCommunity = Community::read(context.pool(), community_id).await?.into();
- let create_or_update = CreateOrUpdatePost::new(post, actor, &community, kind, context).await?;
+ let create_or_update = CreateOrUpdatePage::new(post, actor, &community, kind, context).await?;
let is_mod_action = create_or_update.object.is_mod_action(context).await?;
let activity = AnnouncableActivities::CreateOrUpdatePost(create_or_update);
send_activity_in_community(activity, actor, &community, vec![], is_mod_action, context).await?;
}
#[async_trait::async_trait(?Send)]
-impl ActivityHandler for CreateOrUpdatePost {
+impl ActivityHandler for CreateOrUpdatePage {
type DataType = LemmyContext;
type Error = LemmyError;
request_counter: &mut i32,
) -> Result<(), LemmyError> {
verify_is_public(&self.to, &self.cc)?;
- let community = self.get_community(context, request_counter).await?;
+ let community = self.community(context, request_counter).await?;
verify_person_in_community(&self.actor, &community, context, request_counter).await?;
check_community_deleted_or_removed(&community)?;
Ok(())
}
}
-
-#[async_trait::async_trait(?Send)]
-impl GetCommunity for CreateOrUpdatePost {
- #[tracing::instrument(skip_all)]
- async fn get_community(
- &self,
- context: &LemmyContext,
- request_counter: &mut i32,
- ) -> Result<ApubCommunity, LemmyError> {
- self
- .object
- .extract_community(context, request_counter)
- .await
- }
-}