Webfinger.php 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. <?php
  2. namespace App\Util\Webfinger;
  3. class Webfinger
  4. {
  5. protected $user;
  6. protected $subject;
  7. protected $aliases;
  8. protected $links;
  9. public function __construct($user)
  10. {
  11. $avatar = $user ? $user->avatarUrl() : url('/storage/avatars/default.jpg');
  12. $avatarPath = parse_url($avatar, PHP_URL_PATH);
  13. $extension = pathinfo($avatarPath, PATHINFO_EXTENSION);
  14. $mimeTypes = [
  15. 'jpg' => 'image/jpeg',
  16. 'jpeg' => 'image/jpeg',
  17. 'png' => 'image/png',
  18. 'gif' => 'image/gif',
  19. 'svg' => 'image/svg',
  20. ];
  21. $avatarType = $mimeTypes[$extension] ?? 'application/octet-stream';
  22. $this->subject = 'acct:'.$user->username.'@'.parse_url(config('app.url'), PHP_URL_HOST);
  23. $this->aliases = [
  24. $user->url(),
  25. $user->permalink(),
  26. ];
  27. $this->links = [
  28. [
  29. 'rel' => 'http://webfinger.net/rel/profile-page',
  30. 'type' => 'text/html',
  31. 'href' => $user->url(),
  32. ],
  33. [
  34. 'rel' => 'http://schemas.google.com/g/2010#updates-from',
  35. 'type' => 'application/atom+xml',
  36. 'href' => $user->permalink('.atom'),
  37. ],
  38. [
  39. 'rel' => 'self',
  40. 'type' => 'application/activity+json',
  41. 'href' => $user->permalink(),
  42. ],
  43. [
  44. 'rel' => 'http://webfinger.net/rel/avatar',
  45. 'type' => $avatarType,
  46. 'href' => $avatar,
  47. ],
  48. [
  49. 'rel' => 'http://ostatus.org/schema/1.0/subscribe',
  50. 'template' => 'https://'.config_cache('pixelfed.domain.app').'/authorize_interaction?uri={uri}',
  51. ],
  52. ];
  53. }
  54. public function generate()
  55. {
  56. return [
  57. 'subject' => $this->subject,
  58. 'aliases' => $this->aliases,
  59. 'links' => $this->links,
  60. ];
  61. }
  62. }