78 Commits

Author SHA1 Message Date
UNITRONIX a4061a6e52 fix(security): clear OIDC race, Go CVEs, and CodeQL noise before 3.5.5
Store OIDC discovery retry interval atomically and Close() background
goroutines so TestDiscoveryRetryAfterFailure is race-free. Bump toolchain
to go1.26.9 and golang.org/x/text to v0.41.0 (govulncheck clean). Confine
multer unlink paths; harden guest session ID entropy; stop interpolating
device IDs into console format strings; expand CodeQL query filters for
validated/admin-only paths.

Thanks: INSOLVE (Honorary); Marco Jakobs (@jacotec); MyNameisStitch (@MyNameisStitch); Redspin (@playerumpknow); muopc (@muopc)
2026-10-17 16:21:39 +02:00
UNITRONIX bea83ba2e9 fix(generator): align local builds with provider capabilities
Resolve embedded artifacts from the validated manifest, expose only targets supported by the local toolchain, and keep per-target failures isolated. Update generator APIs, UI, documentation, and regression coverage.

Thanks: INSOLVE (Honorary); Marco Jakobs (@jacotec); MyNameisStitch (@MyNameisStitch); Redspin (@playerumpknow)
2026-10-05 06:55:59 +02:00
UNITRONIX 78edc5eaf4 feat: add BetterDesk management capabilities
Add allowlisted configuration management, permission diagnostics, safe service control, and repair workflows across native and Docker installers. Integrate panel capability checks with broker-backed writes and rollback, and document/test the lifecycle contract.

Thanks: INSOLVE (Honorary); Marco Jakobs (@jacotec); MyNameisStitch (@MyNameisStitch); Redspin (@playerumpknow)
2026-09-18 20:45:57 +02:00
Knienartowicz be17b3077e fix(updates): harden Go binary rebuild version and backup path
Prefer console-local VERSION/package.json for ldflags so a stale root-owned
/opt/VERSION cannot pin rebuilt binaries to an old semver. Fall back binary
backups to a writable data dir when /opt/rustdesk denies bak writes (EACCES).

Thanks: INSOLVE (Honorary); Marco Jakobs (@jacotec); MyNameisStitch (@MyNameisStitch); Redspin (@playerumpknow)
2026-09-18 10:18:35 +02:00
UNITRONIX cead414395 fix(updates): build server locally from minimal sources
Remove GitHub prebuilt server binary delivery from panel updates. Fetch only required source subtrees for the selected commit and compile the Go server locally while preserving existing deployment and rollback behavior.

Refs: panel update local build path

Thanks: INSOLVE (Honorary); Marco Jakobs (@jacotec); MyNameisStitch (@MyNameisStitch); Redspin (@playerumpknow)
2026-09-13 21:59:44 +02:00
UNITRONIX 3cb8549074 fix(updates): make server binary delivery resilient
Retry rejected GitHub artifact credentials safely, fall back to one local Go build, and suppress expected panel reconnect noise during console restarts.

Thanks: INSOLVE (Honorary); Marco Jakobs (@jacotec); MyNameisStitch (@MyNameisStitch); Redspin (@playerumpknow)
2026-09-12 23:19:57 +02:00
UNITRONIX 01aebf597c Replace CDAP Support Agent generator with BetterDesk Support templates
Install Client generator templates from GitHub, inject custom.txt for incoming-only builds, and remove the Go Support Agent pipeline.
2026-09-07 01:29:41 +02:00
UNITRONIX 3f35dda693 fix(security): patch Dependabot deps and harden scanner noise
Bump echo, qs, and browserslist; redact CDAP command/session logs;
reject restore symlinks; expand CodeQL exclusions for known FPs.

Thanks: INSOLVE (Honorary); Marco Jakobs (@jacotec); MyNameisStitch (@MyNameisStitch); Redspin (@playerumpknow)
2026-09-06 01:19:25 +02:00
UNITRONIX bc70224ce6 fix(updates): unblock install button when Go can be bootstrapped
Preflight no longer blocks panel updates when the console can install a vendored Go toolchain automatically. Add proactive preflight banners, i18n, and clearer install UX in Settings.

