Skip to content

Commit a497a3d

Browse files
committed
Make server listing and single server view API endpoints work
1 parent 74bdbea commit a497a3d

39 files changed

+367
-176
lines changed
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
<?php
2+
3+
namespace Pterodactyl\Extensions\Spatie\Fractalistic;
4+
5+
use Illuminate\Database\Eloquent\Model;
6+
use League\Fractal\Serializer\JsonApiSerializer;
7+
use Spatie\Fractalistic\Fractal as SpatieFractal;
8+
use Illuminate\Contracts\Pagination\LengthAwarePaginator;
9+
use League\Fractal\Pagination\IlluminatePaginatorAdapter;
10+
11+
class Fractal extends SpatieFractal
12+
{
13+
/**
14+
* Create fractal data.
15+
*
16+
* @return \League\Fractal\Scope
17+
*
18+
* @throws \Spatie\Fractalistic\Exceptions\InvalidTransformation
19+
* @throws \Spatie\Fractalistic\Exceptions\NoTransformerSpecified
20+
*/
21+
public function createData()
22+
{
23+
// Set the serializer by default.
24+
if (is_null($this->serializer)) {
25+
$this->serializer = new JsonApiSerializer;
26+
}
27+
28+
// Automatically set the paginator on the response object if the
29+
// data being provided implements a paginator.
30+
if (is_null($this->paginator) && $this->data instanceof LengthAwarePaginator) {
31+
$this->paginator = new IlluminatePaginatorAdapter($this->data);
32+
}
33+
34+
// Automatically set the resource name if the response data is a model
35+
// and the resource name is available on the model.
36+
if (is_null($this->resourceName) && $this->data instanceof Model) {
37+
if (defined(get_class($this->data) . '::RESOURCE_NAME')) {
38+
$this->resourceName = constant(get_class($this->data) . '::RESOURCE_NAME');
39+
}
40+
}
41+
42+
return parent::createData();
43+
}
44+
}

app/Http/Controllers/Admin/ApplicationApiController.php renamed to app/Http/Controllers/Admin/ApiController.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
use Pterodactyl\Contracts\Repository\ApiKeyRepositoryInterface;
1515
use Pterodactyl\Http\Requests\Admin\Api\StoreApplicationApiKeyRequest;
1616

