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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
Use the self-hosted Material Symbols font for the profile disclosure chevron.
Thanks: INSOLVE (Honorary); Marco Jakobs (@jacotec); MyNameisStitch (@MyNameisStitch); Redspin (@playerumpknow)
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)
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)
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)
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)
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)
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)
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)
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)
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)