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;
|
namespace Pterodactyl\Http\Controllers\API;
|
||||||
|
|
||||||
|
use DB;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Pterodactyl\Models\Location;
|
use Pterodactyl\Models\Location;
|
||||||
|
|
||||||
|
@ -27,7 +28,16 @@ class LocationController extends BaseController
|
||||||
*/
|
*/
|
||||||
public function getLocations(Request $request)
|
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)
|
public function getNodes(Request $request)
|
||||||
{
|
{
|
||||||
$nodes = Models\Node::paginate(15);
|
$nodes = Models\Node::paginate(50);
|
||||||
return $this->response->paginator($nodes, new NodeTransformer);
|
return $this->response->paginator($nodes, new NodeTransformer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -151,4 +151,27 @@ class NodeController extends BaseController
|
||||||
return $allocations;
|
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)
|
public function getServers(Request $request)
|
||||||
{
|
{
|
||||||
$servers = Models\Server::paginate(15);
|
$servers = Models\Server::paginate(50);
|
||||||
return $this->response->paginator($servers, new ServerTransformer);
|
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
|
* List Specific Server
|
||||||
*
|
*
|
||||||
* Lists specific fields about a server or all fields pertaining to that server.
|
* Lists specific fields about a server or all fields pertaining to that server.
|
||||||
*
|
*
|
||||||
* @Get("/servers/{id}/{fields}")
|
* @Get("/servers/{id}{?fields}")
|
||||||
* @Versions({"v1"})
|
* @Versions({"v1"})
|
||||||
* @Parameters({
|
* @Parameters({
|
||||||
* @Parameter("id", type="integer", required=true, description="The ID of the server to get information on."),
|
* @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)
|
public function getUsers(Request $request)
|
||||||
{
|
{
|
||||||
$users = Models\User::paginate(15);
|
$users = Models\User::paginate(50);
|
||||||
return $this->response->paginator($users, new UserTransformer);
|
return $this->response->paginator($users, new UserTransformer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -49,11 +49,31 @@ class APIRoutes
|
||||||
'uses' => 'Pterodactyl\Http\Controllers\API\ServerController@getServers'
|
'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}', [
|
$api->get('servers/{id}', [
|
||||||
'as' => 'api.servers.view',
|
'as' => 'api.servers.view',
|
||||||
'uses' => 'Pterodactyl\Http\Controllers\API\ServerController@getServer'
|
'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
|
* Node Routes
|
||||||
*/
|
*/
|
||||||
|
@ -73,10 +93,15 @@ class APIRoutes
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$api->get('nodes/{id}/allocations', [
|
$api->get('nodes/{id}/allocations', [
|
||||||
'as' => 'api.nodes.view',
|
'as' => 'api.nodes.view_allocations',
|
||||||
'uses' => 'Pterodactyl\Http\Controllers\API\NodeController@getNodeAllocations'
|
'uses' => 'Pterodactyl\Http\Controllers\API\NodeController@getNodeAllocations'
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
$api->delete('nodes/{id}', [
|
||||||
|
'as' => 'api.nodes.view',
|
||||||
|
'uses' => 'Pterodactyl\Http\Controllers\API\NodeController@deleteNode'
|
||||||
|
]);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Location Routes
|
* Location Routes
|
||||||
*/
|
*/
|
||||||
|
@ -85,6 +110,19 @@ class APIRoutes
|
||||||
'uses' => 'Pterodactyl\Http\Controllers\API\LocationController@getLocations'
|
'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();
|
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