diff --git a/app/Actions/Docker/GetServerDockerImageDetails.php b/app/Actions/Docker/GetServerDockerImageDetails.php index cded92506..dffb63dd5 100644 --- a/app/Actions/Docker/GetServerDockerImageDetails.php +++ b/app/Actions/Docker/GetServerDockerImageDetails.php @@ -2,15 +2,16 @@ namespace App\Actions\Docker; -use Illuminate\Database\Eloquent\Collection; use Lorisleiva\Actions\Concerns\AsAction; class GetServerDockerImageDetails { use AsAction; - public static function run() + public static function run($server, $imageId) { + $result = instant_remote_process(["docker inspect --format 'json' --type=image {$imageId}"], $server); + return json_decode($result, true); } } diff --git a/app/Http/Controllers/Api/DockerController.php b/app/Http/Controllers/Api/DockerController.php index b6e9dc4a9..615ecbdbb 100644 --- a/app/Http/Controllers/Api/DockerController.php +++ b/app/Http/Controllers/Api/DockerController.php @@ -2,6 +2,7 @@ namespace App\Http\Controllers\Api; +use App\Actions\Docker\GetServerDockerImageDetails; use App\Actions\Docker\ListServerDockerImages; use App\Http\Controllers\Controller; use App\Models\Server; @@ -26,6 +27,24 @@ class DockerController extends Controller return response()->json(['error' => 'server is not reachable.'], 403); } - return response()->json(ListServerDockerImages::run($server)); + return ListServerDockerImages::run($server); + } + + public function get_server_dcoker_image_details($server_uuid, $id) + { + $query = Server::query(); + + $server = $query->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(GetServerDockerImageDetails::run($server, $id)); } } diff --git a/routes/api.php b/routes/api.php index 0fa488689..59687d8a6 100644 --- a/routes/api.php +++ b/routes/api.php @@ -130,10 +130,12 @@ Route::group([ 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::get('/docker/{server_uuid}/images', [DockerController::class, 'list_server_docker_images']); + Route::get('/docker/{server_uuid}/image/{id}', [DockerController::class, 'get_server_dcoker_image_details']); }); + Route::group([ 'prefix' => 'v1', ], function () {