Kaynağa Gözat

Update AP Inbox

Daniel Supernault 10 ay önce
ebeveyn
işleme
3e88b7c890
1 değiştirilmiş dosya ile 37 ekleme ve 0 silme
  1. 37 0
      app/Util/ActivityPub/Inbox.php

+ 37 - 0
app/Util/ActivityPub/Inbox.php

@@ -3,6 +3,7 @@
 namespace App\Util\ActivityPub;
 
 use Cache, DB, Log, Purify, Redis, Storage, Validator;
+use Illuminate\Support\Facades\Bus;
 use App\{
     Activity,
     DirectMessage,
@@ -30,6 +31,10 @@ use App\Jobs\StoryPipeline\StoryExpire;
 use App\Jobs\StoryPipeline\StoryFetch;
 use App\Jobs\StatusPipeline\StatusRemoteUpdatePipeline;
 use App\Jobs\ProfilePipeline\HandleUpdateActivity;
+use App\Jobs\MovePipeline\ProcessMovePipeline;
+use App\Jobs\MovePipeline\MoveMigrateFollowersPipeline;
+use App\Jobs\MovePipeline\UnfollowLegacyAccountMovePipeline;
+use App\Jobs\MovePipeline\CleanupLegacyAccountMovePipeline;
 
 use App\Util\ActivityPub\Validator\Accept as AcceptValidator;
 use App\Util\ActivityPub\Validator\Add as AddValidator;
@@ -38,6 +43,7 @@ use App\Util\ActivityPub\Validator\Follow as FollowValidator;
 use App\Util\ActivityPub\Validator\Like as LikeValidator;
 use App\Util\ActivityPub\Validator\UndoFollow as UndoFollowValidator;
 use App\Util\ActivityPub\Validator\UpdatePersonValidator;
+use App\Util\ActivityPub\Validator\MoveValidator;
 
 use App\Services\AccountService;
 use App\Services\PollService;
@@ -135,6 +141,14 @@ class Inbox
                 $this->handleUpdateActivity();
                 break;
 
+            case 'Move':
+                if(MoveValidator::validate($this->payload) == false) {
+                    \Log::info('[AP][INBOX][MOVE] VALIDATE_FAILURE ' . json_encode($this->payload));
+                    return;
+                }
+                $this->handleMoveActivity();
+                break;
+
             default:
                 // TODO: decide how to handle invalid verbs.
                 break;
@@ -1347,4 +1361,27 @@ class Inbox
             }
         }
     }
+
+    public function handleMoveActivity()
+    {
+        $actor = $this->payload['actor'];
+        $activity = $this->payload['object'];
+        $target = $this->payload['target'];
+        if(
+            !Helpers::validateUrl($actor) ||
+            !Helpers::validateUrl($activity) ||
+            !Helpers::validateUrl($target)
+        ) {
+            return;
+        }
+
+        Bus::chain([
+            new ProcessMoveActivity,
+            new MoveMigrateFollowersPipeline,
+            new UnfollowLegacyAccountMovePipeline,
+            new CleanupLegacyAccountMovePipeline
+        ])
+        ->onQueue('move')
+        ->dispatch($target, $activity);
+    }
 }