Add scoped tag rename/delete APIs and Devices UI (Manage tags modal, context menu, edit/detail hints) so operators can retire or rename tags without editing every peer.
Refs #470
Thanks: INSOLVE (Honorary); Marco Jakobs (@jacotec); MyNameisStitch (@MyNameisStitch); Redspin (@playerumpknow); muopc (@muopc)
qr_code_scanner is missing from the bundled Material Icons font, so the sidebar showed raw ligature text instead of an icon.
Thanks: INSOLVE (Honorary); Marco Jakobs (@jacotec); MyNameisStitch (@MyNameisStitch); Redspin (@playerumpknow); muopc (@muopc)
Align the Node panel with Go role_permissions, protect user-directory paths and relays, and add regression coverage. Make the embedded worker test explicitly select its optional maintainer mode.
Refs #468
Thanks: INSOLVE (Honorary); Marco Jakobs (@jacotec); MyNameisStitch (@MyNameisStitch); Redspin (@playerumpknow); muopc (@muopc)
browseParent sent bare C: instead of C:\, so Win32 listed the process cwd. Use drive-root-aware parentRemotePath; clear stale remote rows while loading.
Refs #467
Thanks: INSOLVE (Honorary); Marco Jakobs (@jacotec); MyNameisStitch (@MyNameisStitch); Redspin (@playerumpknow); muopc (@muopc)
Import signed BetterDesk-Client releases instead of compiling on the panel host; mark build toolchain optional; add Główne → Aktywuj agenta pairing entry and Download Hub i18n.
Refs #466
Thanks: INSOLVE (Honorary); Marco Jakobs (@jacotec); MyNameisStitch (@MyNameisStitch); Redspin (@playerumpknow); muopc (@muopc)
Console proxy source IPs are Docker bridge addresses, not loopback; default PANEL_SIGNAL_PROXY_CIDRS on the Go server so browser remote is not denied as initiator_not_registered.
Refs #465
Thanks: INSOLVE (Honorary); Marco Jakobs (@jacotec); MyNameisStitch (@MyNameisStitch); Redspin (@playerumpknow); muopc (@muopc)
Long panel installs were surfacing as generic Request failed when a reverse
proxy cut the HTTP call around ~120s while applyUpdate kept running. Poll
install-status after gateway disconnect, clarify 502/504 errors, pin
GOTOOLCHAIN=local, and report spawn kill/timeout signals for #464.
Refs #464
Thanks: INSOLVE (Honorary); Marco Jakobs (@jacotec); MyNameisStitch (@MyNameisStitch); Redspin (@playerumpknow); muopc (@muopc)
Modernize Commercialization on packages/sessions IA: Settings Time tab with
BILLING_TIMEZONE, group-only packages, monthly period history with midnight
split, Web Remote report overlay, pending_report in Sessions, and package
preview as a centered modal. Includes panel form polish and desktop-client
API notes.
Refs #456
Thanks: INSOLVE (Honorary); Marco Jakobs (@jacotec); MyNameisStitch (@MyNameisStitch); Redspin (@playerumpknow); muopc (@muopc)
Add optional server-observed peer availability transitions and PunchHole/RequestRelay session tracking for the device Metrics tab. Drop duplicated CPU/RAM/disk cards from Metrics (kept on Overview), expose Settings toggle/retention, and wire full-width Metrics UI across all locales.
Refs #455
Thanks: INSOLVE (Honorary); Marco Jakobs (@jacotec); MyNameisStitch (@MyNameisStitch); Redspin (@playerumpknow); muopc (@muopc)
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)
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)
Track protos-static.js and public/protos/bundle.json so fresh installs and
panel updates get BetterDeskProtos without a local pbjs build. Remove the
.gitignore exclusions added with Phase 0-3 remediation.
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)