Commit graph

14840 commits

Author SHA1 Message Date
Andras Bacsai
8cb5e70167
fix(parsers): resolve shared variables in compose environment (#8930) 2026-03-12 13:24:48 +01:00
Andras Bacsai
7cfc6746c7 fix(parsers): resolve shared variables in compose environment
Extract shared variable resolution logic into a reusable helper function
`resolveSharedEnvironmentVariables()` and apply it in applicationParser and
serviceParser to ensure patterns like {{environment.VAR}}, {{project.VAR}},
and {{team.VAR}} are properly resolved in the compose environment section.

Without this, unresolved {{...}} strings would take precedence over resolved
values from the .env file (env_file:) in docker-compose configurations.
2026-03-12 13:23:13 +01:00
Andras Bacsai
66840d64da
fix(validation): support scoped packages in file path validation (#8928) 2026-03-12 13:10:48 +01:00
Andras Bacsai
01031fc5f3 refactor: consolidate file path validation patterns and support scoped packages
- Extract file path validation regex into ValidationPatterns::FILE_PATH_PATTERN constant
- Add filePathRules() and filePathMessages() helper methods for reusable validation
- Extend allowed characters from [a-zA-Z0-9._\-/] to [a-zA-Z0-9._\-/~@+] to support:
  - Scoped npm packages (@org/package)
  - Language-specific directories (c++, rust+)
  - Version markers (v1~, build~)
- Replace duplicate inline regex patterns across multiple files
- Add tests for paths with @ symbol and tilde/plus characters
2026-03-12 13:09:13 +01:00
Andras Bacsai
61eb3e92df
fix(ssh): remove undefined trackSshRetryEvent() method call (#8927) 2026-03-12 13:08:20 +01:00
Andras Bacsai
ebfa53d9ca refactor(ssh): remove Sentry retry event tracking from ExecuteRemoteCommand
Remove the trackSshRetryEvent() call from SSH retry handling. This tracking is no longer
needed in the retry logic.
2026-03-12 13:01:18 +01:00
Andras Bacsai
709e5e882e Merge remote-tracking branch 'origin/next' into next 2026-03-11 18:16:15 +01:00
Andras Bacsai
283ca00a33
fix(parsers): use firstOrCreate instead of updateOrCreate for environment variables (#8915) 2026-03-11 18:13:50 +01:00
Andras Bacsai
54c5ad38da test(magic-variables): add feature tests for SERVICE_URL/FQDN variable handling
Add comprehensive test suite verifying that magic (referenced) SERVICE_URL_ and
SERVICE_FQDN_ variables don't overwrite values set by direct template declarations
or updateCompose(). Tests cover the fix for GitHub issue #8912 where generic
SERVICE_URL and SERVICE_FQDN variables remained stale after changing a service
domain in the UI. These tests ensure the transition from updateOrCreate() to
firstOrCreate() in the magic variables section works correctly.
2026-03-11 17:15:17 +01:00
Andras Bacsai
58d510042b fix(parsers): use firstOrCreate instead of updateOrCreate for environment variables
Replace updateOrCreate with firstOrCreate when creating FQDN and URL
environment variables in serviceParser. This prevents overwriting values
that have already been set by direct template declarations or updateCompose,
ensuring user-defined environment variables are preserved.
2026-03-11 16:34:33 +01:00
Andras Bacsai
e52a49b5e9 feat(server): add server metadata collection and display
Add ability to gather and display server system information including OS, architecture, kernel version, CPU count, memory, and uptime. Includes:
- New gatherServerMetadata() method to collect system details via remote commands
- New refreshServerMetadata() Livewire action with authorization and error handling
- Server Details UI section showing collected metadata with refresh capability
- Database migration to add server_metadata JSON column
- Comprehensive test suite for metadata collection and persistence
2026-03-11 16:21:05 +01:00
Andras Bacsai
bd01d3a515
feat(git-sources): add GitLab integration and URL encode credentials (#8910) 2026-03-11 15:32:52 +01:00
Andras Bacsai
b2135bb4fa feat(gitlab): add GitLab source integration with SSH and HTTP basic auth
Add full GitLab application source support for git operations:
- Implement SSH-based authentication using private keys with configurable ports
- Support HTTP basic auth for HTTPS GitLab URLs (with or without deploy keys)
- Handle private key setup and SSH command configuration in both Docker and local modes
- Support merge request checkouts for GitLab with SSH authentication

Improvements to credential handling:
- URL-encode GitHub access tokens to handle special characters properly
- Update log sanitization to redact passwords from HTTPS/HTTP URLs
- Extend convertGitUrl() type hints to support GitlabApp sources

Add test coverage and seed data:
- New GitlabSourceCommandsTest with tests for private key and public repo scenarios
- Test for HTTPS basic auth password sanitization in logs
- Seed data for GitLab deploy key and public example applications
2026-03-11 15:30:46 +01:00
Andras Bacsai
108bae02d0
fix(livewire): add error handling and selectedActions to delete methods (#8909) 2026-03-11 15:05:53 +01:00
Andras Bacsai
8366e150b1 feat(livewire): add selectedActions parameter and error handling to delete methods
- Add `$selectedActions = []` parameter to delete/remove methods in multiple
  Livewire components to support optional deletion actions
- Return error message string when password verification fails instead of
  silent return
- Return `true` on successful deletion to indicate completion
- Handle selectedActions to set component properties for cascading deletions
  (delete_volumes, delete_networks, delete_configurations, docker_cleanup)
- Add test coverage for Danger component delete functionality with password
  validation and selected actions handling
2026-03-11 15:04:45 +01:00
Andras Bacsai
6815fbda29
feat(proxy): add database-backed config storage with disk backups (#8905) 2026-03-11 14:44:12 +01:00
Andras Bacsai
6488751fd2 feat(proxy): add database-backed config storage with disk backups
- Store proxy configuration in database as primary source for faster access
- Implement automatic timestamped backups when configuration changes
- Add backfill migration logic to recover configs from disk for legacy servers
- Simplify UI by removing loading states (config now readily available)
- Add comprehensive logging for debugging configuration generation and recovery
- Include unit tests for config recovery scenarios
2026-03-11 14:11:31 +01:00
Andras Bacsai
e08534653c
fix(deployment): filter null and empty environment variables from nixpacks plan (#8902) 2026-03-11 13:42:13 +01:00
Andras Bacsai
a7f491170a fix(deployment): filter null and empty environment variables from nixpacks plan
When application->fqdn is null, COOLIFY_FQDN and COOLIFY_URL are set to null.
These null values cause nixpacks to fail parsing the config with
"invalid type: null, expected a string".

Filter out null and empty string values when generating environment variables
for the nixpacks plan JSON. Fixes #6830.
2026-03-11 13:41:34 +01:00
Andras Bacsai
b926f23824 version++ 2026-03-11 12:01:02 +01:00
Andras Bacsai
eb96c9550b
fix(api): add docker_cleanup parameter to stop endpoints (#8899) 2026-03-11 10:18:22 +01:00
Andras Bacsai
d2a86cbf4b
fix: prevent scheduled task input fields from losing focus (#8654) 2026-03-11 10:13:59 +01:00
Andras Bacsai
f45c3599ed Merge branch 'ghsa-qqrq-r9h4-x6wp-investigation' 2026-03-11 08:58:38 +01:00
Andras Bacsai
9fbfb826d3 Merge remote-tracking branch 'origin/next' into ghsa-qqrq-r9h4-x6wp-investigation 2026-03-11 08:57:57 +01:00
Andras Bacsai
b817ed97c1
fix(security): sanitize newlines in health check commands to prevent RCE (#8898) 2026-03-11 08:57:38 +01:00
Andras Bacsai
76084ce69b chore: prepare for PR 2026-03-11 08:57:12 +01:00
Andras Bacsai
fc8f18a534 Merge remote-tracking branch 'origin/next' into next 2026-03-11 07:10:58 +01:00
Andras Bacsai
babc9ff658 chore(release): bump version to 4.0.0-beta.466 2026-03-11 07:10:32 +01:00
Andras Bacsai
550db87724
fix(parser): preserve user-saved env vars on Docker Compose redeploy (#8894) 2026-03-11 07:10:00 +01:00
Andras Bacsai
a596ff313e chore: prepare for PR 2026-03-11 07:04:33 +01:00
Andras Bacsai
0256043ca5
fix(modal): make confirmation modal close after dispatching Livewire actions (#8892) 2026-03-11 06:48:10 +01:00
Andras Bacsai
88f582225b chore: prepare for PR 2026-03-11 06:47:38 +01:00
Andras Bacsai
497b2b64ca
fix: Build-time environment variables break Next.js (#8890) 2026-03-11 06:47:18 +01:00
Andras Bacsai
eb8752c202
Merge branch 'next' into 8873-investigate-bug 2026-03-11 06:46:09 +01:00
Andras Bacsai
96b35bd2d8
fix: prevent command injection and fix developer view shared variables error (#8889) 2026-03-11 06:42:12 +01:00
Andras Bacsai
7aa744af90 chore: prepare for PR 2026-03-11 06:38:40 +01:00
Andras Bacsai
5cac559602 chore: prepare for PR 2026-03-11 06:36:12 +01:00
Andras Bacsai
d9cdbc6096 Merge remote-tracking branch 'origin/next' into next 2026-03-10 23:17:39 +01:00
Andras Bacsai
dc34d21cda
build(deps): bump league/commonmark from 2.8.0 to 2.8.1 (#8793) 2026-03-10 22:59:02 +01:00
Andras Bacsai
1edb2acdbf
build(deps): bump rollup from 4.57.1 to 4.59.0 (#8691) 2026-03-10 22:58:36 +01:00
Andras Bacsai
ee5dd71266 fix(docker): add path validation to prevent command injection in file locations
Add regex validation to dockerfileLocation and dockerComposeLocation fields to
ensure they contain only valid path characters (alphanumeric, dots, hyphens, and
slashes) and must start with /. Include custom validation messages for clarity.
2026-03-10 22:40:45 +01:00
Andras Bacsai
d174724bf6 Merge branch 'ghsa-mw5w-2vvh-mgf4-investigation' 2026-03-10 22:22:51 +01:00
Andras Bacsai
fcd574e1eb fix(log-drain): prevent command injection by base64-encoding environment variables
Replace direct shell interpolation of environment values with base64 encoding
to prevent command injection attacks. Environment configuration is now built as
a single string, base64-encoded, then decoded to file atomically.

Also add regex validation to restrict environment field values to safe
characters (alphanumeric, underscore, hyphen, dot) at the application layer.

Fixes GHSA-3xm2-hqg8-4m2p
2026-03-10 22:22:51 +01:00
Andras Bacsai
a1c30cb0e7 fix(git-ref-validation): prevent command injection via git references
Add validateGitRef() helper function that uses an allowlist approach to prevent
OS command injection through git commit SHAs, branch names, and tags. Only allows
alphanumeric characters, dots, hyphens, underscores, and slashes.

Changes include:
- Add validateGitRef() helper in bootstrap/helpers/shared.php
- Apply validation in Rollback component when accepting rollback commit
- Add regex validation to git commit SHA fields in Livewire components
- Apply regex validation to API rules for git_commit_sha
- Use escapeshellarg() in git log and git checkout commands
- Add comprehensive unit tests covering injection payloads

Addresses GHSA-mw5w-2vvh-mgf4
2026-03-10 22:22:48 +01:00
Andras Bacsai
096d4369e5 fix(sentinel): add token validation to prevent command injection
Add validation to ensure sentinel tokens contain only safe characters
(alphanumeric, dots, hyphens, underscores, plus, forward slash, equals),
preventing OS command injection vulnerabilities when tokens are
interpolated into shell commands.

- Add ServerSetting::isValidSentinelToken() validation method
- Validate tokens in StartSentinel action and metrics queries
- Improve shell argument escaping with escapeshellarg()
- Add comprehensive test coverage for token validation
2026-03-10 22:19:19 +01:00
Andras Bacsai
6fbb5e626a Squashed commit from '565g-9j4m-wqmr-cross-team-idor-logs-fix' 2026-03-10 22:11:52 +01:00
Andras Bacsai
c15bcd5634 fix(api): require write permission for validation endpoints
Validation operations should require write permissions as they trigger
state-changing actions. Updated middleware for:
- POST /api/v1/cloud-tokens/{uuid}/validate
- GET /api/v1/servers/{uuid}/validate

Added tests to verify read-only tokens cannot access these endpoints.
2026-03-10 22:11:52 +01:00
Andras Bacsai
633b1803e1
fix(docker): prevent false container exits on failed docker queries (#8860) 2026-03-10 21:59:47 +01:00
Andras Bacsai
458f048c4e fix(push-server): track last_online_at and reset database restart state
- Update last_online_at timestamp when resource status is confirmed active
- Reset restart_count, last_restart_at, and last_restart_type when marking database as exited
- Remove unused updateServiceSubStatus() method
2026-03-10 21:46:26 +01:00
Andras Bacsai
0a1782175a Merge remote-tracking branch 'origin/next' into 8826-investigate-postgresql-restart 2026-03-10 21:46:03 +01:00