Path: blob/1.0-develop/app/Http/Controllers/Api/Application/Nodes/NodeController.php
10277 views
<?php12namespace Pterodactyl\Http\Controllers\Api\Application\Nodes;34use Pterodactyl\Models\Node;5use Illuminate\Http\JsonResponse;6use Spatie\QueryBuilder\QueryBuilder;7use Pterodactyl\Services\Nodes\NodeUpdateService;8use Pterodactyl\Services\Nodes\NodeCreationService;9use Pterodactyl\Services\Nodes\NodeDeletionService;10use Pterodactyl\Transformers\Api\Application\NodeTransformer;11use Pterodactyl\Http\Requests\Api\Application\Nodes\GetNodeRequest;12use Pterodactyl\Http\Requests\Api\Application\Nodes\GetNodesRequest;13use Pterodactyl\Http\Requests\Api\Application\Nodes\StoreNodeRequest;14use Pterodactyl\Http\Requests\Api\Application\Nodes\DeleteNodeRequest;15use Pterodactyl\Http\Requests\Api\Application\Nodes\UpdateNodeRequest;16use Pterodactyl\Http\Controllers\Api\Application\ApplicationApiController;1718class NodeController extends ApplicationApiController19{20/**21* NodeController constructor.22*/23public function __construct(24private NodeCreationService $creationService,25private NodeDeletionService $deletionService,26private NodeUpdateService $updateService,27) {28parent::__construct();29}3031/**32* Return all the nodes currently available on the Panel.33*/34public function index(GetNodesRequest $request): array35{36$nodes = QueryBuilder::for(Node::query())37->allowedFilters(['uuid', 'name', 'fqdn', 'daemon_token_id'])38->allowedSorts(['id', 'uuid', 'memory', 'disk'])39->paginate($request->query('per_page') ?? 50);4041return $this->fractal->collection($nodes)42->transformWith($this->getTransformer(NodeTransformer::class))43->toArray();44}4546/**47* Return data for a single instance of a node.48*/49public function view(GetNodeRequest $request, Node $node): array50{51return $this->fractal->item($node)52->transformWith($this->getTransformer(NodeTransformer::class))53->toArray();54}5556/**57* Create a new node on the Panel. Returns the created node and an HTTP/20158* status response on success.59*60* @throws \Pterodactyl\Exceptions\Model\DataValidationException61*/62public function store(StoreNodeRequest $request): JsonResponse63{64$node = $this->creationService->handle($request->validated());6566return $this->fractal->item($node)67->transformWith($this->getTransformer(NodeTransformer::class))68->addMeta([69'resource' => route('api.application.nodes.view', [70'node' => $node->id,71]),72])73->respond(201);74}7576/**77* Update an existing node on the Panel.78*79* @throws \Throwable80*/81public function update(UpdateNodeRequest $request, Node $node): array82{83$node = $this->updateService->handle(84$node,85$request->validated(),86$request->input('reset_secret') === true87);8889return $this->fractal->item($node)90->transformWith($this->getTransformer(NodeTransformer::class))91->toArray();92}9394/**95* Deletes a given node from the Panel as long as there are no servers96* currently attached to it.97*98* @throws \Pterodactyl\Exceptions\Service\HasActiveServersException99*/100public function delete(DeleteNodeRequest $request, Node $node): JsonResponse101{102$this->deletionService->handle($node);103104return new JsonResponse([], JsonResponse::HTTP_NO_CONTENT);105}106}107108109