276 Commits

Author SHA1 Message Date
UNITRONIX ad23812c37 fix(security): make GitHub fetch SSRF guard CodeQL-visible
Use allowlisted hostname literals with https.get options instead of a
full URL string so request-forgery analysis sees a fixed host.

Thanks: INSOLVE (Honorary); Marco Jakobs (@jacotec); MyNameisStitch (@MyNameisStitch); Redspin (@playerumpknow); muopc (@muopc)
2026-10-17 16:36:40 +02:00
UNITRONIX 44221f721b fix(security): close remaining CodeQL findings before 3.5.5
Confine multer unlink to reconstructed safe paths, rate-limit public
agent downloads, allowlist GitHub fetch hosts and local builder tools.
Expand CodeQL query filters for validated false positives.

Thanks: INSOLVE (Honorary); Marco Jakobs (@jacotec); MyNameisStitch (@MyNameisStitch); Redspin (@playerumpknow); muopc (@muopc)
2026-10-17 16:32:23 +02:00
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 235c9c0706 security: implement Phase 0-3 remediation (deps, SQL ident, JWT, CSP, suite)
Bump axios/multer and npm overrides; add safeSqlIdent and multer cleanup;
harden JWT aud/iss/nbf; CSP without unsafe-eval via static protobuf build
and data-bd-call delegation; ship Security Test Suite v1.2.0 and docs.
Ignore generated RdClient protobuf artifacts (~40k lines) — rebuild locally
with npm run protocols:rdclient.

Thanks: INSOLVE (Honorary); Marco Jakobs (@jacotec); MyNameisStitch (@MyNameisStitch); Redspin (@playerumpknow); muopc (@muopc)
2026-10-17 15:33:48 +02:00
UNITRONIX e4f55ebcdc feat(web): add Auth TOTP and scheduled full backups
Move personal TOTP management into Authentication, fix locale metadata, and add validated scheduled full-instance backups with local and mounted network destinations.

Thanks: INSOLVE (Honorary); Marco Jakobs (@jacotec); MyNameisStitch (@MyNameisStitch); Redspin (@playerumpknow); muopc (@muopc)
2026-10-17 13:31:23 +02:00
UNITRONIX d57fe3dc49 feat(generator): add generic agent releases and QR activation
Adds local verification and distribution of signed generic incoming-only agent releases, mobile-friendly QR activation, and the supporting generator interfaces. Includes the current staged console, documentation, localization, and builder changes.\n\nThanks: INSOLVE (Honorary); Marco Jakobs (@jacotec); MyNameisStitch (@MyNameisStitch); Redspin (@playerumpknow)
2026-10-11 00:43:26 +02:00
UNITRONIX 454978cb73 fix(enrollment): retain signal transport after approval
Keep pending managed devices attached to their live signal transport while still blocking sessions until operator approval. Add signal readiness reporting, immediate device-list refresh, and regression coverage for issue #442.

Refs #442

Thanks: INSOLVE (Honorary); Marco Jakobs (@jacotec); MyNameisStitch (@MyNameisStitch); Redspin (@playerumpknow)
2026-10-07 15:59:00 +02:00
UNITRONIX ecc77b784e feat(generator): add local Linux package formats
Build local Linux clients once and package them as portable archives, Debian packages, RPMs, or Arch packages when the host toolchain supports the format. Keep artifact manifests and validation format-aware.

Thanks: INSOLVE (Honorary); Marco Jakobs (@jacotec); MyNameisStitch (@MyNameisStitch); Redspin (@playerumpknow)
2026-10-05 10:39:57 +02:00
UNITRONIX e94d9a0c36 fix(generator): expose generation methods through database facade
Delegate generation staging and promotion through the legacy database facade so embedded local builds can promote completed artifacts. Extend facade parity coverage to prevent the regression.

Thanks: INSOLVE (Honorary); Marco Jakobs (@jacotec); MyNameisStitch (@MyNameisStitch); Redspin (@playerumpknow)
2026-10-05 08:18:37 +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 6af0c5a65a feat(remote): add gated RDP/VNC dependency updates
Pin the upstream gateway source, verify checksums and licenses in CI, and prepare reviewed dependency update PRs. Keep runtime activation fail-closed while the VNC GPL dependency remains outside the project policy.

