Finish base API.
Making PR, any additional API functions or modifications can be done within the repository now.
This commit is contained in:
parent
77e3744b40
commit
ac65d5fa21
8 changed files with 249 additions and 6 deletions
|
@ -2,6 +2,7 @@
|
|||
|
||||
namespace Pterodactyl\Http\Controllers\API;
|
||||
|
||||
use DB;
|
||||
use Illuminate\Http\Request;
|
||||
use Pterodactyl\Models\Location;
|
||||
|
||||
|
@ -27,7 +28,16 @@ class LocationController extends BaseController
|
|||
*/
|
||||
public function getLocations(Request $request)
|
||||
{
|
||||
return Location::all();
|
||||
$locations = Location::select('locations.*', DB::raw('GROUP_CONCAT(nodes.id) as nodes'))
|
||||
->join('nodes', 'locations.id', '=', 'nodes.location')
|
||||
->groupBy('locations.id')
|
||||
->get();
|
||||
|
||||
foreach($locations as &$location) {
|
||||
$location->nodes = explode(',', $location->nodes);
|
||||
}
|
||||
|
||||
return $locations;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -40,7 +40,7 @@ class NodeController extends BaseController
|
|||
*/
|
||||
public function getNodes(Request $request)
|
||||
{
|
||||
$nodes = Models\Node::paginate(15);
|
||||
$nodes = Models\Node::paginate(50);
|
||||
return $this->response->paginator($nodes, new NodeTransformer);
|
||||
}
|
||||
|
||||
|
@ -151,4 +151,27 @@ class NodeController extends BaseController
|
|||
return $allocations;
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete Node
|
||||
*
|
||||
* @Delete("/nodes/{id}")
|
||||
* @Versions({"v1"})
|
||||
* @Parameters({
|
||||
* @Parameter("id", type="integer", required=true, description="The ID of the node."),
|
||||
* })
|
||||
* @Response(204)
|
||||
*/
|
||||
public function deleteNode(Request $request, $id)
|
||||
{
|
||||
try {
|
||||
$node = new NodeRepository;
|
||||
$node->delete($id);
|
||||
return $this->response->noContent();
|
||||
} catch (DisplayException $ex) {
|
||||
throw new ResourceException($ex->getMessage());
|
||||
} catch(\Exception $e) {
|
||||
throw new ServiceUnavailableHttpException('An error occured while attempting to delete this node.');
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -40,16 +40,43 @@ class ServerController extends BaseController
|
|||
*/
|
||||
public function getServers(Request $request)
|
||||
{
|
||||
$servers = Models\Server::paginate(15);
|
||||
$servers = Models\Server::paginate(50);
|
||||
return $this->response->paginator($servers, new ServerTransformer);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create Server
|
||||
*
|
||||
* @Post("/servers")
|
||||
* @Versions({"v1"})
|
||||
* @Parameters({
|
||||
* @Parameter("page", type="integer", description="The page of results to view.", default=1)
|
||||
* })
|
||||
* @Response(201)
|
||||
*/
|
||||
public function postServer(Request $request)
|
||||
{
|
||||
try {
|
||||
$server = new ServerRepository;
|
||||
$new = $server->create($request->all());
|
||||
return $this->response->created(route('api.servers.view', [
|
||||
'id' => $new
|
||||
]));
|
||||
} catch (DisplayValidationException $ex) {
|
||||
throw new ResourceException('A validation error occured.', json_decode($ex->getMessage(), true));
|
||||
} catch (DisplayException $ex) {
|
||||
throw new ResourceException($ex->getMessage());
|
||||
} catch (\Exception $e) {
|
||||
throw new BadRequestHttpException('There was an error while attempting to add this server to the system.');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* List Specific Server
|
||||
*
|
||||
* Lists specific fields about a server or all fields pertaining to that server.
|
||||
*
|
||||
* @Get("/servers/{id}/{fields}")
|
||||
* @Get("/servers/{id}{?fields}")
|
||||
* @Versions({"v1"})
|
||||
* @Parameters({
|
||||
* @Parameter("id", type="integer", required=true, description="The ID of the server to get information on."),
|
||||
|
@ -81,4 +108,72 @@ class ServerController extends BaseController
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Suspend Server
|
||||
*
|
||||
* @Post("/servers/{id}/suspend")
|
||||
* @Versions({"v1"})
|
||||
* @Parameters({
|
||||
* @Parameter("id", type="integer", required=true, description="The ID of the server."),
|
||||
* })
|
||||
* @Response(204)
|
||||
*/
|
||||
public function postServerSuspend(Request $request, $id)
|
||||
{
|
||||
try {
|
||||
$server = new ServerRepository;
|
||||
$server->suspend($id);
|
||||
} catch (DisplayException $ex) {
|
||||
throw new ResourceException($ex->getMessage());
|
||||
} catch (\Exception $ex) {
|
||||
throw new ServiceUnavailableHttpException('An error occured while attempting to suspend this server instance.');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Unsuspend Server
|
||||
*
|
||||
* @Post("/servers/{id}/unsuspend")
|
||||
* @Versions({"v1"})
|
||||
* @Parameters({
|
||||
* @Parameter("id", type="integer", required=true, description="The ID of the server."),
|
||||
* })
|
||||
* @Response(204)
|
||||
*/
|
||||
public function postServerUnsuspend(Request $request, $id)
|
||||
{
|
||||
try {
|
||||
$server = new ServerRepository;
|
||||
$server->unsuspend($id);
|
||||
} catch (DisplayException $ex) {
|
||||
throw new ResourceException($ex->getMessage());
|
||||
} catch (\Exception $ex) {
|
||||
throw new ServiceUnavailableHttpException('An error occured while attempting to unsuspend this server instance.');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete Server
|
||||
*
|
||||
* @Delete("/servers/{id}/{force}")
|
||||
* @Versions({"v1"})
|
||||
* @Parameters({
|
||||
* @Parameter("id", type="integer", required=true, description="The ID of the server."),
|
||||
* @Parameter("force", type="string", required=false, description="Use 'force' if the server should be removed regardless of daemon response."),
|
||||
* })
|
||||
* @Response(204)
|
||||
*/
|
||||
public function deleteServer(Request $request, $id, $force = null)
|
||||
{
|
||||
try {
|
||||
$server = new ServerRepository;
|
||||
$server->deleteServer($id, $force);
|
||||
return $this->response->noContent();
|
||||
} catch (DisplayException $ex) {
|
||||
throw new ResourceException($ex->getMessage());
|
||||
} catch(\Exception $e) {
|
||||
throw new ServiceUnavailableHttpException('An error occured while attempting to delete this server.');
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
47
app/Http/Controllers/API/ServiceController.php
Normal file
47
app/Http/Controllers/API/ServiceController.php
Normal file
|
@ -0,0 +1,47 @@
|
|||
<?php
|
||||
|
||||
namespace Pterodactyl\Http\Controllers\API;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
use Pterodactyl\Models;
|
||||
use Pterodactyl\Transformers\ServiceTransformer;
|
||||
|
||||
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
|
||||
|
||||
/**
|
||||
* @Resource("Services")
|
||||
*/
|
||||
class ServiceController extends BaseController
|
||||
{
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
public function getServices(Request $request)
|
||||
{
|
||||
return Models\Service::all();
|
||||
}
|
||||
|
||||
public function getService(Request $request, $id)
|
||||
{
|
||||
$service = Models\Service::find($id);
|
||||
if (!$service) {
|
||||
throw new NotFoundHttpException('No service by that ID was found.');
|
||||
}
|
||||
|
||||
$options = Models\ServiceOptions::select('id', 'name', 'description', 'tag', 'docker_image')->where('parent_service', $service->id)->get();
|
||||
foreach($options as &$opt) {
|
||||
$opt->variables = Models\ServiceVariables::where('option_id', $opt->id)->get();
|
||||
}
|
||||
|
||||
return [
|
||||
'service' => $service,
|
||||
'options' => $options
|
||||
];
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -36,7 +36,7 @@ class UserController extends BaseController
|
|||
*/
|
||||
public function getUsers(Request $request)
|
||||
{
|
||||
$users = Models\User::paginate(15);
|
||||
$users = Models\User::paginate(50);
|
||||
return $this->response->paginator($users, new UserTransformer);
|
||||
}
|
||||
|
||||
|
|
|
@ -49,11 +49,31 @@ class APIRoutes
|
|||
'uses' => 'Pterodactyl\Http\Controllers\API\ServerController@getServers'
|
||||
]);
|
||||
|
||||
$api->post('servers', [
|
||||
'as' => 'api.servers.post',
|
||||
'uses' => 'Pterodactyl\Http\Controllers\API\ServerController@postServer'
|
||||
]);
|
||||
|
||||
$api->get('servers/{id}', [
|
||||
'as' => 'api.servers.view',
|
||||
'uses' => 'Pterodactyl\Http\Controllers\API\ServerController@getServer'
|
||||
]);
|
||||
|
||||
$api->post('servers/{id}/suspend', [
|
||||
'as' => 'api.servers.suspend',
|
||||
'uses' => 'Pterodactyl\Http\Controllers\API\ServerController@postServerSuspend'
|
||||
]);
|
||||
|
||||
$api->post('servers/{id}/unsuspend', [
|
||||
'as' => 'api.servers.unsuspend',
|
||||
'uses' => 'Pterodactyl\Http\Controllers\API\ServerController@postServerUnsuspend'
|
||||
]);
|
||||
|
||||
$api->delete('servers/{id}/{force?}', [
|
||||
'as' => 'api.servers.delete',
|
||||
'uses' => 'Pterodactyl\Http\Controllers\API\ServerController@deleteServer'
|
||||
]);
|
||||
|
||||
/**
|
||||
* Node Routes
|
||||
*/
|
||||
|
@ -73,10 +93,15 @@ class APIRoutes
|
|||
]);
|
||||
|
||||
$api->get('nodes/{id}/allocations', [
|
||||
'as' => 'api.nodes.view',
|
||||
'as' => 'api.nodes.view_allocations',
|
||||
'uses' => 'Pterodactyl\Http\Controllers\API\NodeController@getNodeAllocations'
|
||||
]);
|
||||
|
||||
$api->delete('nodes/{id}', [
|
||||
'as' => 'api.nodes.view',
|
||||
'uses' => 'Pterodactyl\Http\Controllers\API\NodeController@deleteNode'
|
||||
]);
|
||||
|
||||
/**
|
||||
* Location Routes
|
||||
*/
|
||||
|
@ -85,6 +110,19 @@ class APIRoutes
|
|||
'uses' => 'Pterodactyl\Http\Controllers\API\LocationController@getLocations'
|
||||
]);
|
||||
|
||||
/**
|
||||
* Service Routes
|
||||
*/
|
||||
$api->get('services', [
|
||||
'as' => 'api.services',
|
||||
'uses' => 'Pterodactyl\Http\Controllers\API\ServiceController@getServices'
|
||||
]);
|
||||
|
||||
$api->get('services/{id}', [
|
||||
'as' => 'api.services.view',
|
||||
'uses' => 'Pterodactyl\Http\Controllers\API\ServiceController@getService'
|
||||
]);
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
@ -183,4 +183,10 @@ class NodeRepository {
|
|||
}
|
||||
}
|
||||
|
||||
public function delete($id)
|
||||
{
|
||||
// @TODO: add logic;
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -685,4 +685,28 @@ class ServerRepository
|
|||
return $server->save();
|
||||
}
|
||||
|
||||
/**
|
||||
* Suspends a server instance making it unable to be booted or used by a user.
|
||||
* @param integer $id
|
||||
* @return boolean
|
||||
*/
|
||||
public function suspend($id)
|
||||
{
|
||||
// @TODO: Implement logic; not doing it now since that is outside of the
|
||||
// scope of this API brance.
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Unsuspends a server instance.
|
||||
* @param integer $id
|
||||
* @return boolean
|
||||
*/
|
||||
public function unsuspend($id)
|
||||
{
|
||||
// @TODO: Implement logic; not doing it now since that is outside of the
|
||||
// scope of this API brance.
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue