179 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			179 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| use App\Enums\BuildPackTypes;
 | |
| use App\Enums\RedirectTypes;
 | |
| use Illuminate\Database\Eloquent\Collection;
 | |
| use Illuminate\Http\Request;
 | |
| use Illuminate\Validation\Rule;
 | |
| 
 | |
| function getTeamIdFromToken()
 | |
| {
 | |
|     $token = auth()->user()->currentAccessToken();
 | |
| 
 | |
|     return data_get($token, 'team_id');
 | |
| }
 | |
| function invalidTokenResponse()
 | |
| {
 | |
|     return response()->json(['message' => 'Invalid token.', 'docs' => 'https://coolify.io/docs/api-reference/authorization'], 400);
 | |
| }
 | |
| 
 | |
| function serializeApiResponse($data)
 | |
| {
 | |
|     if ($data instanceof Collection) {
 | |
|         $data = $data->map(function ($d) {
 | |
|             $d = collect($d)->sortKeys();
 | |
|             $created_at = data_get($d, 'created_at');
 | |
|             $updated_at = data_get($d, 'updated_at');
 | |
|             if ($created_at) {
 | |
|                 unset($d['created_at']);
 | |
|                 $d['created_at'] = $created_at;
 | |
| 
 | |
|             }
 | |
|             if ($updated_at) {
 | |
|                 unset($d['updated_at']);
 | |
|                 $d['updated_at'] = $updated_at;
 | |
|             }
 | |
|             if (data_get($d, 'name')) {
 | |
|                 $d = $d->prepend($d['name'], 'name');
 | |
|             }
 | |
|             if (data_get($d, 'description')) {
 | |
|                 $d = $d->prepend($d['description'], 'description');
 | |
|             }
 | |
|             if (data_get($d, 'uuid')) {
 | |
|                 $d = $d->prepend($d['uuid'], 'uuid');
 | |
|             }
 | |
| 
 | |
|             if (! is_null(data_get($d, 'id'))) {
 | |
|                 $d = $d->prepend($d['id'], 'id');
 | |
|             }
 | |
| 
 | |
|             return $d;
 | |
|         });
 | |
| 
 | |
|         return $data;
 | |
|     } else {
 | |
|         $d = collect($data)->sortKeys();
 | |
|         $created_at = data_get($d, 'created_at');
 | |
|         $updated_at = data_get($d, 'updated_at');
 | |
|         if ($created_at) {
 | |
|             unset($d['created_at']);
 | |
|             $d['created_at'] = $created_at;
 | |
| 
 | |
|         }
 | |
|         if ($updated_at) {
 | |
|             unset($d['updated_at']);
 | |
|             $d['updated_at'] = $updated_at;
 | |
|         }
 | |
|         if (data_get($d, 'name')) {
 | |
|             $d = $d->prepend($d['name'], 'name');
 | |
|         }
 | |
|         if (data_get($d, 'description')) {
 | |
|             $d = $d->prepend($d['description'], 'description');
 | |
|         }
 | |
|         if (data_get($d, 'uuid')) {
 | |
|             $d = $d->prepend($d['uuid'], 'uuid');
 | |
|         }
 | |
| 
 | |
|         if (! is_null(data_get($d, 'id'))) {
 | |
|             $d = $d->prepend($d['id'], 'id');
 | |
|         }
 | |
| 
 | |
|         return $d;
 | |
|     }
 | |
| }
 | |
| 
 | |
| function sharedDataApplications()
 | |
