X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FModel%2FGServer.php;h=a3a3d1abbc6bcb94390a2ebaea48d975e60b5ace;hb=50746bad55eb2453764dffa143785b19fdb61d6c;hp=10f4a3daf207eb32b2f79c799eedc432992cc833;hpb=360614d2cf3aceeb763ef1281ad5236878f5d735;p=friendica.git diff --git a/src/Model/GServer.php b/src/Model/GServer.php index 10f4a3daf2..a3a3d1abbc 100644 --- a/src/Model/GServer.php +++ b/src/Model/GServer.php @@ -44,7 +44,9 @@ use Friendica\Util\Network; use Friendica\Util\Strings; use Friendica\Util\XML; use Friendica\Network\HTTPException; +use Friendica\Worker\UpdateGServer; use GuzzleHttp\Psr7\Uri; +use Psr\Http\Message\UriInterface; /** * This class handles GServer related functions @@ -99,11 +101,11 @@ class GServer */ public static function add(string $url, bool $only_nodeinfo = false) { - if (self::getID($url, false)) { + if (self::getID($url)) { return; } - Worker::add(Worker::PRIORITY_LOW, 'UpdateGServer', $url, $only_nodeinfo); + UpdateGServer::add(Worker::PRIORITY_LOW, $url, $only_nodeinfo); } /** @@ -191,8 +193,9 @@ class GServer return false; } else { if (strtotime($gserver['next_contact']) < time()) { - Worker::add(Worker::PRIORITY_LOW, 'UpdateGServer', $gserver['url'], false); + UpdateGServer::add(Worker::PRIORITY_LOW, $gserver['url']); } + return self::isDefunct($gserver); } } @@ -210,8 +213,9 @@ class GServer return true; } else { if (strtotime($gserver['next_contact']) < time()) { - Worker::add(Worker::PRIORITY_LOW, 'UpdateGServer', $gserver['url'], false); + UpdateGServer::add(Worker::PRIORITY_LOW, $gserver['url']); } + return !$gserver['failed'] && in_array($gserver['network'], Protocol::FEDERATED); } } @@ -252,7 +256,7 @@ class GServer } if (!empty($server) && (empty($gserver) || strtotime($gserver['next_contact']) < time())) { - Worker::add(Worker::PRIORITY_LOW, 'UpdateGServer', $server, false); + UpdateGServer::add(Worker::PRIORITY_LOW, $server); } return $reachable; @@ -360,17 +364,22 @@ class GServer /** * Reset failed server status by gserver id * - * @param int $gsid + * @param int $gsid + * @param string $network */ - public static function setReachableById(int $gsid) + public static function setReachableById(int $gsid, string $network) { - $gserver = DBA::selectFirst('gserver', ['url', 'failed', 'next_contact'], ['id' => $gsid]); + $gserver = DBA::selectFirst('gserver', ['url', 'failed', 'next_contact', 'network'], ['id' => $gsid]); if (DBA::isResult($gserver) && $gserver['failed']) { - self::update(['failed' => false, 'last_contact' => DateTimeFormat::utcNow()], ['id' => $gsid]); + $fields = ['failed' => false, 'last_contact' => DateTimeFormat::utcNow()]; + if (!empty($network) && !in_array($gserver['network'], Protocol::FEDERATED)) { + $fields['network'] = $network; + } + self::update($fields, ['id' => $gsid]); Logger::info('Reset failed status for server', ['url' => $gserver['url']]); if (strtotime($gserver['next_contact']) < time()) { - Worker::add(Worker::PRIORITY_LOW, 'UpdateGServer', $gserver['url'], false); + UpdateGServer::add(Worker::PRIORITY_LOW, $gserver['url']); } } } @@ -388,7 +397,7 @@ class GServer Logger::info('Set failed status for server', ['url' => $gserver['url']]); if (strtotime($gserver['next_contact']) < time()) { - Worker::add(Worker::PRIORITY_LOW, 'UpdateGServer', $gserver['url'], false); + UpdateGServer::add(Worker::PRIORITY_LOW, $gserver['url']); } } } @@ -437,18 +446,41 @@ class GServer * * @return string cleaned URL * @throws Exception + * @deprecated since 2023.03 Use cleanUri instead */ public static function cleanURL(string $dirtyUrl): string { try { - $url = str_replace('/index.php', '', trim($dirtyUrl, '/')); - return (string)(new Uri($url))->withUserInfo('')->withQuery('')->withFragment(''); + return (string)self::cleanUri(new Uri($dirtyUrl)); } catch (\Throwable $e) { - Logger::warning('Invalid URL', ['dirtyUrl' => $dirtyUrl, 'url' => $url]); + Logger::warning('Invalid URL', ['dirtyUrl' => $dirtyUrl]); return ''; } } + /** + * Remove unwanted content from the given URI + * + * @param UriInterface $dirtyUri + * + * @return UriInterface cleaned URI + * @throws Exception + */ + public static function cleanUri(UriInterface $dirtyUri): string + { + return $dirtyUri + ->withUserInfo('') + ->withQuery('') + ->withFragment('') + ->withPath( + preg_replace( + '#(?:^|/)index\.php#', + '', + rtrim($dirtyUri->getPath(), '/') + ) + ); + } + /** * Detect server data (type, protocol, version number, ...) * The detected data is then updated or inserted in the gserver table.