mirror of
https://github.com/MrUnknownDE/panel.git
synced 2026-04-10 18:33:46 +02:00
Node and user API routes implemented.
More attempts at the logic for API permissions, most likely will need continued tweaking in the future, but base is there.
This commit is contained in:
@@ -28,7 +28,10 @@ use Fractal;
|
||||
use Illuminate\Http\Request;
|
||||
use Pterodactyl\Models\Node;
|
||||
use Pterodactyl\Http\Controllers\Controller;
|
||||
use Pterodactyl\Exceptions\DisplayException;
|
||||
use Pterodactyl\Repositories\NodeRepository;
|
||||
use Pterodactyl\Transformers\Admin\NodeTransformer;
|
||||
use Pterodactyl\Exceptions\DisplayValidationException;
|
||||
|
||||
class NodeController extends Controller
|
||||
{
|
||||
@@ -72,4 +75,93 @@ class NodeController extends Controller
|
||||
->withResourceName('node')
|
||||
->toArray();
|
||||
}
|
||||
|
||||
/**
|
||||
* Display information about a single node on the system.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @param int $id
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function viewConfig(Request $request, $id)
|
||||
{
|
||||
$this->authorize('node-view-config', $request->apiKey());
|
||||
|
||||
$node = Node::findOrFail($id);
|
||||
|
||||
return response()->json(json_decode($node->getConfigurationAsJson()));
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a new node on the system.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return \Illuminate\Http\JsonResponse|array
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
$this->authorize('node-create', $request->apiKey());
|
||||
|
||||
$repo = new NodeRepository;
|
||||
try {
|
||||
$node = $repo->create(array_merge(
|
||||
$request->only([
|
||||
'public', 'disk_overallocate', 'memory_overallocate',
|
||||
]),
|
||||
$request->intersect([
|
||||
'name', 'location_id', 'fqdn',
|
||||
'scheme', 'memory', 'disk',
|
||||
'daemonBase', 'daemonSFTP', 'daemonListen',
|
||||
])
|
||||
));
|
||||
|
||||
$fractal = Fractal::create()->item($node)->transformWith(new NodeTransformer($request));
|
||||
if ($request->input('include')) {
|
||||
$fractal->parseIncludes(explode(',', $request->input('include')));
|
||||
}
|
||||
|
||||
return $fractal->withResourceName('node')->toArray();
|
||||
} catch (DisplayValidationException $ex) {
|
||||
return response()->json([
|
||||
'error' => json_decode($ex->getMessage()),
|
||||
], 400);
|
||||
} catch (DisplayException $ex) {
|
||||
return response()->json([
|
||||
'error' => $ex->getMessage(),
|
||||
], 400);
|
||||
} catch (\Exception $ex) {
|
||||
Log::error($ex);
|
||||
return response()->json([
|
||||
'error' => 'An unhandled exception occured while attemping to create this node. Please try again.',
|
||||
], 500);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete a node from the system.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @param int $id
|
||||
* @return \Illuminate\Http\Response|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function delete(Request $request, $id)
|
||||
{
|
||||
$this->authorize('node-delete', $request->apiKey());
|
||||
|
||||
$repo = new NodeRepository;
|
||||
try {
|
||||
$repo->delete($id);
|
||||
|
||||
return response('', 204);
|
||||
} catch (DisplayException $ex) {
|
||||
return response()->json([
|
||||
'error' => $ex->getMessage(),
|
||||
], 400);
|
||||
} catch (\Exception $ex) {
|
||||
Log::error($ex);
|
||||
return response()->json([
|
||||
'error' => 'An unhandled exception occured while attemping to delete this node. Please try again.',
|
||||
], 500);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user