| {
 | |
|     return [
 | |
|         'git_repository' => 'string',
 | |
|         'git_branch' => 'string',
 | |
|         'build_pack' => Rule::enum(BuildPackTypes::class),
 | |
|         'is_static' => 'boolean',
 | |
|         'domains' => 'string',
 | |
|         'redirect' => Rule::enum(RedirectTypes::class),
 | |
|         'git_commit_sha' => 'string',
 | |
|         'docker_registry_image_name' => 'string|nullable',
 | |
|         'docker_registry_image_tag' => 'string|nullable',
 | |
|         'install_command' => 'string|nullable',
 | |
|         'build_command' => 'string|nullable',
 | |
|         'start_command' => 'string|nullable',
 | |
|         'ports_exposes' => 'string|regex:/^(\d+)(,\d+)*$/',
 | |
|         'ports_mappings' => 'string|regex:/^(\d+:\d+)(,\d+:\d+)*$/|nullable',
 | |
|         'base_directory' => 'string|nullable',
 | |
|         'publish_directory' => 'string|nullable',
 | |
|         'health_check_enabled' => 'boolean',
 | |
|         'health_check_path' => 'string',
 | |
|         'health_check_port' => 'string|nullable',
 | |
|         'health_check_host' => 'string',
 | |
|         'health_check_method' => 'string',
 | |
|         'health_check_return_code' => 'numeric',
 | |
|         'health_check_scheme' => 'string',
 | |
|         'health_check_response_text' => 'string|nullable',
 | |
|         'health_check_interval' => 'numeric',
 | |
|         'health_check_timeout' => 'numeric',
 | |
|         'health_check_retries' => 'numeric',
 | |
|         'health_check_start_period' => 'numeric',
 | |
|         'limits_memory' => 'string',
 | |
|         'limits_memory_swap' => 'string',
 | |
|         'limits_memory_swappiness' => 'numeric',
 | |
|         'limits_memory_reservation' => 'string',
 | |
|         'limits_cpus' => 'string',
 | |
|         'limits_cpuset' => 'string|nullable',
 | |
|         'limits_cpu_shares' => 'numeric',
 | |
|         'custom_labels' => 'string|nullable',
 | |
|         'custom_docker_run_options' => 'string|nullable',
 | |
|         'post_deployment_command' => 'string|nullable',
 | |
|         'post_deployment_command_container' => 'string',
 | |
|         'pre_deployment_command' => 'string|nullable',
 | |
|         'pre_deployment_command_container' => 'string',
 | |
|         'manual_webhook_secret_github' => 'string|nullable',
 | |
|         'manual_webhook_secret_gitlab' => 'string|nullable',
 | |
|         'manual_webhook_secret_bitbucket' => 'string|nullable',
 | |
|         'manual_webhook_secret_gitea' => 'string|nullable',
 | |
|         'docker_compose_location' => 'string',
 | |
|         'docker_compose' => 'string|nullable',
 | |
|         'docker_compose_raw' => 'string|nullable',
 | |
|         'docker_compose_domains' => 'array|nullable',
 | |
|         'docker_compose_custom_start_command' => 'string|nullable',
 | |
|         'docker_compose_custom_build_command' => 'string|nullable',
 | |
|     ];
 | |
| }
 | |
| 
 | |
| function validateIncomingRequest(Request $request)
 | |
| {
 | |
|     // check if request is json
 | |
|     if (! $request->isJson()) {
 | |
|         return response()->json([
 | |
|             'message' => 'Invalid request.',
 | |
|             'error' => 'Content-Type must be application/json.',
 | |
|         ], 400);
 | |
|     }
 | |
|     // check if request is valid json
 | |
|     if (! json_decode($request->getContent())) {
 | |
|         return response()->json([
 | |
|             'message' => 'Invalid request.',
 | |
|             'error' => 'Invalid JSON.',
 | |
|         ], 400);
 | |
|     }
 | |
|     // check if valid json is empty
 | |
|     if (empty($request->json()->all())) {
 | |
|         return response()->json([
 | |
|             'message' => 'Invalid request.',
 | |
|             'error' => 'Empty JSON.',
 | |
|         ], 400);
 | |
|     }
 | |
| }
 | |
| 
 | |
| function removeUnnecessaryFieldsFromRequest(Request $request)
 | |
| {
 | |
|     $request->offsetUnset('project_uuid');
 | |
|     $request->offsetUnset('environment_name');
 | |
|     $request->offsetUnset('destination_uuid');
 | |
|     $request->offsetUnset('server_uuid');
 | |
|     $request->offsetUnset('type');
 | |
|     $request->offsetUnset('domains');
 | |
|     $request->offsetUnset('instant_deploy');
 | |
|     $request->offsetUnset('github_app_uuid');
 | |
|     $request->offsetUnset('private_key_uuid');
 | |
| }
 | 
