. * */ namespace Friendica\Worker; use Friendica\Core\Logger; use Friendica\Database\DBA; use Friendica\DI; use Friendica\Model\GServer; use Friendica\Util\Strings; class UpdateServerPeers { /** * Query the given server for their known peers * @param string $gserver Server URL */ public static function execute(string $url) { $ret = DI::httpRequest()->get($url . '/api/v1/instance/peers'); if (!$ret->isSuccess() || empty($ret->getBody())) { Logger::info('Server is not reachable or does not offer the "peers" endpoint', ['url' => $url]); return; } $peers = json_decode($ret->getBody()); if (empty($peers) || !is_array($peers)) { Logger::info('Server does not have any peers listed', ['url' => $url]); return; } Logger::info('Server peer update start', ['url' => $url]); $total = 0; $added = 0; foreach ($peers as $peer) { ++$total; if (DBA::exists('gserver', ['nurl' => Strings::normaliseLink('http://' . $peer)])) { // We already know this server continue; } // This endpoint doesn't offer the schema. So we assume that it is HTTPS. GServer::add('https://' . $peer); ++$added; } Logger::info('Server peer update ended', ['total' => $total, 'added' => $added, 'url' => $url]); } }