Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
pterodactyl
GitHub Repository: pterodactyl/panel
Path: blob/1.0-develop/app/Http/Controllers/Api/Application/ApplicationApiController.php
10279 views
1
<?php
2
3
namespace Pterodactyl\Http\Controllers\Api\Application;
4
5
use Illuminate\Http\Request;
6
use Webmozart\Assert\Assert;
7
use Illuminate\Http\Response;
8
use Illuminate\Support\Collection;
9
use Illuminate\Container\Container;
10
use Pterodactyl\Http\Controllers\Controller;
11
use Pterodactyl\Extensions\Spatie\Fractalistic\Fractal;
12
use Pterodactyl\Transformers\Api\Application\BaseTransformer;
13
14
abstract class ApplicationApiController extends Controller
15
{
16
protected Request $request;
17
18
protected Fractal $fractal;
19
20
/**
21
* ApplicationApiController constructor.
22
*/
23
public function __construct()
24
{
25
Container::getInstance()->call([$this, 'loadDependencies']);
26
27
// Parse all the includes to use on this request.
28
$input = $this->request->input('include', []);
29
$input = is_array($input) ? $input : explode(',', $input);
30
31
$includes = (new Collection($input))->map(function ($value) {
32
return trim($value);
33
})->filter()->toArray();
34
35
$this->fractal->parseIncludes($includes);
36
$this->fractal->limitRecursion(2);
37
}
38
39
/**
40
* Perform dependency injection of certain classes needed for core functionality
41
* without littering the constructors of classes that extend this abstract.
42
*/
43
public function loadDependencies(Fractal $fractal, Request $request)
44
{
45
$this->fractal = $fractal;
46
$this->request = $request;
47
}
48
49
/**
50
* Return an instance of an application transformer.
51
*
52
* @template T of \Pterodactyl\Transformers\Api\Application\BaseTransformer
53
*
54
* @param class-string<T> $abstract
55
*
56
* @return T
57
*
58
* @noinspection PhpDocSignatureInspection
59
*/
60
public function getTransformer(string $abstract)
61
{
62
Assert::subclassOf($abstract, BaseTransformer::class); // @phpstan-ignore staticMethod.alreadyNarrowedType
63
64
return $abstract::fromRequest($this->request);
65
}
66
67
/**
68
* Return an HTTP/204 response for the API.
69
*/
70
protected function returnNoContent(): Response
71
{
72
return new Response('', Response::HTTP_NO_CONTENT);
73
}
74
}
75
76