From 6197558a38f5afbb74f138be59b52e705c99bf1e Mon Sep 17 00:00:00 2001 From: ShadowArcanist <162910371+ShadowArcanist@users.noreply.github.com> Date: Sat, 28 Mar 2026 21:08:48 +0530 Subject: [PATCH 01/13] fix(validation): add input validation for resource limit fields --- .../Project/Shared/ResourceLimits.php | 44 ++++++++++++++----- 1 file changed, 32 insertions(+), 12 deletions(-) diff --git a/app/Livewire/Project/Shared/ResourceLimits.php b/app/Livewire/Project/Shared/ResourceLimits.php index 0b3840289..8a14dc10c 100644 --- a/app/Livewire/Project/Shared/ResourceLimits.php +++ b/app/Livewire/Project/Shared/ResourceLimits.php @@ -3,6 +3,7 @@ namespace App\Livewire\Project\Shared; use Illuminate\Foundation\Auth\Access\AuthorizesRequests; +use Illuminate\Validation\ValidationException; use Livewire\Component; class ResourceLimits extends Component @@ -16,24 +17,24 @@ class ResourceLimits extends Component public ?string $limitsCpuset = null; - public ?int $limitsCpuShares = null; + public mixed $limitsCpuShares = null; public string $limitsMemory; public string $limitsMemorySwap; - public int $limitsMemorySwappiness; + public mixed $limitsMemorySwappiness = 0; public string $limitsMemoryReservation; protected $rules = [ - 'limitsMemory' => 'required|string', - 'limitsMemorySwap' => 'required|string', + 'limitsMemory' => ['required', 'string', 'regex:/^(0|\d+[bBkKmMgG])$/'], + 'limitsMemorySwap' => ['required', 'string', 'regex:/^(0|\d+[bBkKmMgG])$/'], 'limitsMemorySwappiness' => 'required|integer|min:0|max:100', - 'limitsMemoryReservation' => 'required|string', - 'limitsCpus' => 'nullable', - 'limitsCpuset' => 'nullable', - 'limitsCpuShares' => 'nullable', + 'limitsMemoryReservation' => ['required', 'string', 'regex:/^(0|\d+[bBkKmMgG])$/'], + 'limitsCpus' => ['nullable', 'regex:/^\d*\.?\d+$/'], + 'limitsCpuset' => ['nullable', 'regex:/^\d+([,-]\d+)*$/'], + 'limitsCpuShares' => 'nullable|integer|min:0', ]; protected $validationAttributes = [ @@ -46,6 +47,19 @@ class ResourceLimits extends Component 'limitsCpuShares' => 'cpu shares', ]; + protected $messages = [ + 'limitsMemory.regex' => 'Maximum Memory Limit must be a number followed by a unit (b, k, m, g). Example: 256m, 1g. Use 0 for unlimited.', + 'limitsMemorySwap.regex' => 'Maximum Swap Limit must be a number followed by a unit (b, k, m, g). Example: 256m, 1g. Use 0 for unlimited.', + 'limitsMemoryReservation.regex' => 'Soft Memory Limit must be a number followed by a unit (b, k, m, g). Example: 256m, 1g. Use 0 for unlimited.', + 'limitsCpus.regex' => 'Number of CPUs must be a number (integer or decimal). Example: 0.5, 2.', + 'limitsCpuset.regex' => 'CPU sets must be a comma-separated list of CPU numbers or ranges. Example: 0-2 or 0,1,3.', + 'limitsMemorySwappiness.integer' => 'Swappiness must be a whole number between 0 and 100.', + 'limitsMemorySwappiness.min' => 'Swappiness must be between 0 and 100.', + 'limitsMemorySwappiness.max' => 'Swappiness must be between 0 and 100.', + 'limitsCpuShares.integer' => 'CPU Weight must be a whole number.', + 'limitsCpuShares.min' => 'CPU Weight must be a positive number.', + ]; + /** * Sync data between component properties and model * @@ -57,10 +71,10 @@ private function syncData(bool $toModel = false): void // Sync TO model (before save) $this->resource->limits_cpus = $this->limitsCpus; $this->resource->limits_cpuset = $this->limitsCpuset; - $this->resource->limits_cpu_shares = $this->limitsCpuShares; + $this->resource->limits_cpu_shares = (int) $this->limitsCpuShares; $this->resource->limits_memory = $this->limitsMemory; $this->resource->limits_memory_swap = $this->limitsMemorySwap; - $this->resource->limits_memory_swappiness = $this->limitsMemorySwappiness; + $this->resource->limits_memory_swappiness = (int) $this->limitsMemorySwappiness; $this->resource->limits_memory_reservation = $this->limitsMemoryReservation; } else { // Sync FROM model (on load/refresh) @@ -91,7 +105,7 @@ public function submit() if (! $this->limitsMemorySwap) { $this->limitsMemorySwap = '0'; } - if (is_null($this->limitsMemorySwappiness)) { + if ($this->limitsMemorySwappiness === '' || is_null($this->limitsMemorySwappiness)) { $this->limitsMemorySwappiness = 60; } if (! $this->limitsMemoryReservation) { @@ -103,7 +117,7 @@ public function submit() if ($this->limitsCpuset === '') { $this->limitsCpuset = null; } - if (is_null($this->limitsCpuShares)) { + if ($this->limitsCpuShares === '' || is_null($this->limitsCpuShares)) { $this->limitsCpuShares = 1024; } @@ -112,6 +126,12 @@ public function submit() $this->syncData(true); $this->resource->save(); $this->dispatch('success', 'Resource limits updated.'); + } catch (ValidationException $e) { + foreach ($e->validator->errors()->all() as $message) { + $this->dispatch('error', $message); + } + + return; } catch (\Throwable $e) { return handleError($e, $this); } From 407b6df7440d90f324a578ee0b0ebd10cae1da6a Mon Sep 17 00:00:00 2001 From: ShadowArcanist <162910371+ShadowArcanist@users.noreply.github.com> Date: Sat, 28 Mar 2026 22:30:17 +0530 Subject: [PATCH 02/13] fix(validation): add IP validation for custom DNS servers input --- app/Livewire/Settings/Advanced.php | 4 ++-- app/Rules/ValidDnsServers.php | 35 ++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 2 deletions(-) create mode 100644 app/Rules/ValidDnsServers.php diff --git a/app/Livewire/Settings/Advanced.php b/app/Livewire/Settings/Advanced.php index ad478273f..f4b57ae20 100644 --- a/app/Livewire/Settings/Advanced.php +++ b/app/Livewire/Settings/Advanced.php @@ -3,6 +3,7 @@ namespace App\Livewire\Settings; use App\Models\InstanceSettings; +use App\Rules\ValidDnsServers; use App\Rules\ValidIpOrCidr; use Livewire\Attributes\Validate; use Livewire\Component; @@ -20,7 +21,6 @@ class Advanced extends Component #[Validate('boolean')] public bool $is_dns_validation_enabled; - #[Validate('nullable|string')] public ?string $custom_dns_servers = null; #[Validate('boolean')] @@ -43,7 +43,7 @@ public function rules() 'is_registration_enabled' => 'boolean', 'do_not_track' => 'boolean', 'is_dns_validation_enabled' => 'boolean', - 'custom_dns_servers' => 'nullable|string', + 'custom_dns_servers' => ['nullable', 'string', new ValidDnsServers], 'is_api_enabled' => 'boolean', 'allowed_ips' => ['nullable', 'string', new ValidIpOrCidr], 'is_sponsorship_popup_enabled' => 'boolean', diff --git a/app/Rules/ValidDnsServers.php b/app/Rules/ValidDnsServers.php new file mode 100644 index 000000000..e3bbd048f --- /dev/null +++ b/app/Rules/ValidDnsServers.php @@ -0,0 +1,35 @@ + Date: Sat, 28 Mar 2026 23:23:25 +0530 Subject: [PATCH 03/13] fix(validation): add input validation for port exposes and port mappings fields --- app/Livewire/Project/Application/General.php | 12 ++++++++-- .../Project/Database/Clickhouse/General.php | 6 ++++- .../Project/Database/Dragonfly/General.php | 6 ++++- .../Project/Database/Keydb/General.php | 6 ++++- .../Project/Database/Mariadb/General.php | 6 ++++- .../Project/Database/Mongodb/General.php | 6 ++++- .../Project/Database/Mysql/General.php | 6 ++++- .../Project/Database/Postgresql/General.php | 6 ++++- .../Project/Database/Redis/General.php | 6 ++++- app/Support/ValidationPatterns.php | 24 +++++++++++++++++++ 10 files changed, 74 insertions(+), 10 deletions(-) diff --git a/app/Livewire/Project/Application/General.php b/app/Livewire/Project/Application/General.php index 5c186af70..3e78c1732 100644 --- a/app/Livewire/Project/Application/General.php +++ b/app/Livewire/Project/Application/General.php @@ -153,8 +153,8 @@ protected function rules(): array 'staticImage' => 'required', 'baseDirectory' => array_merge(['required'], array_slice(ValidationPatterns::directoryPathRules(), 1)), 'publishDirectory' => ValidationPatterns::directoryPathRules(), - 'portsExposes' => 'required', - 'portsMappings' => 'nullable', + 'portsExposes' => ['required', 'string', 'regex:/^(\d+)(,\d+)*$/'], + 'portsMappings' => ValidationPatterns::portMappingRules(), 'customNetworkAliases' => 'nullable', 'dockerfile' => 'nullable', 'dockerRegistryImageName' => 'nullable', @@ -209,6 +209,8 @@ protected function messages(): array 'staticImage.required' => 'The Static Image field is required.', 'baseDirectory.required' => 'The Base Directory field is required.', 'portsExposes.required' => 'The Exposed Ports field is required.', + 'portsExposes.regex' => 'Ports exposes must be a comma-separated list of port numbers (e.g. 3000,3001).', + ...ValidationPatterns::portMappingMessages(), 'isStatic.required' => 'The Static setting is required.', 'isStatic.boolean' => 'The Static setting must be true or false.', 'isSpa.required' => 'The SPA setting is required.', @@ -752,6 +754,12 @@ public function submit($showToaster = true) $this->authorize('update', $this->application); $this->resetErrorBag(); + + $this->portsExposes = str($this->portsExposes)->replace(' ', '')->trim()->toString(); + if ($this->portsMappings) { + $this->portsMappings = str($this->portsMappings)->replace(' ', '')->trim()->toString(); + } + $this->validate(); $oldPortsExposes = $this->application->ports_exposes; diff --git a/app/Livewire/Project/Database/Clickhouse/General.php b/app/Livewire/Project/Database/Clickhouse/General.php index 9de75c1c5..0913ca797 100644 --- a/app/Livewire/Project/Database/Clickhouse/General.php +++ b/app/Livewire/Project/Database/Clickhouse/General.php @@ -79,7 +79,7 @@ protected function rules(): array 'clickhouseAdminUser' => 'required|string', 'clickhouseAdminPassword' => 'required|string', 'image' => 'required|string', - 'portsMappings' => 'nullable|string', + 'portsMappings' => ValidationPatterns::portMappingRules(), 'isPublic' => 'nullable|boolean', 'publicPort' => 'nullable|integer', 'publicPortTimeout' => 'nullable|integer|min:1', @@ -94,6 +94,7 @@ protected function messages(): array { return array_merge( ValidationPatterns::combinedMessages(), + ValidationPatterns::portMappingMessages(), [ 'clickhouseAdminUser.required' => 'The Admin User field is required.', 'clickhouseAdminUser.string' => 'The Admin User must be a string.', @@ -207,6 +208,9 @@ public function submit() try { $this->authorize('update', $this->database); + if ($this->portsMappings) { + $this->portsMappings = str($this->portsMappings)->replace(' ', '')->trim()->toString(); + } if (str($this->publicPort)->isEmpty()) { $this->publicPort = null; } diff --git a/app/Livewire/Project/Database/Dragonfly/General.php b/app/Livewire/Project/Database/Dragonfly/General.php index d35e57a9d..23503bd98 100644 --- a/app/Livewire/Project/Database/Dragonfly/General.php +++ b/app/Livewire/Project/Database/Dragonfly/General.php @@ -90,7 +90,7 @@ protected function rules(): array 'description' => ValidationPatterns::descriptionRules(), 'dragonflyPassword' => 'required|string', 'image' => 'required|string', - 'portsMappings' => 'nullable|string', + 'portsMappings' => ValidationPatterns::portMappingRules(), 'isPublic' => 'nullable|boolean', 'publicPort' => 'nullable|integer', 'publicPortTimeout' => 'nullable|integer|min:1', @@ -106,6 +106,7 @@ protected function messages(): array { return array_merge( ValidationPatterns::combinedMessages(), + ValidationPatterns::portMappingMessages(), [ 'dragonflyPassword.required' => 'The Dragonfly Password field is required.', 'dragonflyPassword.string' => 'The Dragonfly Password must be a string.', @@ -217,6 +218,9 @@ public function submit() try { $this->authorize('update', $this->database); + if ($this->portsMappings) { + $this->portsMappings = str($this->portsMappings)->replace(' ', '')->trim()->toString(); + } if (str($this->publicPort)->isEmpty()) { $this->publicPort = null; } diff --git a/app/Livewire/Project/Database/Keydb/General.php b/app/Livewire/Project/Database/Keydb/General.php index adb4ccb5f..ff9dc19ad 100644 --- a/app/Livewire/Project/Database/Keydb/General.php +++ b/app/Livewire/Project/Database/Keydb/General.php @@ -93,7 +93,7 @@ protected function rules(): array 'keydbConf' => 'nullable|string', 'keydbPassword' => 'required|string', 'image' => 'required|string', - 'portsMappings' => 'nullable|string', + 'portsMappings' => ValidationPatterns::portMappingRules(), 'isPublic' => 'nullable|boolean', 'publicPort' => 'nullable|integer', 'publicPortTimeout' => 'nullable|integer|min:1', @@ -111,6 +111,7 @@ protected function messages(): array { return array_merge( ValidationPatterns::combinedMessages(), + ValidationPatterns::portMappingMessages(), [ 'keydbPassword.required' => 'The KeyDB Password field is required.', 'keydbPassword.string' => 'The KeyDB Password must be a string.', @@ -224,6 +225,9 @@ public function submit() try { $this->authorize('manageEnvironment', $this->database); + if ($this->portsMappings) { + $this->portsMappings = str($this->portsMappings)->replace(' ', '')->trim()->toString(); + } if (str($this->publicPort)->isEmpty()) { $this->publicPort = null; } diff --git a/app/Livewire/Project/Database/Mariadb/General.php b/app/Livewire/Project/Database/Mariadb/General.php index 14240c82d..a9ac47b97 100644 --- a/app/Livewire/Project/Database/Mariadb/General.php +++ b/app/Livewire/Project/Database/Mariadb/General.php @@ -78,7 +78,7 @@ protected function rules(): array 'mariadbDatabase' => 'required', 'mariadbConf' => 'nullable', 'image' => 'required', - 'portsMappings' => 'nullable', + 'portsMappings' => ValidationPatterns::portMappingRules(), 'isPublic' => 'nullable|boolean', 'publicPort' => 'nullable|integer', 'publicPortTimeout' => 'nullable|integer|min:1', @@ -92,6 +92,7 @@ protected function messages(): array { return array_merge( ValidationPatterns::combinedMessages(), + ValidationPatterns::portMappingMessages(), [ 'name.required' => 'The Name field is required.', 'mariadbRootPassword.required' => 'The Root Password field is required.', @@ -213,6 +214,9 @@ public function submit() try { $this->authorize('update', $this->database); + if ($this->portsMappings) { + $this->portsMappings = str($this->portsMappings)->replace(' ', '')->trim()->toString(); + } if (str($this->publicPort)->isEmpty()) { $this->publicPort = null; } diff --git a/app/Livewire/Project/Database/Mongodb/General.php b/app/Livewire/Project/Database/Mongodb/General.php index 11419ec71..2b6538edf 100644 --- a/app/Livewire/Project/Database/Mongodb/General.php +++ b/app/Livewire/Project/Database/Mongodb/General.php @@ -77,7 +77,7 @@ protected function rules(): array 'mongoInitdbRootPassword' => 'required', 'mongoInitdbDatabase' => 'required', 'image' => 'required', - 'portsMappings' => 'nullable', + 'portsMappings' => ValidationPatterns::portMappingRules(), 'isPublic' => 'nullable|boolean', 'publicPort' => 'nullable|integer', 'publicPortTimeout' => 'nullable|integer|min:1', @@ -92,6 +92,7 @@ protected function messages(): array { return array_merge( ValidationPatterns::combinedMessages(), + ValidationPatterns::portMappingMessages(), [ 'name.required' => 'The Name field is required.', 'mongoInitdbRootUsername.required' => 'The Root Username field is required.', @@ -213,6 +214,9 @@ public function submit() try { $this->authorize('update', $this->database); + if ($this->portsMappings) { + $this->portsMappings = str($this->portsMappings)->replace(' ', '')->trim()->toString(); + } if (str($this->publicPort)->isEmpty()) { $this->publicPort = null; } diff --git a/app/Livewire/Project/Database/Mysql/General.php b/app/Livewire/Project/Database/Mysql/General.php index 4f0f5eb19..f3c554522 100644 --- a/app/Livewire/Project/Database/Mysql/General.php +++ b/app/Livewire/Project/Database/Mysql/General.php @@ -80,7 +80,7 @@ protected function rules(): array 'mysqlDatabase' => 'required', 'mysqlConf' => 'nullable', 'image' => 'required', - 'portsMappings' => 'nullable', + 'portsMappings' => ValidationPatterns::portMappingRules(), 'isPublic' => 'nullable|boolean', 'publicPort' => 'nullable|integer', 'publicPortTimeout' => 'nullable|integer|min:1', @@ -95,6 +95,7 @@ protected function messages(): array { return array_merge( ValidationPatterns::combinedMessages(), + ValidationPatterns::portMappingMessages(), [ 'name.required' => 'The Name field is required.', 'mysqlRootPassword.required' => 'The Root Password field is required.', @@ -220,6 +221,9 @@ public function submit() try { $this->authorize('update', $this->database); + if ($this->portsMappings) { + $this->portsMappings = str($this->portsMappings)->replace(' ', '')->trim()->toString(); + } if (str($this->publicPort)->isEmpty()) { $this->publicPort = null; } diff --git a/app/Livewire/Project/Database/Postgresql/General.php b/app/Livewire/Project/Database/Postgresql/General.php index 4e044672b..7a4ff057e 100644 --- a/app/Livewire/Project/Database/Postgresql/General.php +++ b/app/Livewire/Project/Database/Postgresql/General.php @@ -92,7 +92,7 @@ protected function rules(): array 'postgresConf' => 'nullable', 'initScripts' => 'nullable', 'image' => 'required', - 'portsMappings' => 'nullable', + 'portsMappings' => ValidationPatterns::portMappingRules(), 'isPublic' => 'nullable|boolean', 'publicPort' => 'nullable|integer', 'publicPortTimeout' => 'nullable|integer|min:1', @@ -107,6 +107,7 @@ protected function messages(): array { return array_merge( ValidationPatterns::combinedMessages(), + ValidationPatterns::portMappingMessages(), [ 'name.required' => 'The Name field is required.', 'postgresUser.required' => 'The Postgres User field is required.', @@ -456,6 +457,9 @@ public function submit() try { $this->authorize('update', $this->database); + if ($this->portsMappings) { + $this->portsMappings = str($this->portsMappings)->replace(' ', '')->trim()->toString(); + } if (str($this->publicPort)->isEmpty()) { $this->publicPort = null; } diff --git a/app/Livewire/Project/Database/Redis/General.php b/app/Livewire/Project/Database/Redis/General.php index ebe2f3ba0..a1a22ab8b 100644 --- a/app/Livewire/Project/Database/Redis/General.php +++ b/app/Livewire/Project/Database/Redis/General.php @@ -73,7 +73,7 @@ protected function rules(): array 'description' => ValidationPatterns::descriptionRules(), 'redisConf' => 'nullable', 'image' => 'required', - 'portsMappings' => 'nullable', + 'portsMappings' => ValidationPatterns::portMappingRules(), 'isPublic' => 'nullable|boolean', 'publicPort' => 'nullable|integer', 'publicPortTimeout' => 'nullable|integer|min:1', @@ -89,6 +89,7 @@ protected function messages(): array { return array_merge( ValidationPatterns::combinedMessages(), + ValidationPatterns::portMappingMessages(), [ 'name.required' => 'The Name field is required.', 'image.required' => 'The Docker Image field is required.', @@ -201,6 +202,9 @@ public function submit() try { $this->authorize('manageEnvironment', $this->database); + if ($this->portsMappings) { + $this->portsMappings = str($this->portsMappings)->replace(' ', '')->trim()->toString(); + } $this->syncData(true); if (version_compare($this->redisVersion, '6.0', '>=')) { diff --git a/app/Support/ValidationPatterns.php b/app/Support/ValidationPatterns.php index 7084b4cc2..5d53076ea 100644 --- a/app/Support/ValidationPatterns.php +++ b/app/Support/ValidationPatterns.php @@ -194,6 +194,12 @@ public static function volumeNameMessages(string $field = 'name'): array ]; } + /** + * Pattern for port mappings (e.g. 3000:3000, 8080:80, 8000-8010:8000-8010) + * Each entry requires host:container format, where each side can be a number or a range (number-number) + */ + public const PORT_MAPPINGS_PATTERN = '/^(\d+(-\d+)?:\d+(-\d+)?)(,\d+(-\d+)?:\d+(-\d+)?)*$/'; + /** * Get validation rules for container name fields */ @@ -202,6 +208,24 @@ public static function containerNameRules(int $maxLength = 255): array return ['string', 'max:'.$maxLength, 'regex:'.self::CONTAINER_NAME_PATTERN]; } + /** + * Get validation rules for port mapping fields + */ + public static function portMappingRules(): array + { + return ['nullable', 'string', 'regex:'.self::PORT_MAPPINGS_PATTERN]; + } + + /** + * Get validation messages for port mapping fields + */ + public static function portMappingMessages(string $field = 'portsMappings'): array + { + return [ + "{$field}.regex" => 'Port mappings must be a comma-separated list of port pairs or ranges (e.g. 3000:3000,8080:80,8000-8010:8000-8010).', + ]; + } + /** * Check if a string is a valid Docker container name. */ From 73258c317e3d79aefb90924d5319ddc54209eebc Mon Sep 17 00:00:00 2001 From: ShadowArcanist <162910371+ShadowArcanist@users.noreply.github.com> Date: Sun, 29 Mar 2026 00:34:32 +0530 Subject: [PATCH 04/13] fix(validation): add URL validation for proxy redirect input --- app/Livewire/Server/Proxy.php | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/app/Livewire/Server/Proxy.php b/app/Livewire/Server/Proxy.php index d5f30fca0..c2d8205ef 100644 --- a/app/Livewire/Server/Proxy.php +++ b/app/Livewire/Server/Proxy.php @@ -6,6 +6,7 @@ use App\Actions\Proxy\SaveProxyConfiguration; use App\Enums\ProxyTypes; use App\Models\Server; +use App\Rules\SafeExternalUrl; use Illuminate\Foundation\Auth\Access\AuthorizesRequests; use Livewire\Component; @@ -41,9 +42,13 @@ public function getListeners() ]; } - protected $rules = [ - 'generateExactLabels' => 'required|boolean', - ]; + protected function rules() + { + return [ + 'generateExactLabels' => 'required|boolean', + 'redirectUrl' => ['nullable', new SafeExternalUrl], + ]; + } public function mount() { @@ -147,6 +152,7 @@ public function submit() { try { $this->authorize('update', $this->server); + $this->validate(); SaveProxyConfiguration::run($this->server, $this->proxySettings); $this->server->proxy->redirect_url = $this->redirectUrl; $this->server->save(); From c52a199120d2d06e2a473305734643f2bd66ead1 Mon Sep 17 00:00:00 2001 From: ShadowArcanist <162910371+ShadowArcanist@users.noreply.github.com> Date: Sun, 29 Mar 2026 01:14:08 +0530 Subject: [PATCH 05/13] fix(validation): add input validation for server advanced settings page --- app/Http/Controllers/Api/ServersController.php | 18 +++++++++++++++++- app/Livewire/Server/Advanced.php | 16 ++++++++-------- .../views/livewire/server/advanced.blade.php | 4 ++++ 3 files changed, 29 insertions(+), 9 deletions(-) diff --git a/app/Http/Controllers/Api/ServersController.php b/app/Http/Controllers/Api/ServersController.php index 2ef95ce8b..930879d80 100644 --- a/app/Http/Controllers/Api/ServersController.php +++ b/app/Http/Controllers/Api/ServersController.php @@ -598,6 +598,11 @@ public function create_server(Request $request) 'is_build_server' => ['type' => 'boolean', 'description' => 'Is build server.'], 'instant_validate' => ['type' => 'boolean', 'description' => 'Instant validate.'], 'proxy_type' => ['type' => 'string', 'enum' => ['traefik', 'caddy', 'none'], 'description' => 'The proxy type.'], + 'concurrent_builds' => ['type' => 'integer', 'description' => 'Number of concurrent builds.'], + 'dynamic_timeout' => ['type' => 'integer', 'description' => 'Deployment timeout in seconds.'], + 'deployment_queue_limit' => ['type' => 'integer', 'description' => 'Maximum number of queued deployments.'], + 'server_disk_usage_notification_threshold' => ['type' => 'integer', 'description' => 'Server disk usage notification threshold (%).'], + 'server_disk_usage_check_frequency' => ['type' => 'string', 'description' => 'Cron expression for disk usage check frequency.'], ], ), ), @@ -634,7 +639,7 @@ public function create_server(Request $request) )] public function update_server(Request $request) { - $allowedFields = ['name', 'description', 'ip', 'port', 'user', 'private_key_uuid', 'is_build_server', 'instant_validate', 'proxy_type']; + $allowedFields = ['name', 'description', 'ip', 'port', 'user', 'private_key_uuid', 'is_build_server', 'instant_validate', 'proxy_type', 'concurrent_builds', 'dynamic_timeout', 'deployment_queue_limit', 'server_disk_usage_notification_threshold', 'server_disk_usage_check_frequency']; $teamId = getTeamIdFromToken(); if (is_null($teamId)) { @@ -655,6 +660,11 @@ public function update_server(Request $request) 'is_build_server' => 'boolean|nullable', 'instant_validate' => 'boolean|nullable', 'proxy_type' => 'string|nullable', + 'concurrent_builds' => 'integer|nullable|min:1', + 'dynamic_timeout' => 'integer|nullable|min:1', + 'deployment_queue_limit' => 'integer|nullable|min:1', + 'server_disk_usage_notification_threshold' => 'integer|nullable|min:1|max:100', + 'server_disk_usage_check_frequency' => 'string|nullable', ]); $extraFields = array_diff(array_keys($request->all()), $allowedFields); @@ -691,6 +701,12 @@ public function update_server(Request $request) 'is_build_server' => $request->is_build_server, ]); } + + $advancedSettings = $request->only(['concurrent_builds', 'dynamic_timeout', 'deployment_queue_limit', 'server_disk_usage_notification_threshold', 'server_disk_usage_check_frequency']); + if (! empty($advancedSettings)) { + $server->settings()->update(array_filter($advancedSettings, fn ($value) => ! is_null($value))); + } + if ($request->instant_validate) { ValidateServer::dispatch($server); } diff --git a/app/Livewire/Server/Advanced.php b/app/Livewire/Server/Advanced.php index dba1b4903..0e1a9a325 100644 --- a/app/Livewire/Server/Advanced.php +++ b/app/Livewire/Server/Advanced.php @@ -15,17 +15,17 @@ class Advanced extends Component #[Validate(['string'])] public string $serverDiskUsageCheckFrequency = '0 23 * * *'; - #[Validate(['integer', 'min:1', 'max:99'])] - public int $serverDiskUsageNotificationThreshold = 50; + #[Validate(['required', 'integer', 'min:1', 'max:99'])] + public ?int $serverDiskUsageNotificationThreshold = 50; - #[Validate(['integer', 'min:1'])] - public int $concurrentBuilds = 1; + #[Validate(['required', 'integer', 'min:1'])] + public ?int $concurrentBuilds = 1; - #[Validate(['integer', 'min:1'])] - public int $dynamicTimeout = 1; + #[Validate(['required', 'integer', 'min:1'])] + public ?int $dynamicTimeout = 1; - #[Validate(['integer', 'min:1'])] - public int $deploymentQueueLimit = 25; + #[Validate(['required', 'integer', 'min:1'])] + public ?int $deploymentQueueLimit = 25; public function mount(string $server_uuid) { diff --git a/resources/views/livewire/server/advanced.blade.php b/resources/views/livewire/server/advanced.blade.php index 33086aea1..f6610c1d5 100644 --- a/resources/views/livewire/server/advanced.blade.php +++ b/resources/views/livewire/server/advanced.blade.php @@ -22,6 +22,7 @@ id="serverDiskUsageCheckFrequency" label="Disk usage check frequency" required helper="Cron expression for disk usage check frequency.
You can use every_minute, hourly, daily, weekly, monthly, yearly.

