diff --git a/modules/Fediverse/Controllers/SchedulerController.php b/modules/Fediverse/Controllers/SchedulerController.php index 25e840d8..3f723fa9 100644 --- a/modules/Fediverse/Controllers/SchedulerController.php +++ b/modules/Fediverse/Controllers/SchedulerController.php @@ -27,11 +27,20 @@ class SchedulerController extends Controller // Send activity to all followers foreach ($scheduledActivities as $scheduledActivity) { - // send activity to all actor followers - send_activity_to_followers( - $scheduledActivity->actor, - json_encode($scheduledActivity->payload, JSON_THROW_ON_ERROR), - ); + if ($scheduledActivity->target_actor_id !== null) { + // send activity to targeted actor + send_activity_to_actor( + $scheduledActivity->actor, + $scheduledActivity->targetActor, + json_encode($scheduledActivity->payload, JSON_THROW_ON_ERROR) + ); + } else { + // send activity to all actor followers + send_activity_to_followers( + $scheduledActivity->actor, + json_encode($scheduledActivity->payload, JSON_THROW_ON_ERROR), + ); + } // set activity post to delivered model('ActivityModel') diff --git a/modules/Fediverse/Entities/Actor.php b/modules/Fediverse/Entities/Actor.php index 0b2f15b3..97f53f74 100644 --- a/modules/Fediverse/Entities/Actor.php +++ b/modules/Fediverse/Entities/Actor.php @@ -22,7 +22,7 @@ use RuntimeException; * @property string|null $summary * @property string|null $private_key * @property string|null $public_key - * @property string|null $public_key_id + * @property string $public_key_id * @property string|null $avatar_image_url * @property string|null $avatar_image_mimetype * @property string|null $cover_image_url diff --git a/modules/Fediverse/Helpers/fediverse_helper.php b/modules/Fediverse/Helpers/fediverse_helper.php index 178f4d2e..ba313220 100644 --- a/modules/Fediverse/Helpers/fediverse_helper.php +++ b/modules/Fediverse/Helpers/fediverse_helper.php @@ -97,6 +97,25 @@ if (! function_exists('accept_follow')) { } } +if (! function_exists('send_activity_to_actor')) { + /** + * Sends an activity to all actor followers + */ + function send_activity_to_actor(Actor $actor, Actor $targetActor, string $activityPayload): void + { + try { + $acceptRequest = new ActivityRequest($targetActor->inbox_url, $activityPayload); + if ($actor->private_key !== null) { + $acceptRequest->sign($actor->public_key_id, $actor->private_key); + } + $acceptRequest->post(); + } catch (Exception $exception) { + // log error + log_message('critical', $exception->getMessage()); + } + } +} + if (! function_exists('send_activity_to_followers')) { /** * Sends an activity to all actor followers @@ -104,14 +123,7 @@ if (! function_exists('send_activity_to_followers')) { function send_activity_to_followers(Actor $actor, string $activityPayload): void { foreach ($actor->followers as $follower) { - try { - $acceptRequest = new ActivityRequest($follower->inbox_url, $activityPayload); - $acceptRequest->sign($actor->public_key_id, $actor->private_key); - $acceptRequest->post(); - } catch (Exception $exception) { - // log error - log_message('critical', $exception->getMessage()); - } + send_activity_to_actor($actor, $follower, $activityPayload); } } } diff --git a/modules/Fediverse/Models/FavouriteModel.php b/modules/Fediverse/Models/FavouriteModel.php index 93cd5667..5e8baff5 100644 --- a/modules/Fediverse/Models/FavouriteModel.php +++ b/modules/Fediverse/Models/FavouriteModel.php @@ -68,7 +68,7 @@ class FavouriteModel extends BaseUuidModel ->newActivity( 'Like', $actor->id, - null, + $post->actor_id, $post->id, $likeActivity->toJSON(), $post->published_at, @@ -134,7 +134,7 @@ class FavouriteModel extends BaseUuidModel ->newActivity( 'Undo', $actor->id, - null, + $post->actor_id, $post->id, $undoActivity->toJSON(), $post->published_at, diff --git a/modules/Fediverse/Models/PostModel.php b/modules/Fediverse/Models/PostModel.php index 9762b24e..dc6c07a7 100644 --- a/modules/Fediverse/Models/PostModel.php +++ b/modules/Fediverse/Models/PostModel.php @@ -499,7 +499,7 @@ class PostModel extends BaseUuidModel ->newActivity( 'Announce', $actor->id, - null, + $post->actor_id, $post->id, $announceActivity->toJSON(), $reblog->published_at, @@ -559,7 +559,7 @@ class PostModel extends BaseUuidModel ->newActivity( 'Undo', $reblogPost->actor_id, - null, + $reblogPost->reblog_of_post->actor_id, $reblogPost->reblog_of_id, $undoActivity->toJSON(), Time::now(),