Commit Graph
18796 Commits
Author SHA1 Message Date
Andras Bacsai b31c06a7eb fix(team): build invite links from instance URL, not request host
When no instance domain is set, invitation links were built from the
request host, which a client can spoof through a forwarded Host header.
Links now always use base_url(). The fallback test now forces a spoofed
root URL and checks that the link ignores it.
2026-11-09 11:06:52 +01:00
Andras BacsaiandClaude Opus 5.5 a44193b6e4 fix(mcp): return only service fields from get_service
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-09 11:04:47 +01:00
Andras BacsaiandClaude Opus 5.5 5ff94dbd7a fix(api): limit nested server data to team-wide tokens
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-09 11:03:22 +01:00
Andras Bacsai 132dd0e34c test(api): cover member access to the cloud provider token list
A team member with a read token gets 403 on GET /api/v1/cloud-tokens
and an error from the MCP cloud_provider list_tokens action.
2026-11-09 10:59:00 +01:00
Andras Bacsai f4cbf63e76 fix(api): validate the docker tag of deploy requests
Use the same tag format check as the preview API.
2026-11-09 10:58:08 +01:00
Andras BacsaiandClaude Opus 5.5 769bddb326 fix(api): require write permission to choose a preview commit
- Treat a commit value on the preview endpoint as a preview change
- Update the API docs, the MCP tool description, and the change file
- Add a test case

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-09 10:50:51 +01:00
Andras Bacsai 2466ccb8fd fix(service): check images before stopping a service on restart
Closes #12485
2026-11-09 10:18:55 +01:00
Andras BacsaiandClaude Opus 5.5 acacbf9747 fix(compose): report an empty Compose file as empty, not as not found
Closes #12477

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-09 10:15:38 +01:00
Andras BacsaiandClaude Opus 5.5 a70e856882 test: remove tests that do not test behavior and strengthen weak ones
- Remove tests that only check markup, CSS, static text, wire:key strings,
  framework behavior, copied app logic, or expect(true)
- Replace source-grep and Reflection checks of security fixes with tests
  that run the real code (shell quoting, locked properties, 403 checks,
  webhook fork trust, log redaction, Sentinel token cleanup)
