Browse Source

Update AP Profile Transformer, add `suspended` attribute

Daniel Supernault 1 year ago
parent
commit
25f3fa06af
1 changed files with 56 additions and 51 deletions
  1. 56 51
      app/Transformer/ActivityPub/ProfileTransformer.php

+ 56 - 51
app/Transformer/ActivityPub/ProfileTransformer.php

@@ -3,67 +3,72 @@
 namespace App\Transformer\ActivityPub;
 namespace App\Transformer\ActivityPub;
 
 
 use App\Profile;
 use App\Profile;
-use League\Fractal;
 use App\Services\AccountService;
 use App\Services\AccountService;
+use League\Fractal;
 
 
 class ProfileTransformer extends Fractal\TransformerAbstract
 class ProfileTransformer extends Fractal\TransformerAbstract
 {
 {
     public function transform(Profile $profile)
     public function transform(Profile $profile)
     {
     {
         $res = [
         $res = [
-          '@context' => [
-            'https://w3id.org/security/v1',
-            'https://www.w3.org/ns/activitystreams',
-            [
-              'toot' => 'http://joinmastodon.org/ns#',
-              'manuallyApprovesFollowers' => 'as:manuallyApprovesFollowers',
-              'alsoKnownAs' => [
-                    '@id' => 'as:alsoKnownAs',
-                    '@type' => '@id'
-              ],
-              'movedTo' => [
-                    '@id' => 'as:movedTo',
-                    '@type' => '@id'
-              ],
-              'indexable' => 'toot:indexable',
+            '@context' => [
+                'https://w3id.org/security/v1',
+                'https://www.w3.org/ns/activitystreams',
+                [
+                    'toot' => 'http://joinmastodon.org/ns#',
+                    'manuallyApprovesFollowers' => 'as:manuallyApprovesFollowers',
+                    'alsoKnownAs' => [
+                        '@id' => 'as:alsoKnownAs',
+                        '@type' => '@id',
+                    ],
+                    'movedTo' => [
+                        '@id' => 'as:movedTo',
+                        '@type' => '@id',
+                    ],
+                    'indexable' => 'toot:indexable',
+                    'suspended' => 'toot:suspended',
+                ],
+            ],
+            'id' => $profile->permalink(),
+            'type' => 'Person',
+            'following' => $profile->permalink('/following'),
+            'followers' => $profile->permalink('/followers'),
+            'inbox' => $profile->permalink('/inbox'),
+            'outbox' => $profile->permalink('/outbox'),
+            'preferredUsername' => $profile->username,
+            'name' => $profile->name,
+            'summary' => $profile->bio,
+            'url' => $profile->url(),
+            'manuallyApprovesFollowers' => (bool) $profile->is_private,
+            'indexable' => (bool) $profile->indexable,
+            'published' => $profile->created_at->format('Y-m-d').'T00:00:00Z',
+            'publicKey' => [
+                'id' => $profile->permalink().'#main-key',
+                'owner' => $profile->permalink(),
+                'publicKeyPem' => $profile->public_key,
+            ],
+            'icon' => [
+                'type' => 'Image',
+                'mediaType' => 'image/jpeg',
+                'url' => $profile->avatarUrl(),
+            ],
+            'endpoints' => [
+                'sharedInbox' => config('app.url').'/f/inbox',
             ],
             ],
-          ],
-          'id'                        => $profile->permalink(),
-          'type'                      => 'Person',
-          'following'                 => $profile->permalink('/following'),
-          'followers'                 => $profile->permalink('/followers'),
-          'inbox'                     => $profile->permalink('/inbox'),
-          'outbox'                    => $profile->permalink('/outbox'),
-          'preferredUsername'         => $profile->username,
-          'name'                      => $profile->name,
-          'summary'                   => $profile->bio,
-          'url'                       => $profile->url(),
-          'manuallyApprovesFollowers' => (bool) $profile->is_private,
-          'indexable'                 => (bool) $profile->indexable,
-          'published'                 => $profile->created_at->format('Y-m-d') . 'T00:00:00Z',
-          'publicKey' => [
-            'id'           => $profile->permalink().'#main-key',
-            'owner'        => $profile->permalink(),
-            'publicKeyPem' => $profile->public_key,
-          ],
-          'icon' => [
-            'type'      => 'Image',
-            'mediaType' => 'image/jpeg',
-            'url'       => $profile->avatarUrl(),
-          ],
-          'endpoints' => [
-            'sharedInbox' => config('app.url') . '/f/inbox'
-          ]
-      ];
+        ];
 
 
-      if($profile->aliases->count()) {
-        $res['alsoKnownAs'] = $profile->aliases->map(fn($alias) => $alias->uri);
-      }
+        if ($profile->status === 'delete' || $profile->deleted_at != null) {
+            $res['suspended'] = true;
+        } else {
+            if ($profile->aliases->count()) {
+                $res['alsoKnownAs'] = $profile->aliases->map(fn ($alias) => $alias->uri);
+            }
 
 
-      if($profile->moved_to_profile_id) {
-        $res['movedTo'] = AccountService::get($profile->moved_to_profile_id)['url'];
-      }
+            if ($profile->moved_to_profile_id) {
+                $res['movedTo'] = AccountService::get($profile->moved_to_profile_id)['url'];
+            }
+        }
 
 
-      return $res;
+        return $res;
     }
     }
 }
 }