Merge pull request #12736 from MrPetovan/bug/12733-webfinger-apcontact

Replace custom WebFinger implementation by Probe::getWebfingerArray in APContact::fetchWebfingerData
This commit is contained in:
Michael Vogel 2023-01-27 08:27:20 +01:00 committed by GitHub
commit 1d7d6fe35c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 16 additions and 16 deletions

View File

@ -71,21 +71,14 @@ class APContact
return $data; return $data;
} }
$data = ['addr' => $addr]; $webfinger = Probe::getWebfingerArray($addr);
$template = 'https://' . $addr_parts[1] . '/.well-known/webfinger?resource=acct:' . urlencode($addr); if (empty($webfinger['webfinger']['links'])) {
$webfinger = Probe::webfinger(str_replace('{uri}', urlencode($addr), $template), HttpClientAccept::JRD_JSON); return [];
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), HttpClientAccept::JRD_JSON);
if (empty($webfinger['links'])) {
return [];
}
$data['baseurl'] = 'http://' . $addr_parts[1];
} else {
$data['baseurl'] = 'https://' . $addr_parts[1];
} }
foreach ($webfinger['links'] as $link) { $data['baseurl'] = $webfinger['baseurl'];
foreach ($webfinger['webfinger']['links'] as $link) {
if (empty($link['rel'])) { if (empty($link['rel'])) {
continue; continue;
} }

View File

@ -524,7 +524,7 @@ class Probe
* @return array Webfinger data * @return array Webfinger data
* @throws HTTPException\InternalServerErrorException * @throws HTTPException\InternalServerErrorException
*/ */
private static function getWebfingerArray(string $uri): array public static function getWebfingerArray(string $uri): array
{ {
$parts = parse_url($uri); $parts = parse_url($uri);
@ -766,7 +766,7 @@ class Probe
$result = self::feed($uri); $result = self::feed($uri);
} else { } else {
// We overwrite the detected nick with our try if the previois routines hadn't detected it. // We overwrite the detected nick with our try if the previois routines hadn't detected it.
// Additionally it is overwritten when the nickname doesn't make sense (contains spaces). // Additionally, it is overwritten when the nickname doesn't make sense (contains spaces).
if ((empty($result['nick']) || (strstr($result['nick'], ' '))) && ($nick != '')) { if ((empty($result['nick']) || (strstr($result['nick'], ' '))) && ($nick != '')) {
$result['nick'] = $nick; $result['nick'] = $nick;
} }
@ -1861,11 +1861,18 @@ class Probe
*/ */
private static function feed(string $url, bool $probe = true): array private static function feed(string $url, bool $probe = true): array
{ {
$curlResult = DI::httpClient()->get($url, HttpClientAccept::FEED_XML); try {
$curlResult = DI::httpClient()->get($url, HttpClientAccept::FEED_XML);
} catch(\Throwable $e) {
DI::logger()->info('Error requesting feed URL', ['url' => $url, 'exception' => $e]);
return [];
}
if ($curlResult->isTimeout()) { if ($curlResult->isTimeout()) {
self::$isTimeout = true; self::$isTimeout = true;
return []; return [];
} }
$feed = $curlResult->getBody(); $feed = $curlResult->getBody();
$feed_data = Feed::import($feed); $feed_data = Feed::import($feed);