diff --git a/app/Actions/Docker/ListServerDockerImages.php b/app/Actions/Docker/ListServerDockerImages.php new file mode 100644 index 000000000..eaa53871b --- /dev/null +++ b/app/Actions/Docker/ListServerDockerImages.php @@ -0,0 +1,37 @@ +filter() + ->map(function ($line) { + $data = json_decode($line, true); + if (!$data) return null; + + return [ + 'tag' => $data['Tag'] ?? '', + 'id' => $data['ID'] ?? '', + 'created_at' => $data['CreatedAt'] ?? '', + 'size' => $data['Size'] ?? '', + 'name' => $data['Repository'] ?? '', + ]; + }) + ->filter() + ->values() + ->toArray(); + } +} diff --git a/app/Http/Controllers/Api/DockerController.php b/app/Http/Controllers/Api/DockerController.php new file mode 100644 index 000000000..b6e9dc4a9 --- /dev/null +++ b/app/Http/Controllers/Api/DockerController.php @@ -0,0 +1,31 @@ +where('uuid', $server_uuid)->first(); + if (!$server) { + return response()->json(['error' => 'server not found'], 404); + } + + $isReachable = (bool) $server->settings->is_reachable; + // If the server is reachable, send the reachable notification if it was sent before + if ($isReachable !== true) { + return response()->json(['error' => 'server is not reachable.'], 403); + } + + return response()->json(ListServerDockerImages::run($server)); + } +} diff --git a/app/Livewire/Project/Application/Rollback.php b/app/Livewire/Project/Application/Rollback.php index 1e58a1458..3a64b3a1e 100644 --- a/app/Livewire/Project/Application/Rollback.php +++ b/app/Livewire/Project/Application/Rollback.php @@ -70,7 +70,7 @@ class Rollback extends Component ]; })->toArray(); } - $showToast && $this->dispatch('success', 'Images loaded.'); + $showToast && $this->dispatch('success', 'ListServerDockerImages loaded.'); return []; } catch (\Throwable $e) { diff --git a/routes/api.php b/routes/api.php index e8425aeb1..0fa488689 100644 --- a/routes/api.php +++ b/routes/api.php @@ -3,6 +3,7 @@ use App\Http\Controllers\Api\ApplicationsController; use App\Http\Controllers\Api\DatabasesController; use App\Http\Controllers\Api\DeployController; +use App\Http\Controllers\Api\DockerController; use App\Http\Controllers\Api\OtherController; use App\Http\Controllers\Api\ProjectController; use App\Http\Controllers\Api\ResourcesController; @@ -128,8 +129,11 @@ Route::group([ Route::match(['get', 'post'], '/services/{uuid}/start', [ServicesController::class, 'action_deploy'])->middleware([IgnoreReadOnlyApiToken::class]); Route::match(['get', 'post'], '/services/{uuid}/restart', [ServicesController::class, 'action_restart'])->middleware([IgnoreReadOnlyApiToken::class]); Route::match(['get', 'post'], '/services/{uuid}/stop', [ServicesController::class, 'action_stop'])->middleware([IgnoreReadOnlyApiToken::class]); + + Route::get('/docker/images/{server_uuid}', [DockerController::class, 'list_server_docker_images']); }); + Route::group([ 'prefix' => 'v1', ], function () {