diff --git a/app/Jobs/FollowPipeline/FollowAcceptPipeline.php b/app/Jobs/FollowPipeline/FollowAcceptPipeline.php index b1c13e2ad..09df04340 100644 --- a/app/Jobs/FollowPipeline/FollowAcceptPipeline.php +++ b/app/Jobs/FollowPipeline/FollowAcceptPipeline.php @@ -8,7 +8,8 @@ use Illuminate\Foundation\Bus\Dispatchable; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Queue\SerializesModels; -use Cache, Log; +use Cache; +use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Redis; use League\Fractal; use League\Fractal\Serializer\ArraySerializer; @@ -47,22 +48,45 @@ class FollowAcceptPipeline implements ShouldQueue public function handle() { $follow = $this->followRequest; + + // Verify follow request exists + if (!$follow) { + Log::info("FollowAcceptPipeline: Follow request no longer exists, skipping job"); + return; + } + $actor = $follow->actor; $target = $follow->target; + // Verify actor and target exist + if (!$actor) { + Log::info("FollowAcceptPipeline: Actor no longer exists for follow request {$follow->id}, skipping job"); + return; + } + if (!$target) { + Log::info("FollowAcceptPipeline: Target no longer exists for follow request {$follow->id}, skipping job"); + return; + } + if($actor->domain == null || $actor->inbox_url == null || !$target->private_key) { + Log::info("FollowAcceptPipeline: Missing required fields for follow request {$follow->id}, skipping job"); return; } - $fractal = new Fractal\Manager(); - $fractal->setSerializer(new ArraySerializer()); - $resource = new Fractal\Resource\Item($follow, new AcceptFollow()); - $activity = $fractal->createData($resource)->toArray(); - $url = $actor->sharedInbox ?? $actor->inbox_url; + try { + $fractal = new Fractal\Manager(); + $fractal->setSerializer(new ArraySerializer()); + $resource = new Fractal\Resource\Item($follow, new AcceptFollow()); + $activity = $fractal->createData($resource)->toArray(); + $url = $actor->sharedInbox ?? $actor->inbox_url; - Helpers::sendSignedObject($target, $url, $activity); + Helpers::sendSignedObject($target, $url, $activity); - $follow->delete(); + $follow->delete(); + } catch (\Exception $e) { + Log::warning("FollowAcceptPipeline: Failed to process follow request {$follow->id}: " . $e->getMessage()); + throw $e; + } return; } diff --git a/app/Jobs/FollowPipeline/FollowRejectPipeline.php b/app/Jobs/FollowPipeline/FollowRejectPipeline.php index 99d6fa65c..409ec8ba9 100644 --- a/app/Jobs/FollowPipeline/FollowRejectPipeline.php +++ b/app/Jobs/FollowPipeline/FollowRejectPipeline.php @@ -8,7 +8,8 @@ use Illuminate\Foundation\Bus\Dispatchable; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Queue\SerializesModels; -use Cache, Log; +use Cache; +use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Redis; use League\Fractal; use League\Fractal\Serializer\ArraySerializer; @@ -47,22 +48,45 @@ class FollowRejectPipeline implements ShouldQueue public function handle() { $follow = $this->followRequest; + + // Verify follow request exists + if (!$follow) { + Log::info("FollowRejectPipeline: Follow request no longer exists, skipping job"); + return; + } + $actor = $follow->actor; $target = $follow->target; + // Verify actor and target exist + if (!$actor) { + Log::info("FollowRejectPipeline: Actor no longer exists for follow request {$follow->id}, skipping job"); + return; + } + if (!$target) { + Log::info("FollowRejectPipeline: Target no longer exists for follow request {$follow->id}, skipping job"); + return; + } + if($actor->domain == null || $actor->inbox_url == null || !$target->private_key) { + Log::info("FollowRejectPipeline: Missing required fields for follow request {$follow->id}, skipping job"); return; } - $fractal = new Fractal\Manager(); - $fractal->setSerializer(new ArraySerializer()); - $resource = new Fractal\Resource\Item($follow, new RejectFollow()); - $activity = $fractal->createData($resource)->toArray(); - $url = $actor->sharedInbox ?? $actor->inbox_url; + try { + $fractal = new Fractal\Manager(); + $fractal->setSerializer(new ArraySerializer()); + $resource = new Fractal\Resource\Item($follow, new RejectFollow()); + $activity = $fractal->createData($resource)->toArray(); + $url = $actor->sharedInbox ?? $actor->inbox_url; - Helpers::sendSignedObject($target, $url, $activity); + Helpers::sendSignedObject($target, $url, $activity); - $follow->delete(); + $follow->delete(); + } catch (\Exception $e) { + Log::warning("FollowRejectPipeline: Failed to process follow request {$follow->id}: " . $e->getMessage()); + throw $e; + } return; }