From aa6313dee6b46353dc5d6a6b0b74449842357daf Mon Sep 17 00:00:00 2001 From: Michael Date: Mon, 19 Jul 2021 04:15:57 +0000 Subject: [PATCH] Improved detection for a local contact --- src/Model/APContact.php | 18 ++++++++++++++++-- src/Model/Contact.php | 7 +++++++ src/Network/Probe.php | 2 +- 3 files changed, 24 insertions(+), 3 deletions(-) diff --git a/src/Model/APContact.php b/src/Model/APContact.php index a4c97f6232..7bdde60c65 100644 --- a/src/Model/APContact.php +++ b/src/Model/APContact.php @@ -54,6 +54,20 @@ class APContact return []; } + if (Contact::isLocal($addr) && ($local_uid = User::getIdForURL($addr)) && ($local_owner = User::getOwnerDataById($local_uid))) { + $data = [ + 'addr' => $local_owner['addr'], + 'baseurl' => $local_owner['baseurl'], + 'url' => $local_owner['url'], + 'subscribe' => $local_owner['baseurl'] . '/follow?url={uri}']; + + if (!empty($local_owner['alias']) && ($local_owner['url'] != $local_owner['alias'])) { + $data['alias'] = $local_owner['alias']; + } + + return $data; + } + $data = ['addr' => $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'); @@ -284,7 +298,7 @@ class APContact $following = ActivityPub::fetchContent($apcontact['following']); } if (!empty($following['totalItems'])) { - // Mastodon seriously allows for this condition? + // Mastodon seriously allows for this condition? // Jul 14 2021 - See https://mastodon.social/@BLUW for a negative following count if ($following['totalItems'] < 0) { $following['totalItems'] = 0; @@ -300,7 +314,7 @@ class APContact $followers = ActivityPub::fetchContent($apcontact['followers']); } if (!empty($followers['totalItems'])) { - // Mastodon seriously allows for this condition? + // Mastodon seriously allows for this condition? // Jul 14 2021 - See https://mastodon.online/@goes11 for a negative followers count if ($followers['totalItems'] < 0) { $followers['totalItems'] = 0; diff --git a/src/Model/Contact.php b/src/Model/Contact.php index fe6fe55f32..c68039643f 100644 --- a/src/Model/Contact.php +++ b/src/Model/Contact.php @@ -453,6 +453,13 @@ class Contact */ public static function isLocal($url) { + if (!parse_url($url, PHP_URL_SCHEME)) { + $addr_parts = explode('@', $url); + if (count($addr_parts) == 2) { + return $addr_parts[1] == DI::baseUrl()->getHostname(); + } + } + return Strings::compareLink(self::getBasepath($url, true), DI::baseUrl()); } diff --git a/src/Network/Probe.php b/src/Network/Probe.php index e44a8d326e..12a5b26925 100644 --- a/src/Network/Probe.php +++ b/src/Network/Probe.php @@ -333,7 +333,7 @@ class Probe public static function uri($uri, $network = '', $uid = -1) { // Local profiles aren't probed via network - if (empty($network) && strpos($uri, DI::baseUrl()->getHostname())) { + if (empty($network) && Contact::isLocal($uri)) { $data = self::localProbe($uri); if (!empty($data)) { return $data;