repository = $repository; $this->serverRepository = $serverRepository; $this->assignableAllocationService = $assignableAllocationService; } /** * Lists all of the allocations available to a server and wether or * not they are currently assigned as the primary for this server. * * @param \Pterodactyl\Http\Requests\Api\Client\Servers\Network\GetNetworkRequest $request * @param \Pterodactyl\Models\Server $server * @return array */ public function index(GetNetworkRequest $request, Server $server): array { return $this->fractal->collection($server->allocations) ->transformWith($this->getTransformer(AllocationTransformer::class)) ->toArray(); } /** * Set the primary allocation for a server. * * @param \Pterodactyl\Http\Requests\Api\Client\Servers\Network\UpdateAllocationRequest $request * @param \Pterodactyl\Models\Server $server * @param \Pterodactyl\Models\Allocation $allocation * @return array * * @throws \Pterodactyl\Exceptions\Model\DataValidationException * @throws \Pterodactyl\Exceptions\Repository\RecordNotFoundException */ public function update(UpdateAllocationRequest $request, Server $server, Allocation $allocation): array { $allocation = $this->repository->update($allocation->id, [ 'notes' => $request->input('notes'), ]); return $this->fractal->item($allocation) ->transformWith($this->getTransformer(AllocationTransformer::class)) ->toArray(); } /** * Set the primary allocation for a server. * * @param \Pterodactyl\Http\Requests\Api\Client\Servers\Network\SetPrimaryAllocationRequest $request * @param \Pterodactyl\Models\Server $server * @param \Pterodactyl\Models\Allocation $allocation * @return array * * @throws \Pterodactyl\Exceptions\Model\DataValidationException * @throws \Pterodactyl\Exceptions\Repository\RecordNotFoundException */ public function setPrimary(SetPrimaryAllocationRequest $request, Server $server, Allocation $allocation): array { $this->serverRepository->update($server->id, ['allocation_id' => $allocation->id]); return $this->fractal->item($allocation) ->transformWith($this->getTransformer(AllocationTransformer::class)) ->toArray(); } /** * Set the notes for the allocation for a server. *s * * @param \Pterodactyl\Http\Requests\Api\Client\Servers\Network\NewAllocationRequest $request * @param \Pterodactyl\Models\Server $server * @return array * * @throws \Pterodactyl\Exceptions\DisplayException */ public function store(NewAllocationRequest $request, Server $server): array { if ($server->allocations()->count() >= $server->allocation_limit) { throw new DisplayException( 'Cannot assign additional allocations to this server: limit has been reached.' ); } $allocation = $this->assignableAllocationService->handle($server); return $this->fractal->item($allocation) ->transformWith($this->getTransformer(AllocationTransformer::class)) ->toArray(); } /** * Delete an allocation from a server. * * @param \Pterodactyl\Http\Requests\Api\Client\Servers\Network\DeleteAllocationRequest $request * @param \Pterodactyl\Models\Server $server * @param \Pterodactyl\Models\Allocation $allocation * @return \Illuminate\Http\JsonResponse * * @throws \Pterodactyl\Exceptions\DisplayException */ public function delete(DeleteAllocationRequest $request, Server $server, Allocation $allocation) { if ($allocation->id === $server->allocation_id) { throw new DisplayException( 'You cannot delete the primary allocation for this server.' ); } Allocation::query()->where('id', $allocation->id)->update([ 'notes' => null, 'server_id' => null, ]); return new JsonResponse([], JsonResponse::HTTP_NO_CONTENT); } }