Thanks: INSOLVE (Honorary); Marco Jakobs (@jacotec); MyNameisStitch (@MyNameisStitch); Redspin (@playerumpknow)
2026-08-23 22:24:25 +02:00
UNITRONIX d7a2fe6562 fix(security): harden update restore and notification CSRF
Protect backup restores and session-authenticated notification writes from unsafe state changes, while clearing CodeQL false positives without weakening intentional TLS pinning.

Refs CodeQL alerts #297-310

Thanks: INSOLVE (Honorary); Marco Jakobs (@jacotec); MyNameisStitch (@MyNameisStitch); Redspin (@playerumpknow)
2026-08-23 21:08:05 +02:00
UNITRONIX 2eec0d2ceb feat(update): use commit-bound Go server artifacts
Prefer verified GitHub Actions or exact Release binaries during native updates, with checksum validation and local compilation fallback. Defer Support Agent source synchronization and rebuild queueing until after the console restart.

Thanks: INSOLVE (Honorary); Marco Jakobs (@jacotec); MyNameisStitch (@MyNameisStitch); Redspin (@playerumpknow)
2026-08-23 20:56:45 +02:00
UNITRONIX f64fbbb354 fix(security): finish privileged update path and relay auth tests
Wire the allowlisted privileged-update helper into panel/update scripts, tighten chat/remote relay checks, and add deviceAuth/update helper coverage.

Thanks: INSOLVE (Honorary); Marco Jakobs (@jacotec); MyNameisStitch (@MyNameisStitch); Redspin (@playerumpknow)
2026-08-15 23:29:01 +02:00
UNITRONIX 29d03492fb fix(installer): harden cross-platform lifecycle reliability
Harden native, agent and Docker lifecycle paths with tracked update verification, rollback and preflight checks, safe uninstall semantics, and health verification. Add shared protocol tests, installer CI gates, and lifecycle documentation.

Thanks: INSOLVE (Honorary); Marco Jakobs (@jacotec); MyNameisStitch (@MyNameisStitch); Redspin (@playerumpknow)
2026-08-15 21:50:47 +02:00
UNITRONIX 98c21032aa fix(installer): diagnose native Go module download stall
Refs #371

