+ }
+
+ /**
+ * Detect if the URL belongs to a pump.io server
+ *
+ * @param string $url URL of the given server
+ * @param array $serverdata array with server data
+ *
+ * @return array server data
+ */
+ private static function detectPumpIO(string $url, array $serverdata)
+ {
+ $curlResult = DI::httpClient()->get($url . '/.well-known/host-meta.json');
+ if (!$curlResult->isSuccess()) {
+ return $serverdata;
+ }
+
+ $data = json_decode($curlResult->getBody(), true);
+ if (empty($data['links'])) {
+ return $serverdata;
+
+ }
+
+ // We are looking for some endpoints that are typical for pump.io
+ $trust = 0;
+ foreach ($data['links'] as $link) {
+ if (empty($link['rel'])) {
+ continue;
+ }
+ if (in_array($link['rel'], ['registration_endpoint', 'dialback', 'http://apinamespace.org/activitypub/whoami'])) {
+ ++$trust;
+ }
+ }
+
+ if ($trust == 3) {
+ $serverdata['detection-method'] = self::DETECT_PUMPIO;
+
+ $serverdata['platform'] = 'pumpio';
+ $serverdata['version'] = '';
+ $serverdata['network'] = Protocol::PUMPIO;
+
+ $servers = $curlResult->getHeader('Server');
+ foreach ($servers as $server) {
+ if (preg_match("#pump.io/(.*)\s#U", $server, $matches)) {
+ $serverdata['version'] = $matches[1];
+ }
+ }
+ }
+
+ return $serverdata;
+ }