Commit Graph

228 Commits

Author SHA1 Message Date
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 03efbde268 fix(docker): restore Web Console CI bootstrap/guard gates
Make guard-sqlite-auth-split self-contained via _guard_file_exists so
orphan auth.db detection works when the script is sourced alone (unit
tests) while still preferring file_exists_as_betterdesk under entrypoints.
Align bootstrap credential tests with #385 (generate/export shared
password; publish ADMIN_PASSWORD to .admin_credentials).

Thanks: INSOLVE (Honorary); Marco Jakobs (@jacotec); MyNameisStitch (@MyNameisStitch); Redspin (@playerumpknow); muopc (@muopc)
2026-10-17 16:03:35 +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 6f6a54fb2d fix(ui): restore desktop Settings navigation alignment
Restore the original vertical Settings navigation bleed above the mobile-shell breakpoint and add a desktop contract regression check.\n\nRefs #396\n\nThanks: INSOLVE (Honorary); Marco Jakobs (@jacotec); MyNameisStitch (@MyNameisStitch); Redspin (@playerumpknow); muopc (@muopc)
2026-10-15 22:07:32 +02:00
UNITRONIX 33199413fc fix: resolve relay metadata and settings navigation issues
Fix WSS relay peer metadata, align UX 3.5 Settings navigation, and document trusted proxy requirements for OIDC SSO. Add regression coverage across Go and Node.js paths.\n\nThanks: INSOLVE (Honorary); Marco Jakobs (@jacotec); MyNameisStitch (@MyNameisStitch); Redspin (@playerumpknow); muopc (@muopc)
2026-10-14 22:48:31 +02:00
UNITRONIX 2ae3721708 fix: harden address book and websocket diagnostics
Normalize empty Address Book responses for RustDesk 1.5.0, use the live WSS correlation address for relay advertisements, and add OIDC/proxy and login UI regression coverage.\n\nRefs #449, #415, #443, #396\n\nThanks: INSOLVE (Honorary); Marco Jakobs (@jacotec); MyNameisStitch (@MyNameisStitch); Redspin (@playerumpknow); muopc (@muopc)
2026-10-14 06:49:47 +02:00
UNITRONIX ae47747929 feat(oidc): add SSO-first login and role overrides
Add configurable SSO-first login with local recovery paths and allow administrators to manage OIDC roles without losing manual overrides when no group mapping matches. Keep explicit OIDC group mappings authoritative and preserve LDAP provider-managed roles.

Refs #443

Thanks: INSOLVE (Honorary); Marco Jakobs (@jacotec); MyNameisStitch (@MyNameisStitch); Redspin (@playerumpknow)
2026-10-12 11:14:20 +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 ed60a614b9 test(docker): cover helper load order for entrypoints
Document the #437 startup regression fix and assert that all Docker entrypoints load shared helpers before path checks or the SQLite guard.

Refs #437

Thanks: INSOLVE (Honorary); Marco Jakobs (@jacotec); MyNameisStitch (@MyNameisStitch); Redspin (@playerumpknow)
2026-10-08 08:25:31 +02:00
UNITRONIX 5da3cb1334 fix(docker): skip native NTP restart prompt in split mode
Expose split-Docker mode before saving NTP settings so the console skips the native restart confirmation and reports hot-reload success. Preserve the native restart flow, add route/UI regression coverage, and localize the new success message across all console locales.

Refs #431

Thanks: INSOLVE (Honorary); Marco Jakobs (@jacotec); MyNameisStitch (@MyNameisStitch); Redspin (@playerumpknow)
2026-10-08 07:59:21 +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 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 f762653a5b fix(docker): load bootstrap helpers before path checks
Prevent split server and console wrappers from calling file_exists_as_betterdesk before the bootstrap helper is loaded. Add contract coverage and improve #385 diagnostics for database-store and proxy/session failures.

Refs #385

Thanks: INSOLVE (Honorary); Marco Jakobs (@jacotec); MyNameisStitch (@MyNameisStitch); Redspin (@playerumpknow)
2026-10-01 19:58:05 +02:00
UNITRONIX 602c4e798b fix(docker): preserve secrets on hardened bind mounts
Refs #424

Thanks: INSOLVE (Honorary); Marco Jakobs (@jacotec); MyNameisStitch (@MyNameisStitch); Redspin (@playerumpknow)
2026-09-26 03:02:17 +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 cd0ba866c0 fix(ui): optimize responsive Settings navigation
Align Settings tab density and header spacing with the UX 3.5 mobile shell through 1024px. Add UI contracts for sticky behavior, horizontal scrolling, compact breakpoints, and hash tab scrolling.