Thanks: INSOLVE (Honorary); Marco Jakobs (@jacotec); MyNameisStitch (@MyNameisStitch); Redspin (@playerumpknow)
2026-08-15 20:52:13 +02:00
UNITRONIX ed96e94806 refactor(agent): enhance session management and input handling
- Updated session control mechanisms to ensure proper handling of remote input and clipboard operations.
- Introduced session authorization checks to validate operator permissions before starting desktop sessions.
- Improved input injection logic to prevent unauthorized access during active sessions.
- Added new capabilities for managing session flags and controls, ensuring a more robust and secure desktop experience.
- Enhanced error handling and logging for better traceability of session-related actions.
2026-08-06 00:50:02 +02:00
UNITRONIX 1b240543bd feat(auth): implement SQLite auth consolidation and admin password validation
- Added functionality for safely consolidating legacy auth.db into the selected SQLite database, with options for dry runs and rollbacks.
- Introduced command-line flags for SQLite auth consolidation, including backup directory and rollback options.
- Enhanced admin interface security by requiring a password when the admin port is enabled, preventing unauthorized access.
- Updated related tests to ensure proper handling of admin password requirements and relay authorization logic.
2026-08-05 23:49:42 +02:00
UNITRONIX 992ba235f7 feat: enhance Support Agent capabilities and documentation
- Added support for various remote control features in the Support Agent, including file transfer, in-session chat, remote audio, and control actions (lock/restart).
- Introduced capability flags for incoming session features, allowing for more granular control over permissions.
- Updated documentation to reflect the new Support Agent functionalities and connection resilience improvements, including fallback mechanisms for API endpoints.
- Enhanced the build process with optional branding sealing and improved error handling for Docker configurations.
2026-08-03 06:47:22 +02:00
UNITRONIX 0189bcb25f fix(auth,signal): OIDC user.info, viewer-only outbound, Docker channel UX
RustDesk 1.4.x ignored OIDC auth-query success without user.info (#326).
TCP RegisterPk IP bind + client login token restore service-off outbound
without weakening managed pending rejection (#327/#302). Document Caddy
WSS/308 and clarify GHCR channel is image-tag based (#294/#299).

Refs #302 #304 #314 #315 #319 #320 #321 #323 #325 #326 #327 #294 #299
2026-07-30 19:10:44 +02:00
UNITRONIX db0dfade24 fix(windows): avoid drive-root PROJECT_ROOT breaking panel updates (Refs #272)
Default C:\BetterDeskConsole installs no longer treat C:\ as the project root, so installer file writes and SHA tracking succeed; NSSM Access Denied on server restart is non-critical.
2026-07-16 19:38:29 +02:00
UNITRONIX 5873cadb6c fix(linux): isolate Go API port from shared .env API_PORT (#219)
GO_API_PORT now overrides API_PORT=21121 in Go LoadEnv and systemd so handlers stay on :21114 while the Node Client API proxy keeps :21121. Ships via panel update and Repair HTTPS/TLS.

Refs #219
2026-07-09 20:09:40 +02:00
UNITRONIX 12fcf21203 Fix Linux HTTP/HTTPS toggle reliability (#219).
Stop repair warnings from corrupting systemd User=, unify HTTPS/TLS repair on update/toggle, and patch Go signal ports during panel updates.
2026-07-07 17:25:58 +02:00
UNITRONIX e4fb2fd1b0 feat(update): implement automatic retry for GitHub raw file downloads
- Added functionality to retry downloads from GitHub on encountering rate limit and server error status codes (429, 502, 503, 504) with exponential backoff.
- Updated the changelog to reflect the new panel updater feature that enhances locale sync reliability during large updates.
- Included tests for the new retry logic to ensure proper handling of retryable status codes.
2026-07-06 20:22:18 +02:00
UNITRONIX 3411994d60 feat(docker): introduce official single container layout and update installation scripts
- Added support for an official all-in-one Docker image (`ghcr.io/unitronix/betterdesk`) as the default installation method.
- Updated installation scripts and documentation to reflect the new single container layout.
- Retained legacy two-container layout option for backward compatibility.
- Adjusted API port from `21114` to `21121` for the new layout.
- Enhanced Docker-related scripts and configuration files to support the new structure.
- Updated various language files to ensure consistency in messaging regarding Docker deployment.
2026-07-06 19:31:22 +02:00
UNITRONIX bb2ff08f65 Fix NTP server config not reaching betterdesk-server (Fixes #223).
Wire billing/NTP env from console .env into Go on Linux, Windows, and Docker; add OS NTP fallback and Commercialization settings UI to configure and restart the server.
2026-06-27 20:33:56 +02:00
UNITRONIX fecb680d6d fix(linux): self-bootstrap panel update sudoers during deploy
Whitelist linux-ensure-console-user.js in sudoers, invoke it via passwordless
sudo from the update module, refresh sudoers after privileged server deploy,
and align betterdesk.sh repair paths so systemd unit helpers apply without a
manual root step.
2026-06-26 23:53:06 +02:00
UNITRONIX b787ad9996 fix: rdclient file transfer JS getters and Linux systemd unit updates
Replace invalid prototype getter syntax in local-files.js and mesh-files.js
so the file transfer modal loads in browsers. Panel updates patch
betterdesk-server.service via a passwordless-sudo helper instead of
interactive sudo tee.

Refs #217
2026-06-24 20:19:02 +02:00
UNITRONIX be9b0ce7dc feat(mesh): default-on migration, panel closure, KVM multiplex, WoL bridge
Ship mesh layer as default-on with updater/installer MESH_ENABLED=Y injection,
Settings groups/recordings UI, device power and filter UX, relay multiplexing,
WoL wake fallback, mesh RBAC permissions, and REST automation docs.
2026-06-21 23:38:07 +02:00
UNITRONIX d65625e599 feat(update): enhance GitHub update handling with rate limit support and caching
Added support for handling GitHub API rate limit errors in update checks and changes retrieval. Introduced a caching mechanism for GitHub API responses to improve performance. Updated environment configuration to include an optional read-only GitHub PAT for better rate limit management.
2026-06-21 10:43:37 +02:00
UNITRONIX 288da6b3a3 feat(updateService): add directory write permission check and resolve server source root
Introduced a new function to check if a directory or its parent is writable. Updated the logic to resolve the server source root for updates, ensuring it falls back to a predefined path if the preferred path is not writable. This change enhances the update process by providing better error handling and flexibility in server source management.
2026-06-17 21:35:26 +02:00
UNITRONIX 5403a04783 chore: update Go server version handling and enhance Docker build process 2026-06-11 20:31:21 +02:00
UNITRONIX 577fc79a97 chore: update Docker Compose image tags to 3.2.12 and enhance documentation for versioning 2026-06-11 18:36:48 +02:00
UNITRONIX c2e0e2e784 fix(security): harden CodeQL findings across console and Go server
Address GitHub code scanning alerts with OIDC SSRF guards, confined path
helpers, safer client routing, branding sanitization, upload rate limits,
and CodeQL config exclusions for dev-only and protocol-intentional hashes.
2026-06-11 06:57:58 +02:00
UNITRONIX 07e1e8626b fix: clear stale update banner on Windows and Docker paths
Fixes #192 — script and GHCR update flows now drop data/.last_update_result.json
the same way betterdesk.sh already does, so a failed in-panel attempt no longer
sticks around after a successful external update.
2026-06-11 04:48:38 +02:00
UNITRONIX 001de87a77 fix: clear stale update results and improve update handling
- Added functionality to clear stale update results when the local SHA matches the target SHA, preventing unnecessary warnings in the panel.
- Enhanced the update result persistence logic to filter out non-critical failures, ensuring only actionable errors are displayed.
- Updated the update service to handle remote SHA retrieval and integrate with the new result display logic.
- Improved tests for the update result handling to cover new behaviors and ensure reliability.
2026-06-10 04:26:18 +02:00
UNITRONIX 4c9a1f632e fix(security): phase-D Go API ID guards across all proxy routes
Extend assertSafeApiId to organizations, resource-control, permissions,
tokens, and update paths; harden org UI XSS and attachment confinement.
2026-06-09 03:13:53 +02:00
UNITRONIX 9b02f06465 fix(security): phase-C XSS hardening, path confinement, log redaction
Harden backup restore, theme/attachment paths, frontend escaping, and
sensitive logging without changing normal operator workflows.
2026-06-09 03:00:43 +02:00
UNITRONIX 051b44fa74 fix(update): skip repair download for removed console files
After deleting dev-only i18n scripts from the repo, post-update repair
was still trying to fetch them from GitHub (404). Exclude removed paths
from repair seeds and delete root-level script files on removal.
2026-06-09 02:31:54 +02:00
UNITRONIX 7b938d8c7b fix(security): harden path confinement, SSRF, and shell exec
Add shared safePath helper for file browser, i18n, and backup paths;
use validated OIDC discovery URLs; restrict terminal shells and
network monitor HTTP requests. Remove obsolete one-time i18n migration
scripts already merged into lang/*.json.
2026-06-09 02:21:43 +02:00
UNITRONIX c219f3be68 fix(security): patch CVE-2026-50575 and harden deps, SSRF, shell exec
Complete GHSA-3v82-3gf8-fxx8 WebSocket replay fix for soft-deleted peers,
bump vulnerable Go/Rust dependencies, and apply CodeQL-driven hardening
(OIDC URL validation, path confinement, execFileSync, rate limits).
2026-06-09 02:05:17 +02:00
UNITRONIX 87b0b21b0b fix(update): privileged Go server binary deploy from Linux panel
Hardened installs could not replace betterdesk-server in /opt/rustdesk
from Settings → Updates. Add a validated sudo deploy helper, extend
console update sudoers, and sync privileges before server deploy.

Fixes #183
2026-06-09 01:09:11 +02:00
UNITRONIX 317365c766 Add dev/main branching, automated versioning, and update channel switcher.
Introduce bump-version.js with CI workflows for patch bumps on dev and
stable releases on main, plus panel and installer UI to choose stable vs
development GitHub update branches.
2026-06-07 16:48:31 +02:00
UNITRONIX a6ec256f57 feat(update): implement last update result reporting in settings
Added a new API endpoint to retrieve the last update result, enhancing the user interface by displaying detailed error messages for failed updates. Improved the update completion modal to reflect the status of services and console restarts, ensuring users are informed of any issues. Updated the settings JavaScript to load and display the last update result dynamically, improving overall user experience during updates.
2026-06-07 15:06:48 +02:00
UNITRONIX c8d7b6afd0 feat(update): enhance error reporting and sudoers management during updates
Improved the update process by adding detailed error reporting for failed updates, including specific file and service errors. Implemented a function to manage passwordless sudoers for console service restarts, ensuring smoother updates on Linux systems. Enhanced npm installation error handling to capture and log detailed failure messages.
2026-06-07 14:57:59 +02:00
UNITRONIX 8ea3ac15ff feat(update): add index module resolution check during console file repair
Introduced a new function, isResolvedByIndexModule, to determine if a local path is resolved by an index module. This enhancement allows the repair process to skip phantom routes when an index.js file exists, improving the accuracy of the console file repair logic. Added corresponding tests to validate this behavior.
2026-06-07 14:45:11 +02:00
UNITRONIX 05fb2916ff fix(update): improve console restart handling and permission checks
Enhanced the update process to better manage console restarts by checking for blocked permissions before attempting a restart. Added logic to handle cases where console service user permissions are not verified, ensuring that appropriate messages are logged and the update phase is accurately reflected. Updated the console restart scheduling to occur after the response is sent, improving overall reliability. Additionally, modified the comment handling in the dependency scanning process to ignore requires within comments.
2026-06-07 14:41:27 +02:00
UNITRONIX 3966e2ab5e fix(update): handle per-file download errors in console sync (#173)
Continue full-tree sync and missing-file repair when individual GitHub
downloads fail, matching ensureServerSource behaviour and reporting each
failure in update results instead of aborting the whole operation.
2026-06-07 13:49:21 +02:00
UNITRONIX 248b4a049f fix(update): sync full console tree when compare diff is truncated (#173)
GitHub compare returns at most 300 changed files, so in-app panel updates could
deploy updated routes without new service modules (e.g. serverAttestation.js).
Add full web-nodejs tree sync on truncated diffs and repair missing local require
targets after incremental console updates.
2026-06-07 13:43:33 +02:00
UNITRONIX 1320457e56 feat(build): enhance agent build process and add server library support
Updated the build scripts to include the server library in the agent build process. Introduced new environment variables for Go module and build caches to improve build efficiency. Enhanced the generator route to support multiple languages and added locale labels for better user experience. Updated the generator view to dynamically populate language options based on supported languages.
2026-06-07 10:38:24 +02:00
UNITRONIX f02988fe34 fix(update): resolve project root for flat console installs
On flat Linux deployments, server source sync was writing to /opt/betterdesk-server
instead of the console directory, causing EACCES during rebuild and updates.
2026-06-07 01:09:16 +02:00
UNITRONIX e7e4e359c1 fix(update): set HOME for Go builds when service user home is not writable
Go toolchain downloads and sumdb checks also use $HOME/go even when
GOMODCACHE is set. Point HOME at the console data directory during
server auto-rebuilds.
2026-06-07 00:39:02 +02:00