Thanks: INSOLVE (Honorary); Marco Jakobs (@jacotec); MyNameisStitch (@MyNameisStitch); Redspin (@playerumpknow)
2026-10-04 00:56:07 +02:00
UNITRONIX f018f8f3c9 fix(console): polish dashboard chat and accessibility
Complete the console UI and chat relay follow-up work, including dashboard uptime placement, branding form styling, accessibility icon compatibility, security audit coverage, and device/operator chat delivery.\n\nRefs #440\n\nThanks: INSOLVE (Honorary); Marco Jakobs (@jacotec); MyNameisStitch (@MyNameisStitch); Redspin (@playerumpknow)
2026-10-03 10:44:20 +02:00
UNITRONIX abc00b8804 feat(guest): enforce scoped guest access lifecycle
Bind guest WebSocket sessions to a single target peer, enforce grant lifecycle and atomic usage, add the guest issuer scope, and document the password-less security boundary.\n\nRefs #440\n\nThanks: INSOLVE (Honorary); Marco Jakobs (@jacotec); MyNameisStitch (@MyNameisStitch); Redspin (@playerumpknow)
2026-10-03 10:22:20 +02:00
UNITRONIX ee913ea910 fix(docker): serialize split admin bootstrap
Refs #385

Thanks: INSOLVE (Honorary); Marco Jakobs (@jacotec); MyNameisStitch (@MyNameisStitch); Redspin (@playerumpknow)
2026-09-26 02:25:51 +02:00
UNITRONIX 5fd8ed9082 feat(attestation): customize server badge labels
Add persistent Server Attestation badge title and tier labels with branding-aware rendering, localized fallbacks, and protected configuration endpoints. Include validation, public display sanitization, UI controls, and regression tests.\n\nRefs #394\n\nThanks: INSOLVE (Honorary); Marco Jakobs (@jacotec); MyNameisStitch (@MyNameisStitch); Redspin (@playerumpknow)
2026-09-25 10:59:44 +02:00
UNITRONIX 856002d389 fix(split-docker): unlock connection strategy settings
Allow the split console to read and write the P2P, relay, NAT, and initiator policy through the Go server's shared database API. Apply validated changes atomically at runtime, keep native systemd and compose paths unchanged, and cover the flow with regression tests and Docker image checks.

Refs #432

Thanks: INSOLVE (Honorary); Marco Jakobs (@jacotec); MyNameisStitch (@MyNameisStitch); Redspin (@playerumpknow)
2026-09-25 00:04:22 +02:00
UNITRONIX e7e1bf31f0 fix(relay): preserve empty RustDesk raw frames
Accept valid zero-length BytesCodec frames in the Node and Go raw relay paths while continuing to reject empty protobuf control frames. This keeps native and mixed relay transports compatible with RustDesk peers and empty raw payloads.

Thanks: INSOLVE (Honorary); Marco Jakobs (@jacotec); MyNameisStitch (@MyNameisStitch); Redspin (@playerumpknow)
2026-09-24 22:48:02 +02:00
UNITRONIX 717630d26c fix(web-remote): auto-tune mobile RDClient sessions
Add automatic mobile codec, FPS, touch, lifecycle, and relay diagnostics while preserving the HTTP H.264 fallback. Avoid opening file-transfer relays during the initial session and document the HTTPS/HTTP behavior.

Thanks: INSOLVE (Honorary); Marco Jakobs (@jacotec); MyNameisStitch (@MyNameisStitch); Redspin (@playerumpknow)
2026-09-24 22:36:49 +02:00
UNITRONIX d514ffc18b feat(devices): queue reversible desktop connection mode
Operators can switch a BetterDesk Desktop client between normal and incoming-only. The command is stored per device and delivered only inside the signed telemetry envelope.

Thanks: INSOLVE (Honorary); Marco Jakobs (@jacotec); MyNameisStitch (@MyNameisStitch); Redspin (@playerumpknow)
2026-09-22 08:40:08 +02:00
UNITRONIX e1bd92a7e4 fix(docker): hot-reload billing clock settings in split deployments
Persist panel-managed NTP settings in the Go server database and apply them without requiring systemd or host Docker access in split image deployments. Keep native restart behavior and make failed restart transactions dismissible in the UI.

