From 1df5003643eaa9adce4f2071056b1aac5710ddea Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Tue, 3 Oct 2023 20:46:17 -0400 Subject: [PATCH] Restore support for Mastodon profile short-form URLs - Running these URLs through WebFinger first allows to retrieve the canonical ActivityPub profile URL --- src/Model/APContact.php | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/Model/APContact.php b/src/Model/APContact.php index c49017b59..5434bf584 100644 --- a/src/Model/APContact.php +++ b/src/Model/APContact.php @@ -157,7 +157,10 @@ class APContact $apcontact = []; - $webfinger = empty(parse_url($url, PHP_URL_SCHEME)); + // Mastodon profile short-form URL https://domain.tld/@user doesn't return AP data when queried + // with HTTPSignature::fetchRaw, but returns the correct data when provided to WebFinger + // @see https://github.com/friendica/friendica/issues/13359 + $webfinger = empty(parse_url($url, PHP_URL_SCHEME)) || strpos($url, '@') !== false; if ($webfinger) { $apcontact = self::fetchWebfingerData($url); if (empty($apcontact['url'])) { @@ -197,7 +200,7 @@ class APContact $curlResult = HTTPSignature::fetchRaw($url); $failed = empty($curlResult) || empty($curlResult->getBody()) || (!$curlResult->isSuccess() && ($curlResult->getReturnCode() != 410)); - + if (!$failed) { $data = json_decode($curlResult->getBody(), true); $failed = empty($data) || !is_array($data);