From 1e7b15ae77f009ef90c2a8d576dd56dbf189079a Mon Sep 17 00:00:00 2001 From: Laurence Date: Wed, 9 Apr 2025 17:52:12 +0100 Subject: [PATCH] enhance: Add missing UUID to openapi spec --- .../Api/ApplicationsController.php | 146 ++++++++++-------- app/Http/Controllers/Api/DeployController.php | 34 ++++ .../Controllers/Api/ProjectController.php | 12 ++ .../Controllers/Api/ServicesController.php | 12 ++ openapi.yaml | 66 ++++++++ 5 files changed, 203 insertions(+), 67 deletions(-) diff --git a/app/Http/Controllers/Api/ApplicationsController.php b/app/Http/Controllers/Api/ApplicationsController.php index 45968b6c6..5d94d7ab8 100644 --- a/app/Http/Controllers/Api/ApplicationsController.php +++ b/app/Http/Controllers/Api/ApplicationsController.php @@ -1610,6 +1610,18 @@ class ApplicationsController extends Controller ['bearerAuth' => []], ], tags: ['Applications'], + parameters: [ + new OA\Parameter( + name: 'uuid', + in: 'path', + description: 'UUID of the application.', + required: true, + schema: new OA\Schema( + type: 'string', + format: 'uuid', + ) + ), + ], requestBody: new OA\RequestBody( description: 'Application updated.', required: true, @@ -3006,73 +3018,73 @@ class ApplicationsController extends Controller // ]); // } - private function validateDataApplications(Request $request, Server $server) - { - $teamId = getTeamIdFromToken(); + private function validateDataApplications(Request $request, Server $server) + { + $teamId = getTeamIdFromToken(); - // Validate ports_mappings - if ($request->has('ports_mappings')) { - $ports = []; - foreach (explode(',', $request->ports_mappings) as $portMapping) { - $port = explode(':', $portMapping); - if (in_array($port[0], $ports)) { - return response()->json([ - 'message' => 'Validation failed.', - 'errors' => [ - 'ports_mappings' => 'The first number before : should be unique between mappings.', - ], - ], 422); - } - $ports[] = $port[0]; - } - } - // Validate custom_labels - if ($request->has('custom_labels')) { - if (! isBase64Encoded($request->custom_labels)) { - return response()->json([ - 'message' => 'Validation failed.', - 'errors' => [ - 'custom_labels' => 'The custom_labels should be base64 encoded.', - ], - ], 422); - } - $customLabels = base64_decode($request->custom_labels); - if (mb_detect_encoding($customLabels, 'ASCII', true) === false) { - return response()->json([ - 'message' => 'Validation failed.', - 'errors' => [ - 'custom_labels' => 'The custom_labels should be base64 encoded.', - ], - ], 422); - } - } - if ($request->has('domains') && $server->isProxyShouldRun()) { - $uuid = $request->uuid; - $fqdn = $request->domains; - $fqdn = str($fqdn)->replaceEnd(',', '')->trim(); - $fqdn = str($fqdn)->replaceStart(',', '')->trim(); - $errors = []; - $fqdn = str($fqdn)->trim()->explode(',')->map(function ($domain) use (&$errors) { - if (filter_var($domain, FILTER_VALIDATE_URL) === false) { - $errors[] = 'Invalid domain: '.$domain; - } + // Validate ports_mappings + if ($request->has('ports_mappings')) { + $ports = []; + foreach (explode(',', $request->ports_mappings) as $portMapping) { + $port = explode(':', $portMapping); + if (in_array($port[0], $ports)) { + return response()->json([ + 'message' => 'Validation failed.', + 'errors' => [ + 'ports_mappings' => 'The first number before : should be unique between mappings.', + ], + ], 422); + } + $ports[] = $port[0]; + } + } + // Validate custom_labels + if ($request->has('custom_labels')) { + if (! isBase64Encoded($request->custom_labels)) { + return response()->json([ + 'message' => 'Validation failed.', + 'errors' => [ + 'custom_labels' => 'The custom_labels should be base64 encoded.', + ], + ], 422); + } + $customLabels = base64_decode($request->custom_labels); + if (mb_detect_encoding($customLabels, 'ASCII', true) === false) { + return response()->json([ + 'message' => 'Validation failed.', + 'errors' => [ + 'custom_labels' => 'The custom_labels should be base64 encoded.', + ], + ], 422); + } + } + if ($request->has('domains') && $server->isProxyShouldRun()) { + $uuid = $request->uuid; + $fqdn = $request->domains; + $fqdn = str($fqdn)->replaceEnd(',', '')->trim(); + $fqdn = str($fqdn)->replaceStart(',', '')->trim(); + $errors = []; + $fqdn = str($fqdn)->trim()->explode(',')->map(function ($domain) use (&$errors) { + if (filter_var($domain, FILTER_VALIDATE_URL) === false) { + $errors[] = 'Invalid domain: '.$domain; + } - return str($domain)->trim()->lower(); - }); - if (count($errors) > 0) { - return response()->json([ - 'message' => 'Validation failed.', - 'errors' => $errors, - ], 422); - } - if (checkIfDomainIsAlreadyUsed($fqdn, $teamId, $uuid)) { - return response()->json([ - 'message' => 'Validation failed.', - 'errors' => [ - 'domains' => 'One of the domain is already used.', - ], - ], 422); - } - } - } + return str($domain)->trim()->lower(); + }); + if (count($errors) > 0) { + return response()->json([ + 'message' => 'Validation failed.', + 'errors' => $errors, + ], 422); + } + if (checkIfDomainIsAlreadyUsed($fqdn, $teamId, $uuid)) { + return response()->json([ + 'message' => 'Validation failed.', + 'errors' => [ + 'domains' => 'One of the domain is already used.', + ], + ], 422); + } + } + } } diff --git a/app/Http/Controllers/Api/DeployController.php b/app/Http/Controllers/Api/DeployController.php index 424c2cc76..6b9f40fca 100644 --- a/app/Http/Controllers/Api/DeployController.php +++ b/app/Http/Controllers/Api/DeployController.php @@ -333,6 +333,40 @@ class DeployController extends Controller ['bearerAuth' => []], ], tags: ['Deployments'], + parameters: [ + new OA\Parameter( + name: 'uuid', + in: 'path', + description: 'UUID of the application.', + required: true, + schema: new OA\Schema( + type: 'string', + format: 'uuid', + ) + ), + new OA\Parameter( + name: 'skip', + in: 'query', + description: 'Number of records to skip.', + required: false, + schema: new OA\Schema( + type: 'integer', + minimum: 0, + default: 0, + ) + ), + new OA\Parameter( + name: 'take', + in: 'query', + description: 'Number of records to take.', + required: false, + schema: new OA\Schema( + type: 'integer', + minimum: 1, + default: 10, + ) + ), + ], responses: [ new OA\Response( response: 200, diff --git a/app/Http/Controllers/Api/ProjectController.php b/app/Http/Controllers/Api/ProjectController.php index b94ce9c67..98637c3e8 100644 --- a/app/Http/Controllers/Api/ProjectController.php +++ b/app/Http/Controllers/Api/ProjectController.php @@ -267,6 +267,18 @@ class ProjectController extends Controller ['bearerAuth' => []], ], tags: ['Projects'], + parameters: [ + new OA\Parameter( + name: 'uuid', + in: 'path', + description: 'UUID of the project.', + required: true, + schema: new OA\Schema( + type: 'string', + format: 'uuid', + ) + ), + ], requestBody: new OA\RequestBody( required: true, description: 'Project updated.', diff --git a/app/Http/Controllers/Api/ServicesController.php b/app/Http/Controllers/Api/ServicesController.php index 027bd5c1c..c3730d83f 100644 --- a/app/Http/Controllers/Api/ServicesController.php +++ b/app/Http/Controllers/Api/ServicesController.php @@ -527,6 +527,18 @@ class ServicesController extends Controller ['bearerAuth' => []], ], tags: ['Services'], + parameters: [ + new OA\Parameter( + name: 'uuid', + in: 'path', + description: 'UUID of the service.', + required: true, + schema: new OA\Schema( + type: 'string', + format: 'uuid', + ) + ), + ], requestBody: new OA\RequestBody( description: 'Service updated.', required: true, diff --git a/openapi.yaml b/openapi.yaml index a9c538218..6cd179c34 100644 --- a/openapi.yaml +++ b/openapi.yaml @@ -1277,6 +1277,15 @@ paths: summary: Update description: 'Update application by UUID.' operationId: update-application-by-uuid + parameters: + - + name: uuid + in: path + description: 'UUID of the application.' + required: true + schema: + type: string + format: uuid requestBody: description: 'Application updated.' required: true @@ -3135,6 +3144,33 @@ paths: summary: 'List application deployments' description: 'List application deployments by using the app uuid' operationId: list-deployments-by-app-uuid + parameters: + - + name: uuid + in: path + description: 'UUID of the application.' + required: true + schema: + type: string + format: uuid + - + name: skip + in: query + description: 'Number of records to skip.' + required: false + schema: + type: integer + default: 0 + minimum: 0 + - + name: take + in: query + description: 'Number of records to take.' + required: false + schema: + type: integer + default: 10 + minimum: 1 responses: '200': description: 'List application deployments by using the app uuid.' @@ -3377,6 +3413,15 @@ paths: summary: Update description: 'Update Project.' operationId: update-project-by-uuid + parameters: + - + name: uuid + in: path + description: 'UUID of the project.' + required: true + schema: + type: string + format: uuid requestBody: description: 'Project updated.' required: true @@ -3630,6 +3675,14 @@ paths: $ref: '#/components/responses/400' '404': description: 'Private Key not found.' + '422': + description: 'Private Key is in use and cannot be deleted.' + content: + application/json: + schema: + properties: + message: { type: string, example: 'Private Key is in use and cannot be deleted.' } + type: object security: - bearerAuth: [] @@ -4145,6 +4198,15 @@ paths: summary: Update description: 'Update service by UUID.' operationId: update-service-by-uuid + parameters: + - + name: uuid + in: path + description: 'UUID of the service.' + required: true + schema: + type: string + format: uuid requestBody: description: 'Service updated.' required: true @@ -4769,6 +4831,10 @@ components: type: string nullable: true description: 'Ports mappings.' + custom_network_aliases: + type: string + nullable: true + description: 'Network aliases for Docker container.' base_directory: type: string description: 'Base directory for all commands.'