]> git.mxchange.org Git - friendica.git/blobdiff - src/Util/Network.php
Merge pull request #11490 from annando/issue-11487
[friendica.git] / src / Util / Network.php
index 9c7b6a8af8890957e5894a705798b79db5de52da..af4d18b4ab037301ea3bc5692519cb8334977dae 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /**
- * @copyright Copyright (C) 2010-2021, the Friendica project
+ * @copyright Copyright (C) 2010-2022, the Friendica project
  *
  * @license GNU AGPL version 3 or any later version
  *
@@ -25,6 +25,8 @@ use Friendica\Core\Hook;
 use Friendica\Core\Logger;
 use Friendica\DI;
 use Friendica\Model\Contact;
+use Friendica\Network\HTTPException\NotModifiedException;
+use GuzzleHttp\Psr7\Uri;
 
 class Network
 {
@@ -434,7 +436,8 @@ class Network
         *
         * @param array $parsed URL parts
         *
-        * @return string The glued URL
+        * @return string The glued URL.
+        * @deprecated since version 2021.12, use GuzzleHttp\Psr7\Uri::fromParts($parts) instead
         */
        public static function unparseURL(array $parsed)
        {
@@ -460,6 +463,29 @@ class Network
                        (strlen($fragment) ? "#".$fragment : '');
        }
 
+       /**
+        * Convert an URI to an IDN compatible URI
+        *
+        * @param string $uri
+        * @return string
+        */
+       public static function convertToIdn(string $uri): string
+       {
+               $parts = parse_url($uri);
+               if (!empty($parts['scheme']) && !empty($parts['host'])) {
+                       $parts['host'] = idn_to_ascii($parts['host']);
+                       $uri = Uri::fromParts($parts);
+               } else {
+                       $parts = explode('@', $uri);
+                       if (count($parts) == 2) {
+                               $uri = $parts[0] . '@' . idn_to_ascii($parts[1]);
+                       } else {
+                               $uri = idn_to_ascii($uri);
+                       }
+               }
+
+               return $uri;
+       }
 
        /**
         * Switch the scheme of an url between http and https
@@ -544,8 +570,7 @@ class Network
                header('Last-Modified: ' . $last_modified);
 
                if ($flag_not_modified) {
-                       header("HTTP/1.1 304 Not Modified");
-                       exit;
+                       throw new NotModifiedException();
                }
        }
 
@@ -559,4 +584,16 @@ class Network
        {
                return (strpos(Strings::normaliseLink($url), Strings::normaliseLink(DI::baseUrl())) !== false);
        }
+
+       /**
+        * Check if the given URL is a valid HTTP/HTTPS URL
+        *
+        * @param string $url 
+        * @return bool 
+        */
+       public static function isValidHttpUrl(string $url)
+       {
+               $scheme = parse_url($url, PHP_URL_SCHEME);
+               return !empty($scheme) && in_array($scheme, ['http', 'https']) && parse_url($url, PHP_URL_HOST);
+       }
 }