X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FUtil%2FNetwork.php;h=f7ceab5433b217bbc33c2ccb98770cbaf40020f1;hb=7b02585b978f7aef9d5c5a2c5d2b238cb674a4b7;hp=63cc67f4c9b51609df658e62d41c98e454dc7cb3;hpb=f9bf2424b1ebaa16c817e8c8d525989e382aed66;p=friendica.git diff --git a/src/Util/Network.php b/src/Util/Network.php index 63cc67f4c9..f7ceab5433 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); - + try { + $curlResult = DI::httpClient()->head($url, $options); + } catch (\Exception $e) { + return false; + } + // 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); + try { + $curlResult = DI::httpClient()->get($url, HttpClientAccept::DEFAULT, $options); + } catch (\Exception $e) { + return false; + } } - + if (!$curlResult->isSuccess()) { Logger::notice('Url not reachable', ['host' => $host, 'url' => $url]); return false; @@ -176,11 +186,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; } @@ -190,7 +217,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; } } @@ -259,6 +286,7 @@ class Network * * @param string $domain * @param array $domain_list + * * @return boolean */ public static function isDomainAllowed(string $domain, array $domain_list): bool @@ -297,6 +325,7 @@ class Network * Remove Google Analytics and other tracking platforms params from URL * * @param string $url Any user-submitted URL that may contain tracking params + * * @return string The same URL stripped of tracking parameters */ public static function stripTrackingQueryParams(string $url): string @@ -328,7 +357,7 @@ class Network $pair = $param . '=' . str_replace(' ', '+', $value); $url = str_replace($pair, '', $url); - // Third try: Maybey the url isn't encoded at all + // Third try: Maybe the url isn't encoded at all $pair = $param . '=' . $value; $url = str_replace($pair, '', $url); @@ -350,10 +379,12 @@ class Network * * @param string $url * @param string $basepath + * * @return string url */ - public static function addBasePath(string $url, string $basepath) + public static function addBasePath(string $url, string $basepath): string { + $url = trim($url); if (!empty(parse_url($url, PHP_URL_SCHEME)) || empty(parse_url($basepath, PHP_URL_SCHEME)) || empty($url) || empty(parse_url($url))) { return $url; } @@ -372,6 +403,7 @@ class Network * * @param string $url1 * @param string $url2 + * * @return string The matching part or empty string on error */ public static function getUrlMatch(string $url1, string $url2): string @@ -459,6 +491,7 @@ class Network * Glue url parts together * * @param array $parsed URL parts + * * @return string|null The glued URL or null on error * @deprecated since version 2021.12, use GuzzleHttp\Psr7\Uri::fromParts($parts) instead */ @@ -475,21 +508,22 @@ 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 : ''); } /** * Convert an URI to an IDN compatible URI * * @param string $uri + * * @return string */ public static function convertToIdn(string $uri): string @@ -514,6 +548,7 @@ class Network * Switch the scheme of an url between http and https * * @param string $url + * * @return string Switched URL */ public static function switchScheme(string $url): string @@ -537,6 +572,7 @@ class Network * * @param string $path * @param array $additionalParams Associative array of parameters + * * @return string */ public static function appendQueryParam(string $path, array $additionalParams): string @@ -563,6 +599,7 @@ class Network * * @param string $etag The page etag * @param string $last_modified The page last modification UTC date + * * @return void * @throws \Exception */ @@ -601,6 +638,7 @@ class Network * Check if the given URL is a local link * * @param string $url + * * @return bool */ public static function isLocalLink(string $url): bool