From 66d525dde56c8041003ce608ebd65045d2a7e1bc Mon Sep 17 00:00:00 2001 From: Daniel Supernault Date: Tue, 5 Mar 2019 18:06:23 -0700 Subject: [PATCH] Update StatusDelete pipeline, fanout via AP if enabled --- app/Jobs/StatusPipeline/StatusDelete.php | 29 ++++++++++++++++++- .../ActivityPub/Verb/DeleteNote.php | 25 ++++++++++++++++ 2 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 app/Transformer/ActivityPub/Verb/DeleteNote.php diff --git a/app/Jobs/StatusPipeline/StatusDelete.php b/app/Jobs/StatusPipeline/StatusDelete.php index d852c112d..381b1e118 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 000000000..ab15ea740 --- /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