Merge pull request #11210 from annando/detect-pumpio
Detect pump.io servers
This commit is contained in:
commit
321ad48649
|
@ -67,6 +67,7 @@ class GServer
|
||||||
const DETECT_MASTODON_API = 16;
|
const DETECT_MASTODON_API = 16;
|
||||||
const DETECT_STATUS_PHP = 17; // Nextcloud
|
const DETECT_STATUS_PHP = 17; // Nextcloud
|
||||||
const DETECT_V1_CONFIG = 18;
|
const DETECT_V1_CONFIG = 18;
|
||||||
|
const DETECT_PUMPIO = 19;
|
||||||
|
|
||||||
// Standardized endpoints
|
// Standardized endpoints
|
||||||
const DETECT_STATISTICS_JSON = 100;
|
const DETECT_STATISTICS_JSON = 100;
|
||||||
|
@ -468,6 +469,10 @@ class GServer
|
||||||
$serverdata = self::detectGNUSocial($url, $serverdata);
|
$serverdata = self::detectGNUSocial($url, $serverdata);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (empty($serverdata['network'])) {
|
||||||
|
$serverdata = self::detectPumpIO($url, $serverdata);
|
||||||
|
}
|
||||||
|
|
||||||
$serverdata = array_merge($nodeinfo, $serverdata);
|
$serverdata = array_merge($nodeinfo, $serverdata);
|
||||||
} else {
|
} else {
|
||||||
$serverdata = $nodeinfo;
|
$serverdata = $nodeinfo;
|
||||||
|
@ -1366,7 +1371,57 @@ class GServer
|
||||||
}
|
}
|
||||||
|
|
||||||
return $val;
|
return $val;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Detect if the URL belongs to a GNU Social server
|
* Detect if the URL belongs to a GNU Social server
|
||||||
|
|
Loading…
Reference in New Issue
Block a user