Refs #431

Thanks: INSOLVE (Honorary); Marco Jakobs (@jacotec); MyNameisStitch (@MyNameisStitch); Redspin (@playerumpknow)
2026-09-20 17:26:32 +02:00
UNITRONIX f4e2a16ad3 Accept stripped desktop binaries in generator module 2026-09-19 20:51:15 +02:00
UNITRONIX 854d291c3c Complete BetterDesk Support generator workflow 2026-09-19 18:53:19 +02:00
UNITRONIX 76540745e3 feat(settings): simplify appearance configuration
Remove appearance live previews, centralize theme palettes, and standardize the responsive settings layout.

Thanks: INSOLVE (Honorary); Marco Jakobs (@jacotec); MyNameisStitch (@MyNameisStitch); Redspin (@playerumpknow)
2026-09-19 11:00:34 +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
UNITRONIX 47e3d2ce47 feat(console): coordinate service restarts and login metadata
Coordinate restart-required settings changes through authenticated, reversible transactions and synchronize legacy user last-login timestamps. Include the completed locale updates and restart-flow UI/service changes.

Refs #426

Thanks: INSOLVE (Honorary); Marco Jakobs (@jacotec); MyNameisStitch (@MyNameisStitch); Redspin (@playerumpknow)
2026-09-18 18:26:42 +02:00
Knienartowicz 30585a8bc7 fix(panel): persist connection mode via privileged systemd drop-in
Panel runs as betterdesk and cannot rewrite /etc/systemd/system/*.service.
Write ALLOW_SHARED_NAT_INITIATOR and related flags through the fixed root
broker into a service.d drop-in so Settings no longer fails with EACCES.

Thanks: INSOLVE (Honorary); Marco Jakobs (@jacotec); MyNameisStitch (@MyNameisStitch); Redspin (@playerumpknow)
2026-09-18 10:29:26 +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 01d8037bcd feat(signal): restrict outbound RustDesk sessions
Add opt-in OPERATOR_ONLY_OUTBOUND enforcement for PunchHole and RequestRelay, including live role checks, decision auditing, panel RBAC, settings, documentation, and regression tests.\n\nRefs #425\n\nThanks: INSOLVE (Honorary); Marco Jakobs (@jacotec); MyNameisStitch (@MyNameisStitch); Redspin (@playerumpknow)
2026-09-17 17:18:50 +02:00
UNITRONIX d03129cf8f feat(security): integrate reviewed contributor fixes on dev
Integrate focused, reviewed contributor fixes on dev: bounded transport framing, live peer-ID rename, explicit enrollment precedence, lazy file-transfer compatibility, focused tests, and provenance/attribution documentation.

Refs #346

Thanks: INSOLVE (Honorary); Marco Jakobs (@jacotec); MyNameisStitch (@MyNameisStitch); Redspin (@playerumpknow)
2026-09-17 03:44:18 +02:00
UNITRONIX 0161fc5fc8 feat(signal): require login for stock initiators
Implement opt-in account-bound initiation for stock RustDesk clients, including strict token enforcement, panel configuration, tests, documentation, and translations.

Refs #414

Thanks: INSOLVE (Honorary); Marco Jakobs (@jacotec); MyNameisStitch (@MyNameisStitch); Redspin (@playerumpknow)
2026-09-15 17:32:57 +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 5d4baad6d1 fix: stabilize BetterDesk API and support installer 2026-09-13 12:54:08 +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 a549706e5b Add BetterDesk device telemetry and secure API transport 2026-09-12 22:38:26 +02:00
UNITRONIX 3a1156e7c8 fix(ui): UX 3.5 light topbar, a11y/i18n, and panel polish
Stop tracking obsolete betterdesk-agent/client/desktop and rdclient-desktop trees (gitignore *_old local copies).

Thanks: INSOLVE (Honorary); Marco Jakobs (@jacotec); MyNameisStitch (@MyNameisStitch); Redspin (@playerumpknow)
2026-09-12 12:30:06 +02:00
UNITRONIX 32ac37da7b fix(web): enlarge BetterDesk B mark in favicon and logo slots
Default tab icon used thin lines; the PNG mark is letterboxed so the B looked tiny in the rail and browser chrome. Prefer a large B favicon and object-fit cover on icon slots.

Thanks: INSOLVE (Honorary); Marco Jakobs (@jacotec); MyNameisStitch (@MyNameisStitch); Redspin (@playerumpknow)
2026-09-11 15:16:44 +02:00
UNITRONIX a070eb0bc3 Fix Support Generator builds and UI validation
Reject stub-only template packages, hide legacy CDAP bundles, and fix the slug pattern / builds title i18n.
2026-09-07 06:55:25 +02:00
UNITRONIX 6f07a957e8 Fix Support Generator module install and i18n
Fall back when GitHub /releases/latest is missing, return clear errors, and translate the module install gate.
2026-09-07 06:44:20 +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 cef2ab7c8e fix(signal): close shared-NAT RelayResponse gaps and add opt-in initiator
Correlate RelayResponse via pending UUID/initiator store and panel CIDRs;
stop FindByIP ticket misdelivery. Opt-in ALLOW_SHARED_NAT_INITIATOR for
stock multi-device CGNAT without peer identity inheritance.

Refs #399

Thanks: INSOLVE (Honorary); Marco Jakobs (@jacotec); MyNameisStitch (@MyNameisStitch); Redspin (@playerumpknow)
2026-09-03 21:25:50 +02:00
UNITRONIX d1e31c0c26 feat(generator): allow custom download portal product label
Operators can override or hide download.product_* on the public
download page via bundle branding without rebuilding installers.

Refs #386

Thanks: INSOLVE (Honorary); Marco Jakobs (@jacotec); MyNameisStitch (@MyNameisStitch); Redspin (@playerumpknow)
2026-08-29 21:58:03 +02:00
UNITRONIX 0bfecddd00 fix(docker): sync bootstrap admin password between Go and console (#385)
Fresh Docker installs without ADMIN_PASSWORD generated two different random
passwords: Go wrote /opt/rustdesk/.admin_credentials while the panel
authenticated against auth.db seeded by Node.js. Pre-bootstrap a shared
password in entrypoints before supervisord / server start.

Refs #385

Thanks: INSOLVE (Honorary); Marco Jakobs (@jacotec); MyNameisStitch (@MyNameisStitch); Redspin (@playerumpknow)
2026-08-24 15:08:35 +02:00
UNITRONIX 780cfb6660 fix(users): implement missing ensureUserGuid for strategy assignment
Refs #384

setUserStrategyAssignment and getUserStrategyGuid called ensureUserGuid in dbAdapter but the helper was never implemented, causing TypeError and generic Server error on every user create/update. Add SQLite and PostgreSQL helpers plus integration tests.

Thanks: INSOLVE (Honorary); Marco Jakobs (@jacotec); MyNameisStitch (@MyNameisStitch); Redspin (@playerumpknow)
2026-08-24 14:25:23 +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 f354e83a14 fix(console): surface registration notifications and stabilize relay delivery
Expose pending LAN and managed enrollment requests in the UX 3.5 notification center, synchronize badges through authenticated panel events with polling fallback, and refresh the registrations view automatically. Also include the pending relay transport fixes already present in the working tree.

Thanks: INSOLVE (Honorary); Marco Jakobs (@jacotec); MyNameisStitch (@MyNameisStitch); Redspin (@playerumpknow)
2026-08-23 15:27:13 +02:00
UNITRONIX 25618caac1 fix(console): fail closed on missing peer/strategy scope writers
Reject POST/PATCH /api/users before mutating when peer grant or strategy
assignment DB methods are absent; return refreshed scope on PATCH; warn
on unknown peerIds; add facade parity and scope regression tests.

Refs #380

Thanks: INSOLVE (Honorary); Marco Jakobs (@jacotec); MyNameisStitch (@MyNameisStitch); Redspin (@playerumpknow)
2026-08-22 01:17:41 +02:00
UNITRONIX 7fe4478088 fix(console): wire peer grant facade exports for user peerIds
POST/PATCH /api/users accepted peerIds but never wrote user_peer_grants
because get/setUserPeerGrants (and strategy helpers) were missing from
the database.js facade. Refs #380

Thanks: INSOLVE (Honorary); Marco Jakobs (@jacotec); MyNameisStitch (@MyNameisStitch); Redspin (@playerumpknow)
2026-08-20 08:20:20 +02:00