X-Git-Url: http://these/git/?a=blobdiff_plain;f=crates%2Fapub%2Fsrc%2Fprotocol%2Fobjects%2Fgroup.rs;h=5abfa2b28f582e22efeb1466765f13967430c633;hb=235cc8b22897bfb3e71ba3dbd725d36863fea8ba;hp=f6c8f517f98c67d2678c05761f684b6325d902c3;hpb=276a8c2bd3e4fd1323e66b808675cf14cf6f75c5;p=lemmy.git diff --git a/crates/apub/src/protocol/objects/group.rs b/crates/apub/src/protocol/objects/group.rs index f6c8f517..5abfa2b2 100644 --- a/crates/apub/src/protocol/objects/group.rs +++ b/crates/apub/src/protocol/objects/group.rs @@ -4,6 +4,7 @@ use crate::{ community_moderators::ApubCommunityModerators, community_outbox::ApubCommunityOutbox, }, + fetch_local_site_data, objects::{community::ApubCommunity, read_from_string_or_source_opt}, protocol::{ objects::{Endpoints, LanguageTag}, @@ -18,7 +19,12 @@ use activitypub_federation::{ }; use activitystreams_kinds::actor::GroupType; use chrono::{DateTime, FixedOffset}; -use lemmy_db_schema::{source::community::CommunityForm, utils::naive_now}; +use lemmy_api_common::utils::{blocking, local_site_opt_to_slur_regex}; +use lemmy_db_schema::{ + newtypes::InstanceId, + source::community::{CommunityInsertForm, CommunityUpdateForm}, + utils::naive_now, +}; use lemmy_utils::{ error::LemmyError, utils::{check_slurs, check_slurs_opt}, @@ -69,10 +75,18 @@ impl Group { expected_domain: &Url, context: &LemmyContext, ) -> Result<(), LemmyError> { - check_apub_id_valid_with_strictness(self.id.inner(), true, context.settings())?; + let local_site_data = blocking(context.pool(), fetch_local_site_data).await??; + + check_apub_id_valid_with_strictness( + self.id.inner(), + true, + &local_site_data, + context.settings(), + )?; verify_domains_match(expected_domain, self.id.inner())?; - let slur_regex = &context.settings().slur_regex(); + let slur_regex = &local_site_opt_to_slur_regex(&local_site_data.local_site); + check_slurs(&self.preferred_username, slur_regex)?; check_slurs_opt(&self.name, slur_regex)?; let description = read_from_string_or_source_opt(&self.summary, &None, &self.source); @@ -80,10 +94,35 @@ impl Group { Ok(()) } - pub(crate) fn into_form(self) -> CommunityForm { - CommunityForm { + pub(crate) fn into_insert_form(self, instance_id: InstanceId) -> CommunityInsertForm { + CommunityInsertForm { name: self.preferred_username.clone(), title: self.name.unwrap_or(self.preferred_username), + description: read_from_string_or_source_opt(&self.summary, &None, &self.source), + removed: None, + published: self.published.map(|u| u.naive_local()), + updated: self.updated.map(|u| u.naive_local()), + deleted: None, + nsfw: Some(self.sensitive.unwrap_or(false)), + actor_id: Some(self.id.into()), + local: Some(false), + private_key: None, + hidden: Some(false), + public_key: self.public_key.public_key_pem, + last_refreshed_at: Some(naive_now()), + icon: self.icon.map(|i| i.url.into()), + banner: self.image.map(|i| i.url.into()), + followers_url: Some(self.followers.into()), + inbox_url: Some(self.inbox.into()), + shared_inbox_url: self.endpoints.map(|e| e.shared_inbox.into()), + posting_restricted_to_mods: self.posting_restricted_to_mods, + instance_id, + } + } + + pub(crate) fn into_update_form(self) -> CommunityUpdateForm { + CommunityUpdateForm { + title: Some(self.name.unwrap_or(self.preferred_username)), description: Some(read_from_string_or_source_opt( &self.summary, &None, @@ -91,7 +130,7 @@ impl Group { )), removed: None, published: self.published.map(|u| u.naive_local()), - updated: self.updated.map(|u| u.naive_local()), + updated: Some(self.updated.map(|u| u.naive_local())), deleted: None, nsfw: Some(self.sensitive.unwrap_or(false)), actor_id: Some(self.id.into()),