- Assert response bodies and unchanged data on API error paths
- Run the Traefik version job through handle() instead of private methods
- Update stale tests for scheduled task props, the default Postgres image,
  and the disabled transfer link of unvalidated servers

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-09 08:47:56 +01:00
Andras BacsaiandClaude Opus 5.5 de75bbe004 fix(upload): return 404 for a database the team cannot open
The backup upload returned a hard-coded 500 when the database uuid was
unknown or belonged to another team. It now returns 404 with the same
JSON error shape that the import form reads.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-09 08:47:56 +01:00
peaklabs-dev 6eeea653fe docs: remove the pull request links from the change files 2026-11-09 00:34:27 +01:00
peaklabs-dev 9667e070c5 docs(agents): link only issues in change files 2026-11-09 00:34:27 +01:00
peaklabs-dev 32d41d0353 docs: describe the changes of v4.7 in change files 2026-11-09 00:29:50 +01:00
peaklabs-dev b2617e7539 feat(release): write the changelog from change files 2026-11-09 00:29:50 +01:00
peaklabs-dev cd975b49aa docs(release): merge next into main only on the day of the release 2026-11-09 00:23:22 +01:00
🏔️ Peak 91985acf42 build(image): remove the unused MinIO client from the coolify image (#12491) 2026-11-09 00:09:50 +01:00
Andras BacsaiandClaude Opus 5.5 3f51c251c0 fix(git): show the full Git error reason on a failed repository read
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-08 21:02:46 +01:00
Andras Bacsai 61b10664c4 refactor(security): remove published APP_KEY request blocking middleware
Drop the RejectPublishedAppKey middleware and its registration in the
HTTP kernel, so requests are no longer refused with a 503 when APP_KEY
or APP_PREVIOUS_KEYS matches a key shipped in the repository.

Rename PublishedAppKeyTest to DecryptWithoutClassesTest and keep only
the checks that Sentinel tokens and team channel payloads are decrypted
without unserializing objects.
2026-11-08 18:24:02 +01:00
Andras Bacsai c75e7078b7 fix(access): restrict preview changes, rollbacks, and repo URL updates
- Require the write permission and update policy to open a preview or
  change its pull request URL, git type, or docker tag via the API;
  deploy-only tokens can only redeploy an existing preview
- Reject rollbacks to commits that are neither a listed rollback image
  nor a successful production deployment (GetRollbackImages::allows)
- Validate git_repository with ValidGitRepositoryUrl when it changes on
  application update
- Add RejectPublishedAppKey global middleware
- Show a "still starting" message when the root setup window is pending
- Document the new 403 responses and constraints in the OpenAPI spec
- Add tests for the new checks
2026-11-08 17:26:34 +01:00
Andras Bacsai 3c588d482d fix(access): apply API token limits in more permission checks
- Use the limits of the API token in more permission checks.
- Show a clearer message when a token limit blocks a change.
- Describe API tokens with limits in SECURITY.md.
2026-11-08 15:53:02 +01:00
Andras BacsaiandClaude Opus 5.5 1d21a27812 refactor(image-scan): remove the instance switch and the vulnerability DB URL
Scanning is now controlled per server and per app. Each server downloads
the Grype database from its default source.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-08 15:49:05 +01:00
Andras Bacsai 3b64cbc379 fix(access): clearer credential message and backup S3 defaults
- Show a clear message when team-wide write access is needed to use
  team credentials.
- Reset the S3 selection on the backup page when a change is not allowed.
- Do not save database backups to S3 when the API request does not
  send save_s3, as the API documentation says.
2026-11-07 22:04:44 +01:00
Andras Bacsai 8011d0d6ab fix(access): check server and credential access for scoped members (#12488) 2026-11-07 18:59:17 +01:00
🏔️ Peak 29aa42b982 chore(docker): use the multi-platform Node.js image again (#12483) 2026-11-06 23:50:21 +01:00
Andras Bacsai eb5f238a45 fix(server): show the disabled server message on the localhost page
Closes #12475
2026-11-06 19:52:05 +01:00
Andras Bacsai f7ea962145 fix(server): enable disabled self-hosted servers again on validation
On self-hosted, a validation that connects now clears force_disabled. The unreachable cleanup skips the localhost server, and the server page explains why a server is disabled. Cloud and transferred servers stay disabled.

Closes #12475
2026-11-06 18:57:06 +01:00
Andras BacsaiandClaude Opus 5.5 5af4715b8a feat(ui): put the star button after the status in the top bar
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-06 18:29:43 +01:00
Andras BacsaiandClaude Opus 5.5 c648f4ec6a feat(ui): star servers and resources for quick access on the dashboard
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-06 18:16:25 +01:00
Andras BacsaiandClaude Opus 5.5 cab5ae9903 feat(ui): show server usage on mobile in the dashboard server table
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-06 18:16:16 +01:00
Andras BacsaiandClaude Opus 5.5 1652a1d091 feat(ui): show the finish time of recent deployments on the dashboard
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-06 17:46:54 +01:00
Andras Bacsai d640aa15f5 docs(changelog): add Orbit template, maintenance page, and port fix
Add changelog entries for the Orbit service template, moving
maintenance mode to its own page with a confirmed toggle, and no
longer warning about the port when a service domain has no port.
2026-11-06 15:24:55 +01:00
Andras BacsaiandClaude Opus 5.5 973cd8684a feat(ui): show the logo and name on the resource creation screen
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-06 15:23:07 +01:00
Andras Bacsai abea0747ed feat(service): add Orbit template 2026-11-06 15:22:21 +01:00
Andras BacsaiandClaude Opus 5.5 17a9fa624e feat(ui): move maintenance mode to its own page with a confirmed toggle
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-06 15:20:41 +01:00
Andras BacsaiandClaude Opus 5.5 53e21abe97 fix(services): do not warn about the port when a domain has no port
An empty port routes to the required port, so it needs no confirmation.
The edit dialog shows the effective port, the warning buttons name the
ports, and domain conflicts ignore the container port.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-06 15:17:35 +01:00
Andras BacsaiandClaude Opus 5.5 b1a20fabd4 fix(ui): hide tooltips on close and dismiss buttons
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-06 15:12:41 +01:00
Andras BacsaiandClaude Opus 5.5 e614e680c0 docs(agents): document the changelog format
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-06 15:03:51 +01:00
Andras BacsaiandClaude Opus 5.5 9781921217 fix(dev): keep QEMU servers that still have resources on seed
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-06 15:03:46 +01:00
Andras Bacsai 71d33863af docs(changelog): condense Unreleased breaking and security entries
Group the Unreleased breaking changes and security notes into short,
bolded summary bullets with combined PR links, replacing the long
per-change descriptions.
2026-11-06 14:53:24 +01:00
Andras Bacsai 54da974045 chore(upstream): bump Sentinel to 1.1.5 2026-11-06 14:50:35 +01:00
Andras Bacsai 757a049002 docs(changelog): add breaking changes and security notes to Unreleased
Document the breaking changes for queued webhook deployment cancellation,
cloud provider token API access, and the new Resend sender fields.

List the security changes: SSH host key pinning for servers and Git hosts,
Ed25519 key generation and key rotation, hardened SSH options, hidden
private keys, Sentinel token handling, terminal session expiry, SMTP and
DNS validation, stricter team access checks, audit event privacy, and
API rate limiting for failed requests.
2026-11-06 14:44:12 +01:00
033f0c84da v4.7 (#12478)
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: peaklabs-dev <122374094+peaklabs-dev@users.noreply.github.com>
Co-authored-by: Aditya Tripathi <aditya@climactic.co>
2026-11-06 14:25:02 +01:00
Andras Bacsai b7dc2e435b feat(database): default new Redis databases to the Valkey image
Change the standalone_redis image column default to
valkey/valkey:9-alpine. Existing databases keep their current image.
Update the API docs, OpenAPI specs and image helper text to name Valkey
as the default and redis:8 as the Redis example.

Also restyle the status badges and database image cards on the new
resource page.
2026-11-06 12:44:00 +01:00
Andras Bacsai 145569bea6 fix(db): bump Supabase and PostGIS default images
Supabase PostgreSQL 17.4.1.032 -> 17.11.0.018, PostGIS 17-3.5-alpine -> 18-3.7-alpine.
2026-11-06 12:39:53 +01:00
Andras BacsaiandClaude Opus 5.5 813bc72af4 fix(ui): shorten database descriptions on the new resource page
The PostgreSQL, MongoDB, and ClickHouse descriptions were cut off.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-06 12:37:36 +01:00
Andras BacsaiandClaude Opus 5.5 52d7d88fd6 docs(api): document Valkey images for Redis databases
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-06 12:37:36 +01:00
Andras BacsaiandClaude Opus 5.5 41877198b3 feat(database): offer Valkey as an image of the Redis database type
When a user creates a Redis database, a new step asks for Redis 7.2
(default) or Valkey 9. Valkey uses the same binaries (redis-* symlinks),
config, and data format, so the Redis start action runs it unchanged.
The UI now names the type "Redis / Valkey" and shows a combined logo,
and global search accepts "new valkey".

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-06 12:37:36 +01:00
Andras BacsaiandClaude Opus 5.5 878d77bd66 fix(database): make the Redis health check ping with the password
The check was [CMD-SHELL, redis-cli, ping], so Docker ran only redis-cli
and it always passed. redis-cli also exits 0 on NOAUTH and LOADING.
The check now pings with the server password and requires PONG. With a
custom redis.conf that sets its own requirepass, it requires PONG or NOAUTH.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-06 12:37:36 +01:00
Andras BacsaiandClaude Opus 5.5 5960814df5 fix(ui): match deploy canvas card border to resource tiles
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-06 12:24:59 +01:00
Andras BacsaiandClaude Opus 5.5 91d233be59 feat(ui): add list view to the new resource page
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-06 12:18:37 +01:00