123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- <?php
- namespace App\Util\Webfinger;
- class Webfinger
- {
- protected $user;
- protected $subject;
- protected $aliases;
- protected $links;
- public function __construct($user)
- {
- $avatar = $user ? $user->avatarUrl() : url('/storage/avatars/default.jpg');
- $avatarPath = parse_url($avatar, PHP_URL_PATH);
- $extension = pathinfo($avatarPath, PATHINFO_EXTENSION);
- $mimeTypes = [
- 'jpg' => 'image/jpeg',
- 'jpeg' => 'image/jpeg',
- 'png' => 'image/png',
- 'gif' => 'image/gif',
- 'svg' => 'image/svg',
- ];
- $avatarType = $mimeTypes[$extension] ?? 'application/octet-stream';
- $this->subject = 'acct:'.$user->username.'@'.parse_url(config('app.url'), PHP_URL_HOST);
- $this->aliases = [
- $user->url(),
- $user->permalink(),
- ];
- $this->links = [
- [
- 'rel' => 'http://webfinger.net/rel/profile-page',
- 'type' => 'text/html',
- 'href' => $user->url(),
- ],
- [
- 'rel' => 'http://schemas.google.com/g/2010#updates-from',
- 'type' => 'application/atom+xml',
- 'href' => $user->permalink('.atom'),
- ],
- [
- 'rel' => 'self',
- 'type' => 'application/activity+json',
- 'href' => $user->permalink(),
- ],
- [
- 'rel' => 'http://webfinger.net/rel/avatar',
- 'type' => $avatarType,
- 'href' => $avatar,
- ],
- ];
- }
- public function generate()
- {
- return [
- 'subject' => $this->subject,
- 'aliases' => $this->aliases,
- 'links' => $this->links,
- ];
- }
- }
|