Prechádzať zdrojové kódy

Update WebfingerService. Fixes #3167

Daniel Supernault 3 rokov pred
rodič
commit
aff7456639
1 zmenil súbory, kde vykonal 29 pridanie a 6 odobranie
  1. 29 6
      app/Services/WebfingerService.php

+ 29 - 6
app/Services/WebfingerService.php

@@ -6,7 +6,7 @@ use Cache;
 use App\Profile;
 use Illuminate\Support\Facades\Redis;
 use App\Util\Webfinger\WebfingerUrl;
-use Zttp\Zttp;
+use Illuminate\Support\Facades\Http;
 use App\Util\ActivityPub\Helpers;
 use App\Transformer\Api\AccountTransformer;
 use League\Fractal;
@@ -32,16 +32,39 @@ class WebfingerService
 		if(!Helpers::validateUrl($url)) {
 			return [];
 		}
-		$res = Zttp::get($url);
-		$webfinger = $res->json();
-		if(!isset($webfinger['links'])) {
+
+		$res = Http::retry(3, 500)
+			->acceptJson()
+			->withHeaders([
+				'User-Agent' => '(Pixelfed/' . config('pixelfed.version') . '; +' . config('app.url') . ')'
+			])
+			->timeout(20)
+			->get($url);
+
+		if(!$res->successful()) {
 			return [];
 		}
-		$profile = Helpers::profileFetch($webfinger['links'][0]['href']);
+
+		$webfinger = $res->json();
+		if(!isset($webfinger['links']) || !is_array($webfinger['links']) || empty($webfinger['links'])) {
+			return ['nolinks'];
+		}
+
+		$link = collect($webfinger['links'])
+			->filter(function($link) {
+				return $link &&
+					isset($link['type']) &&
+					isset($link['href']) &&
+					$link['type'] == 'application/activity+json';
+			})
+			->pluck('href')
+			->first();
+
+		$profile = Helpers::profileFetch($link);
 		$fractal = new Fractal\Manager();
 		$fractal->setSerializer(new ArraySerializer());
 		$resource = new Fractal\Resource\Item($profile, new AccountTransformer());
 		$res = $fractal->createData($resource)->toArray();
 		return $res;
 	}
-}
+}