Default is every night at 11:00 PM." /> @@ -31,12 +32,15 @@

Builds

From 15a98b52c93746e54bd40812f0a9f8c0229a5457 Mon Sep 17 00:00:00 2001 From: ShadowArcanist <162910371+ShadowArcanist@users.noreply.github.com> Date: Sun, 29 Mar 2026 01:24:08 +0530 Subject: [PATCH 06/13] fix(validation): add input validation for server_disk_usage_check_frequency on API --- app/Http/Controllers/Api/ServersController.php | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/app/Http/Controllers/Api/ServersController.php b/app/Http/Controllers/Api/ServersController.php index 930879d80..beba33a8c 100644 --- a/app/Http/Controllers/Api/ServersController.php +++ b/app/Http/Controllers/Api/ServersController.php @@ -702,6 +702,13 @@ public function update_server(Request $request) ]); } + if ($request->has('server_disk_usage_check_frequency') && ! validate_cron_expression($request->server_disk_usage_check_frequency)) { + return response()->json([ + 'message' => 'Validation failed.', + 'errors' => ['server_disk_usage_check_frequency' => ['Invalid Cron / Human expression for Disk Usage Check Frequency.']], + ], 422); + } + $advancedSettings = $request->only(['concurrent_builds', 'dynamic_timeout', 'deployment_queue_limit', 'server_disk_usage_notification_threshold', 'server_disk_usage_check_frequency']); if (! empty($advancedSettings)) { $server->settings()->update(array_filter($advancedSettings, fn ($value) => ! is_null($value))); From 1ebba7da3acccf7e0cb1cf740ec531637895276b Mon Sep 17 00:00:00 2001 From: ShadowArcanist <162910371+ShadowArcanist@users.noreply.github.com> Date: Sun, 29 Mar 2026 01:52:19 +0530 Subject: [PATCH 07/13] fix(validation): add input validation for sentinel configuration --- app/Livewire/Server/Sentinel.php | 6 +++--- resources/views/livewire/server/sentinel.blade.php | 7 ++++--- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/app/Livewire/Server/Sentinel.php b/app/Livewire/Server/Sentinel.php index dff379ae1..a4b35891b 100644 --- a/app/Livewire/Server/Sentinel.php +++ b/app/Livewire/Server/Sentinel.php @@ -25,13 +25,13 @@ class Sentinel extends Component public ?string $sentinelUpdatedAt = null; #[Validate(['required', 'integer', 'min:1'])] - public int $sentinelMetricsRefreshRateSeconds; + public int|string $sentinelMetricsRefreshRateSeconds; #[Validate(['required', 'integer', 'min:1'])] - public int $sentinelMetricsHistoryDays; + public int|string $sentinelMetricsHistoryDays; #[Validate(['required', 'integer', 'min:10'])] - public int $sentinelPushIntervalSeconds; + public int|string $sentinelPushIntervalSeconds; #[Validate(['nullable', 'url'])] public ?string $sentinelCustomUrl = null; diff --git a/resources/views/livewire/server/sentinel.blade.php b/resources/views/livewire/server/sentinel.blade.php index 4016a30e4..5ca535cbc 100644 --- a/resources/views/livewire/server/sentinel.blade.php +++ b/resources/views/livewire/server/sentinel.blade.php @@ -91,13 +91,14 @@
- - -
From 791aa10b3fed851df81192538f2aa15144eb179b Mon Sep 17 00:00:00 2001 From: ShadowArcanist <162910371+ShadowArcanist@users.noreply.github.com> Date: Sun, 29 Mar 2026 02:24:36 +0530 Subject: [PATCH 08/13] fix(validation): use int|string for Livewire numeric properties and remove nullable from API rules --- app/Http/Controllers/Api/ServersController.php | 10 +++++----- app/Livewire/Server/Advanced.php | 8 ++++---- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/app/Http/Controllers/Api/ServersController.php b/app/Http/Controllers/Api/ServersController.php index beba33a8c..c13c6665c 100644 --- a/app/Http/Controllers/Api/ServersController.php +++ b/app/Http/Controllers/Api/ServersController.php @@ -660,11 +660,11 @@ public function update_server(Request $request) 'is_build_server' => 'boolean|nullable', 'instant_validate' => 'boolean|nullable', 'proxy_type' => 'string|nullable', - 'concurrent_builds' => 'integer|nullable|min:1', - 'dynamic_timeout' => 'integer|nullable|min:1', - 'deployment_queue_limit' => 'integer|nullable|min:1', - 'server_disk_usage_notification_threshold' => 'integer|nullable|min:1|max:100', - 'server_disk_usage_check_frequency' => 'string|nullable', + 'concurrent_builds' => 'integer|min:1', + 'dynamic_timeout' => 'integer|min:1', + 'deployment_queue_limit' => 'integer|min:1', + 'server_disk_usage_notification_threshold' => 'integer|min:1|max:100', + 'server_disk_usage_check_frequency' => 'string', ]); $extraFields = array_diff(array_keys($request->all()), $allowedFields); diff --git a/app/Livewire/Server/Advanced.php b/app/Livewire/Server/Advanced.php index 0e1a9a325..b39da5e5a 100644 --- a/app/Livewire/Server/Advanced.php +++ b/app/Livewire/Server/Advanced.php @@ -16,16 +16,16 @@ class Advanced extends Component public string $serverDiskUsageCheckFrequency = '0 23 * * *'; #[Validate(['required', 'integer', 'min:1', 'max:99'])] - public ?int $serverDiskUsageNotificationThreshold = 50; + public int|string $serverDiskUsageNotificationThreshold = 50; #[Validate(['required', 'integer', 'min:1'])] - public ?int $concurrentBuilds = 1; + public int|string $concurrentBuilds = 1; #[Validate(['required', 'integer', 'min:1'])] - public ?int $dynamicTimeout = 1; + public int|string $dynamicTimeout = 1; #[Validate(['required', 'integer', 'min:1'])] - public ?int $deploymentQueueLimit = 25; + public int|string $deploymentQueueLimit = 25; public function mount(string $server_uuid) { From 67f8eb929f5655a71263c99c2c05a27654a8868b Mon Sep 17 00:00:00 2001 From: ShadowArcanist <162910371+ShadowArcanist@users.noreply.github.com> Date: Sun, 29 Mar 2026 02:48:32 +0530 Subject: [PATCH 09/13] fix(validation): add input validation for database backup timeout --- app/Livewire/Project/Database/BackupEdit.php | 2 +- .../project/database/backup-edit.blade.php | 18 +++++++++--------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/app/Livewire/Project/Database/BackupEdit.php b/app/Livewire/Project/Database/BackupEdit.php index 0fff2bd03..a18022882 100644 --- a/app/Livewire/Project/Database/BackupEdit.php +++ b/app/Livewire/Project/Database/BackupEdit.php @@ -76,7 +76,7 @@ class BackupEdit extends Component public bool $dumpAll = false; #[Validate(['required', 'int', 'min:60', 'max:36000'])] - public int $timeout = 3600; + public int|string $timeout = 3600; public function mount() { diff --git a/resources/views/livewire/project/database/backup-edit.blade.php b/resources/views/livewire/project/database/backup-edit.blade.php index bb5dcfc4d..d5c25916a 100644 --- a/resources/views/livewire/project/database/backup-edit.blade.php +++ b/resources/views/livewire/project/database/backup-edit.blade.php @@ -81,10 +81,10 @@ @endif
- + - + helper="The timezone of the server where the backup is scheduled to run (if not set, the instance timezone will be used)" required /> +

