Bläddra i källkod

Update Inbox handler, add Reject Follow support

Daniel Supernault 3 månader sedan
förälder
incheckning
fbe76e37f3
2 ändrade filer med 50 tillägg och 1 borttagningar
  1. 19 1
      app/Util/ActivityPub/Inbox.php
  2. 31 0
      app/Util/ActivityPub/Validator/RejectValidator.php

+ 19 - 1
app/Util/ActivityPub/Inbox.php

@@ -43,6 +43,7 @@ use App\Util\ActivityPub\Validator\Announce as AnnounceValidator;
 use App\Util\ActivityPub\Validator\Follow as FollowValidator;
 use App\Util\ActivityPub\Validator\Like as LikeValidator;
 use App\Util\ActivityPub\Validator\MoveValidator;
+use App\Util\ActivityPub\Validator\RejectValidator;
 use App\Util\ActivityPub\Validator\UpdatePersonValidator;
 use Cache;
 use Illuminate\Support\Facades\Bus;
@@ -121,6 +122,9 @@ class Inbox
                 break;
 
             case 'Reject':
+                if (RejectValidator::validate($this->payload) == false) {
+                    return;
+                }
                 $this->handleRejectActivity();
                 break;
 
@@ -854,7 +858,21 @@ class Inbox
 
     }
 
-    public function handleRejectActivity() {}
+    public function handleRejectActivity()
+    {
+        $actorUrl = $this->payload['actor'];
+        $obj = $this->payload['object'];
+        $profileUrl = $obj['actor'];
+        if (! Helpers::validateUrl($actorUrl) || ! Helpers::validateLocalUrl($profileUrl)) {
+            return;
+        }
+        $actor = Helpers::profileFetch($actorUrl);
+        $profile = Helpers::profileFetch($profileUrl);
+
+        FollowRequest::whereFollowerId($profile->id)->whereFollowingId($actor->id)->forceDelete();
+        RelationshipService::refresh($actor->id, $profile->id);
+
+    }
 
     public function handleUndoActivity()
     {

+ 31 - 0
app/Util/ActivityPub/Validator/RejectValidator.php

@@ -0,0 +1,31 @@
+<?php
+
+namespace App\Util\ActivityPub\Validator;
+
+use Illuminate\Validation\Rule;
+use Validator;
+
+class RejectValidator
+{
+    public static function validate($payload)
+    {
+        $valid = Validator::make($payload, [
+            '@context' => 'required',
+            'id' => 'required|string',
+            'type' => [
+                'required',
+                Rule::in(['Reject']),
+            ],
+            'actor' => 'required|url',
+            'object.id' => 'required|url',
+            'object.actor' => 'required|url',
+            'object.object' => 'required|url',
+            'object.type' => [
+                'required',
+                Rule::in(['Follow']),
+            ],
+        ])->passes();
+
+        return $valid;
+    }
+}