|
|
|
@ -20,6 +20,8 @@ use App\User;
|
|
|
|
|
use App\Services\AccountService;
|
|
|
|
|
use App\Services\StatusService;
|
|
|
|
|
use App\Services\ProfileStatusService;
|
|
|
|
|
use App\Services\PublicTimelineService;
|
|
|
|
|
use App\Services\NetworkTimelineService;
|
|
|
|
|
use App\Util\Lexer\RestrictedNames;
|
|
|
|
|
use App\Services\EmailService;
|
|
|
|
|
use Illuminate\Support\Str;
|
|
|
|
@ -29,6 +31,7 @@ use Mail;
|
|
|
|
|
use App\Mail\PasswordChange;
|
|
|
|
|
use App\Mail\ConfirmAppEmail;
|
|
|
|
|
use App\Http\Resources\StatusStateless;
|
|
|
|
|
use App\Jobs\StatusPipeline\StatusDelete;
|
|
|
|
|
|
|
|
|
|
class ApiV1Dot1Controller extends Controller
|
|
|
|
|
{
|
|
|
|
@ -385,7 +388,6 @@ class ApiV1Dot1Controller extends Controller
|
|
|
|
|
return $this->json($res);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* GET /api/v1.1/accounts/apps-and-applications
|
|
|
|
|
*
|
|
|
|
@ -595,7 +597,6 @@ class ApiV1Dot1Controller extends Controller
|
|
|
|
|
return [200];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function unarchive(Request $request, $id)
|
|
|
|
|
{
|
|
|
|
|
abort_if(!$request->user(), 403);
|
|
|
|
@ -656,13 +657,115 @@ class ApiV1Dot1Controller extends Controller
|
|
|
|
|
->filter()
|
|
|
|
|
->values();
|
|
|
|
|
|
|
|
|
|
return ['place' => [
|
|
|
|
|
return [
|
|
|
|
|
'place' =>
|
|
|
|
|
[
|
|
|
|
|
'id' => $place->id,
|
|
|
|
|
'name' => $place->name,
|
|
|
|
|
'slug' => $place->slug,
|
|
|
|
|
'country' => $place->country,
|
|
|
|
|
'lat' => $place->lat,
|
|
|
|
|
'long' => $place->long
|
|
|
|
|
], 'posts' => $posts];
|
|
|
|
|
],
|
|
|
|
|
'posts' => $posts];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function moderatePost(Request $request, $id)
|
|
|
|
|
{
|
|
|
|
|
abort_if(!$request->user(), 403);
|
|
|
|
|
abort_if($request->user()->is_admin != true, 403);
|
|
|
|
|
|
|
|
|
|
$this->validate($request, [
|
|
|
|
|
'action' => 'required|in:cw,mark-public,mark-unlisted,mark-private,mark-spammer,delete'
|
|
|
|
|
]);
|
|
|
|
|
|
|
|
|
|
$action = $request->input('action');
|
|
|
|
|
$status = Status::find($id);
|
|
|
|
|
|
|
|
|
|
if(!$status) {
|
|
|
|
|
return response()->json(['error' => 'Cannot find status'], 400);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if($status->uri == null) {
|
|
|
|
|
if($status->profile->user && $status->profile->user->is_admin) {
|
|
|
|
|
return response()->json(['error' => 'Cannot moderate admin accounts'], 400);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if($action == 'mark-spammer') {
|
|
|
|
|
$status->profile->update([
|
|
|
|
|
'unlisted' => true,
|
|
|
|
|
'cw' => true,
|
|
|
|
|
'no_autolink' => true
|
|
|
|
|
]);
|
|
|
|
|
|
|
|
|
|
Status::whereProfileId($status->profile_id)
|
|
|
|
|
->get()
|
|
|
|
|
->each(function($s) {
|
|
|
|
|
if(in_array($s->scope, ['public', 'unlisted'])) {
|
|
|
|
|
$s->scope = 'private';
|
|
|
|
|
$s->visibility = 'private';
|
|
|
|
|
}
|
|
|
|
|
$s->is_nsfw = true;
|
|
|
|
|
$s->save();
|
|
|
|
|
StatusService::del($s->id, true);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
Cache::forget('pf:bouncer_v0:exemption_by_pid:' . $status->profile_id);
|
|
|
|
|
Cache::forget('pf:bouncer_v0:recent_by_pid:' . $status->profile_id);
|
|
|
|
|
Cache::forget('admin-dash:reports:spam-count');
|
|
|
|
|
} else if ($action == 'cw') {
|
|
|
|
|
$state = $status->is_nsfw;
|
|
|
|
|
$status->is_nsfw = !$state;
|
|
|
|
|
$status->save();
|
|
|
|
|
StatusService::del($status->id);
|
|
|
|
|
} else if ($action == 'mark-public') {
|
|
|
|
|
$state = $status->scope;
|
|
|
|
|
$status->scope = 'public';
|
|
|
|
|
$status->visibility = 'public';
|
|
|
|
|
$status->save();
|
|
|
|
|
StatusService::del($status->id, true);
|
|
|
|
|
if($state !== 'public') {
|
|
|
|
|
if($status->uri) {
|
|
|
|
|
NetworkTimelineService::add($status->id);
|
|
|
|
|
} else {
|
|
|
|
|
PublicTimelineService::add($status->id);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
} else if ($action == 'mark-unlisted') {
|
|
|
|
|
$state = $status->scope;
|
|
|
|
|
$status->scope = 'unlisted';
|
|
|
|
|
$status->visibility = 'unlisted';
|
|
|
|
|
$status->save();
|
|
|
|
|
StatusService::del($status->id);
|
|
|
|
|
if($state == 'public') {
|
|
|
|
|
PublicTimelineService::del($status->id);
|
|
|
|
|
NetworkTimelineService::del($status->id);
|
|
|
|
|
}
|
|
|
|
|
} else if ($action == 'mark-private') {
|
|
|
|
|
$state = $status->scope;
|
|
|
|
|
$status->scope = 'private';
|
|
|
|
|
$status->visibility = 'private';
|
|
|
|
|
$status->save();
|
|
|
|
|
StatusService::del($status->id);
|
|
|
|
|
if($state == 'public') {
|
|
|
|
|
PublicTimelineService::del($status->id);
|
|
|
|
|
NetworkTimelineService::del($status->id);
|
|
|
|
|
}
|
|
|
|
|
} else if ($action == 'delete') {
|
|
|
|
|
PublicTimelineService::del($status->id);
|
|
|
|
|
NetworkTimelineService::del($status->id);
|
|
|
|
|
Cache::forget('_api:statuses:recent_9:' . $status->profile_id);
|
|
|
|
|
Cache::forget('profile:status_count:' . $status->profile_id);
|
|
|
|
|
Cache::forget('profile:embed:' . $status->profile_id);
|
|
|
|
|
StatusService::del($status->id, true);
|
|
|
|
|
Cache::forget('profile:status_count:'.$status->profile_id);
|
|
|
|
|
StatusDelete::dispatch($status);
|
|
|
|
|
return [];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Cache::forget('_api:statuses:recent_9:'.$status->profile_id);
|
|
|
|
|
|
|
|
|
|
return StatusService::get($status->id, false);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|