122 Commits

Author SHA1 Message Date
UNITRONIX b73648651d feat(console): add Client Branding for desktop remotes
Admin page and Go /api/branding schema v1 with logo/contact fields,
RustDesk-safe heartbeat projections, i18n, and handler tests.

Thanks: INSOLVE (Honorary); Marco Jakobs (@jacotec); MyNameisStitch (@MyNameisStitch); Redspin (@playerumpknow)
2026-09-06 12:26:39 +02:00
UNITRONIX c7724cf9e4 fix(enrollment): persist approve display_name on peer
Devices list prefers display_name over hostname; writing only note left the operator-assigned name invisible after managed enrollment approve.

Thanks: INSOLVE (Honorary); Marco Jakobs (@jacotec); MyNameisStitch (@MyNameisStitch); Redspin (@playerumpknow)
2026-09-06 11:53:57 +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 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 628d63328d fix(enrollment): queue viewer-only mobiles in managed mode
Refs #375

Thanks: INSOLVE (Honorary); Marco Jakobs (@jacotec); MyNameisStitch (@MyNameisStitch); Redspin (@playerumpknow)
2026-08-16 19:39:43 +02:00
UNITRONIX ad15f50cf4 fix(enrollment): global pending badge and legacy reject IP (#351)
Combine LAN + managed enrollment in /api/registrations/count so the sidebar badge works on all pages. Backfill orphan rejected_device_* IP from peers when available.

Refs #351

Thanks: INSOLVE (Honorary); Marco Jakobs (@jacotec); MyNameisStitch (@MyNameisStitch); Redspin (@playerumpknow)
2026-08-10 22:36:11 +02:00
UNITRONIX 898fcf7b88 feat(org): encrypted peer credential vault for shared address book
Store unattended presets AES-256-GCM in org_peer_credentials (main DB),
admin Set/Clear in Organizations Address Book, runtime inject into
GET /api/ab and Web Remote connect-password auto-fill. Secrets never
persist in shared AB JSON.

Refs #367

Thanks: INSOLVE (Honorary); Marco Jakobs (@jacotec); MyNameisStitch (@MyNameisStitch); Redspin (@playerumpknow)
2026-08-10 22:18:39 +02:00
UNITRONIX a6d7603e59 fix(enrollment): harden Reject & Ban re-enroll and QA follow-ups (#351)
Hard-delete enrollment audit peers on Allow re-enroll/Unban so managed mode re-queues instead of bypassing approval; fix All filter, devices ?search=, orphan rejects, metadata enrich, and copy ID.
2026-08-06 21:40:35 +02:00
UNITRONIX 8730d9b083 feat(agent): allow HTTP/WS Support Agent profiles and fix enrollment proof reuse
LAN/IP bundles can use plaintext HTTP/WS like RustDesk while session crypto stays on the protocol layer; enrollment no longer treats a second same-request proof check as a nonce replay.
2026-08-06 01:07:55 +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 dee8546eda fix(enrollment): persist history and allow clearing rejection (#351)
Approved/Rejected filters were empty for Go enrollments because decisions were discarded; reject also left an irreversible lock with no Devices → Banned row when the peer did not exist yet.
2026-08-04 22:29:19 +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 49a84e10af Merge origin/main into release/3.5.4-hotfix 2026-08-01 16:56:23 +02:00
UNITRONIX 1408f904f3 fix(security): Address Book ACL filter and legacy role CHECK migration (#342)
Restrict GET /api/ab peers/tags to device-group scope and migrate upgraded
SQLite users tables off the pre-Phase-52 role CHECK so console sync works.
Refs #342.
2026-08-01 16:53:18 +02:00
UNITRONIX 28893f8117 fix(mesh): emit stable 96-hex MeshID in download.msh (Fixes #336)
Replace the hardcoded 40-char MeshID placeholder with a persisted per-group SHA-384 id so MeshAgent no longer fails with bad size on panel-downloaded .msh files.
2026-07-31 22:11:55 +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 5bc6fb08db fix(security): validate guest WS tokens and require OIDC device binding.
Guest /ws upgrades must pass Go access-link validation; RustDesk OIDC auth-query rejects omitted id/uuid when pending has them; bump tar and golang.org/x/text for audit/govulncheck.
2026-07-24 21:43:27 +02:00
UNITRONIX b476621be8 feat(auth): OIDC login for stock RustDesk desktop clients (#304)
Advertise oidc providers via login-options and add /api/oidc/auth + auth-query, reusing panel IdP config to issue client sessions.
2026-07-24 21:06:08 +02:00
UNITRONIX ac61d3e7dc fix(users): tolerate NULL last_login on SQLite user scans (#292)
Never-logged-in Go SQLite users no longer break ListUsers/delete/demote (500), so panel userSync can mirror instead of restoring phantom accounts on restart.
2026-07-22 22:36:54 +02:00
UNITRONIX 8cf8350629 fix(security): harden WSS proxy trust and exact-key initiator delivery (Refs #276)
Require TRUSTED_PROXIES before honoring X-Forwarded headers, and deliver async PunchHole/RelayResponse via ip:port wsPunchConns so shared-NAT peers do not get the wrong signed PK.
2026-07-22 06:46:57 +02:00
UNITRONIX 14fb1d9aec fix(security): patch Dependabot and CodeQL alerts on axios, mesh, OIDC
Bump axios and brace-expansion; add mesh rate limits; harden OIDC redirect and ConnLimiter clamp for static analysis.
2026-07-20 23:52:32 +02:00
UNITRONIX b8caa1e2fa fix(auth): recover missing client_sessions on RustDesk login
Log issueClientSession failures, ensure/recreate the #242 schema when absent, and document RustDesk 1.4.9 compatibility. Fixes #284. Refs #286.
2026-07-20 18:06:56 +02:00
UNITRONIX fc1ded710e feat(remote): add Guest Access Links for RdClient allowlist shares (Refs #274)
Temporary opaque links give guests a minimal Web Remote UI for selected devices only, without Console inventory or add-any-ID paths. Also fix mesh_share desktop tunnel auth for unauthenticated guests.
2026-07-18 12:27:46 +02:00
UNITRONIX 39010ebecf feat: implement RustDesk client login binding to BetterDesk accounts
- Added functionality to bind RustDesk client logins to BetterDesk accounts, allowing for inventory and audit tracking of devices.
- Introduced new database methods to retrieve active client sessions by client ID or UUID.
- Updated client session handling to ensure ownership is applied even if the peer row is created after login.
- Enhanced tests to cover new session binding logic and ensure correct behavior for both existing and late-appearing peers.
2026-07-16 20:05:10 +02:00
UNITRONIX 3249fe3fd2 fix(oidc): load OIDC configuration from database in callback handler
Updated the OIDC callback handler to retrieve the configuration from the database instead of the provider. This change enhances the flexibility of the OIDC setup.
2026-07-14 22:05:40 +02:00
UNITRONIX 6f9b18771c fix(oidc): redirect SSO session to panel URL after IdP callback (Fixes #269)
After Keycloak/IdP callback on the Go API port, the browser now lands on the
Node panel session endpoint instead of hitting Go auth middleware. Adds Panel
URL setting, return-url preservation, login error UX, and docs.
2026-07-14 21:59:47 +02:00
UNITRONIX 382c082f21 fix(auth): add DB-backed RustDesk client sessions with sliding expiry
Fixes #242. Replace 24h JWT-only client tokens with configurable DB sessions (default 7 days, sliding renewal up to 30 days) and panel settings under Authentication -> RustDesk clients.
2026-07-09 20:00:53 +02:00
UNITRONIX 5a51548ebe feat(billing): refactor billing contract management and enhance API
- Updated billing contract structure to support multiple target types (organization, device group, folder, device).
- Refactored API handlers to accommodate new billing contract model, including creation, deletion, and listing functionalities.
- Enhanced database interactions for billing contracts, ensuring backward compatibility with legacy billing_org_contracts.
- Added new billing statistics endpoint to provide insights on active sessions and expiring contracts.
- Improved error handling and validation in billing package management.
2026-07-09 06:39:25 +02:00
UNITRONIX d671c86859 feat: user scope UX, role labels, and device visibility defaults (#227)
Add folder/direct-device/strategy assignment from User Management, clearer Pro vs Remote Operator labeling, optional restricted device scope mode, and Go/Node scope parity.
2026-07-05 19:44:18 +02:00
UNITRONIX 4d6146002e feat: RustDesk Pro direct strategy assignments
Add Pro-style strategy assign API (devices, users, device groups) on Go server and Node legacy/panel routes, plus panel UI to assign targets from the Devices strategies manager.
2026-07-05 19:07:31 +02:00
UNITRONIX c752674139 fix: RustDesk Pro ID change and panel parity (Refs #213)
Accept RustDesk 1.4.7 empty-PK ID changes on the Go signal server, cascade panel DB rows on client/panel renames, and align Node panel with live events, strategies UI, org address book editor, and device-group accessible API payload.
2026-07-05 17:15:48 +02:00
UNITRONIX 1cd9209512 Fix MeshAgent interop: bypass JWT on mesh paths and persist device_type on upsert.
Mesh .ashx endpoints use protocol-level auth, not API JWT; exclude them from authMiddleware so agents can complete the WebSocket handshake. Persist device_type, linked_peer_id, and display_name in SQLite UpsertPeer for mesh_agent inventory. Add meshagent_dev_remote tests for local Windows dev interop validation.
2026-07-03 22:24:58 +02:00
UNITRONIX 1118fc2ba6 Anonymize operator infrastructure fingerprints from public repo.
Remove internal LAN IP, SSH user, and developer paths from docs and examples; move deploy runbook to gitignored docs/private with a public template; drop Cursor debug logging leftovers; add CI checks to prevent regression.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-28 19:07:42 +02:00
UNITRONIX 8f3687ac3e fix: enable LDAP/AD login for RustDesk desktop client (#218)
Share provider-bound password authentication between panel and POST /api/login so directory users can sign in to the native client with the same AD credentials as the web console.
2026-06-24 19:25:53 +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 fe471fd3bc feat(mesh): guest links, recording, port relay, and power actions
Extend MeshCentral compat with share grants, session recording (.mcrec),
TCP/UDP port relay (p=14), device power API, panel settings and device menu
actions, view-only guest remote access, and i18n across all locales.
2026-06-21 22:25:03 +02:00
UNITRONIX 2a837f00fd feat(i18n): add new localization entries for command execution and terminal features
Enhanced localization files for multiple languages, introducing new entries related to command execution, terminal access, and file management within the MeshAgent onboarding process. This update improves user experience by providing comprehensive support for diverse languages and ensuring consistent messaging across the application.
2026-06-21 22:25:03 +02:00
UNITRONIX 611863753f feat(mesh): introduce MeshCentral compatibility layer with REST API and UI enhancements
Added a compatibility layer for MeshCentral, including a native Go implementation of key endpoints and a unified inventory for mesh agents. Enhanced the UI with new actions for mesh agents, such as terminal access and file management. Updated localization for mesh features and introduced new styles for mesh terminal overlays. Integrated interop testing for simulated and live MeshAgent connections.
2026-06-21 22:02:04 +02:00
UNITRONIX 8a96de6e86 feat(agent-client): production readiness — build pipeline, security, Generator
Restore agent-client to git and wire agentClientBuildWorker for Tauri builds
(deb/rpm/AppImage/MSI) with branding and Go sidecar staging. Add TLS gate,
settings lock, policy sync, preflight UI, CDAP registry, and Generator
product_type split (agent-client vs support-agent vs rdclient).
2026-06-20 22:50:51 +02:00
UNITRONIX 3979e1fc08 fix(device): handle deleted ID reuse conflicts (#213)
Report reserved soft-deleted device IDs as explicit conflicts and expose a permanent delete path so operators can intentionally release IDs for reuse.
2026-06-18 18:17:35 +02:00
UNITRONIX 8555841548 fix(auth): sync console 2FA for client login
Refs #203
2026-06-17 20:18:30 +02:00
UNITRONIX f8cc0581dd Add Go server pagination, observability, and heartbeat sweep tuning.
SQL-paginated admin peer lists, scoped RustDesk group loading, two-phase CheckHeartbeats, and richer /api/health and /metrics for large fleets.
2026-06-14 11:47:48 +02:00
UNITRONIX 5d526c96e1 Improve Go server performance and relay pairing reliability.
Batch peer lookups for address book and scoped RustDesk lists, sweep stale billing pending relays, fix simultaneous relay pairing race, and add signal→relay compat test coverage.
2026-06-14 11:43:25 +02:00
UNITRONIX 52248b81bb Improve Go server stability without changing RustDesk wire protocol.
Batch peer status writes, skip heartbeat rate limits for known peers, CDAP session cleanup on disconnect, relay WS conn limits, Postgres query timeouts, org login throttling, and CI with go test -race.
2026-06-14 11:38:36 +02:00
UNITRONIX a84ddf1a3b feat(api): add orgSharedAddressBookEnabled logic and tests
Implemented the orgSharedAddressBookEnabledFromValue function to determine the status of the shared address book based on input values and error conditions. Added unit tests to validate the new functionality, covering various scenarios including database errors and different input values.
2026-06-11 18:42:06 +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 f99d1ca326 feat: add organization shared address book (#190)
Let org admins publish contacts that merge into each member's RustDesk
address book on GET /api/ab, with panel management and i18n coverage.
2026-06-10 03:19:05 +02:00
UNITRONIX c731c8b8ad fix(security): address CodeQL findings for release PR #185
Harden desktop-mode DOM rendering, branding sanitization, OIDC fetch
guards, API-key log redaction, tag-map allocation, and ws-register-test TLS.
2026-06-09 06:51:50 +02:00
UNITRONIX d96efad802 fix(rbac): block deleting last super_admin and clarify org owner label
Align Go delete-user guard with update/demotion logic (Discussion #99), add tests, fix pro-role docs, and label org owner as Org Admin in all locales.
2026-06-09 05:07:00 +02:00