Update InstanceService, improve unlisted/banned network post filtering

This commit is contained in:
Daniel Supernault 2023-01-15 02:35:10 -07:00
parent 87cff47c03
commit a0da6ec39a
No known key found for this signature in database
GPG key ID: 0DEF1C662C9033F7
3 changed files with 35 additions and 3 deletions

View file

@ -7,13 +7,14 @@ use App\Instance;
class InstanceService class InstanceService
{ {
const CACHE_KEY_BY_DOMAIN = 'pf:services:instance:by_domain:';
const CACHE_KEY_BANNED_DOMAINS = 'instances:banned:domains'; const CACHE_KEY_BANNED_DOMAINS = 'instances:banned:domains';
const CACHE_KEY_UNLISTED_DOMAINS = 'instances:unlisted:domains'; const CACHE_KEY_UNLISTED_DOMAINS = 'instances:unlisted:domains';
const CACHE_KEY_NSFW_DOMAINS = 'instances:auto_cw:domains'; const CACHE_KEY_NSFW_DOMAINS = 'instances:auto_cw:domains';
public static function getByDomain($domain) public static function getByDomain($domain)
{ {
return Cache::remember('pf:services:instance:by_domain:'.$domain, 3600, function() use($domain) { return Cache::remember(self::CACHE_KEY_BY_DOMAIN.$domain, 3600, function() use($domain) {
return Instance::whereDomain($domain)->first(); return Instance::whereDomain($domain)->first();
}); });
} }
@ -50,4 +51,17 @@ class InstanceService
return $instance->software; return $instance->software;
}); });
} }
public static function refresh()
{
Cache::forget(self::CACHE_KEY_BANNED_DOMAINS);
Cache::forget(self::CACHE_KEY_UNLISTED_DOMAINS);
Cache::forget(self::CACHE_KEY_NSFW_DOMAINS);
self::getBannedDomains();
self::getUnlistedDomains();
self::getNsfwDomains();
return true;
}
} }

View file

@ -77,6 +77,11 @@ class NetworkTimelineService
if(self::count() == 0 || $force == true) { if(self::count() == 0 || $force == true) {
$hideNsfw = config('instance.hide_nsfw_on_public_feeds'); $hideNsfw = config('instance.hide_nsfw_on_public_feeds');
Redis::del(self::CACHE_KEY); Redis::del(self::CACHE_KEY);
$filteredDomains = collect(InstanceService::getBannedDomains())
->merge(InstanceService::getUnlistedDomains())
->unique()
->values()
->toArray();
$ids = Status::whereNotNull('uri') $ids = Status::whereNotNull('uri')
->whereScope('public') ->whereScope('public')
->when($hideNsfw, function($q, $hideNsfw) { ->when($hideNsfw, function($q, $hideNsfw) {
@ -88,7 +93,13 @@ class NetworkTimelineService
->where('created_at', '>', now()->subHours(config('instance.timeline.network.max_hours_old'))) ->where('created_at', '>', now()->subHours(config('instance.timeline.network.max_hours_old')))
->orderByDesc('created_at') ->orderByDesc('created_at')
->limit($limit) ->limit($limit)
->pluck('id'); ->pluck('uri', 'id');
$ids = $ids->filter(function($k, $v) use($filteredDomains) {
$domain = parse_url($k, PHP_URL_HOST);
return !in_array($domain, $filteredDomains);
})->map(function($k, $v) {
return $v;
})->flatten();
foreach($ids as $id) { foreach($ids as $id) {
self::add($id); self::add($id);
} }

View file

@ -510,7 +510,14 @@ class Helpers {
$status->created_at->gt(now()->subHours(config('instance.timeline.network.max_hours_old'))) && $status->created_at->gt(now()->subHours(config('instance.timeline.network.max_hours_old'))) &&
(config('instance.hide_nsfw_on_public_feeds') == true ? $status->is_nsfw == false : true) (config('instance.hide_nsfw_on_public_feeds') == true ? $status->is_nsfw == false : true)
) { ) {
$filteredDomains = collect(InstanceService::getBannedDomains())
->merge(InstanceService::getUnlistedDomains())
->unique()
->values()
->toArray();
if(!in_array($urlDomain, $filteredDomains)) {
NetworkTimelineService::add($status->id); NetworkTimelineService::add($status->id);
}
} }
IncrementPostCount::dispatch($pid)->onQueue('low'); IncrementPostCount::dispatch($pid)->onQueue('low');