Backup Retention Settings

@@ -101,13 +101,13 @@
+ helper="Keeps only the specified number of most recent backups on the server. Set to 0 for unlimited backups." required /> + helper="Automatically removes backups older than the specified number of days. Set to 0 for no time limit." required /> + helper="When total size of all backups in the current backup job exceeds this limit in GB, the oldest backups will be removed. Decimal values are supported (e.g. 0.001 for 1MB). Set to 0 for unlimited storage." required />
@@ -117,13 +117,13 @@
+ helper="Keeps only the specified number of most recent backups on S3 storage. Set to 0 for unlimited backups." required /> + helper="Automatically removes S3 backups older than the specified number of days. Set to 0 for no time limit." required /> + helper="When total size of all backups in the current backup job exceeds this limit in GB, the oldest backups will be removed. Decimal values are supported (e.g. 0.5 for 500MB). Set to 0 for unlimited storage." required />
@endif From 40420e33e3aa138981cbd22982dfcc7eef2d9644 Mon Sep 17 00:00:00 2001 From: ShadowArcanist <162910371+ShadowArcanist@users.noreply.github.com> Date: Sun, 29 Mar 2026 02:53:18 +0530 Subject: [PATCH 10/13] fix(validation): add timeout validation to database backup API endpoints --- app/Http/Controllers/Api/DatabasesController.php | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/app/Http/Controllers/Api/DatabasesController.php b/app/Http/Controllers/Api/DatabasesController.php index 660ed4529..a73bde1ae 100644 --- a/app/Http/Controllers/Api/DatabasesController.php +++ b/app/Http/Controllers/Api/DatabasesController.php @@ -641,6 +641,7 @@ public function update_by_uuid(Request $request) 'database_backup_retention_amount_s3' => ['type' => 'integer', 'description' => 'Number of backups to retain in S3'], 'database_backup_retention_days_s3' => ['type' => 'integer', 'description' => 'Number of days to retain backups in S3'], 'database_backup_retention_max_storage_s3' => ['type' => 'integer', 'description' => 'Max storage (MB) for S3 backups'], + 'timeout' => ['type' => 'integer', 'description' => 'Backup job timeout in seconds (min: 60, max: 36000)', 'default' => 3600], ], ), ) @@ -677,7 +678,7 @@ public function update_by_uuid(Request $request) )] public function create_backup(Request $request) { - $backupConfigFields = ['save_s3', 'enabled', 'dump_all', 'frequency', 'databases_to_backup', 'database_backup_retention_amount_locally', 'database_backup_retention_days_locally', 'database_backup_retention_max_storage_locally', 'database_backup_retention_amount_s3', 'database_backup_retention_days_s3', 'database_backup_retention_max_storage_s3', 's3_storage_uuid']; + $backupConfigFields = ['save_s3', 'enabled', 'dump_all', 'frequency', 'databases_to_backup', 'database_backup_retention_amount_locally', 'database_backup_retention_days_locally', 'database_backup_retention_max_storage_locally', 'database_backup_retention_amount_s3', 'database_backup_retention_days_s3', 'database_backup_retention_max_storage_s3', 's3_storage_uuid', 'timeout']; $teamId = getTeamIdFromToken(); if (is_null($teamId)) { @@ -704,6 +705,7 @@ public function create_backup(Request $request) 'database_backup_retention_amount_s3' => 'integer|min:0', 'database_backup_retention_days_s3' => 'integer|min:0', 'database_backup_retention_max_storage_s3' => 'integer|min:0', + 'timeout' => 'integer|min:60|max:36000', ]); if ($validator->fails()) { @@ -878,6 +880,7 @@ public function create_backup(Request $request) 'database_backup_retention_amount_s3' => ['type' => 'integer', 'description' => 'Retention amount of the backup in s3'], 'database_backup_retention_days_s3' => ['type' => 'integer', 'description' => 'Retention days of the backup in s3'], 'database_backup_retention_max_storage_s3' => ['type' => 'integer', 'description' => 'Max storage of the backup in S3'], + 'timeout' => ['type' => 'integer', 'description' => 'Backup job timeout in seconds (min: 60, max: 36000)', 'default' => 3600], ], ), ) @@ -907,7 +910,7 @@ public function create_backup(Request $request) )] public function update_backup(Request $request) { - $backupConfigFields = ['save_s3', 'enabled', 'dump_all', 'frequency', 'databases_to_backup', 'database_backup_retention_amount_locally', 'database_backup_retention_days_locally', 'database_backup_retention_max_storage_locally', 'database_backup_retention_amount_s3', 'database_backup_retention_days_s3', 'database_backup_retention_max_storage_s3', 's3_storage_uuid']; + $backupConfigFields = ['save_s3', 'enabled', 'dump_all', 'frequency', 'databases_to_backup', 'database_backup_retention_amount_locally', 'database_backup_retention_days_locally', 'database_backup_retention_max_storage_locally', 'database_backup_retention_amount_s3', 'database_backup_retention_days_s3', 'database_backup_retention_max_storage_s3', 's3_storage_uuid', 'timeout']; $teamId = getTeamIdFromToken(); if (is_null($teamId)) { @@ -932,6 +935,7 @@ public function update_backup(Request $request) 'database_backup_retention_amount_s3' => 'integer|min:0', 'database_backup_retention_days_s3' => 'integer|min:0', 'database_backup_retention_max_storage_s3' => 'integer|min:0', + 'timeout' => 'integer|min:60|max:36000', ]); if ($validator->fails()) { return response()->json([ From b98346f3c3ffbc14868bf4b0e7b5f1c73da81dd4 Mon Sep 17 00:00:00 2001 From: ShadowArcanist <162910371+ShadowArcanist@users.noreply.github.com> Date: Sun, 29 Mar 2026 03:02:15 +0530 Subject: [PATCH 11/13] fix(validation): validate cron expressions in update backup API endpoint --- app/Http/Controllers/Api/DatabasesController.php | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/app/Http/Controllers/Api/DatabasesController.php b/app/Http/Controllers/Api/DatabasesController.php index a73bde1ae..856649b91 100644 --- a/app/Http/Controllers/Api/DatabasesController.php +++ b/app/Http/Controllers/Api/DatabasesController.php @@ -928,7 +928,7 @@ public function update_backup(Request $request) 'dump_all' => 'boolean', 's3_storage_uuid' => 'string|exists:s3_storages,uuid|nullable', 'databases_to_backup' => 'string|nullable', - 'frequency' => 'string|in:every_minute,hourly,daily,weekly,monthly,yearly', + 'frequency' => 'string', 'database_backup_retention_amount_locally' => 'integer|min:0', 'database_backup_retention_days_locally' => 'integer|min:0', 'database_backup_retention_max_storage_locally' => 'integer|min:0', @@ -962,6 +962,17 @@ public function update_backup(Request $request) $this->authorize('update', $database); + // Validate frequency is a valid cron expression + if ($request->filled('frequency')) { + $isValid = validate_cron_expression($request->frequency); + if (! $isValid) { + return response()->json([ + 'message' => 'Validation failed.', + 'errors' => ['frequency' => ['Invalid cron expression or frequency format.']], + ], 422); + } + } + if ($request->boolean('save_s3') && ! $request->filled('s3_storage_uuid')) { return response()->json([ 'message' => 'Validation failed.', From 1daff4e23ce9205241cc65459e2191f164404ebe Mon Sep 17 00:00:00 2001 From: ShadowArcanist <162910371+ShadowArcanist@users.noreply.github.com> Date: Sun, 29 Mar 2026 12:13:30 +0530 Subject: [PATCH 12/13] fix(validation): add input validation for emails configuration --- app/Livewire/Notifications/Email.php | 4 ++-- app/Livewire/SettingsEmail.php | 4 ++-- resources/views/livewire/notifications/email.blade.php | 4 ++-- resources/views/livewire/settings-email.blade.php | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/app/Livewire/Notifications/Email.php b/app/Livewire/Notifications/Email.php index 847f10765..364163ff8 100644 --- a/app/Livewire/Notifications/Email.php +++ b/app/Livewire/Notifications/Email.php @@ -42,7 +42,7 @@ class Email extends Component public ?string $smtpHost = null; #[Validate(['nullable', 'numeric', 'min:1', 'max:65535'])] - public ?int $smtpPort = null; + public ?string $smtpPort = null; #[Validate(['nullable', 'string', 'in:starttls,tls,none'])] public ?string $smtpEncryption = null; @@ -54,7 +54,7 @@ class Email extends Component public ?string $smtpPassword = null; #[Validate(['nullable', 'numeric'])] - public ?int $smtpTimeout = null; + public ?string $smtpTimeout = null; #[Validate(['boolean'])] public bool $resendEnabled = false; diff --git a/app/Livewire/SettingsEmail.php b/app/Livewire/SettingsEmail.php index ca48e9b16..8c0e24400 100644 --- a/app/Livewire/SettingsEmail.php +++ b/app/Livewire/SettingsEmail.php @@ -33,7 +33,7 @@ class SettingsEmail extends Component public ?string $smtpHost = null; #[Validate(['nullable', 'numeric', 'min:1', 'max:65535'])] - public ?int $smtpPort = null; + public ?string $smtpPort = null; #[Validate(['nullable', 'string', 'in:starttls,tls,none'])] public ?string $smtpEncryption = 'starttls'; @@ -45,7 +45,7 @@ class SettingsEmail extends Component public ?string $smtpPassword = null; #[Validate(['nullable', 'numeric'])] - public ?int $smtpTimeout = null; + public ?string $smtpTimeout = null; #[Validate(['boolean'])] public bool $resendEnabled = false; diff --git a/resources/views/livewire/notifications/email.blade.php b/resources/views/livewire/notifications/email.blade.php index 538851137..410703010 100644 --- a/resources/views/livewire/notifications/email.blade.php +++ b/resources/views/livewire/notifications/email.blade.php @@ -72,7 +72,7 @@ class="p-4 border dark:border-coolgray-300 border-neutral-200 rounded-lg flex fl
- + @@ -82,7 +82,7 @@ class="p-4 border dark:border-coolgray-300 border-neutral-200 rounded-lg flex fl
-
diff --git a/resources/views/livewire/settings-email.blade.php b/resources/views/livewire/settings-email.blade.php index c58ea189d..93abd628c 100644 --- a/resources/views/livewire/settings-email.blade.php +++ b/resources/views/livewire/settings-email.blade.php @@ -53,7 +53,7 @@ - +
From 2692496726f59ae4535aa7c29abf4c9c2d91f5f2 Mon Sep 17 00:00:00 2001 From: Andras Bacsai <5845193+andrasbacsai@users.noreply.github.com> Date: Tue, 31 Mar 2026 09:29:36 +0200 Subject: [PATCH 13/13] fix(database): refresh SSL/status state and harden clone writes Handle database status updates more reliably by listening for `ServiceChecked` and using explicit `refresh()` handlers in Livewire database components. Also switch guarded clone/create paths to `forceFill`/`forceCreate` in helper flows to avoid missing persisted attributes during app/service cloning. Update log/terminal font stacks to Geist (with bundled variable fonts) and add coverage for SSL status refresh, persistent volume UUID cloning, and log font styling. --- .../Project/Database/Dragonfly/General.php | 9 +- .../Project/Database/Keydb/General.php | 9 +- .../Project/Database/Mariadb/General.php | 4 +- .../Project/Database/Mongodb/General.php | 4 +- .../Project/Database/Mysql/General.php | 4 +- .../Project/Database/Postgresql/General.php | 10 ++- .../Project/Database/Redis/General.php | 4 +- bootstrap/helpers/applications.php | 15 ++-- bootstrap/helpers/shared.php | 8 +- openapi.json | 30 +++++++ openapi.yaml | 23 +++++ resources/css/app.css | 6 +- resources/css/fonts.css | 15 ++++ resources/fonts/geist-mono-variable.woff2 | Bin 0 -> 71136 bytes resources/fonts/geist-sans-variable.woff2 | Bin 0 -> 69684 bytes resources/js/terminal.js | 2 +- .../views/livewire/activity-monitor.blade.php | 2 +- .../application/deployment/show.blade.php | 4 +- .../project/shared/get-logs.blade.php | 4 +- .../docker-cleanup-executions.blade.php | 4 +- .../Feature/ClonePersistentVolumeUuidTest.php | 84 +++++++++++++++++- .../Feature/DatabaseSslStatusRefreshTest.php | 77 ++++++++++++++++ tests/Feature/LogFontStylingTest.php | 45 ++++++++++ tests/Unit/ServiceParserImageUpdateTest.php | 3 +- 24 files changed, 333 insertions(+), 33 deletions(-) create mode 100644 resources/fonts/geist-mono-variable.woff2 create mode 100644 resources/fonts/geist-sans-variable.woff2 create mode 100644 tests/Feature/DatabaseSslStatusRefreshTest.php create mode 100644 tests/Feature/LogFontStylingTest.php diff --git a/app/Livewire/Project/Database/Dragonfly/General.php b/app/Livewire/Project/Database/Dragonfly/General.php index 591780cfb..5176f5ff9 100644 --- a/app/Livewire/Project/Database/Dragonfly/General.php +++ b/app/Livewire/Project/Database/Dragonfly/General.php @@ -57,7 +57,8 @@ public function getListeners() return [ "echo-private:team.{$teamId},DatabaseProxyStopped" => 'databaseProxyStopped', - "echo-private:user.{$userId},DatabaseStatusChanged" => '$refresh', + "echo-private:user.{$userId},DatabaseStatusChanged" => 'refresh', + "echo-private:team.{$teamId},ServiceChecked" => 'refresh', ]; } @@ -299,4 +300,10 @@ public function regenerateSslCertificate() handleError($e, $this); } } + + public function refresh(): void + { + $this->database->refresh(); + $this->syncData(); + } } diff --git a/app/Livewire/Project/Database/Keydb/General.php b/app/Livewire/Project/Database/Keydb/General.php index 35799e55f..b50f196a8 100644 --- a/app/Livewire/Project/Database/Keydb/General.php +++ b/app/Livewire/Project/Database/Keydb/General.php @@ -59,7 +59,8 @@ public function getListeners() return [ "echo-private:team.{$teamId},DatabaseProxyStopped" => 'databaseProxyStopped', - "echo-private:user.{$userId},DatabaseStatusChanged" => '$refresh', + "echo-private:user.{$userId},DatabaseStatusChanged" => 'refresh', + "echo-private:team.{$teamId},ServiceChecked" => 'refresh', ]; } @@ -304,4 +305,10 @@ public function regenerateSslCertificate() handleError($e, $this); } } + + public function refresh(): void + { + $this->database->refresh(); + $this->syncData(); + } } diff --git a/app/Livewire/Project/Database/Mariadb/General.php b/app/Livewire/Project/Database/Mariadb/General.php index 5615765fd..9a1a8bd68 100644 --- a/app/Livewire/Project/Database/Mariadb/General.php +++ b/app/Livewire/Project/Database/Mariadb/General.php @@ -61,9 +61,11 @@ class General extends Component public function getListeners() { $userId = Auth::id(); + $teamId = Auth::user()->currentTeam()->id; return [ - "echo-private:user.{$userId},DatabaseStatusChanged" => '$refresh', + "echo-private:user.{$userId},DatabaseStatusChanged" => 'refresh', + "echo-private:team.{$teamId},ServiceChecked" => 'refresh', ]; } diff --git a/app/Livewire/Project/Database/Mongodb/General.php b/app/Livewire/Project/Database/Mongodb/General.php index 0bc6d1e2f..a21de744a 100644 --- a/app/Livewire/Project/Database/Mongodb/General.php +++ b/app/Livewire/Project/Database/Mongodb/General.php @@ -61,9 +61,11 @@ class General extends Component public function getListeners() { $userId = Auth::id(); + $teamId = Auth::user()->currentTeam()->id; return [ - "echo-private:user.{$userId},DatabaseStatusChanged" => '$refresh', + "echo-private:user.{$userId},DatabaseStatusChanged" => 'refresh', + "echo-private:team.{$teamId},ServiceChecked" => 'refresh', ]; } diff --git a/app/Livewire/Project/Database/Mysql/General.php b/app/Livewire/Project/Database/Mysql/General.php index df244662e..cacb4ac49 100644 --- a/app/Livewire/Project/Database/Mysql/General.php +++ b/app/Livewire/Project/Database/Mysql/General.php @@ -63,9 +63,11 @@ class General extends Component public function getListeners() { $userId = Auth::id(); + $teamId = Auth::user()->currentTeam()->id; return [ - "echo-private:user.{$userId},DatabaseStatusChanged" => '$refresh', + "echo-private:user.{$userId},DatabaseStatusChanged" => 'refresh', + "echo-private:team.{$teamId},ServiceChecked" => 'refresh', ]; } diff --git a/app/Livewire/Project/Database/Postgresql/General.php b/app/Livewire/Project/Database/Postgresql/General.php index f862e0cc6..22e350683 100644 --- a/app/Livewire/Project/Database/Postgresql/General.php +++ b/app/Livewire/Project/Database/Postgresql/General.php @@ -71,9 +71,11 @@ class General extends Component public function getListeners() { $userId = Auth::id(); + $teamId = Auth::user()->currentTeam()->id; return [ - "echo-private:user.{$userId},DatabaseStatusChanged" => '$refresh', + "echo-private:user.{$userId},DatabaseStatusChanged" => 'refresh', + "echo-private:team.{$teamId},ServiceChecked" => 'refresh', 'save_init_script', 'delete_init_script', ]; @@ -488,4 +490,10 @@ public function submit() } } } + + public function refresh(): void + { + $this->database->refresh(); + $this->syncData(); + } } diff --git a/app/Livewire/Project/Database/Redis/General.php b/app/Livewire/Project/Database/Redis/General.php index 2eec14c01..3c32a6192 100644 --- a/app/Livewire/Project/Database/Redis/General.php +++ b/app/Livewire/Project/Database/Redis/General.php @@ -59,9 +59,11 @@ class General extends Component public function getListeners() { $userId = Auth::id(); + $teamId = Auth::user()->currentTeam()->id; return [ - "echo-private:user.{$userId},DatabaseStatusChanged" => '$refresh', + "echo-private:user.{$userId},DatabaseStatusChanged" => 'refresh', + "echo-private:team.{$teamId},ServiceChecked" => 'refresh', 'envsUpdated' => 'refresh', ]; } diff --git a/bootstrap/helpers/applications.php b/bootstrap/helpers/applications.php index ceae64d84..e4feec692 100644 --- a/bootstrap/helpers/applications.php +++ b/bootstrap/helpers/applications.php @@ -237,10 +237,11 @@ function clone_application(Application $source, $destination, array $overrides = 'id', 'created_at', 'updated_at', - ])->fill([ + ])->forceFill([ 'application_id' => $newApplication->id, ]); $newApplicationSettings->save(); + $newApplication->setRelation('settings', $newApplicationSettings->fresh()); } // Clone tags @@ -256,7 +257,7 @@ function clone_application(Application $source, $destination, array $overrides = 'id', 'created_at', 'updated_at', - ])->fill([ + ])->forceFill([ 'uuid' => (string) new Cuid2, 'application_id' => $newApplication->id, 'team_id' => currentTeam()->id, @@ -271,7 +272,7 @@ function clone_application(Application $source, $destination, array $overrides = 'id', 'created_at', 'updated_at', - ])->fill([ + ])->forceFill([ 'uuid' => (string) new Cuid2, 'application_id' => $newApplication->id, 'status' => 'exited', @@ -303,7 +304,7 @@ function clone_application(Application $source, $destination, array $overrides = 'created_at', 'updated_at', 'uuid', - ])->fill([ + ])->forceFill([ 'name' => $newName, 'resource_id' => $newApplication->id, ]); @@ -339,7 +340,7 @@ function clone_application(Application $source, $destination, array $overrides = 'id', 'created_at', 'updated_at', - ])->fill([ + ])->forceFill([ 'resource_id' => $newApplication->id, ]); $newStorage->save(); @@ -353,7 +354,7 @@ function clone_application(Application $source, $destination, array $overrides = 'id', 'created_at', 'updated_at', - ])->fill([ + ])->forceFill([ 'resourceable_id' => $newApplication->id, 'resourceable_type' => $newApplication->getMorphClass(), 'is_preview' => false, @@ -370,7 +371,7 @@ function clone_application(Application $source, $destination, array $overrides = 'id', 'created_at', 'updated_at', - ])->fill([ + ])->forceFill([ 'resourceable_id' => $newApplication->id, 'resourceable_type' => $newApplication->getMorphClass(), 'is_preview' => true, diff --git a/bootstrap/helpers/shared.php b/bootstrap/helpers/shared.php index cd773f6a9..a43f2e340 100644 --- a/bootstrap/helpers/shared.php +++ b/bootstrap/helpers/shared.php @@ -1919,7 +1919,7 @@ function parseDockerComposeFile(Service|Application $resource, bool $isNew = fal // Create new serviceApplication or serviceDatabase if ($isDatabase) { if ($isNew) { - $savedService = ServiceDatabase::create([ + $savedService = ServiceDatabase::forceCreate([ 'name' => $serviceName, 'image' => $image, 'service_id' => $resource->id, @@ -1930,7 +1930,7 @@ function parseDockerComposeFile(Service|Application $resource, bool $isNew = fal 'service_id' => $resource->id, ])->first(); if (is_null($savedService)) { - $savedService = ServiceDatabase::create([ + $savedService = ServiceDatabase::forceCreate([ 'name' => $serviceName, 'image' => $image, 'service_id' => $resource->id, @@ -1939,7 +1939,7 @@ function parseDockerComposeFile(Service|Application $resource, bool $isNew = fal } } else { if ($isNew) { - $savedService = ServiceApplication::create([ + $savedService = ServiceApplication::forceCreate([ 'name' => $serviceName, 'image' => $image, 'service_id' => $resource->id, @@ -1950,7 +1950,7 @@ function parseDockerComposeFile(Service|Application $resource, bool $isNew = fal 'service_id' => $resource->id, ])->first(); if (is_null($savedService)) { - $savedService = ServiceApplication::create([ + $savedService = ServiceApplication::forceCreate([ 'name' => $serviceName, 'image' => $image, 'service_id' => $resource->id, diff --git a/openapi.json b/openapi.json index ed8decb48..239068300 100644 --- a/openapi.json +++ b/openapi.json @@ -4331,6 +4331,11 @@ "database_backup_retention_max_storage_s3": { "type": "integer", "description": "Max storage (MB) for S3 backups" + }, + "timeout": { + "type": "integer", + "description": "Backup job timeout in seconds (min: 60, max: 36000)", + "default": 3600 } }, "type": "object" @@ -4896,6 +4901,11 @@ "database_backup_retention_max_storage_s3": { "type": "integer", "description": "Max storage of the backup in S3" + }, + "timeout": { + "type": "integer", + "description": "Backup job timeout in seconds (min: 60, max: 36000)", + "default": 3600 } }, "type": "object" @@ -10451,6 +10461,26 @@ "none" ], "description": "The proxy type." + }, + "concurrent_builds": { + "type": "integer", + "description": "Number of concurrent builds." + }, + "dynamic_timeout": { + "type": "integer", + "description": "Deployment timeout in seconds." + }, + "deployment_queue_limit": { + "type": "integer", + "description": "Maximum number of queued deployments." + }, + "server_disk_usage_notification_threshold": { + "type": "integer", + "description": "Server disk usage notification threshold (%)." + }, + "server_disk_usage_check_frequency": { + "type": "string", + "description": "Cron expression for disk usage check frequency." } }, "type": "object" diff --git a/openapi.yaml b/openapi.yaml index 157cd9f69..5bf6059af 100644 --- a/openapi.yaml +++ b/openapi.yaml @@ -2734,6 +2734,10 @@ paths: database_backup_retention_max_storage_s3: type: integer description: 'Max storage (MB) for S3 backups' + timeout: + type: integer + description: 'Backup job timeout in seconds (min: 60, max: 36000)' + default: 3600 type: object responses: '201': @@ -3125,6 +3129,10 @@ paths: database_backup_retention_max_storage_s3: type: integer description: 'Max storage of the backup in S3' + timeout: + type: integer + description: 'Backup job timeout in seconds (min: 60, max: 36000)' + default: 3600 type: object responses: '200': @@ -6669,6 +6677,21 @@ paths: type: string enum: [traefik, caddy, none] description: 'The proxy type.' + concurrent_builds: + type: integer + description: 'Number of concurrent builds.' + dynamic_timeout: + type: integer + description: 'Deployment timeout in seconds.' + deployment_queue_limit: + type: integer + description: 'Maximum number of queued deployments.' + server_disk_usage_notification_threshold: + type: integer + description: 'Server disk usage notification threshold (%).' + server_disk_usage_check_frequency: + type: string + description: 'Cron expression for disk usage check frequency.' type: object responses: '201': diff --git a/resources/css/app.css b/resources/css/app.css index 3cfa03dae..2c30baf64 100644 --- a/resources/css/app.css +++ b/resources/css/app.css @@ -14,7 +14,9 @@ @custom-variant dark (&:where(.dark, .dark *)); @theme { - --font-sans: Inter, sans-serif; + --font-sans: 'Geist Sans', Inter, sans-serif; + --font-geist-sans: 'Geist Sans', Inter, sans-serif; + --font-logs: 'Geist Mono', 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, monospace; --color-base: #101010; --color-warning: #fcd452; @@ -96,7 +98,7 @@ body { } body { - @apply min-h-screen text-sm antialiased scrollbar overflow-x-hidden; + @apply min-h-screen text-sm font-sans antialiased scrollbar overflow-x-hidden; } .coolify-monaco-editor { diff --git a/resources/css/fonts.css b/resources/css/fonts.css index c8c4448eb..e5c6a694d 100644 --- a/resources/css/fonts.css +++ b/resources/css/fonts.css @@ -70,3 +70,18 @@ @font-face { src: url('../fonts/inter-v13-cyrillic_cyrillic-ext_greek_greek-ext_latin_latin-ext_vietnamese-regular.woff2') format('woff2'); } +@font-face { + font-display: swap; + font-family: 'Geist Mono'; + font-style: normal; + font-weight: 100 900; + src: url('../fonts/geist-mono-variable.woff2') format('woff2'); +} + +@font-face { + font-display: swap; + font-family: 'Geist Sans'; + font-style: normal; + font-weight: 100 900; + src: url('../fonts/geist-sans-variable.woff2') format('woff2'); +} diff --git a/resources/fonts/geist-mono-variable.woff2 b/resources/fonts/geist-mono-variable.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..c8a7d84012d3381af28701148c8a42209378e2d9 GIT binary patch literal 71136 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%0AA$#>mQIT^ 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 literal 0 HcmV?d00001 diff --git a/resources/js/terminal.js b/resources/js/terminal.js index 3c52edfa0..aa5f37353 100644 --- a/resources/js/terminal.js +++ b/resources/js/terminal.js @@ -186,7 +186,7 @@ export function initializeTerminalComponent() { this.term = new Terminal({ cols: 80, rows: 30, - fontFamily: '"Fira Code", courier-new, courier, monospace, "Powerline Extra Symbols"', + fontFamily: '"Geist Mono", "SFMono-Regular", Menlo, Monaco, Consolas, "Liberation Mono", monospace, "Powerline Extra Symbols"', cursorBlink: true, rendererType: 'canvas', convertEol: true, diff --git a/resources/views/livewire/activity-monitor.blade.php b/resources/views/livewire/activity-monitor.blade.php index 290a91857..72b68edd0 100644 --- a/resources/views/livewire/activity-monitor.blade.php +++ b/resources/views/livewire/activity-monitor.blade.php @@ -52,7 +52,7 @@ 'flex-1 min-h-0' => $fullHeight, 'max-h-96' => !$fullHeight, ])> -
{{ RunRemoteProcess::decodeOutput($activity) }}
+
{{ RunRemoteProcess::decodeOutput($activity) }}
@else @if ($showWaiting) diff --git a/resources/views/livewire/project/application/deployment/show.blade.php b/resources/views/livewire/project/application/deployment/show.blade.php index 28872f4bc..c17cda55f 100644 --- a/resources/views/livewire/project/application/deployment/show.blade.php +++ b/resources/views/livewire/project/application/deployment/show.blade.php @@ -330,7 +330,7 @@ class="p-1 text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-
-
+
No matches found. @@ -356,7 +356,7 @@ class="shrink-0 text-gray-500">{{ $line['timestamp'] }} ])>{{ $lineContent }}
@empty - No logs yet. + No logs yet. @endforelse
diff --git a/resources/views/livewire/project/shared/get-logs.blade.php b/resources/views/livewire/project/shared/get-logs.blade.php index ee5b65cf5..cb2dcfed1 100644 --- a/resources/views/livewire/project/shared/get-logs.blade.php +++ b/resources/views/livewire/project/shared/get-logs.blade.php @@ -480,7 +480,7 @@ class="flex overflow-y-auto overflow-x-hidden flex-col px-4 py-2 w-full min-w-0 @php $displayLines = collect(explode("\n", $outputs))->filter(fn($line) => trim($line) !== ''); @endphp -
+
No matches found. @@ -518,7 +518,7 @@ class="text-gray-500 dark:text-gray-400 py-2">
@else
No logs yet.
+ class="font-logs whitespace-pre-wrap break-all max-w-full text-neutral-400">No logs yet. @endif
diff --git a/resources/views/livewire/server/docker-cleanup-executions.blade.php b/resources/views/livewire/server/docker-cleanup-executions.blade.php index c59d53d26..d0b848cf1 100644 --- a/resources/views/livewire/server/docker-cleanup-executions.blade.php +++ b/resources/views/livewire/server/docker-cleanup-executions.blade.php @@ -100,7 +100,7 @@ - {{ data_get($result, 'command') }} + {{ data_get($result, 'command') }}
@php $output = data_get($result, 'output'); @@ -108,7 +108,7 @@ @endphp
@if($hasOutput) -
{{ $output }}
+
{{ $output }}
@else

