Commit Graph

1884 Commits

Author SHA1 Message Date
Mauricio Siu eb98876f88 Merge pull request #5738 from Dokploy/chore/bump-node-24.22.1
chore: bump Node.js to 24.22.1 (security release)
2026-10-22 10:56:20 -06:00
Narciso E. Núñez Arias ad222962b8 Merge pull request #5701 from Gabrielgvl/fix/registry-login-stdin
fix(security): pass registry passwords to docker login via stdin
2026-10-22 09:14:43 -04:00
Yash Kumar 95c1e81beb chore: bump Node.js to 24.22.1 (security release) 2026-10-22 14:02:21 +05:30
Narciso e76283bc09 fix: keep commands and secrets out of ExecError messages and inspect output 2026-10-21 22:18:25 -04:00
Gabriel Lima b5c5faf9f0 fix(security): pass registry login passwords through stdin
Use execFile arguments for local login and the SSH stream for remote login. Discard execution errors after sanitizing their messages so echoed credentials cannot survive in nested error fields.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 12:18:12 -03:00
Souvik Kumar e0c8d80cde fix: decode Route53 octal escapes in record names (#5553)
* fix: decode Route53 octal escapes in record names

* fix: keep escaped dots and backslashes in Route53 record names
2026-10-16 21:10:45 +05:30
Yash Kumar 41cecde735 fix: escape metadata fields and fix entity boundary off-by-one 2026-10-16 16:09:00 +05:30
Yash Kumar 3e75dc64f3 Update packages/server/src/utils/notifications/utils.ts
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
2026-10-16 16:04:26 +05:30
Yash Kumar 7430afd701 fix: escape HTML and truncate long messages in Telegram notifications 2026-10-16 15:53:30 +05:30
Narciso E. Núñez Arias c867a3c4c9 Merge pull request #5489 from imrja8/feat/ai-custom-role-permissions
feat(permissions): add AI module to enterprise custom roles
2026-10-15 13:13:52 -04:00
Narciso 16c22c74fd chore(deps): bump brace-expansion and source-map-js in emails lockfile 2026-10-15 13:02:00 -04:00
Yash Kumar 37df4e484e fix: suppress EPIPE errors in pipeBetweenServers when target exits early 2026-10-15 21:51:48 +05:30
Yash Kumar 5ff8d05ff7 perf(ai): optimize permission evaluation and remove redundant DB queries 2026-10-15 21:51:48 +05:30
Yash Kumar a9871f3a8d refactor(ai): DRY saveAiSettings and enforce strict NOT_FOUND validation 2026-10-15 21:51:48 +05:30
Yash Kumar 3d67665c33 fix(ai): require update permission for stored key resolution, deduplicate resolve logic 2026-10-15 21:51:48 +05:30
Yash Kumar 2bfcac58b0 fix(ai): mask apiKey exposure, add audit logging, resolve masked-key UX regression 2026-10-15 21:51:48 +05:30
Yash Kumar a7d8378f52 fix(permissions): mask apiKey on ai.one, add audit logging, remove dead endpoint 2026-10-15 21:51:48 +05:30
Yash Kumar cd9edb290b fix(permissions): resolve AI module authorization edge cases and test failures 2026-10-15 21:51:31 +05:30
Yash Kumar b5473e63fd feat(permissions): add AI module to enterprise custom roles 2026-10-15 21:51:31 +05:30
Yash Kumar 502d6c8a18 Merge branch 'canary' into dependabots-alerts 2026-10-15 00:44:53 +05:30
Yash Kumar a7d8dff360 Merge pull request #5624 from Dokploy/feat/logs-and-metrics
feat(logs-and-metrics): ship container logs and metrics to external providers via Vector
2026-10-15 00:08:48 +05:30
Narciso E. Núñez Arias ccd26e946b Merge pull request #5655 from ahmedisam99/fix/gitlab-token-refresh-race
fix(gitlab): share one token refresh between concurrent callers
2026-10-12 10:08:10 -04:00
Narciso E. Núñez Arias 29107d88fc Merge pull request #5649 from imrja8/feat/dual-mode-branding
feat(enterprise): dual-mode branding with separate light/dark theme logos
2026-10-12 09:59:25 -04:00
ahmedisam99 412516d47b fix(gitlab): share one token refresh between concurrent callers
GitLab invalidates a refresh token when it is used. Two deployments that found the token expired at the same time sent the same refresh token, and the second one failed with "Failed to refresh token: Bad Request".
2026-10-12 11:54:35 +03:00
Yash Kumar 0b537a815d feat(enterprise): dual-mode branding with separate light/dark theme logos 2026-10-11 19:10:06 +05:30
Narciso b329595370 feat(logs-and-metrics): ship container logs and metrics to external providers via Vector 2026-10-08 10:08:10 -04:00
Tom Ron 2674eb200d fix(dns): enforce the configured OVH zone on record operations
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-08 09:13:50 +03:00
Tom Ron e8f236c9db feat(dns): add optional zone to OVH provider
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-07 22:02:45 +03:00
Narciso 9992659f24 fix(deps): bump nodemailer and patch transitive high advisories 2026-10-07 09:49:40 -04:00
Narciso 88cb057e06 Merge remote-tracking branch 'origin/canary' into dependabots-alerts 2026-10-07 08:49:24 -04:00
Narciso 7289a3f68e fix(deps): bump next, shell-quote and proxy-addr for critical advisories 2026-10-07 08:49:23 -04:00
cevheri 06b3bb282a fix(libsql): validate appName like the other database kinds 2026-10-04 23:06:47 +03:00
Mauricio Siu c6a2b2437d Merge branch 'canary' into feat/self-delete-account 2026-09-30 23:53:57 -06:00
Narciso E. Núñez Arias cec5b65cd6 Merge pull request #5482 from qirh/add-perplexity-attribution 2026-09-29 15:01:14 -04:00
Narciso E. Núñez Arias 916bb50e73 fix: redact S3 credentials in backup logs regardless of shell quoting (#5527) 2026-09-29 13:03:59 -04:00
Souvik Kumar 0d3a3966b0 fix: count only physical disks in host Block I/O stats (#5540)
* fix: count only physical disks in host Block I/O stats and skip partitioned md arrays and test the Block I/O sum
2026-09-29 11:47:05 -04:00
Souvik Kumar 6215c7f159 fix: redact S3 credentials in backup logs regardless of shell quoting 2026-09-27 00:23:23 +05:30
Narciso Nunez 5e0b021ec2 fix(deps): resolve open Dependabot alerts 2026-09-23 17:40:39 -04:00
Saleh Alghusson f2ba262499 feat(ai): add Perplexity integration attribution 2026-09-18 13:26:27 -05:00
Mauricio Siu 95b2712c26 fix(billing): pick a plan for the trial and warn before it expires
Trials were always Hobby, so a trial user who wanted Startup had to go
through Checkout, which created a second subscription on the same
customer. Seven days later Stripe cancelled the trial sub and the webhook,
matching only on customer id, zeroed serversQuantity and deactivated the
servers of someone who was already paying.

The trial now starts on the plan the user chooses and switching plans
mutates that same subscription, so a customer never holds two.

- startFreeTrial takes a tier; TRIAL_SERVER_LIMIT becomes TRIAL_SERVER_LIMITS
  (Hobby 1 server, Startup 3)
- onboarding offers both plans with a trial and a subscribe button
- billing exposes Switch to Startup/Hobby during the trial and hides the
  checkout CTAs and server steppers that would create a second subscription
- upgradeSubscription caps the server count to the plan's included servers
  while trialing and skips proration, which emitted an orphan invoice
- webhook treats trialing as active instead of disabling servers, and
  guards invoices that carry no subscription
- getBillingStatus reports hasPaymentMethod, so the banners stop asking for
  a card once one is on file
- new cloud-only daily job emails trial users without a payment method at 3
  and 1 days left, deduped through subscription metadata claimed before the
  send so concurrent replicas cannot double-send
2026-09-18 02:35:27 -06:00
Mauricio Siu a87a5c06f0 feat: account deletion for Dokploy Cloud
Self-service deletion from Settings > Profile confirmed with the account
password (when present) plus a 6-digit code sent by email, and a root-only
"delete by email" tool in the impersonation bar to fulfil GDPR requests.

Both paths run the same flow: cancel every Stripe subscription (customer is
kept for invoicing), delete the user and all owned organizations in one
transaction, anonymize audit trail left in other organizations, reassign
pending invitations to the org owner, remove the HubSpot contact when
HUBSPOT_ACCESS_TOKEN is configured, and log a JSON deletion record.

Also blocks better-auth's raw /admin/remove-user endpoint and makes the
Stripe webhook tolerate subscription/customer events for already deleted
users.
2026-09-14 11:01:47 -06:00
EgerDev 45dcdfc5be test(compose): tighten models types and regression tests 2026-09-11 00:11:40 -07:00
EgerDev 29cdc815db feat(compose): support AI models in Compose specification 2026-09-10 20:28:28 -07:00
Narciso E. Núñez Arias 9fa98de9c1 Merge pull request #5350 from RezaRahemtola/fix/ntfy-database-backup-newline
fix(notifications): add missing newline to ntfy database backup message
2026-09-10 19:00:08 -04:00
Artur Spatari 0c1dfe978c fix(vault): read Infisical secrets pulled in through an import
Fixes #5413. A secret brought into a folder with "Import Secrets" was reported
as not found. Two reasons, and the first is easy to miss:

The list endpoint takes the flag in **snake_case**. `includeImports` is
silently ignored — the request still returns 200, with `imports` present but
empty — so the imported secret looked like it simply did not exist. Measured
against app.infisical.com with a registered import (confirmed via
GET /api/v1/secret-imports):

  expandSecretReferences=true                        imports[] empty
  expandSecretReferences=true&includeImports=true    imports[] empty
  expandSecretReferences=true&include_imports=true   imports[] has the secret

Second, imported secrets never appear in `secrets` — they come back in a
separate `imports` array, one entry per source path, which the client did not
read at all.

Imported entries are merged before the folder's own, so a name defined in both
resolves to the local value, matching how Infisical resolves it.

Also measured, for whoever looks next: `/api/v4/secrets` returns imports with
no flag at all, and single-secret reads (`/raw/{name}`) never see an imported
key — 404 on v3, no such route on v4. So a folder listing is the only way to
reach them.

vault.test.ts: 57 passed. Reverting the fix fails the new merge test.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-10 10:26:52 +03:00
Mauricio Siu 49b8214e5d feat(compose): add pull latest images on deploy toggle 2026-09-09 17:13:24 -06:00
Mauricio Siu 9dcdb53aa1 feat(transfer): move services between servers with their volumes, mounts and config
Adds a Transfer action on every service page that moves an application,
compose or database to another server without S3: volumes, bind mounts
and deployment logs are streamed through the panel (ssh2/spawn pipe),
file mounts and Traefik config are recreated on the target, the source
is cleaned up and the service is deployed on the target. Failures before
cleanup roll back to the source server.
2026-09-09 02:50:29 -06:00
Mauricio Siu bda8124291 Merge pull request #5351 from Dokploy/fix/dependabot-critical-security-updates
fix: resolve 6 critical Dependabot alerts
2026-09-08 16:29:38 -06:00
Mauricio Siu 85786a3196 Merge pull request #5386 from Dokploy/fix/server-health-address-pools
fix(server-health): detect custom default-address-pools via docker info
2026-09-08 16:04:50 -06:00
Mauricio Siu ea3f9f3b53 fix(server-health): detect custom default-address-pools via docker info
/etc/docker/daemon.json isn't mounted into the dokploy container, only
docker.sock is, so cat-ing it always failed silently. Read the effective
config over the already-mounted socket instead.

Fixes #5383
2026-09-08 16:01:48 -06:00