From 650f90df25d9f81994806628f60e484ad95b8a98 Mon Sep 17 00:00:00 2001 From: Michael Date: Sat, 5 Feb 2022 22:14:19 +0000 Subject: [PATCH] Platforms: only use and show trusted detections --- src/Model/GServer.php | 12 ++++++++++++ src/Module/Admin/Federation.php | 7 ++++--- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/Model/GServer.php b/src/Model/GServer.php index 8cc1b5d01..26c36d6a9 100644 --- a/src/Model/GServer.php +++ b/src/Model/GServer.php @@ -1566,6 +1566,10 @@ class GServer return $serverdata; } + // Using only body information we cannot safely detect a lot of systems. + // So we define a list of platforms that we can detect safely. + $valid_platforms = ['friendica', 'friendika', 'hubzilla', 'misskey', 'peertube', 'wordpress', 'write.as']; + $doc = new DOMDocument(); @$doc->loadHTML($curlResult->getBody()); $xpath = new DOMXPath($doc); @@ -1594,6 +1598,10 @@ class GServer } } + if (!in_array(strtolower($attr['content']), $valid_platforms)) { + continue; + } + if ($attr['name'] == 'description') { $serverdata['info'] = $attr['content']; } @@ -1653,6 +1661,10 @@ class GServer } } + if (!in_array(strtolower($attr['content']), $valid_platforms)) { + continue; + } + if ($attr['property'] == 'og:site_name') { $serverdata['site_name'] = $attr['content']; } diff --git a/src/Module/Admin/Federation.php b/src/Module/Admin/Federation.php index 8f9f69de4..0e315c37c 100644 --- a/src/Module/Admin/Federation.php +++ b/src/Module/Admin/Federation.php @@ -24,6 +24,7 @@ namespace Friendica\Module\Admin; use Friendica\Core\Renderer; use Friendica\Database\DBA; use Friendica\DI; +use Friendica\Model\GServer; use Friendica\Module\BaseAdmin; class Federation extends BaseAdmin @@ -71,15 +72,15 @@ class Federation extends BaseAdmin $gservers = DBA::p("SELECT COUNT(*) AS `total`, SUM(`registered-users`) AS `users`, `platform`, ANY_VALUE(`network`) AS `network`, MAX(`version`) AS `version` - FROM `gserver` WHERE NOT `failed` GROUP BY `platform`"); + FROM `gserver` WHERE NOT `failed` AND `detection-method` != ? GROUP BY `platform`", GServer::DETECT_MANUAL); while ($gserver = DBA::fetch($gservers)) { $total += $gserver['total']; $users += $gserver['users']; $versionCounts = []; $versions = DBA::p("SELECT COUNT(*) AS `total`, `version` FROM `gserver` - WHERE NOT `failed` AND `platform` = ? - GROUP BY `version` ORDER BY `version`", $gserver['platform']); + WHERE NOT `failed` AND `platform` = ? AND `detection-method` != ? + GROUP BY `version` ORDER BY `version`", $gserver['platform'], GServer::DETECT_MANUAL); while ($version = DBA::fetch($versions)) { $version['version'] = str_replace(["\n", "\r", "\t"], " ", $version['version']);