diff --git a/app/Http/Controllers/API/Admin/NodeController.php b/app/Http/Controllers/API/Admin/NodeController.php new file mode 100644 index 000000000..256f12771 --- /dev/null +++ b/app/Http/Controllers/API/Admin/NodeController.php @@ -0,0 +1,75 @@ +. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +namespace Pterodactyl\Http\Controllers\API\Admin; + +use Fractal; +use Illuminate\Http\Request; +use Pterodactyl\Models\Node; +use Pterodactyl\Http\Controllers\Controller; +use Pterodactyl\Transformers\Admin\NodeTransformer; + +class NodeController extends Controller +{ + /** + * Controller to handle returning all nodes on the system. + * + * @param \Illuminate\Http\Request $request + * @return array + */ + public function index(Request $request) + { + $this->authorize('node-list', $request->apiKey()); + + $fractal = Fractal::create()->collection(Node::all()); + if ($request->input('include')) { + $fractal->parseIncludes(explode(',', $request->input('include'))); + } + + return $fractal->transformWith(new NodeTransformer($request)) + ->withResourceName('node') + ->toArray(); + } + + /** + * Display information about a single node on the system. + * + * @param \Illuminate\Http\Request $request + * @param int $id + * @return array + */ + public function view(Request $request, $id) + { + $this->authorize('node-view', $request->apiKey()); + + $fractal = Fractal::create()->item(Node::findOrFail($id)); + if ($request->input('include')) { + $fractal->parseIncludes(explode(',', $request->input('include'))); + } + + return $fractal->transformWith(new NodeTransformer($request)) + ->withResourceName('node') + ->toArray(); + } +} diff --git a/app/Transformers/Admin/NodeTransformer.php b/app/Transformers/Admin/NodeTransformer.php index 7f93410c8..5f55e425f 100644 --- a/app/Transformers/Admin/NodeTransformer.php +++ b/app/Transformers/Admin/NodeTransformer.php @@ -80,7 +80,7 @@ class NodeTransformer extends TransformerAbstract */ public function includeAllocations(Node $node) { - if ($this->request && ! $this->request->apiKeyHasPermission('view-node')) { + if ($this->request && ! $this->request->apiKeyHasPermission('node-view')) { return; } @@ -94,7 +94,7 @@ class NodeTransformer extends TransformerAbstract */ public function includeLocation(Node $node) { - if ($this->request && ! $this->request->apiKeyHasPermission('view-node')) { + if ($this->request && ! $this->request->apiKeyHasPermission('node-view')) { return; } @@ -108,7 +108,7 @@ class NodeTransformer extends TransformerAbstract */ public function includeServers(Node $node) { - if ($this->request && ! $this->request->apiKeyHasPermission('list-servers')) { + if ($this->request && ! $this->request->apiKeyHasPermission('server-list')) { return; } diff --git a/routes/api-admin.php b/routes/api-admin.php index 9bcfa7480..ae7de6f09 100644 --- a/routes/api-admin.php +++ b/routes/api-admin.php @@ -62,3 +62,16 @@ Route::group(['prefix' => '/servers'], function () { Route::group(['prefix' => '/locations'], function () { Route::get('/', 'LocationController@index'); }); + +/* +|-------------------------------------------------------------------------- +| Node Controller Routes +|-------------------------------------------------------------------------- +| +| Endpoint: /api/admin/nodes +| +*/ +Route::group(['prefix' => '/nodes'], function () { + Route::get('/', 'NodeController@index'); + Route::get('/{id}', 'NodeController@view'); +});