From ad4a36affd76fce0de68e492b8b0268d346f53b8 Mon Sep 17 00:00:00 2001 From: Daniel Supernault Date: Wed, 24 Jul 2019 19:25:51 -0600 Subject: [PATCH] Update Inbox, handle Accept.Follow --- app/Util/ActivityPub/Inbox.php | 53 ++++++++++++++++++++-------------- 1 file changed, 32 insertions(+), 21 deletions(-) diff --git a/app/Util/ActivityPub/Inbox.php b/app/Util/ActivityPub/Inbox.php index 001cfd86e..b51f3102a 100644 --- a/app/Util/ActivityPub/Inbox.php +++ b/app/Util/ActivityPub/Inbox.php @@ -15,6 +15,7 @@ use App\{ use Carbon\Carbon; use App\Util\ActivityPub\Helpers; use App\Jobs\LikePipeline\LikePipeline; +use App\Jobs\FollowPipeline\FollowPipeline; use App\Util\ActivityPub\Validator\{ Accept, @@ -243,30 +244,40 @@ class Inbox public function handleAcceptActivity() { - return; - + $actor = $this->payload['actor']; $obj = $this->payload['object']; - switch ($obj['type']) { - case 'Follow': - $accept = [ - '@context' => 'https://www.w3.org/ns/activitystreams', - 'id' => $target->permalink().'#accepts/follows/' . $follower->id, - 'type' => 'Accept', - 'actor' => $target->permalink(), - 'object' => [ - 'id' => $actor->permalink('#follows/'.$target->id), - 'type' => 'Follow', - 'actor' => $actor->permalink(), - 'object' => $target->permalink() - ] - ]; - break; - - default: - # code... - break; + $type = $this->payload['object']['type']; + + if($type !== 'Follow') { + return; } + + $actor = Helpers::validateUrl($actor); + $target = Helpers::validateLocalUrl($obj); + + if(!$actor || !$target) { + return; + } + $actor = Helpers::profileFetch($actor); + $target = Helpers::profileFetch($target); + + $request = FollowRequest::whereFollowerId($actor->id) + ->whereFollowingId($target->id) + ->whereIsRejected(false) + ->first(); + + if(!$request) { + return; + } + + $follower = new Follower(); + $follower->profile_id = $actor->id; + $follower->following_id = $target->id; + $follower->save(); + FollowPipeline::dispatch($follower); + + $request->delete(); } public function handleDeleteActivity()