diff --git a/crates/api/src/community.rs b/crates/api/src/community.rs index ef7daeb40..c8b44aceb 100644 --- a/crates/api/src/community.rs +++ b/crates/api/src/community.rs @@ -259,6 +259,7 @@ impl Perform for BanFromCommunity { &community, &banned_person, &local_user_view.person.clone().into(), + expires, context, ) .await?; diff --git a/crates/apub/assets/lemmy/activities/community/block_user.json b/crates/apub/assets/lemmy/activities/community/block_user.json index 9ca00816d..4d43e086e 100644 --- a/crates/apub/assets/lemmy/activities/community/block_user.json +++ b/crates/apub/assets/lemmy/activities/community/block_user.json @@ -9,5 +9,6 @@ ], "target": "http://enterprise.lemmy.ml/c/main", "type": "Block", + "expires": "2021-11-01T12:23:50.151874+00:00", "id": "http://enterprise.lemmy.ml/activities/block/5d42fffb-0903-4625-86d4-0b39bb344fc2" -} \ No newline at end of file +} diff --git a/crates/apub/src/activities/community/block_user.rs b/crates/apub/src/activities/community/block_user.rs index 92a7ba8a2..f5a6f02ce 100644 --- a/crates/apub/src/activities/community/block_user.rs +++ b/crates/apub/src/activities/community/block_user.rs @@ -12,6 +12,7 @@ use crate::{ protocol::activities::community::block_user::BlockUserFromCommunity, }; use activitystreams_kinds::{activity::BlockType, public}; +use chrono::NaiveDateTime; use lemmy_api_common::blocking; use lemmy_apub_lib::{ data::Data, @@ -27,7 +28,7 @@ use lemmy_db_schema::{ }, traits::{Bannable, Followable}, }; -use lemmy_utils::LemmyError; +use lemmy_utils::{utils::convert_datetime, LemmyError}; use lemmy_websocket::LemmyContext; impl BlockUserFromCommunity { @@ -35,6 +36,7 @@ impl BlockUserFromCommunity { community: &ApubCommunity, target: &ApubPerson, actor: &ApubPerson, + expires: Option, context: &LemmyContext, ) -> Result { Ok(BlockUserFromCommunity { @@ -48,6 +50,7 @@ impl BlockUserFromCommunity { BlockType::Block, &context.settings().get_protocol_and_hostname(), )?, + expires: expires.map(convert_datetime), unparsed: Default::default(), }) } @@ -57,9 +60,10 @@ impl BlockUserFromCommunity { community: &ApubCommunity, target: &ApubPerson, actor: &ApubPerson, + expires: Option, context: &LemmyContext, ) -> Result<(), LemmyError> { - let block = BlockUserFromCommunity::new(community, target, actor, context)?; + let block = BlockUserFromCommunity::new(community, target, actor, expires, context)?; let block_id = block.id.clone(); let activity = AnnouncableActivities::BlockUserFromCommunity(block); @@ -101,8 +105,7 @@ impl ActivityHandler for BlockUserFromCommunity { let community_user_ban_form = CommunityPersonBanForm { community_id: community.id, person_id: blocked_user.id, - // TODO how to carry across the ban expiration time? - expires: None, + expires: Some(self.expires.map(|u| u.naive_local())), }; blocking(context.pool(), move |conn: &'_ _| { diff --git a/crates/apub/src/activities/community/undo_block_user.rs b/crates/apub/src/activities/community/undo_block_user.rs index e93f4ff29..a62315ddd 100644 --- a/crates/apub/src/activities/community/undo_block_user.rs +++ b/crates/apub/src/activities/community/undo_block_user.rs @@ -36,7 +36,7 @@ impl UndoBlockUserFromCommunity { actor: &ApubPerson, context: &LemmyContext, ) -> Result<(), LemmyError> { - let block = BlockUserFromCommunity::new(community, target, actor, context)?; + let block = BlockUserFromCommunity::new(community, target, actor, None, context)?; let id = generate_activity_id( UndoType::Undo, diff --git a/crates/apub/src/protocol/activities/community/block_user.rs b/crates/apub/src/protocol/activities/community/block_user.rs index ecde0ce3a..891fe1f55 100644 --- a/crates/apub/src/protocol/activities/community/block_user.rs +++ b/crates/apub/src/protocol/activities/community/block_user.rs @@ -3,6 +3,7 @@ use crate::{ protocol::Unparsed, }; use activitystreams_kinds::activity::BlockType; +use chrono::{DateTime, FixedOffset}; use lemmy_apub_lib::object_id::ObjectId; use serde::{Deserialize, Serialize}; use url::Url; @@ -22,4 +23,5 @@ pub struct BlockUserFromCommunity { pub(crate) id: Url, #[serde(flatten)] pub(crate) unparsed: Unparsed, + pub(crate) expires: Option>, }