No output returned - command completed successfully diff --git a/tests/Feature/ClonePersistentVolumeUuidTest.php b/tests/Feature/ClonePersistentVolumeUuidTest.php index f1ae8dd26..3f99c5585 100644 --- a/tests/Feature/ClonePersistentVolumeUuidTest.php +++ b/tests/Feature/ClonePersistentVolumeUuidTest.php @@ -1,15 +1,18 @@ user = User::factory()->create(); @@ -17,7 +20,7 @@ $this->user->teams()->attach($this->team, ['role' => 'owner']); $this->server = Server::factory()->create(['team_id' => $this->team->id]); - $this->destination = StandaloneDocker::factory()->create(['server_id' => $this->server->id]); + $this->destination = $this->server->standaloneDockers()->firstOrFail(); $this->project = Project::factory()->create(['team_id' => $this->team->id]); $this->environment = Environment::factory()->create(['project_id' => $this->project->id]); @@ -25,8 +28,13 @@ 'environment_id' => $this->environment->id, 'destination_id' => $this->destination->id, 'destination_type' => $this->destination->getMorphClass(), + 'redirect' => 'both', ]); + $this->application->settings->forceFill([ + 'is_container_label_readonly_enabled' => false, + ])->save(); + $this->actingAs($this->user); session(['currentTeam' => $this->team]); }); @@ -82,3 +90,71 @@ expect($clonedUuids)->each->not->toBeIn($originalUuids); expect(array_unique($clonedUuids))->toHaveCount(2); }); + +test('cloning application reassigns settings to the cloned application', function () { + $this->application->settings->forceFill([ + 'is_static' => true, + 'is_spa' => true, + 'is_build_server_enabled' => true, + ])->save(); + + $newApp = clone_application($this->application, $this->destination, [ + 'environment_id' => $this->environment->id, + ]); + + $sourceSettingsCount = ApplicationSetting::query() + ->where('application_id', $this->application->id) + ->count(); + $clonedSettings = ApplicationSetting::query() + ->where('application_id', $newApp->id) + ->first(); + + expect($sourceSettingsCount)->toBe(1) + ->and($clonedSettings)->not->toBeNull() + ->and($clonedSettings?->application_id)->toBe($newApp->id) + ->and($clonedSettings?->is_static)->toBeTrue() + ->and($clonedSettings?->is_spa)->toBeTrue() + ->and($clonedSettings?->is_build_server_enabled)->toBeTrue(); +}); + +test('cloning application reassigns scheduled tasks and previews to the cloned application', function () { + $scheduledTask = ScheduledTask::forceCreate([ + 'uuid' => 'scheduled-task-original', + 'application_id' => $this->application->id, + 'team_id' => $this->team->id, + 'name' => 'nightly-task', + 'command' => 'php artisan schedule:run', + 'frequency' => '* * * * *', + 'container' => 'app', + 'timeout' => 120, + ]); + + $preview = ApplicationPreview::forceCreate([ + 'uuid' => 'preview-original', + 'application_id' => $this->application->id, + 'pull_request_id' => 123, + 'pull_request_html_url' => 'https://example.com/pull/123', + 'fqdn' => 'https://preview.example.com', + 'status' => 'running', + ]); + + $newApp = clone_application($this->application, $this->destination, [ + 'environment_id' => $this->environment->id, + ]); + + $clonedTask = ScheduledTask::query() + ->where('application_id', $newApp->id) + ->first(); + $clonedPreview = ApplicationPreview::query() + ->where('application_id', $newApp->id) + ->first(); + + expect($clonedTask)->not->toBeNull() + ->and($clonedTask?->uuid)->not->toBe($scheduledTask->uuid) + ->and($clonedTask?->application_id)->toBe($newApp->id) + ->and($clonedTask?->team_id)->toBe($this->team->id) + ->and($clonedPreview)->not->toBeNull() + ->and($clonedPreview?->uuid)->not->toBe($preview->uuid) + ->and($clonedPreview?->application_id)->toBe($newApp->id) + ->and($clonedPreview?->status)->toBe('exited'); +}); diff --git a/tests/Feature/DatabaseSslStatusRefreshTest.php b/tests/Feature/DatabaseSslStatusRefreshTest.php new file mode 100644 index 000000000..eab2b08db --- /dev/null +++ b/tests/Feature/DatabaseSslStatusRefreshTest.php @@ -0,0 +1,77 @@ +team = Team::factory()->create(); + $this->user = User::factory()->create(); + $this->team->members()->attach($this->user->id, ['role' => 'owner']); + + $this->actingAs($this->user); + session(['currentTeam' => $this->team]); +}); + +dataset('ssl-aware-database-general-components', [ + MysqlGeneral::class, + MariadbGeneral::class, + MongodbGeneral::class, + RedisGeneral::class, + PostgresqlGeneral::class, + KeydbGeneral::class, + DragonflyGeneral::class, +]); + +it('maps database status broadcasts to refresh for ssl-aware database general components', function (string $componentClass) { + $component = app($componentClass); + $listeners = $component->getListeners(); + + expect($listeners["echo-private:user.{$this->user->id},DatabaseStatusChanged"])->toBe('refresh') + ->and($listeners["echo-private:team.{$this->team->id},ServiceChecked"])->toBe('refresh'); +})->with('ssl-aware-database-general-components'); + +it('reloads the mysql database model when refreshing so ssl controls follow the latest status', function () { + $server = Server::factory()->create(['team_id' => $this->team->id]); + $destination = StandaloneDocker::where('server_id', $server->id)->first(); + $project = Project::factory()->create(['team_id' => $this->team->id]); + $environment = Environment::factory()->create(['project_id' => $project->id]); + + $database = StandaloneMysql::forceCreate([ + 'name' => 'test-mysql', + 'image' => 'mysql:8', + 'mysql_root_password' => 'password', + 'mysql_user' => 'coolify', + 'mysql_password' => 'password', + 'mysql_database' => 'coolify', + 'status' => 'exited:unhealthy', + 'enable_ssl' => true, + 'is_log_drain_enabled' => false, + 'environment_id' => $environment->id, + 'destination_id' => $destination->id, + 'destination_type' => $destination->getMorphClass(), + ]); + + $component = Livewire::test(MysqlGeneral::class, ['database' => $database]) + ->assertDontSee('Database should be stopped to change this settings.'); + + $database->forceFill(['status' => 'running:healthy'])->save(); + + $component->call('refresh') + ->assertSee('Database should be stopped to change this settings.'); +}); diff --git a/tests/Feature/LogFontStylingTest.php b/tests/Feature/LogFontStylingTest.php new file mode 100644 index 000000000..c7903fb45 --- /dev/null +++ b/tests/Feature/LogFontStylingTest.php @@ -0,0 +1,45 @@ +toContain("font-family: 'Geist Mono'") + ->toContain("url('../fonts/geist-mono-variable.woff2')") + ->toContain("font-family: 'Geist Sans'") + ->toContain("url('../fonts/geist-sans-variable.woff2')") + ->and($appCss) + ->toContain("--font-sans: 'Geist Sans', Inter, sans-serif") + ->toContain('@apply min-h-screen text-sm font-sans antialiased scrollbar overflow-x-hidden;') + ->toContain("--font-logs: 'Geist Mono'") + ->toContain("--font-geist-sans: 'Geist Sans'") + ->and($fontPath) + ->toBeFile() + ->and($geistSansPath) + ->toBeFile(); +}); + +it('uses geist mono for shared logs and terminal rendering', function () { + $sharedLogsView = file_get_contents(resource_path('views/livewire/project/shared/get-logs.blade.php')); + $deploymentLogsView = file_get_contents(resource_path('views/livewire/project/application/deployment/show.blade.php')); + $activityMonitorView = file_get_contents(resource_path('views/livewire/activity-monitor.blade.php')); + $dockerCleanupView = file_get_contents(resource_path('views/livewire/server/docker-cleanup-executions.blade.php')); + $terminalClient = file_get_contents(resource_path('js/terminal.js')); + + expect($sharedLogsView) + ->toContain('class="font-logs max-w-full cursor-default"') + ->toContain('class="font-logs whitespace-pre-wrap break-all max-w-full text-neutral-400"') + ->and($deploymentLogsView) + ->toContain('class="flex flex-col font-logs"') + ->toContain('class="font-logs text-neutral-400 mb-2"') + ->and($activityMonitorView) + ->toContain('

and($dockerCleanupView)
+        ->toContain('class="flex-1 text-sm font-logs text-gray-700 dark:text-gray-300"')
+        ->toContain('class="font-logs text-sm text-gray-600 dark:text-gray-300 whitespace-pre-wrap"')
+        ->and($terminalClient)
+        ->toContain('"Geist Mono"');
+});
diff --git a/tests/Unit/ServiceParserImageUpdateTest.php b/tests/Unit/ServiceParserImageUpdateTest.php
index 526505098..649795866 100644
--- a/tests/Unit/ServiceParserImageUpdateTest.php
+++ b/tests/Unit/ServiceParserImageUpdateTest.php
@@ -41,7 +41,8 @@
     // The new code checks for null within the else block and creates only if needed
     expect($sharedFile)
         ->toContain('if (is_null($savedService)) {')
-        ->toContain('$savedService = ServiceDatabase::create([');
+        ->toContain('$savedService = ServiceDatabase::forceCreate([')
+        ->toContain('$savedService = ServiceApplication::forceCreate([');
 });
 
 it('verifies image update logic is present in parseDockerComposeFile', function () {