X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FModel%2FGServer.php;h=a3f0c26077ecfd5718dc655f751d428988aa0ed6;hb=3bca4fe2a64671d09e08346456cdfa6c12f996e9;hp=9d913f1c12075bcde27034c5b66bdd3831b35e2a;hpb=2643ca11e6fff983bc7fa5bbcb8358cc2f2a6574;p=friendica.git diff --git a/src/Model/GServer.php b/src/Model/GServer.php index 9d913f1c12..a3f0c26077 100644 --- a/src/Model/GServer.php +++ b/src/Model/GServer.php @@ -1,6 +1,6 @@ isSuccess()) { - $json = json_decode($curlResult->getBody(), true); + $json = json_decode($curlResult->getBodyString(), true); if (!empty($json) && is_array($json)) { $data = self::fetchDataFromSystemActor($json, $serverdata); $serverdata = $data['server']; @@ -656,7 +655,7 @@ class GServer if (!$html_fetched && !in_array($serverdata['detection-method'], [self::DETECT_SYSTEM_ACTOR, self::DETECT_AP_COLLECTION])) { $curlResult = DI::httpClient()->get($url, HttpClientAccept::HTML); } - } elseif (!$html_fetched && (strlen($curlResult->getBody()) < 1000)) { + } elseif (!$html_fetched && (strlen($curlResult->getBodyString()) < 1000)) { $curlResult = DI::httpClient()->get($url, HttpClientAccept::HTML); } @@ -666,11 +665,17 @@ class GServer } } - if (!$curlResult->isSuccess() || empty($curlResult->getBody())) { + if (!$curlResult->isSuccess() || empty($curlResult->getBodyString())) { self::setFailureByUrl($url); return false; } + if (in_array($url, ['https://www.threads.net', 'https://threads.net'])) { + $serverdata['detection-method'] = self::DETECT_THREADS; + $serverdata['network'] = Protocol::ACTIVITYPUB; + $serverdata['platform'] = 'threads'; + } + if (($serverdata['network'] == Protocol::PHANTOM) || in_array($serverdata['detection-method'], self::DETECT_UNSPECIFIC)) { $serverdata = self::detectMastodonAlikes($url, $serverdata); } @@ -777,6 +782,9 @@ class GServer } $serverdata['registered-users'] = $serverdata['registered-users'] ?? 0; + $serverdata['next_contact'] = self::getNextUpdateDate(true, '', '', in_array($serverdata['network'], [Protocol::PHANTOM, Protocol::FEED])); + $serverdata['last_contact'] = DateTimeFormat::utcNow(); + $serverdata['failed'] = false; // Numbers above a reasonable value (10 millions) are ignored if ($serverdata['registered-users'] > 10000000) { @@ -853,7 +861,6 @@ class GServer * @param string $server_url address of the server * * @return void - * * @throws \Friendica\Network\HTTPException\InternalServerErrorException */ private static function discoverRelay(string $server_url) @@ -865,7 +872,7 @@ class GServer return; } - $data = json_decode($curlResult->getBody(), true); + $data = json_decode($curlResult->getBodyString(), true); if (!is_array($data)) { return; } @@ -960,7 +967,7 @@ class GServer return $serverdata; } - $data = json_decode($curlResult->getBody(), true); + $data = json_decode($curlResult->getBodyString(), true); if (empty($data)) { return $serverdata; } @@ -1052,7 +1059,7 @@ class GServer return []; } - $nodeinfo = json_decode($httpResult->getBody(), true); + $nodeinfo = json_decode($httpResult->getBodyString(), true); if (!is_array($nodeinfo) || empty($nodeinfo['links'])) { return []; @@ -1107,7 +1114,7 @@ class GServer return []; } - $nodeinfo = json_decode($curlResult->getBody(), true); + $nodeinfo = json_decode($curlResult->getBodyString(), true); if (!is_array($nodeinfo)) { return []; @@ -1207,7 +1214,7 @@ class GServer return []; } - $nodeinfo = json_decode($curlResult->getBody(), true); + $nodeinfo = json_decode($curlResult->getBodyString(), true); if (!is_array($nodeinfo)) { return []; } @@ -1240,6 +1247,11 @@ class GServer } } + // Special treatment for NextCloud, since there you can freely define your software name + if (!empty($nodeinfo['rootUrl']) && in_array(parse_url($nodeinfo['rootUrl'], PHP_URL_PATH), ['/index.php/apps/social', '/apps/social'])) { + $server['platform'] = 'nextcloud'; + } + if (!empty($nodeinfo['metadata']['nodeName'])) { $server['site_name'] = $nodeinfo['metadata']['nodeName']; } @@ -1305,12 +1317,10 @@ class GServer /** * Parses NodeInfo2 protocol 1.0 * - * @see https://github.com/jaywink/nodeinfo2/blob/master/PROTOCOL.md - * - * @param string $nodeinfo_url address of the nodeinfo path + * @param ICanHandleHttpResponses $httpResult * * @return array Server data - * + * @see https://github.com/jaywink/nodeinfo2/blob/master/PROTOCOL.md * @throws \Friendica\Network\HTTPException\InternalServerErrorException */ private static function parseNodeinfo210(ICanHandleHttpResponses $httpResult): array @@ -1319,7 +1329,7 @@ class GServer return []; } - $nodeinfo = json_decode($httpResult->getBody(), true); + $nodeinfo = json_decode($httpResult->getBodyString(), true); if (!is_array($nodeinfo)) { return []; @@ -1422,7 +1432,7 @@ class GServer return $serverdata; } - $data = json_decode($curlResult->getBody(), true); + $data = json_decode($curlResult->getBodyString(), true); if (empty($data)) { return $serverdata; } @@ -1558,7 +1568,7 @@ class GServer } foreach ($tags as $tag) { - if ((($tag['as:name'] ?? '') == 'Protocol') && (($tag['sc:value'] ?? '') == 'nomad')) { + if ((($tag['as:name'] ?? '') == 'Protocol') && in_array('nomad', [$tag['sc:value'] ?? '', $tag['as:content'] ?? ''])) { return true; } } @@ -1575,11 +1585,11 @@ class GServer { $name = 'nomad'; $curlResult = DI::httpClient()->get($url . '/manifest', 'application/manifest+json'); - if (!$curlResult->isSuccess() || ($curlResult->getBody() == '')) { + if (!$curlResult->isSuccess() || ($curlResult->getBodyString() == '')) { return $name; } - $data = json_decode($curlResult->getBody(), true); + $data = json_decode($curlResult->getBodyString(), true); if (empty($data)) { return $name; } @@ -1596,11 +1606,11 @@ class GServer private static function getNomadVersion(string $url): string { $curlResult = DI::httpClient()->get($url . '/api/z/1.0/version', HttpClientAccept::JSON); - if (!$curlResult->isSuccess() || ($curlResult->getBody() == '')) { + if (!$curlResult->isSuccess() || ($curlResult->getBodyString() == '')) { return ''; } - $data = json_decode($curlResult->getBody(), true); + $data = json_decode($curlResult->getBodyString(), true); if (empty($data)) { return ''; } @@ -1622,7 +1632,7 @@ class GServer return false; } - $xrd = XML::parseString($curlResult->getBody(), true); + $xrd = XML::parseString($curlResult->getBodyString(), true); if (!is_object($xrd)) { return false; } @@ -1721,7 +1731,7 @@ class GServer return $serverdata; } - $data = json_decode($curlResult->getBody(), true); + $data = json_decode($curlResult->getBodyString(), true); if (empty($data)) { return $serverdata; } @@ -1751,7 +1761,7 @@ class GServer return $serverdata; } - $data = json_decode($curlResult->getBody(), true); + $data = json_decode($curlResult->getBodyString(), true); if (empty($data)) { return $serverdata; } @@ -1774,11 +1784,11 @@ class GServer private static function detectPeertube(string $url, array $serverdata): array { $curlResult = DI::httpClient()->get($url . '/api/v1/config', HttpClientAccept::JSON); - if (!$curlResult->isSuccess() || ($curlResult->getBody() == '')) { + if (!$curlResult->isSuccess() || ($curlResult->getBodyString() == '')) { return $serverdata; } - $data = json_decode($curlResult->getBody(), true); + $data = json_decode($curlResult->getBodyString(), true); if (empty($data)) { return $serverdata; } @@ -1822,11 +1832,11 @@ class GServer private static function detectNextcloud(string $url, array $serverdata, bool $validHostMeta): array { $curlResult = DI::httpClient()->get($url . '/status.php', HttpClientAccept::JSON); - if (!$curlResult->isSuccess() || ($curlResult->getBody() == '')) { + if (!$curlResult->isSuccess() || ($curlResult->getBodyString() == '')) { return $serverdata; } - $data = json_decode($curlResult->getBody(), true); + $data = json_decode($curlResult->getBodyString(), true); if (empty($data)) { return $serverdata; } @@ -1858,11 +1868,11 @@ class GServer private static function fetchWeeklyUsage(string $url, array $serverdata): array { $curlResult = DI::httpClient()->get($url . '/api/v1/instance/activity', HttpClientAccept::JSON); - if (!$curlResult->isSuccess() || ($curlResult->getBody() == '')) { + if (!$curlResult->isSuccess() || ($curlResult->getBodyString() == '')) { return $serverdata; } - $data = json_decode($curlResult->getBody(), true); + $data = json_decode($curlResult->getBodyString(), true); if (empty($data)) { return $serverdata; } @@ -1898,11 +1908,11 @@ class GServer private static function detectMastodonAlikes(string $url, array $serverdata): array { $curlResult = DI::httpClient()->get($url . '/api/v1/instance', HttpClientAccept::JSON); - if (!$curlResult->isSuccess() || ($curlResult->getBody() == '')) { + if (!$curlResult->isSuccess() || ($curlResult->getBodyString() == '')) { return $serverdata; } - $data = json_decode($curlResult->getBody(), true); + $data = json_decode($curlResult->getBodyString(), true); if (empty($data)) { return $serverdata; } @@ -1970,11 +1980,11 @@ class GServer private static function detectHubzilla(string $url, array $serverdata): array { $curlResult = DI::httpClient()->get($url . '/api/statusnet/config.json', HttpClientAccept::JSON); - if (!$curlResult->isSuccess() || ($curlResult->getBody() == '')) { + if (!$curlResult->isSuccess() || ($curlResult->getBodyString() == '')) { return $serverdata; } - $data = json_decode($curlResult->getBody(), true); + $data = json_decode($curlResult->getBodyString(), true); if (empty($data) || empty($data['site'])) { return $serverdata; } @@ -2067,11 +2077,11 @@ class GServer { // Test for GNU Social $curlResult = DI::httpClient()->get($url . '/api/gnusocial/version.json', HttpClientAccept::JSON); - if ($curlResult->isSuccess() && ($curlResult->getBody() != '{"error":"not implemented"}') && - ($curlResult->getBody() != '') && (strlen($curlResult->getBody()) < 30)) { + if ($curlResult->isSuccess() && ($curlResult->getBodyString() != '{"error":"not implemented"}') && + ($curlResult->getBodyString() != '') && (strlen($curlResult->getBodyString()) < 30)) { $serverdata['platform'] = 'gnusocial'; // Remove junk that some GNU Social servers return - $serverdata['version'] = str_replace(chr(239) . chr(187) . chr(191), '', $curlResult->getBody()); + $serverdata['version'] = str_replace(chr(239) . chr(187) . chr(191), '', $curlResult->getBodyString()); $serverdata['version'] = str_replace(["\r", "\n", "\t"], '', $serverdata['version']); $serverdata['version'] = trim($serverdata['version'], '"'); $serverdata['network'] = Protocol::OSTATUS; @@ -2085,11 +2095,11 @@ class GServer // Test for Statusnet $curlResult = DI::httpClient()->get($url . '/api/statusnet/version.json', HttpClientAccept::JSON); - if ($curlResult->isSuccess() && ($curlResult->getBody() != '{"error":"not implemented"}') && - ($curlResult->getBody() != '') && (strlen($curlResult->getBody()) < 30)) { + if ($curlResult->isSuccess() && ($curlResult->getBodyString() != '{"error":"not implemented"}') && + ($curlResult->getBodyString() != '') && (strlen($curlResult->getBodyString()) < 30)) { // Remove junk that some GNU Social servers return - $serverdata['version'] = str_replace(chr(239).chr(187).chr(191), '', $curlResult->getBody()); + $serverdata['version'] = str_replace(chr(239).chr(187).chr(191), '', $curlResult->getBodyString()); $serverdata['version'] = str_replace(["\r", "\n", "\t"], '', $serverdata['version']); $serverdata['version'] = trim($serverdata['version'], '"'); @@ -2136,7 +2146,7 @@ class GServer return $serverdata; } - $data = json_decode($curlResult->getBody(), true); + $data = json_decode($curlResult->getBodyString(), true); if (empty($data) || empty($data['version'])) { return $serverdata; } @@ -2454,7 +2464,7 @@ class GServer $api = 'https://instances.social/api/1.0/instances/list?count=0'; $curlResult = DI::httpClient()->get($api, HttpClientAccept::JSON, [HttpClientOptions::HEADERS => ['Authorization' => ['Bearer ' . $accesstoken]]]); if ($curlResult->isSuccess()) { - $servers = json_decode($curlResult->getBody(), true); + $servers = json_decode($curlResult->getBodyString(), true); if (!empty($servers['instances'])) { foreach ($servers['instances'] as $server) {