pixelfed/app/Util/Webfinger/Webfinger.php

71 lines
2 KiB
PHP
Raw Permalink Normal View History

2018-04-20 01:17:15 +00:00
<?php
namespace App\Util\Webfinger;
2018-08-28 03:07:36 +00:00
class Webfinger
{
protected $user;
protected $subject;
protected $aliases;
protected $links;
2019-06-27 07:01:20 +00:00
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';
2019-06-27 07:01:20 +00:00
$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,
],
[
'rel' => 'http://ostatus.org/schema/1.0/subscribe',
'template' => 'https://'.config_cache('pixelfed.domain.app').'/authorize_interaction?uri={uri}',
],
];
}
public function generate()
{
return [
'subject' => $this->subject,
'aliases' => $this->aliases,
'links' => $this->links,
];
}
2018-08-28 03:07:36 +00:00
}