use Friendica\Core\Protocol;
use Friendica\Core\System;
use Friendica\Core\Worker;
+use Friendica\Database\Database;
use Friendica\Database\DBA;
use Friendica\DI;
use Friendica\Module\Register;
-use Friendica\Network\IHTTPResult;
-use Friendica\Protocol\Diaspora;
+use Friendica\Network\CurlResult;
+use Friendica\Protocol\Relay;
use Friendica\Util\DateTimeFormat;
use Friendica\Util\Network;
use Friendica\Util\Strings;
// When a nodeinfo is present, we don't need to dig further
$xrd_timeout = DI::config()->get('system', 'xrd_timeout');
- $curlResult = DI::httpRequest()->get($url . '/.well-known/nodeinfo', false, ['timeout' => $xrd_timeout]);
+ $curlResult = DI::httpRequest()->get($url . '/.well-known/nodeinfo', ['timeout' => $xrd_timeout]);
if ($curlResult->isTimeout()) {
self::setFailure($url);
return false;
$basedata = ['detection-method' => self::DETECT_MANUAL];
}
- $curlResult = DI::httpRequest()->get($baseurl, false, ['timeout' => $xrd_timeout]);
+ $curlResult = DI::httpRequest()->get($baseurl, ['timeout' => $xrd_timeout]);
if ($curlResult->isSuccess()) {
$basedata = self::analyseRootHeader($curlResult, $basedata);
$basedata = self::analyseRootBody($curlResult, $basedata, $baseurl);
// When the base path doesn't seem to contain a social network we try the complete path.
// Most detectable system have to be installed in the root directory.
// We checked the base to avoid false positives.
- $curlResult = DI::httpRequest()->get($url, false, ['timeout' => $xrd_timeout]);
+ $curlResult = DI::httpRequest()->get($url, ['timeout' => $xrd_timeout]);
if ($curlResult->isSuccess()) {
$urldata = self::analyseRootHeader($curlResult, $serverdata);
$urldata = self::analyseRootBody($curlResult, $urldata, $url);
$data['tags'] = [];
}
- $gserver = DBA::selectFirst('gserver', ['id', 'relay-subscribe', 'relay-scope'], ['nurl' => Strings::normaliseLink($server_url)]);
+ $gserver = DBA::selectFirst('gserver', ['id', 'url', 'network', 'relay-subscribe', 'relay-scope'], ['nurl' => Strings::normaliseLink($server_url)]);
if (!DBA::isResult($gserver)) {
return;
}
}
foreach ($tags as $tag) {
- DBA::insert('gserver-tag', ['gserver-id' => $gserver['id'], 'tag' => $tag], true);
+ DBA::insert('gserver-tag', ['gserver-id' => $gserver['id'], 'tag' => $tag], Database::INSERT_IGNORE);
}
}
$fields['batch'] = $data['protocols']['dfrn'];
}
}
+
+ if (isset($data['protocols']['activitypub'])) {
+ $fields['network'] = Protocol::ACTIVITYPUB;
+
+ if (!empty($data['protocols']['activitypub']['actor'])) {
+ $fields['url'] = $data['protocols']['activitypub']['actor'];
+ }
+ if (!empty($data['protocols']['activitypub']['receive'])) {
+ $fields['batch'] = $data['protocols']['activitypub']['receive'];
+ }
+ }
}
- Diaspora::setRelayContact($server_url, $fields);
+
+ Logger::info('Discovery ended', ['server' => $server_url, 'data' => $fields]);
+
+ Relay::updateContact($gserver, $fields);
}
/**
/**
* Detect server type by using the nodeinfo data
*
- * @param string $url address of the server
- * @param IHTTPResult $httpResult
- *
+ * @param string $url address of the server
+ * @param CurlResult $curlResult
* @return array Server data
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
*/
- private static function fetchNodeinfo(string $url, IHTTPResult $httpResult)
+ private static function fetchNodeinfo(string $url, CurlResult $curlResult)
{
- if (!$httpResult->isSuccess()) {
+ if (!$curlResult->isSuccess()) {
return [];
}
- $nodeinfo = json_decode($httpResult->getBody(), true);
+ $nodeinfo = json_decode($curlResult->getBody(), true);
if (!is_array($nodeinfo) || empty($nodeinfo['links'])) {
return [];
private static function validHostMeta(string $url)
{
$xrd_timeout = DI::config()->get('system', 'xrd_timeout');
- $curlResult = DI::httpRequest()->get($url . '/.well-known/host-meta', false, ['timeout' => $xrd_timeout]);
+ $curlResult = DI::httpRequest()->get($url . '/.well-known/host-meta', ['timeout' => $xrd_timeout]);
if (!$curlResult->isSuccess()) {
return false;
}
if (!empty($accesstoken)) {
$api = 'https://instances.social/api/1.0/instances/list?count=0';
$header = ['Authorization: Bearer '.$accesstoken];
- $curlResult = DI::httpRequest()->get($api, false, ['headers' => $header]);
+ $curlResult = DI::httpRequest()->get($api, ['header' => $header]);
if ($curlResult->isSuccess()) {
$servers = json_decode($curlResult->getBody(), true);