diff --git a/app/Jobs/StatusPipeline/StatusDelete.php b/app/Jobs/StatusPipeline/StatusDelete.php index d852c112..381b1e11 100644 --- a/app/Jobs/StatusPipeline/StatusDelete.php +++ b/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); + } + + } } diff --git a/app/Transformer/ActivityPub/Verb/DeleteNote.php b/app/Transformer/ActivityPub/Verb/DeleteNote.php new file mode 100644 index 00000000..ab15ea74 --- /dev/null +++ b/app/Transformer/ActivityPub/Verb/DeleteNote.php @@ -0,0 +1,25 @@ + [ + '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', + ] + } + +} \ No newline at end of file