<?php namespace App\Services; use Illuminate\Support\Str; use Illuminate\Support\Facades\Http; use Illuminate\Http\Client\RequestException; use Illuminate\Http\Client\ConnectionException; 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::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 60; } try { $res = Http::withHeaders($headers) ->timeout(5) ->get($href); } catch (RequestException $e) { return false; } catch (ConnectionException $e) { return false; } catch (\Exception $e) { return false; } return $res->json(); } }