2 activities::{post::send_websocket_message, verify_activity, verify_person_in_community},
3 fetcher::person::get_or_fetch_and_upsert_person,
8 use activitystreams::{activity::kind::CreateType, base::BaseExt};
9 use lemmy_apub_lib::{verify_domains_match_opt, ActivityCommonFields, ActivityHandler, PublicUrl};
10 use lemmy_db_schema::source::post::Post;
11 use lemmy_utils::LemmyError;
12 use lemmy_websocket::{LemmyContext, UserOperationCrud};
15 #[derive(Clone, Debug, serde::Deserialize, serde::Serialize)]
16 #[serde(rename_all = "camelCase")]
17 pub struct CreatePost {
21 #[serde(rename = "type")]
24 common: ActivityCommonFields,
27 #[async_trait::async_trait(?Send)]
28 impl ActivityHandler for CreatePost {
31 context: &LemmyContext,
32 request_counter: &mut i32,
33 ) -> Result<(), LemmyError> {
34 verify_activity(self.common())?;
35 verify_person_in_community(&self.common.actor, &self.cc, context, request_counter).await?;
36 verify_domains_match_opt(&self.common.actor, self.object.id_unchecked())?;
42 context: &LemmyContext,
43 request_counter: &mut i32,
44 ) -> Result<(), LemmyError> {
46 get_or_fetch_and_upsert_person(&self.common.actor, context, request_counter).await?;
47 let post = Post::from_apub(
56 send_websocket_message(post.id, UserOperationCrud::CreatePost, context).await
59 fn common(&self) -> &ActivityCommonFields {