run($query, $mastodonMode); } protected function run($query, $mastodonMode) { if($profile = Profile::whereUsername($query)->first()) { return $mastodonMode ? AccountService::getMastodon($profile->id, true) : AccountService::get($profile->id); } $url = WebfingerUrl::generateWebfingerUrl($query); if(!Helpers::validateUrl($url)) { return []; } $res = Http::retry(3, 100) ->acceptJson() ->withHeaders([ 'User-Agent' => '(Pixelfed/' . config('pixelfed.version') . '; +' . config('app.url') . ')' ]) ->timeout(20) ->get($url); if(!$res->successful()) { return []; } $webfinger = $res->json(); if(!isset($webfinger['links']) || !is_array($webfinger['links']) || empty($webfinger['links'])) { return []; } $link = collect($webfinger['links']) ->filter(function($link) { return $link && isset($link['rel']) && isset($link['type']) && isset($link['href']) && $link['rel'] == 'self' && $link['type'] == 'application/activity+json' || $link['type'] == 'application/ld+json; profile="https://www.w3.org/ns/activitystreams"'; }) ->pluck('href') ->first(); $profile = Helpers::profileFetch($link); if(!$profile) { return; } return $mastodonMode ? AccountService::getMastodon($profile->id, true) : AccountService::get($profile->id); } }