12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- <?php
- namespace App\Services;
- use Illuminate\Http\Client\ConnectionException;
- use Illuminate\Http\Client\RequestException;
- use Illuminate\Support\Facades\Http;
- class NodeinfoService
- {
- public static function get($domain)
- {
- $version = config('pixelfed.version');
- $appUrl = config('app.url');
- $headers = [
- 'Accept' => 'application/json',
- 'User-Agent' => "(Pixelfed/{$version}; +{$appUrl})",
- ];
- $url = 'https://'.$domain;
- $wk = $url.'/.well-known/nodeinfo';
- try {
- $res = Http::withOptions([
- 'allow_redirects' => false,
- ])
- ->withHeaders($headers)
- ->timeout(5)
- ->get($wk);
- } catch (RequestException $e) {
- return false;
- } catch (ConnectionException $e) {
- return false;
- } catch (\Exception $e) {
- return false;
- }
- if (! $res) {
- return false;
- }
- $json = $res->json();
- if (! isset($json['links'])) {
- return false;
- }
- if (is_array($json['links'])) {
- if (isset($json['links']['href'])) {
- $href = $json['links']['href'];
- } else {
- $href = $json['links'][0]['href'];
- }
- } else {
- return false;
- }
- $domain = parse_url($url, PHP_URL_HOST);
- $hrefDomain = parse_url($href, PHP_URL_HOST);
- if ($domain !== $hrefDomain) {
- return false;
- }
- try {
- $res = Http::withOptions([
- 'allow_redirects' => false,
- ])
- ->withHeaders($headers)
- ->timeout(5)
- ->get($href);
- } catch (RequestException $e) {
- return false;
- } catch (ConnectionException $e) {
- return false;
- } catch (\Exception $e) {
- return false;
- }
- return $res->json();
- }
- }
|