17-
class ApplicationApiController extends Controller
17+
class ApiController extends Controller
1818
{
1919
/**
2020
* @var \Prologue\Alerts\AlertsMessageBag

app/Http/Controllers/Api/Application/Locations/LocationController.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@
1111
use Pterodactyl\Services\Locations\LocationUpdateService;
1212
use Pterodactyl\Services\Locations\LocationCreationService;
1313
use Pterodactyl\Services\Locations\LocationDeletionService;
14-
use Pterodactyl\Transformers\Api\Admin\LocationTransformer;
1514
use Pterodactyl\Contracts\Repository\LocationRepositoryInterface;
15+
use Pterodactyl\Transformers\Api\Application\LocationTransformer;
1616
use Pterodactyl\Http\Requests\Api\Application\Locations\GetLocationsRequest;
1717
use Pterodactyl\Http\Requests\Api\Application\Locations\DeleteLocationRequest;
1818
use Pterodactyl\Http\Requests\Api\Application\Locations\UpdateLocationRequest;

app/Http/Controllers/Api/Application/Nodes/AllocationController.php

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,11 @@
88
use Pterodactyl\Models\Allocation;
99
use Pterodactyl\Http\Controllers\Controller;
1010
use League\Fractal\Pagination\IlluminatePaginatorAdapter;
11-
use Pterodactyl\Transformers\Api\Admin\AllocationTransformer;
1211
use Pterodactyl\Services\Allocations\AllocationDeletionService;
1312
use Pterodactyl\Contracts\Repository\AllocationRepositoryInterface;
13+
use Pterodactyl\Transformers\Api\Application\AllocationTransformer;
1414
use Pterodactyl\Http\Requests\Api\Application\Allocations\GetAllocationsRequest;
15-
use Pterodactyl\Http\Requests\Api\Application\Allocations\DeleteAllocationRequest;
15+
use Pterodactyl\Http\Requests\Api\Application\Allocations\DeleteAllocationRequestApplication;
1616

1717
class AllocationController extends Controller
1818
{
@@ -66,14 +66,14 @@ public function index(GetAllocationsRequest $request, Node $node): array
6666
/**
6767
* Delete a specific allocation from the Panel.
6868
*
69-
* @param \Pterodactyl\Http\Requests\Api\Application\Allocations\DeleteAllocationRequest $request
70-
* @param \Pterodactyl\Models\Node $node
71-
* @param \Pterodactyl\Models\Allocation $allocation
69+
* @param \Pterodactyl\Http\Requests\Api\Application\Allocations\DeleteAllocationRequestApplication $request
70+
* @param \Pterodactyl\Models\Node $node
71+
* @param \Pterodactyl\Models\Allocation $allocation
7272
* @return \Illuminate\Http\Response
7373
*
7474
* @throws \Pterodactyl\Exceptions\Service\Allocation\ServerUsingAllocationException
7575
*/
76-
public function delete(DeleteAllocationRequest $request, Node $node, Allocation $allocation): Response
76+
public function delete(DeleteAllocationRequestApplication $request, Node $node, Allocation $allocation): Response
7777
{
7878
$this->deletionService->handle($allocation);
7979

app/Http/Controllers/Api/Application/Nodes/NodeController.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@
1010
use Pterodactyl\Services\Nodes\NodeUpdateService;
1111
use Pterodactyl\Services\Nodes\NodeCreationService;
1212
use Pterodactyl\Services\Nodes\NodeDeletionService;
13-
use Pterodactyl\Transformers\Api\Admin\NodeTransformer;
1413
use League\Fractal\Pagination\IlluminatePaginatorAdapter;
1514
use Pterodactyl\Contracts\Repository\NodeRepositoryInterface;
15+
use Pterodactyl\Transformers\Api\Application\NodeTransformer;
1616
use Pterodactyl\Http\Requests\Api\Application\Nodes\GetNodeRequest;
1717
use Pterodactyl\Http\Requests\Api\Application\Nodes\GetNodesRequest;
1818
use Pterodactyl\Http\Requests\Api\Application\Nodes\StoreNodeRequest;
Lines changed: 36 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,18 @@
11
<?php
22

3-
namespace Pterodactyl\Http\Controllers\Api\Admin;
3+
namespace Pterodactyl\Http\Controllers\Api\Application\Servers;
44

5-
use Spatie\Fractal\Fractal;
65
use Illuminate\Http\Request;
7-
use Pterodactyl\Http\Controllers\Controller;
8-
use Pterodactyl\Transformers\Api\Admin\ServerTransformer;
6+
use Pterodactyl\Models\Server;
7+
use Pterodactyl\Extensions\Spatie\Fractalistic\Fractal;
98
use Pterodactyl\Contracts\Repository\ServerRepositoryInterface;
9+
use Pterodactyl\Transformers\Api\Application\ServerTransformer;
10+
use Pterodactyl\Http\Requests\Api\Application\Servers\GetServerRequest;
11+
use Pterodactyl\Http\Requests\Api\Application\Servers\GetServersRequest;
12+
use Pterodactyl\Http\Controllers\Api\Application\ApplicationApiController;
1013

11-
class ServerController extends Controller
14+
class ServerController extends ApplicationApiController
1215
{
13-
/**
14-
* @var \Spatie\Fractal\Fractal
15-
*/
16-
private $fractal;
17-
1816
/**
1917
* @var \Pterodactyl\Contracts\Repository\ServerRepositoryInterface
2018
*/
@@ -23,22 +21,43 @@ class ServerController extends Controller
2321
/**
2422
* ServerController constructor.
2523
*
26-
* @param \Spatie\Fractal\Fractal $fractal
24+
* @param \Pterodactyl\Extensions\Spatie\Fractalistic\Fractal $fractal
25+
* @param \Illuminate\Http\Request $request
2726
* @param \Pterodactyl\Contracts\Repository\ServerRepositoryInterface $repository
2827
*/
29-
public function __construct(Fractal $fractal, ServerRepositoryInterface $repository)
28+
public function __construct(Fractal $fractal, Request $request, ServerRepositoryInterface $repository)
3029
{
31-
$this->fractal = $fractal;
30+
parent::__construct($fractal, $request);
31+
3232
$this->repository = $repository;
3333
}
3434

35-
public function index(Request $request): array
35+
/**
36+
* Return all of the servers that currently exist on the Panel.
37+
*
38+
* @param \Pterodactyl\Http\Requests\Api\Application\Servers\GetServersRequest $request
39+
* @return array
40+
*/
41+
public function index(GetServersRequest $request): array
3642
{
37-
$servers = $this->repository->paginated(50);
43+
$servers = $this->repository->setSearchTerm($request->input('search'))->paginated(50);
3844

3945
return $this->fractal->collection($servers)
40-
->transformWith((new ServerTransformer)->setKey())
41-
->withResourceName('server')
46+
->transformWith($this->getTransformer(ServerTransformer::class))
47+
->toArray();
48+
}
49+
50+
/**
51+
* Show a single server transformed for the application API.
52+
*
53+
* @param \Pterodactyl\Http\Requests\Api\Application\Servers\GetServerRequest $request
54+
* @param \Pterodactyl\Models\Server $server
55+
* @return array
56+
*/
57+
public function view(GetServerRequest $request, Server $server): array
58+
{
59+
return $this->fractal->item($server)
60+
->transformWith($this->getTransformer(ServerTransformer::class))
4261
->toArray();
4362
}
4463
}

app/Http/Controllers/Api/Application/Users/UserController.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@
1111
use Pterodactyl\Services\Users\UserUpdateService;
1212
use Pterodactyl\Services\Users\UserCreationService;
1313
use Pterodactyl\Services\Users\UserDeletionService;
14-
use Pterodactyl\Transformers\Api\Admin\UserTransformer;
1514
use League\Fractal\Pagination\IlluminatePaginatorAdapter;
1615
use Pterodactyl\Contracts\Repository\UserRepositoryInterface;
16+
use Pterodactyl\Transformers\Api\Application\UserTransformer;
1717
use Pterodactyl\Http\Requests\Api\Application\Users\GetUserRequest;
1818
use Pterodactyl\Http\Requests\Api\Application\Users\GetUsersRequest;
1919
use Pterodactyl\Http\Requests\Api\Application\Users\StoreUserRequest;

app/Http/Requests/Api/Application/Allocations/DeleteAllocationRequest.php renamed to app/Http/Requests/Api/Application/Allocations/DeleteAllocationRequest.phpApplication

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@
55
use Pterodactyl\Models\Node;
66
use Pterodactyl\Models\Allocation;
77
use Pterodactyl\Services\Acl\Api\AdminAcl;
8-
use Pterodactyl\Http\Requests\Api\Application\ApiAdminRequest;
8+
use Pterodactyl\Http\Requests\Api\Application\ApplicationApiRequest;
99

10-
class DeleteAllocationRequest extends ApiAdminRequest
10+
class DeleteAllocationRequest extends ApplicationApiRequest
1111
{
1212
/**
1313
* @var string

app/Http/Requests/Api/Application/Allocations/GetAllocationsRequest.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@
44

55
use Pterodactyl\Models\Node;
66
use Pterodactyl\Services\Acl\Api\AdminAcl;
7-
use Pterodactyl\Http\Requests\Api\Application\ApiAdminRequest;
7+
use Pterodactyl\Http\Requests\Api\Application\ApplicationApiRequest;
88

9-
class GetAllocationsRequest extends ApiAdminRequest
9+
class GetAllocationsRequest extends ApplicationApiRequest
1010
{
1111
/**
1212
* @var string

app/Http/Requests/Api/Application/ApiAdminRequest.php renamed to app/Http/Requests/Api/Application/ApplicationApiRequest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
use Pterodactyl\Exceptions\PterodactylException;
99
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
1010

11-
abstract class ApiAdminRequest extends FormRequest
11+
abstract class ApplicationApiRequest extends FormRequest
1212
{
1313
/**
1414
* The resource that should be checked when performing the authorization

0 commit comments

Comments
 (0)