From eab4d6cbb43750bfef75e0e0f5c832ab7df6b6ce Mon Sep 17 00:00:00 2001
From: Michael <heluecht@pirati.ca>
Date: Sat, 18 Mar 2023 12:27:49 +0000
Subject: [PATCH] Simplified Nomad detection

---
 src/Model/GServer.php | 17 +++++++++++------
 1 file changed, 11 insertions(+), 6 deletions(-)

diff --git a/src/Model/GServer.php b/src/Model/GServer.php
index 04b07889ca..13dd13af44 100644
--- a/src/Model/GServer.php
+++ b/src/Model/GServer.php
@@ -1503,7 +1503,7 @@ class GServer
 				$generator = explode(' ', JsonLD::fetchElement($actor['as:generator'], 'as:name', '@value'));
 				$serverdata['platform'] = strtolower(array_shift($generator));
 				$serverdata['detection-method'] = self::DETECT_SYSTEM_ACTOR;
-				if (self::isNomad($actor['@id'])) {
+				if (self::isNomad($actor)) {
 					$serverdata['version']  = $serverdata['platform'];
 					$serverdata['platform'] = 'nomad';
 				}
@@ -1530,15 +1530,20 @@ class GServer
 	}
 
 	/**
-	 * Detect if the given url belongs to a nomad account
+	 * Detect if the given actor is a nomad account
 	 *
-	 * @param string $url
+	 * @param array $actor
 	 * @return boolean
 	 */
-	private static function isNomad(string $url): bool
+	private static function isNomad(array $actor): bool
 	{
-		foreach (Probe::lrdd($url) as $attribute) {
-			if ((($attribute['@attributes']['rel'] ?? '') == 'http://purl.org/nomad') && (($attribute['@attributes']['type'] ?? '') == 'application/x-nomad+json')) {
+		$tags = JsonLD::fetchElementArray($actor, 'as:tag');
+		if (empty($tags)) {
+			return false;
+		}
+
+		foreach ($tags as $tag) {
+			if ((($tag['as:name'] ?? '') == 'Protocol') && (($tag['sc:value'] ?? '') == 'nomad')) {
 				return true;
 			}
 		}
-- 
2.39.5