From fb550a01727c63200a1232a65f307cc5d1e40407 Mon Sep 17 00:00:00 2001 From: Michael Date: Wed, 1 Jan 2020 21:29:36 +0000 Subject: [PATCH] Relocated functions from PortableContact to GServer --- src/Core/Search.php | 4 - src/Model/GServer.php | 94 +++++++++++++++++++++ src/Protocol/PortableContact.php | 111 ------------------------- src/Worker/UpdateServerDirectories.php | 3 +- 4 files changed, 96 insertions(+), 116 deletions(-) diff --git a/src/Core/Search.php b/src/Core/Search.php index ab06a51a7..c10b5f6d6 100644 --- a/src/Core/Search.php +++ b/src/Core/Search.php @@ -205,10 +205,6 @@ class Search } while ($row = DBA::fetch($data)) { - if (PortableContact::alternateOStatusUrl($row["nurl"])) { - continue; - } - $urlParts = parse_url($row["nurl"]); // Ignore results that look strange. diff --git a/src/Model/GServer.php b/src/Model/GServer.php index de8a3c1a1..044880724 100644 --- a/src/Model/GServer.php +++ b/src/Model/GServer.php @@ -1306,4 +1306,98 @@ class GServer PortableContact::discoverSingleServer($gserver['id']); } } + + /** + * Update GServer entries + */ + public static function discover() + { + // Update the server list + self::discoverFederation(); + + $no_of_queries = 5; + + $requery_days = intval(Config::get('system', 'poco_requery_days')); + + if ($requery_days == 0) { + $requery_days = 7; + } + + $last_update = date('c', time() - (60 * 60 * 24 * $requery_days)); + + $gservers = DBA::p("SELECT `id`, `url`, `nurl`, `network`, `poco` + FROM `gserver` + WHERE `last_contact` >= `last_failure` + AND `poco` != '' + AND `last_poco_query` < ? + ORDER BY RAND()", $last_update + ); + + while ($gserver = DBA::fetch($gservers)) { + if (!GServer::check($gserver['url'], $gserver['network'])) { + // The server is not reachable? Okay, then we will try it later + $fields = ['last_poco_query' => DateTimeFormat::utcNow()]; + DBA::update('gserver', $fields, ['nurl' => $gserver['nurl']]); + continue; + } + + Logger::info('Update directory', ['server' => $gserver['url'], 'id' => $gserver['id']]); + Worker::add(PRIORITY_LOW, 'UpdateServerDirectory', $gserver); + + if (--$no_of_queries == 0) { + break; + } + } + + DBA::close($gservers); + } + + /** + * Discover federated servers + */ + private static function discoverFederation() + { + $last = Config::get('poco', 'last_federation_discovery'); + + if ($last) { + $next = $last + (24 * 60 * 60); + + if ($next > time()) { + return; + } + } + + // Discover federated servers + $curlResult = Network::fetchUrl("http://the-federation.info/pods.json"); + + if (!empty($curlResult)) { + $servers = json_decode($curlResult, true); + + if (!empty($servers['pods'])) { + foreach ($servers['pods'] as $server) { + Worker::add(PRIORITY_LOW, 'UpdateGServer', 'https://' . $server['host']); + } + } + } + + // Disvover Mastodon servers + $accesstoken = Config::get('system', 'instances_social_key'); + + if (!empty($accesstoken)) { + $api = 'https://instances.social/api/1.0/instances/list?count=0'; + $header = ['Authorization: Bearer '.$accesstoken]; + $curlResult = Network::curl($api, false, ['headers' => $header]); + + if ($curlResult->isSuccess()) { + $servers = json_decode($curlResult->getBody(), true); + + foreach ($servers['instances'] as $server) { + $url = (is_null($server['https_score']) ? 'http' : 'https') . '://' . $server['name']; + Worker::add(PRIORITY_LOW, 'UpdateGServer', $url); + } + } + } + + Config::set('poco', 'last_federation_discovery', time()); + } } diff --git a/src/Protocol/PortableContact.php b/src/Protocol/PortableContact.php index 49da85e61..9ba6a4b90 100644 --- a/src/Protocol/PortableContact.php +++ b/src/Protocol/PortableContact.php @@ -214,11 +214,6 @@ class PortableContact DBA::delete('glink', $condition); } - public static function alternateOStatusUrl($url) - { - return(preg_match("=https?://.+/user/\d+=ism", $url, $matches)); - } - /** * @brief Returns a list of all known servers * @return array List of server urls @@ -275,69 +270,6 @@ class PortableContact } } - private static function discoverFederation() - { - $last = Config::get('poco', 'last_federation_discovery'); - - if ($last) { - $next = $last + (24 * 60 * 60); - - if ($next > time()) { - return; - } - } - - // Discover Friendica, Hubzilla and Diaspora servers - $curlResult = Network::fetchUrl("http://the-federation.info/pods.json"); - - if (!empty($curlResult)) { - $servers = json_decode($curlResult, true); - - if (!empty($servers['pods'])) { - foreach ($servers['pods'] as $server) { - Worker::add(PRIORITY_LOW, 'UpdateGServer', 'https://' . $server['host']); - } - } - } - - // Disvover Mastodon servers - if (!Config::get('system', 'ostatus_disabled')) { - $accesstoken = Config::get('system', 'instances_social_key'); - - if (!empty($accesstoken)) { - $api = 'https://instances.social/api/1.0/instances/list?count=0'; - $header = ['Authorization: Bearer '.$accesstoken]; - $curlResult = Network::curl($api, false, ['headers' => $header]); - - if ($curlResult->isSuccess()) { - $servers = json_decode($curlResult->getBody(), true); - - foreach ($servers['instances'] as $server) { - $url = (is_null($server['https_score']) ? 'http' : 'https') . '://' . $server['name']; - Worker::add(PRIORITY_LOW, 'UpdateGServer', $url); - } - } - } - } - - // Currently disabled, since the service isn't available anymore. - // It is not removed since I hope that there will be a successor. - // Discover GNU Social Servers. - //if (!Config::get('system','ostatus_disabled')) { - // $serverdata = "http://gstools.org/api/get_open_instances/"; - - // $curlResult = Network::curl($serverdata); - // if ($curlResult->isSuccess()) { - // $servers = json_decode($result->getBody(), true); - - // foreach($servers['data'] as $server) - // GServer::check($server['instance_address']); - // } - //} - - Config::set('poco', 'last_federation_discovery', time()); - } - public static function discoverSingleServer($id) { $server = DBA::selectFirst('gserver', ['poco', 'nurl', 'url', 'network'], ['id' => $id]); @@ -410,48 +342,6 @@ class PortableContact } } - public static function discover($complete = false) - { - // Update the server list - self::discoverFederation(); - - $no_of_queries = 5; - - $requery_days = intval(Config::get('system', 'poco_requery_days')); - - if ($requery_days == 0) { - $requery_days = 7; - } - - $last_update = date('c', time() - (60 * 60 * 24 * $requery_days)); - - $gservers = q("SELECT `id`, `url`, `nurl`, `network`, `poco` - FROM `gserver` - WHERE `last_contact` >= `last_failure` - AND `poco` != '' - AND `last_poco_query` < '%s' - ORDER BY RAND()", DBA::escape($last_update) - ); - - if (DBA::isResult($gservers)) { - foreach ($gservers as $gserver) { - if (!GServer::check($gserver['url'], $gserver['network'])) { - // The server is not reachable? Okay, then we will try it later - $fields = ['last_poco_query' => DateTimeFormat::utcNow()]; - DBA::update('gserver', $fields, ['nurl' => $gserver['nurl']]); - continue; - } - - Logger::log('Update directory from server ' . $gserver['url'] . ' with ID ' . $gserver['id'], Logger::DEBUG); - Worker::add(PRIORITY_LOW, 'UpdateServerDirectory', $gserver); - - if (!$complete && ( --$no_of_queries == 0)) { - break; - } - } - } - } - private static function discoverServerUsers(array $data, array $server) { if (!isset($data['entry'])) { @@ -602,5 +492,4 @@ class PortableContact } return $success; } - } diff --git a/src/Worker/UpdateServerDirectories.php b/src/Worker/UpdateServerDirectories.php index 433685cb2..d651c9ae6 100644 --- a/src/Worker/UpdateServerDirectories.php +++ b/src/Worker/UpdateServerDirectories.php @@ -7,6 +7,7 @@ namespace Friendica\Worker; use Friendica\Core\Config; use Friendica\Core\Logger; use Friendica\Model\GContact; +use Friendica\Model\GServer; use Friendica\Protocol\PortableContact; class UpdateServerDirectories @@ -21,7 +22,7 @@ class UpdateServerDirectories } // Query Friendica and Hubzilla servers for their users - PortableContact::discover(); + GServer::discover(); // Query GNU Social servers for their users ("statistics" addon has to be enabled on the GS server) if (!Config::get('system', 'ostatus_disabled')) {