mirror of
https://github.com/pelican-dev/panel.git
synced 2026-05-04 18:00:48 +03:00
Add back autoDeploy
This commit is contained in:
32
app/Http/Controllers/Admin/NodeAutoDeployController.php
Normal file
32
app/Http/Controllers/Admin/NodeAutoDeployController.php
Normal file
@@ -0,0 +1,32 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Admin;
|
||||
|
||||
use App\Models\Node;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Services\Nodes\NodeAutoDeployService;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
|
||||
class NodeAutoDeployController extends Controller
|
||||
{
|
||||
/**
|
||||
* NodeAutoDeployController constructor.
|
||||
*/
|
||||
public function __construct(
|
||||
private readonly NodeAutoDeployService $nodeAutoDeployService
|
||||
) {
|
||||
}
|
||||
|
||||
/**
|
||||
* Handles the API request and returns the deployment command.
|
||||
*
|
||||
* @throws \App\Exceptions\Model\DataValidationException
|
||||
*/
|
||||
public function __invoke(Request $request, Node $node): JsonResponse
|
||||
{
|
||||
$command = $this->nodeAutoDeployService->handle($request, $node);
|
||||
|
||||
return new JsonResponse(['command' => $command]);
|
||||
}
|
||||
}
|
||||
58
app/Services/Nodes/NodeAutoDeployService.php
Normal file
58
app/Services/Nodes/NodeAutoDeployService.php
Normal file
@@ -0,0 +1,58 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\Nodes;
|
||||
|
||||
use App\Models\ApiKey;
|
||||
use App\Models\Node;
|
||||
use App\Services\Api\KeyCreationService;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class NodeAutoDeployService
|
||||
{
|
||||
/**
|
||||
* NodeAutoDeployService constructor.
|
||||
*/
|
||||
public function __construct(
|
||||
private readonly KeyCreationService $keyCreationService
|
||||
) {
|
||||
}
|
||||
|
||||
/**
|
||||
* Generates a new API key for the logged-in user with only permission to read
|
||||
* nodes, and returns that as the deployment key for a node.
|
||||
*
|
||||
* @throws \App\Exceptions\Model\DataValidationException
|
||||
*/
|
||||
public function handle(Request $request, Node $node, ?bool $docker = false): ?string
|
||||
{
|
||||
/** @var ApiKey|null $key */
|
||||
$key = ApiKey::query()
|
||||
->where('key_type', ApiKey::TYPE_APPLICATION)
|
||||
->where('r_nodes', true)
|
||||
->first();
|
||||
|
||||
// We couldn't find a key that exists for this user with only permission for
|
||||
// reading nodes. Go ahead and create it now.
|
||||
if (!$key) {
|
||||
$key = $this->keyCreationService->setKeyType(ApiKey::TYPE_APPLICATION)->handle([
|
||||
'memo' => 'Automatically generated node deployment key.',
|
||||
'user_id' => $request->user()->id,
|
||||
], ['r_nodes' => true]);
|
||||
}
|
||||
|
||||
$token = $key->identifier . $key->token;
|
||||
|
||||
if (!$token) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return sprintf(
|
||||
'%s wings configure --panel-url %s --token %s --node %d%s',
|
||||
$docker ? 'docker compose exec -it' : 'sudo',
|
||||
config('app.url'),
|
||||
$token,
|
||||
$node->id,
|
||||
$request->isSecure() ? '' : ' --allow-insecure'
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user