From 0541aed51093868f8ae968d04e608fa2a93599ef Mon Sep 17 00:00:00 2001 From: Daniel Supernault Date: Thu, 31 Mar 2022 01:04:15 -0600 Subject: [PATCH 1/2] Update DiscoverController, cache public tag feed and only include local posts for unauthenticated users --- app/Http/Controllers/DiscoverController.php | 42 ++++++++++++++++++--- app/Media.php | 1 + 2 files changed, 37 insertions(+), 6 deletions(-) diff --git a/app/Http/Controllers/DiscoverController.php b/app/Http/Controllers/DiscoverController.php index 7d8bf8edf..60fa266ac 100644 --- a/app/Http/Controllers/DiscoverController.php +++ b/app/Http/Controllers/DiscoverController.php @@ -63,12 +63,12 @@ class DiscoverController extends Controller public function getHashtags(Request $request) { - $auth = Auth::check(); - abort_if(!config('instance.discover.tags.is_public') && !$auth, 403); + $user = $request->user(); + abort_if(!config('instance.discover.tags.is_public') && !$user, 403); $this->validate($request, [ 'hashtag' => 'required|string|min:1|max:124', - 'page' => 'nullable|integer|min:1|max:' . ($auth ? 29 : 10) + 'page' => 'nullable|integer|min:1|max:' . ($user ? 29 : 10) ]); $page = $request->input('page') ?? '1'; @@ -76,8 +76,8 @@ class DiscoverController extends Controller $tag = $request->input('hashtag'); $hashtag = Hashtag::whereName($tag)->firstOrFail(); - if($page == 1) { - $res['follows'] = HashtagFollow::whereUserId(Auth::id()) + if($user && $page == 1) { + $res['follows'] = HashtagFollow::whereUserId($user->id) ->whereHashtagId($hashtag->id) ->exists(); } @@ -85,7 +85,37 @@ class DiscoverController extends Controller 'name' => $hashtag->name, 'url' => $hashtag->url() ]; - $res['tags'] = StatusHashtagService::get($hashtag->id, $page, $end); + if($user) { + $tags = StatusHashtagService::get($hashtag->id, $page, $end); + $res['tags'] = collect($tags) + ->filter(function($tag) { + if(!StatusService::get($tag['status']['id'])) { + return false; + } + return true; + }) + ->values(); + } else { + $key = 'discover:tags:public_feed:' . $hashtag->id . ':page:' . $page; + $tags = Cache::remember($key, 900, function() use($hashtag, $page, $end) { + return collect(StatusHashtagService::get($hashtag->id, $page, $end)) + ->filter(function($tag) { + if(!$tag['status']['local']) { + return false; + } + return true; + }) + ->values(); + }); + $res['tags'] = collect($tags) + ->filter(function($tag) { + if(!StatusService::get($tag['status']['id'])) { + return false; + } + return true; + }) + ->values(); + } return $res; } diff --git a/app/Media.php b/app/Media.php index 1494ab884..5395d802d 100644 --- a/app/Media.php +++ b/app/Media.php @@ -6,6 +6,7 @@ use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\SoftDeletes; use App\Util\Media\License; use Storage; +use Illuminate\Support\Str; class Media extends Model { From 9d5455074157f6ba3b56440bc527201db0e45b9e Mon Sep 17 00:00:00 2001 From: Daniel Supernault Date: Thu, 31 Mar 2022 01:05:08 -0600 Subject: [PATCH 2/2] Update changelog --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3db81d6ef..71070cb9d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -115,6 +115,9 @@ - Updated DeleteAccountPipeline, fix perf issues. ([a9edd93f](https://github.com/pixelfed/pixelfed/commit/a9edd93f)) - Updated DeleteAccountPipeline, improve coverage. ([4870cc3b](https://github.com/pixelfed/pixelfed/commit/4870cc3b)) - Updated media model, use original photo url for non-existent thumbnails. ([9b04b9d8](https://github.com/pixelfed/pixelfed/commit/9b04b9d8)) +- Updated PlaceController, require authentication. ([e7783af6](https://github.com/pixelfed/pixelfed/commit/e7783af6)) +- Updated PublicApiController, disable legacy public access to local timeline. ([6ba7d433](https://github.com/pixelfed/pixelfed/commit/6ba7d433)) +- Updated DiscoverController, cache public tag feed and only include local posts for unauthenticated users. ([0541aed5](https://github.com/pixelfed/pixelfed/commit/0541aed5)) - ([](https://github.com/pixelfed/pixelfed/commit/)) ## [v0.11.2 (2022-01-09)](https://github.com/pixelfed/pixelfed/compare/v0.11.1...v0.11.2)