Переглянути джерело

Merge pull request #965 from pixelfed/frontend-ui-refactor

Update StatusDelete pipeline, fanout via AP if enabled
daniel 6 роки тому
батько
коміт
65769d93f4

+ 28 - 1
app/Jobs/StatusPipeline/StatusDelete.php

@@ -13,6 +13,10 @@ use Illuminate\Contracts\Queue\ShouldQueue;
 use Illuminate\Foundation\Bus\Dispatchable;
 use Illuminate\Queue\InteractsWithQueue;
 use Illuminate\Queue\SerializesModels;
+use League\Fractal;
+use League\Fractal\Serializer\ArraySerializer;
+use App\Transformer\ActivityPub\Verb\DeleteNote;
+use App\Util\ActivityPub\Helpers;
 
 class StatusDelete implements ShouldQueue
 {
@@ -46,7 +50,12 @@ class StatusDelete implements ShouldQueue
     {
         $status = $this->status;
 
-        $this->unlinkRemoveMedia($status);
+        if(config('pixelfed.activitypub_enabled') == true) {
+            $this->fanoutDelete($status);
+        } else {
+            $this->unlinkRemoveMedia($status);
+        }
+
     }
 
     public function unlinkRemoveMedia($status)
@@ -87,4 +96,22 @@ class StatusDelete implements ShouldQueue
 
         return true;
     }
+
+    protected function fanoutDelete($status)
+    {
+        $audience = $status->profile->getAudienceInbox();
+        $profile = $status->profile;
+
+        $fractal = new Fractal\Manager();
+        $fractal->setSerializer(new ArraySerializer());
+        $resource = new Fractal\Resource\Item($status, new DeleteNote());
+        $activity = $fractal->createData($resource)->toArray();
+
+        $this->unlinkRemoveMedia($status);
+        
+        foreach($audience as $url) {
+            Helpers::sendSignedObject($profile, $url, $activity);
+        }
+
+    }
 }

+ 25 - 0
app/Transformer/ActivityPub/Verb/DeleteNote.php

@@ -0,0 +1,25 @@
+<?php
+
+namespace App\Transformer\ActivityPub\Verb;
+
+use App\Status;
+use League\Fractal;
+
+class DeleteNote extends Fractal\TransformerAbstract
+{
+	public function transform(Status $status)
+	{
+			'@context' => [
+				'https://www.w3.org/ns/activitystreams',
+				'https://w3id.org/security/v1',
+			],
+			'id' 					=> $status->permalink('#delete'),
+			'type' 					=> 'Delete',
+			'actor' 				=> $status->profile->permalink(),
+			'object' 				=> [
+				'id' 				=> $status->permalink()
+				'type' 				=> 'Tombstone',
+			]
+	}
+
+}