- verify_activity(self.common())?;
- verify_person_in_community(&self.common.actor, &self.cc[0], context, request_counter).await?;
- verify_mod_action(&self.common.actor, self.cc[0].clone(), context).await?;
+ let id = generate_activity_id(
+ UpdateType::Update,
+ &context.settings().get_protocol_and_hostname(),
+ )?;
+ let update = UpdateCommunity {
+ actor: actor.id().into(),
+ to: vec![public()],
+ object: Box::new(community.clone().into_json(context).await?),
+ cc: vec![community.id()],
+ kind: UpdateType::Update,
+ id: id.clone(),
+ audience: Some(community.id().into()),
+ };
+
+ let activity = AnnouncableActivities::UpdateCommunity(update);
+ send_activity_in_community(activity, actor, &community, vec![], true, context).await
+ }
+}
+
+#[async_trait::async_trait]
+impl ActivityHandler for UpdateCommunity {
+ type DataType = LemmyContext;
+ type Error = LemmyError;
+
+ fn id(&self) -> &Url {
+ &self.id
+ }
+
+ fn actor(&self) -> &Url {
+ self.actor.inner()
+ }
+
+ #[tracing::instrument(skip_all)]
+ async fn verify(&self, context: &Data<Self::DataType>) -> Result<(), LemmyError> {
+ insert_received_activity(&self.id, context).await?;
+ verify_is_public(&self.to, &self.cc)?;
+ let community = self.community(context).await?;
+ verify_person_in_community(&self.actor, &community, context).await?;
+ verify_mod_action(&self.actor, self.object.id.inner(), community.id, context).await?;
+ ApubCommunity::verify(&self.object, &community.actor_id.clone().into(), context).await?;