X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FModel%2FAPContact.php;h=e068ecefe2b9d534c6c10c5639f27cee90ddfab0;hb=72a3ab6382551811f22391b7e82e7398628b235b;hp=7bdde60c65ca31be4446c4009378bb1a9446d3f5;hpb=d2408c1f1b73127d90a7563604d81323784f09c7;p=friendica.git diff --git a/src/Model/APContact.php b/src/Model/APContact.php index 7bdde60c65..e068ecefe2 100644 --- a/src/Model/APContact.php +++ b/src/Model/APContact.php @@ -1,6 +1,6 @@ $addr]; $template = 'https://' . $addr_parts[1] . '/.well-known/webfinger?resource=acct:' . urlencode($addr); - $webfinger = Probe::webfinger(str_replace('{uri}', urlencode($addr), $template), 'application/jrd+json'); + $webfinger = Probe::webfinger(str_replace('{uri}', urlencode($addr), $template), HttpClient::ACCEPT_JRD_JSON); if (empty($webfinger['links'])) { $template = 'http://' . $addr_parts[1] . '/.well-known/webfinger?resource=acct:' . urlencode($addr); - $webfinger = Probe::webfinger(str_replace('{uri}', urlencode($addr), $template), 'application/jrd+json'); + $webfinger = Probe::webfinger(str_replace('{uri}', urlencode($addr), $template), HttpClient::ACCEPT_JRD_JSON); if (empty($webfinger['links'])) { return []; } @@ -118,7 +119,8 @@ class APContact */ public static function getByURL($url, $update = null) { - if (empty($url)) { + if (empty($url) || Network::isUrlBlocked($url)) { + Logger::info('Domain is blocked', ['url' => $url]); return []; } @@ -166,7 +168,7 @@ class APContact // Detect multiple fast repeating request to the same address // See https://github.com/friendica/friendica/issues/9303 - $cachekey = 'apcontact:getByURL:' . $url; + $cachekey = 'apcontact:' . ItemURI::getIdByURI($url); $result = DI::cache()->get($cachekey); if (!is_null($result)) { Logger::notice('Multiple requests for the address', ['url' => $url, 'update' => $update, 'callstack' => System::callstack(20), 'result' => $result]); @@ -178,8 +180,12 @@ class APContact } if (Network::isLocalLink($url) && ($local_uid = User::getIdForURL($url))) { - $data = Transmitter::getProfile($local_uid); - $local_owner = User::getOwnerDataById($local_uid); + try { + $data = Transmitter::getProfile($local_uid); + $local_owner = User::getOwnerDataById($local_uid); + } catch(HTTPException\NotFoundException $e) { + $data = null; + } } if (empty($data)) { @@ -225,6 +231,9 @@ class APContact self::unarchiveInbox($apcontact['sharedinbox'], true); } + $apcontact['featured'] = JsonLD::fetchElement($compacted, 'toot:featured', '@id'); + $apcontact['featured-tags'] = JsonLD::fetchElement($compacted, 'toot:featuredTags', '@id'); + $apcontact['nick'] = JsonLD::fetchElement($compacted, 'as:preferredUsername', '@value') ?? ''; $apcontact['name'] = JsonLD::fetchElement($compacted, 'as:name', '@value'); @@ -234,6 +243,18 @@ class APContact $apcontact['about'] = HTML::toBBCode(JsonLD::fetchElement($compacted, 'as:summary', '@value')); + $ims = JsonLD::fetchElementArray($compacted, 'vcard:hasInstantMessage'); + if (!empty($ims)) { + foreach ($ims as $link) { + if (substr($link, 0, 5) == 'xmpp:') { + $apcontact['xmpp'] = substr($link, 5); + } + if (substr($link, 0, 7) == 'matrix:') { + $apcontact['matrix'] = substr($link, 7); + } + } + } + $apcontact['photo'] = JsonLD::fetchElement($compacted, 'as:icon', '@id'); if (is_array($apcontact['photo']) || !empty($compacted['as:icon']['as:url']['@id'])) { $apcontact['photo'] = JsonLD::fetchElement($compacted['as:icon'], 'as:url', '@id'); @@ -330,6 +351,11 @@ class APContact $outbox = ActivityPub::fetchContent($apcontact['outbox']); } if (!empty($outbox['totalItems'])) { + // Mastodon seriously allows for this condition? + // Jul 20 2021 - See https://chaos.social/@m11 for a negative posts count + if ($outbox['totalItems'] < 0) { + $outbox['totalItems'] = 0; + } $apcontact['statuses_count'] = $outbox['totalItems']; } }