]> git.mxchange.org Git - friendica.git/blobdiff - src/Model/GServer.php
Merge remote-tracking branch 'upstream/develop' into collapse
[friendica.git] / src / Model / GServer.php
index 10f4a3daf207eb32b2f79c799eedc432992cc833..a3a3d1abbc6bcb94390a2ebaea48d975e60b5ace 100644 (file)
@@ -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.