Refs #396

Thanks: INSOLVE (Honorary); Marco Jakobs (@jacotec); MyNameisStitch (@MyNameisStitch); Redspin (@playerumpknow)
2026-09-26 02:16:06 +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 1ad08cfe6f fix(ui): allow LDAP/OIDC user group assignment
Refs #436

Thanks: INSOLVE (Honorary); Marco Jakobs (@jacotec); MyNameisStitch (@MyNameisStitch); Redspin (@playerumpknow)
2026-09-24 23:35:17 +02:00
UNITRONIX 49efd640c1 fix(web-remote): prevent mobile canvas flicker
Avoid resetting the canvas during visual viewport scroll events and only resize when the rendered viewport dimensions actually change. This prevents transient black bars while interacting with the remote desktop on tablets.

Thanks: INSOLVE (Honorary); Marco Jakobs (@jacotec); MyNameisStitch (@MyNameisStitch); Redspin (@playerumpknow)
2026-09-24 23:30:09 +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 854d291c3c Complete BetterDesk Support generator workflow 2026-09-19 18:53:19 +02:00
UNITRONIX 6339e11ac9 fix(ui): remove unsupported appearance icons
Use a supported folder icon and a CSS-only disclosure chevron so the profile header never renders icon names as text.

Thanks: INSOLVE (Honorary); Marco Jakobs (@jacotec); MyNameisStitch (@MyNameisStitch); Redspin (@playerumpknow)
2026-09-19 11:15:22 +02:00
UNITRONIX fd4ba9c5e5 fix(ui): render appearance disclosure icon
Use the self-hosted Material Symbols font for the profile disclosure chevron.

Thanks: INSOLVE (Honorary); Marco Jakobs (@jacotec); MyNameisStitch (@MyNameisStitch); Redspin (@playerumpknow)
2026-09-19 11:09:33 +02:00
UNITRONIX 36da8a112d fix(update): preserve explicit config file extensions
Prevent the console repair scan from turning JSON requires into .json.js download paths.

Thanks: INSOLVE (Honorary); Marco Jakobs (@jacotec); MyNameisStitch (@MyNameisStitch); Redspin (@playerumpknow)
2026-09-19 11:04:49 +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 0301dc7f0f fix(docker): normalize split server database path
Ensure custom split deployments without an explicit DB_URL use the same absolute volume-backed SQLite path as credential bootstrap. Preserve DB_PATH and PostgreSQL DATABASE_URL overrides, and cover the entrypoint contract with a regression test.

Refs #385

Thanks: INSOLVE (Honorary); Marco Jakobs (@jacotec); MyNameisStitch (@MyNameisStitch); Redspin (@playerumpknow)
2026-09-18 20:25:34 +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 75a77a368e fix(docker): align auth stores and remove withdrawn agent builds
Make split Compose services use one explicit primary SQLite database and forward admin credentials to both Go and Node.js. Remove Docker and installer CI dependencies on withdrawn agent source trees, and add regression coverage for Docker build contexts and bootstrap mappings.

Refs #385

Thanks: INSOLVE (Honorary); Marco Jakobs (@jacotec); MyNameisStitch (@MyNameisStitch); Redspin (@playerumpknow)
2026-09-16 13:09:51 +02:00
UNITRONIX 8f6fb91ea4 fix(panel): address first-testing UX feedback from #424
Make UX 3.5 the only default shell, fix appearance-profile duplication selection, and give authenticated Settings reads their own rate-limit budget so normal console use stops hitting 429s.

Refs #424

Thanks: INSOLVE (Honorary); Marco Jakobs (@jacotec); MyNameisStitch (@MyNameisStitch); Redspin (@playerumpknow)
2026-09-16 07:10:50 +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 07c571e038 fix: stabilize BetterDesk heartbeat and device details 2026-09-13 21:38:39 +02:00
UNITRONIX 4207a56ea4 ci: restore dev action checks
Remove stale version-bump paths, eliminate Gitleaks false positives, and update vulnerable console dependencies.\n\nThanks: INSOLVE (Honorary); Marco Jakobs (@jacotec); MyNameisStitch (@MyNameisStitch); Redspin (@playerumpknow)
2026-09-13 21:37:13 +02:00
UNITRONIX 6f3df2ac5b fix: keep WAN heartbeat stable 2026-09-13 18:17:45 +02:00
UNITRONIX bcc7b4d42c fix: expose public bootstrap routes 2026-09-13 17:36:27 +02:00