From cee9dfcf52d8af3b08ca1bc1bc92c4c59370f5f4 Mon Sep 17 00:00:00 2001 From: Andras Bacsai <5845193+andrasbacsai@users.noreply.github.com> Date: Mon, 19 May 2025 13:30:31 +0200 Subject: [PATCH] fix(api): enhance validation for docker_compose_raw in ApplicationsController - Add checks to ensure docker_compose_raw is provided and correctly base64 encoded. - Implement detailed error responses for validation failures to improve user feedback. --- .../Api/ApplicationsController.php | 29 ++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/app/Http/Controllers/Api/ApplicationsController.php b/app/Http/Controllers/Api/ApplicationsController.php index 7818c3df2..59e2692ba 100644 --- a/app/Http/Controllers/Api/ApplicationsController.php +++ b/app/Http/Controllers/Api/ApplicationsController.php @@ -1122,7 +1122,34 @@ class ApplicationsController extends Controller $dockerComposeDomainsJson = collect(); if ($request->has('docker_compose_domains')) { - $yaml = Yaml::parse($application->docker_compose_raw); + if (! $request->has('docker_compose_raw')) { + return response()->json([ + 'message' => 'Validation failed.', + 'errors' => [ + 'docker_compose_raw' => 'The base64 encoded docker_compose_raw is required.', + ], + ], 422); + } + + if (! isBase64Encoded($request->docker_compose_raw)) { + return response()->json([ + 'message' => 'Validation failed.', + 'errors' => [ + 'docker_compose_raw' => 'The docker_compose_raw should be base64 encoded.', + ], + ], 422); + } + $dockerComposeRaw = base64_decode($request->docker_compose_raw); + if (mb_detect_encoding($dockerComposeRaw, 'ASCII', true) === false) { + return response()->json([ + 'message' => 'Validation failed.', + 'errors' => [ + 'docker_compose_raw' => 'The docker_compose_raw should be base64 encoded.', + ], + ], 422); + } + $dockerComposeRaw = base64_decode($request->docker_compose_raw); + $yaml = Yaml::parse($dockerComposeRaw); $services = data_get($yaml, 'services'); $dockerComposeDomains = collect($request->docker_compose_domains); if ($dockerComposeDomains->count() > 0) {