Add StatusLabelService

pull/2571/head
Daniel Supernault 4 years ago
parent 10ca7ac052
commit ab888b2e70
No known key found for this signature in database
GPG Key ID: 0DEF1C662C9033F7

@ -53,7 +53,6 @@ use App\Services\{
MediaBlocklistService MediaBlocklistService
}; };
class ApiV1Controller extends Controller class ApiV1Controller extends Controller
{ {
protected $fractal; protected $fractal;
@ -98,6 +97,7 @@ class ApiV1Controller extends Controller
'client_secret' => $client->secret, 'client_secret' => $client->secret,
'vapid_key' => null 'vapid_key' => null
]; ];
return response()->json($res, 200, [ return response()->json($res, 200, [
'Access-Control-Allow-Origin' => '*' 'Access-Control-Allow-Origin' => '*'
]); ]);
@ -113,14 +113,18 @@ class ApiV1Controller extends Controller
{ {
abort_if(!$request->user(), 403); abort_if(!$request->user(), 403);
$id = $request->user()->id; $id = $request->user()->id;
$key = 'user:last_active_at:id:'.$id;
$ttl = now()->addMinutes(5); if($request->user()->last_active_at) {
Cache::remember($key, $ttl, function() use($id) { $key = 'user:last_active_at:id:'.$id;
$user = User::findOrFail($id); $ttl = now()->addMinutes(5);
$user->last_active_at = now(); Cache::remember($key, $ttl, function() use($id) {
$user->save(); $user = User::findOrFail($id);
return; $user->last_active_at = now();
}); $user->save();
return;
});
}
$profile = Profile::whereNull('status')->whereUserId($id)->firstOrFail(); $profile = Profile::whereNull('status')->whereUserId($id)->firstOrFail();
$resource = new Fractal\Resource\Item($profile, new AccountTransformer()); $resource = new Fractal\Resource\Item($profile, new AccountTransformer());
$res = $this->fractal->createData($resource)->toArray(); $res = $this->fractal->createData($resource)->toArray();
@ -1031,6 +1035,11 @@ class ApiV1Controller extends Controller
]); ]);
$user = $request->user(); $user = $request->user();
if($user->last_active_at == null) {
return [];
}
$profile = $user->profile; $profile = $user->profile;
if(config('pixelfed.enforce_account_limit') == true) { if(config('pixelfed.enforce_account_limit') == true) {
@ -1322,13 +1331,15 @@ class ApiV1Controller extends Controller
$limit = $request->input('limit') ?? 3; $limit = $request->input('limit') ?? 3;
$user = $request->user(); $user = $request->user();
$key = 'user:last_active_at:id:'.$user->id; if($user->last_active_at) {
$ttl = now()->addMinutes(5); $key = 'user:last_active_at:id:'.$user->id;
Cache::remember($key, $ttl, function() use($user) { $ttl = now()->addMinutes(5);
$user->last_active_at = now(); Cache::remember($key, $ttl, function() use($user) {
$user->save(); $user->last_active_at = now();
return; $user->save();
}); return;
});
}
$pid = $request->user()->profile_id; $pid = $request->user()->profile_id;
@ -1739,6 +1750,10 @@ class ApiV1Controller extends Controller
$in_reply_to_id = $request->input('in_reply_to_id'); $in_reply_to_id = $request->input('in_reply_to_id');
$user = $request->user(); $user = $request->user();
if($user->last_active_at == null) {
return [];
}
if($in_reply_to_id) { if($in_reply_to_id) {
$parent = Status::findOrFail($in_reply_to_id); $parent = Status::findOrFail($in_reply_to_id);
@ -1752,6 +1767,13 @@ class ApiV1Controller extends Controller
$status->in_reply_to_profile_id = $parent->profile_id; $status->in_reply_to_profile_id = $parent->profile_id;
$status->save(); $status->save();
} else if($ids) { } else if($ids) {
if(Media::whereUserId($user->id)
->whereNull('status_id')
->find($ids)
->count() == 0
) {
abort(400, 'Invalid media_ids');
}
$status = new Status; $status = new Status;
$status->caption = strip_tags($request->input('status')); $status->caption = strip_tags($request->input('status'));
$status->profile_id = $user->profile_id; $status->profile_id = $user->profile_id;
@ -1765,7 +1787,7 @@ class ApiV1Controller extends Controller
if($k + 1 > config('pixelfed.max_album_length')) { if($k + 1 > config('pixelfed.max_album_length')) {
continue; continue;
} }
$m = Media::findOrFail($v); $m = Media::whereUserId($user->id)->whereNull('status_id')->findOrFail($v);
if($m->profile_id !== $user->profile_id || $m->status_id) { if($m->profile_id !== $user->profile_id || $m->status_id) {
abort(403, 'Invalid media id'); abort(403, 'Invalid media id');
} }
@ -1776,7 +1798,7 @@ class ApiV1Controller extends Controller
if(empty($mimes)) { if(empty($mimes)) {
$status->delete(); $status->delete();
abort(500, 'Invalid media ids'); abort(400, 'Invalid media ids');
} }
$status->scope = $request->input('visibility', 'public'); $status->scope = $request->input('visibility', 'public');
@ -1786,8 +1808,7 @@ class ApiV1Controller extends Controller
} }
if(!$status) { if(!$status) {
$oops = 'An error occured. RefId: '.time().'-'.$user->profile_id.':'.Str::random(5).':'.Str::random(10); abort(500, 'An error occured.');
abort(500, $oops);
} }
NewStatusPipeline::dispatch($status); NewStatusPipeline::dispatch($status);

@ -0,0 +1,28 @@
<?php
namespace App\Services;
use Illuminate\Support\Facades\Cache;
use App\Status;
use Illuminate\Support\Str;
class StatusLabelService
{
const CACHE_KEY = 'pf:services:status_label:_v0:';
public static function get(Status $status)
{
if(config('instance.label.covid') == false || !$status) {
return [
'covid' => false
];
}
return Cache::remember(self::CACHE_KEY . $status->id, now()->addDays(7), function() use($status) {
return [
'covid' => Str::of(strtolower($status->caption))->contains(['covid','corona', 'coronavirus', 'vaccine', 'vaxx', 'vaccination'])
];
});
}
}

@ -7,6 +7,8 @@ use League\Fractal;
use Cache; use Cache;
use App\Services\HashidService; use App\Services\HashidService;
use App\Services\MediaTagService; use App\Services\MediaTagService;
use App\Services\StatusLabelService;
use Illuminate\Support\Str;
class StatusTransformer extends Fractal\TransformerAbstract class StatusTransformer extends Fractal\TransformerAbstract
{ {
@ -55,7 +57,8 @@ class StatusTransformer extends Fractal\TransformerAbstract
'parent' => [], 'parent' => [],
'place' => $status->place, 'place' => $status->place,
'local' => (bool) $status->local, 'local' => (bool) $status->local,
'taggedPeople' => $taggedPeople 'taggedPeople' => $taggedPeople,
'label' => StatusLabelService::get($status)
]; ];
} }

Loading…
Cancel
Save