X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FUtil%2FNetwork.php;h=f9f32d42229fcf88392202960adbb26e84a10059;hb=dfcfae6bcca54a27b1bf5099d96d54f2bba997d3;hp=508934db2c6eb0ccb89ed799c34eb7f6010932d3;hpb=59b4f2e99395f1c4944df7379f4e530322e7330f;p=friendica.git diff --git a/src/Util/Network.php b/src/Util/Network.php index 508934db2c..f9f32d4222 100644 --- a/src/Util/Network.php +++ b/src/Util/Network.php @@ -1,6 +1,6 @@ true, HttpClientOptions::TIMEOUT => $xrd_timeout]; $curlResult = DI::httpClient()->head($url, $options); - + // Workaround for systems that can't handle a HEAD request. Don't retry on timeouts. if (!$curlResult->isSuccess() && ($curlResult->getReturnCode() >= 400) && !in_array($curlResult->getReturnCode(), [408, 504])) { $curlResult = DI::httpClient()->get($url, HttpClientAccept::DEFAULT, $options); } - + if (!$curlResult->isSuccess()) { Logger::notice('Url not reachable', ['host' => $host, 'url' => $url]); return false; @@ -177,11 +178,28 @@ class Network * @param string $url The url to check the domain from * * @return boolean + * + * @deprecated since 2023.03 Use isUriBlocked instead */ public static function isUrlBlocked(string $url): bool { - $host = @parse_url($url, PHP_URL_HOST); - if (!$host) { + try { + return self::isUriBlocked(new Uri($url)); + } catch (\Throwable $e) { + Logger::warning('Invalid URL', ['url' => $url]); + return false; + } + } + + /** + * Checks if the provided URI domain is on the domain blocklist. + * + * @param UriInterface $uri + * @return boolean + */ + public static function isUriBlocked(UriInterface $uri): bool + { + if (!$uri->getHost()) { return false; } @@ -191,7 +209,7 @@ class Network } foreach ($domain_blocklist as $domain_block) { - if (fnmatch(strtolower($domain_block['domain']), strtolower($host))) { + if (fnmatch(strtolower($domain_block['domain']), strtolower($uri->getHost()))) { return true; } } @@ -481,15 +499,15 @@ class Network $scheme = $get('scheme'); $query = $get('query'); $fragment = $get('fragment'); - $authority = ($userinfo !== null ? $userinfo . '@' : '') . + $authority = ($userinfo !== null ? $userinfo . '@' : '') . $get('host') . ($port ? ":$port" : ''); - return (strlen($scheme) ? $scheme . ':' : '') . - (strlen($authority) ? '//' . $authority : '') . + return (!empty($scheme) ? $scheme . ':' : '') . + (!empty($authority) ? '//' . $authority : '') . $get('path') . - (strlen($query) ? '?' . $query : '') . - (strlen($fragment) ? '#' . $fragment : ''); + (!empty($query) ? '?' . $query : '') . + (!empty($fragment) ? '#' . $fragment : ''); } /**