Skip to content

Commit 2017e64

Browse files
committed
Add client API
1 parent 4e12c28 commit 2017e64

File tree

3 files changed

+89
-1
lines changed

3 files changed

+89
-1
lines changed
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
<?php
2+
3+
namespace Pterodactyl\Http\Controllers\Api\Client\Servers;
4+
5+
use Illuminate\Http\Response;
6+
use Pterodactyl\Models\Server;
7+
use Pterodactyl\Services\DaemonKeys\DaemonKeyProviderService;
8+
use Pterodactyl\Http\Controllers\Api\Client\ClientApiController;
9+
use Pterodactyl\Http\Requests\Api\Client\Servers\SendPowerRequest;
10+
use Pterodactyl\Contracts\Repository\Daemon\PowerRepositoryInterface;
11+
12+
class PowerController extends ClientApiController
13+
{
14+
/**
15+
* @var \Pterodactyl\Services\DaemonKeys\DaemonKeyProviderService
16+
*/
17+
private $keyProviderService;
18+
19+
/**
20+
* @var \Pterodactyl\Contracts\Repository\Daemon\PowerRepositoryInterface
21+
*/
22+
private $repository;
23+
24+
/**
25+
* PowerController constructor.
26+
*
27+
* @param \Pterodactyl\Services\DaemonKeys\DaemonKeyProviderService $keyProviderService
28+
* @param \Pterodactyl\Contracts\Repository\Daemon\PowerRepositoryInterface $repository
29+
*/
30+
public function __construct(DaemonKeyProviderService $keyProviderService, PowerRepositoryInterface $repository)
31+
{
32+
parent::__construct();
33+
34+
$this->keyProviderService = $keyProviderService;
35+
$this->repository = $repository;
36+
}
37+
38+
/**
39+
* Send a power action to a server.
40+
*
41+
* @param \Pterodactyl\Http\Requests\Api\Client\Servers\SendPowerRequest $request
42+
* @return \Illuminate\Http\Response
43+
*
44+
* @throws \Pterodactyl\Exceptions\Model\DataValidationException
45+
* @throws \Pterodactyl\Exceptions\Repository\RecordNotFoundException
46+
* @throws \Pterodactyl\Exceptions\Repository\Daemon\InvalidPowerSignalException
47+
*/
48+
public function index(SendPowerRequest $request): Response
49+
{
50+
$server = $request->getModel(Server::class);
51+
$token = $this->keyProviderService->handle($server, $request->user());
52+
53+
$this->repository->setServer($server)->setToken($token)->sendSignal($request->input('signal'));
54+
55+
return $this->returnNoContent();
56+
}
57+
}

app/Http/Requests/Api/Client/Servers/SendCommandRequest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ public function authorize(): bool
2424
public function rules(): array
2525
{
2626
return [
27-
'command' => 'string|min:1',
27+
'command' => 'required|string|min:1',
2828
];
2929
}
3030
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
<?php
2+
3+
namespace Pterodactyl\Http\Requests\Api\Client\Servers;
4+
5+
use Pterodactyl\Models\Server;
6+
use Pterodactyl\Http\Requests\Api\Client\ClientApiRequest;
7+
8+
class SendPowerRequest extends ClientApiRequest
9+
{
10+
/**
11+
* Determine if the user has permission to send a power command to a server.
12+
*
13+
* @return bool
14+
*/
15+
public function authorize(): bool
16+
{
17+
return $this->user()->can('power-' . $this->input('signal', '_undefined'), $this->getModel(Server::class));
18+
}
19+
20+
/**
21+
* Rules to validate this request aganist.
22+
*
23+
* @return array
24+
*/
25+
public function rules(): array
26+
{
27+
return [
28+
'signal' => 'required|string|in:start,stop,restart,kill',
29+
];
30+
}
31+
}

0 commit comments

Comments
 (0)