diff --git a/app/Http/Controllers/ApiController.php b/app/Http/Controllers/ApiController.php index 399d99a8..51f42dab 100644 --- a/app/Http/Controllers/ApiController.php +++ b/app/Http/Controllers/ApiController.php @@ -13,23 +13,28 @@ class ApiController extends BaseApiController // todo: deprecate and remove public function hydrateLikes(Request $request) { - $this->validate($request, [ - 'min' => 'nullable|integer|min:1', - 'max' => 'nullable|integer', - ]); + return response()->json([]); + } - $profile = Auth::user()->profile; - $res = Cache::remember('api:like-ids:user:'.$profile->id, now()->addDays(1), function () use ($profile) { - return Like::whereProfileId($profile->id) - ->orderBy('id', 'desc') - ->take(1000) - ->pluck('status_id'); + public function siteConfiguration(Request $request) + { + $res = Cache::remember('api:site:configuration', now()->addMinutes(30), function() { + return [ + 'uploader' => [ + 'max_photo_size' => config('pixelfed.max_photo_size'), + 'max_caption_length' => config('pixelfed.max_caption_length'), + 'album_limit' => config('pixelfed.max_album_length'), + 'image_quality' => config('pixelfed.image_quality'), + + 'optimize_image' => config('pixelfed.optimize_image'), + 'optimize_video' => config('pixelfed.optimize_video'), + + 'media_types' => config('pixelfed.media_types'), + 'enforce_account_limit' => config('pixelfed.enforce_account_limit') + ] + ]; }); - return response()->json($res); } - public function loadMoreComments(Request $request) - { - } } diff --git a/app/Http/Controllers/InternalApiController.php b/app/Http/Controllers/InternalApiController.php index e20944f2..4502fefe 100644 --- a/app/Http/Controllers/InternalApiController.php +++ b/app/Http/Controllers/InternalApiController.php @@ -40,6 +40,7 @@ class InternalApiController extends Controller $this->fractal->setSerializer(new ArraySerializer()); } + // deprecated v2 compose api public function compose(Request $request) { $this->validate($request, [ @@ -60,6 +61,9 @@ class InternalApiController extends Controller $cw = false; foreach($medias as $k => $media) { + if($k + 1 > config('pixelfed.max_album_length')) { + continue; + } $m = Media::findOrFail($media['id']); if($m->profile_id !== $profile->id || $m->status_id) { abort(403, 'Invalid media id'); @@ -381,4 +385,68 @@ class InternalApiController extends Controller } return ['msg' => 200]; } + + public function composePost(Request $request) + { + $this->validate($request, [ + 'caption' => 'nullable|string', + 'media.*' => 'required', + 'media.*.id' => 'required|integer|min:1', + 'media.*.filter_class' => 'nullable|alpha_dash|max:30', + 'media.*.license' => 'nullable|string|max:80', + 'cw' => 'nullable|boolean', + 'visibility' => 'required|string|in:public,private,unlisted|min:2|max:10' + ]); + + $profile = Auth::user()->profile; + $visibility = $request->input('visibility'); + $medias = $request->input('media'); + $attachments = []; + $status = new Status; + $mimes = []; + $cw = $request->input('cw'); + + foreach($medias as $k => $media) { + if($k + 1 > config('pixelfed.max_album_length')) { + continue; + } + $m = Media::findOrFail($media['id']); + if($m->profile_id !== $profile->id || $m->status_id) { + abort(403, 'Invalid media id'); + } + $m->filter_class = in_array($media['filter_class'], Filter::classes()) ? $media['filter_class'] : null; + $m->license = $media['license']; + $m->caption = isset($media['alt']) ? strip_tags($media['alt']) : null; + $m->order = isset($media['cursor']) && is_int($media['cursor']) ? (int) $media['cursor'] : $k; + if($cw == true || $profile->cw == true) { + $m->is_nsfw = $cw; + $status->is_nsfw = $cw; + } + $m->save(); + $attachments[] = $m; + array_push($mimes, $m->mime); + } + + $status->caption = strip_tags($request->caption); + $status->scope = 'draft'; + $status->profile_id = $profile->id; + $status->save(); + + foreach($attachments as $media) { + $media->status_id = $status->id; + $media->save(); + } + + $visibility = $profile->unlisted == true && $visibility == 'public' ? 'unlisted' : $visibility; + $cw = $profile->cw == true ? true : $cw; + $status->is_nsfw = $cw; + $status->visibility = $visibility; + $status->scope = $visibility; + $status->type = StatusController::mimeTypeCheck($mimes); + $status->save(); + + NewStatusPipeline::dispatch($status); + + return $status->url(); + } } diff --git a/resources/assets/js/components/PostComponent.vue b/resources/assets/js/components/PostComponent.vue index ce110b39..61d14676 100644 --- a/resources/assets/js/components/PostComponent.vue +++ b/resources/assets/js/components/PostComponent.vue @@ -125,10 +125,10 @@