Logger::info('Invalid nodeinfo format', ['url' => $url]);
continue;
}
+
if ($link['rel'] == 'http://nodeinfo.diaspora.software/ns/schema/1.0') {
- $nodeinfo1_url = $link['href'];
+ $nodeinfo1_url = Network::addBasePath($link['href'], $httpResult->getUrl());
} elseif ($link['rel'] == 'http://nodeinfo.diaspora.software/ns/schema/2.0') {
- $nodeinfo2_url = $link['href'];
+ $nodeinfo2_url = Network::addBasePath($link['href'], $httpResult->getUrl());
}
}
$serverdata['detection-method'] = self::DETECT_SITEINFO_JSON;
}
- if (!empty($data['url'])) {
+ if (!empty($data['platform'])) {
$serverdata['platform'] = strtolower($data['platform']);
$serverdata['version'] = $data['version'] ?? 'N/A';
}
$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)) {
+ $serverdata['version'] = $serverdata['platform'];
+ $serverdata['platform'] = 'nomad';
+ }
} else {
$serverdata['detection-method'] = self::DETECT_AP_ACTOR;
}
return ['server' => $serverdata, 'actor' => ''];
}
+ /**
+ * Detect if the given actor is a nomad account
+ *
+ * @param array $actor
+ * @return boolean
+ */
+ private static function isNomad(array $actor): bool
+ {
+ $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;
+ }
+ }
+ return false;
+ }
+
/**
* Checks if the server contains a valid host meta file
*