Outbox.php 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. <?php
  2. namespace App\Util\ActivityPub;
  3. use App\Profile;
  4. use App\Status;
  5. use League\Fractal;
  6. use App\Http\Controllers\ProfileController;
  7. use App\Transformer\ActivityPub\ProfileOutbox;
  8. use App\Transformer\ActivityPub\Verb\CreateNote;
  9. class Outbox {
  10. public static function get($profile)
  11. {
  12. abort_if(!config_cache('federation.activitypub.enabled'), 404);
  13. abort_if(!config('federation.activitypub.outbox'), 404);
  14. if($profile->status != null) {
  15. return ProfileController::accountCheck($profile);
  16. }
  17. if($profile->is_private) {
  18. return ['error'=>'403', 'msg' => 'private profile'];
  19. }
  20. $timeline = $profile
  21. ->statuses()
  22. ->whereScope('public')
  23. ->orderBy('created_at', 'desc')
  24. ->take(10)
  25. ->get();
  26. $count = Status::whereProfileId($profile->id)->count();
  27. $fractal = new Fractal\Manager();
  28. $resource = new Fractal\Resource\Collection($timeline, new CreateNote());
  29. $res = $fractal->createData($resource)->toArray();
  30. $outbox = [
  31. '@context' => 'https://www.w3.org/ns/activitystreams',
  32. '_debug' => 'Outbox only supports latest 10 objects, pagination is not supported',
  33. 'id' => $profile->permalink('/outbox'),
  34. 'type' => 'OrderedCollection',
  35. 'totalItems' => $count,
  36. 'orderedItems' => $res['data']
  37. ];
  38. return $outbox;
  39. }
  40. }