2 activities::send::generate_activity_id,
3 activity_queue::send_activity_single_dest,
8 kind::{FollowType, UndoType},
12 base::{AnyBase, BaseExt, ExtendsExt},
15 use lemmy_db::{community::Community, user::User_, DbPool};
16 use lemmy_structs::blocking;
17 use lemmy_utils::LemmyError;
18 use lemmy_websocket::LemmyContext;
21 #[async_trait::async_trait(?Send)]
22 impl ActorType for User_ {
23 fn actor_id_str(&self) -> String {
24 self.actor_id.to_owned()
27 fn public_key(&self) -> Option<String> {
28 self.public_key.to_owned()
31 fn private_key(&self) -> Option<String> {
32 self.private_key.to_owned()
35 /// As a given local user, send out a follow request to a remote community.
38 follow_actor_id: &Url,
39 context: &LemmyContext,
40 ) -> Result<(), LemmyError> {
41 let follow_actor_id = follow_actor_id.to_string();
42 let community = blocking(context.pool(), move |conn| {
43 Community::read_from_actor_id(conn, &follow_actor_id)
47 let mut follow = Follow::new(self.actor_id.to_owned(), community.actor_id()?);
49 .set_context(activitystreams::context())
50 .set_id(generate_activity_id(FollowType::Follow)?)
51 .set_to(community.actor_id()?);
53 send_activity_single_dest(follow, self, community.get_inbox_url()?, context).await?;
57 async fn send_unfollow(
59 follow_actor_id: &Url,
60 context: &LemmyContext,
61 ) -> Result<(), LemmyError> {
62 let follow_actor_id = follow_actor_id.to_string();
63 let community = blocking(context.pool(), move |conn| {
64 Community::read_from_actor_id(conn, &follow_actor_id)
68 let mut follow = Follow::new(self.actor_id.to_owned(), community.actor_id()?);
70 .set_context(activitystreams::context())
71 .set_id(generate_activity_id(FollowType::Follow)?)
72 .set_to(community.actor_id()?);
74 // Undo that fake activity
75 let mut undo = Undo::new(Url::parse(&self.actor_id)?, follow.into_any_base()?);
77 .set_context(activitystreams::context())
78 .set_id(generate_activity_id(UndoType::Undo)?)
79 .set_to(community.actor_id()?);
81 send_activity_single_dest(undo, self, community.get_inbox_url()?, context).await?;
85 async fn send_accept_follow(
88 _context: &LemmyContext,
89 ) -> Result<(), LemmyError> {
93 async fn send_delete(&self, _context: &LemmyContext) -> Result<(), LemmyError> {
97 async fn send_undo_delete(&self, _context: &LemmyContext) -> Result<(), LemmyError> {
101 async fn send_remove(&self, _context: &LemmyContext) -> Result<(), LemmyError> {
105 async fn send_undo_remove(&self, _context: &LemmyContext) -> Result<(), LemmyError> {
109 async fn send_announce(
112 _context: &LemmyContext,
113 ) -> Result<(), LemmyError> {
117 async fn get_follower_inboxes(&self, _pool: &DbPool) -> Result<Vec<Url>, LemmyError> {