LukeGus
8b6037b7ff
refactor(backend): reorganize top-level layout
...
- ssh/ renamed to hosts/ (it covers SSH, RDP, VNC, Telnet, Docker, metrics)
- serial/serial.ts and guacamole/ moved inside hosts/
- dashboard.ts and homepage.ts moved to services/
- swagger.ts moved to utils/ with adjusted scan globs
Import paths and the generate:openapi script updated; ports and endpoints
unchanged.
2026-07-16 04:29:26 -05:00
LukeGus
5e7090542d
refactor(ssh): split tunnel module into layered directory
...
ssh/tunnel/{index,routes,manager}.ts: server boot in index, HTTP handlers
in routes, tunnel state and engine (connect/retry/autostart) in manager.
Code motion only; port 30003 and endpoints unchanged.
2026-07-16 04:26:31 -05:00
LukeGus
9805edfb93
refactor(ssh): split docker module into layered directory
...
ssh/docker/{index,routes,session-manager,container-routes,console}.ts:
server boot and wiring in index, HTTP handlers in routes, SSH session
registry and command execution in session-manager. Code motion only;
port 30007/30009 and endpoints unchanged. Swagger now scans ssh
subdirectories.
2026-07-16 00:45:16 -05:00
LukeGus
35cde3fdfd
refactor(ssh): single shared createConnectionLog helper
...
file-manager-log.ts becomes ssh/connection-log.ts; the copies in docker.ts
and host-metrics-helpers.ts are gone.
2026-07-16 00:41:47 -05:00
LukeGus
947132c4f1
refactor(ssh): consolidate four jump-host chain copies into one module
...
terminal, host-metrics and docker now use ssh/jump-host-chain.ts (already
shared by file-manager, tmux-monitor and docker-console); docker's inline
copy also drops its raw SimpleDBOps host/credential lookups in favor of
repositories.
2026-07-16 00:40:38 -05:00
LukeGus
a2f6c90eae
feat(auth): non-destructive password resets and admin reset endpoint
...
Password resets no longer destroy user data: the DEK is system-wrapped, so
forgot-password and admin resets are just a hash update plus session revoke.
The wipe branch survives only for accounts that never logged in since the
encryption upgrade and now requires explicit confirmDataWipe (surfaced as a
409 DATA_WIPE_REQUIRED; the reset UI asks for confirmation). Adds
POST /users/admin/reset-password and removes the dead re-encryption paths.
2026-07-16 00:36:14 -05:00
LukeGus
1032a31e25
refactor(crypto): remove pending share queue and credential sharing key
...
With server-unwrappable DEKs both sides of a share are always available,
so the needsReEncryption queue, CREDENTIAL_SHARING_KEY and the system_*
shadow columns on ssh_credentials are gone. A one-time boot cleanup
re-creates legacy pending share copies where possible (dropping
unresolvable ones with a warning) and drops the legacy columns.
2026-07-16 00:29:54 -05:00
LukeGus
ee7768dd86
refactor(crypto): make system-wrapped DEKs the authoritative key path
...
DataCrypto and AuthManager now read keys through UserKeyManager: DEKs are
always unwrappable server-side, so the in-memory unlock session, DEK-in-JWT
wrapping, session-expiry data locks and ALLOW_APIKEY_DATA_UNLOCK are gone.
utils/user-crypto.ts is deleted; boot migration now cleans legacy wraps.
A one-release shim adopts DEKs from legacy dataKeyWrap tokens so active
password users migrate without re-login. Password login migrates legacy
password-wrapped DEKs via migratePasswordUserAtLogin.
2026-07-16 00:19:12 -05:00
LukeGus
16506de9da
feat(crypto): boot-time DEK migration to system-wrapped v3 format
...
utils/crypto-migration/dek-migration.ts carries the legacy unwrap paths
(PBKDF2 password KEK, OIDC/WebAuthn system keys, hardcoded-default
fallback) and migrates every server-unwrappable DEK to the v3 wrap at
startup. Password-wrapped DEKs migrate at next login or from a live
session via adoptRecoveredDEK. Legacy rows are kept for now; cleanup
flips on once the new path is authoritative.
2026-07-16 00:10:39 -05:00
LukeGus
79e5fe3583
feat(crypto): add UserKeyManager with system-wrapped per-user DEKs
...
New utils/user-keys.ts: one random 32-byte DEK per user, wrapped
AES-256-GCM under an HKDF key derived from the system ENCRYPTION_KEY
(per-user info string + AAD binding, versioned v3 wrap format stored in
settings). Synchronous unwrap-on-demand with a 15-minute cache so the
existing DataCrypto facade keeps its sync call sites. Not wired up yet.
2026-07-16 00:07:21 -05:00
LukeGus
d710989070
refactor(db): route remaining raw DB access through repositories
...
proxmox, session-log, oidc-utils, webauthn and guacamole recording now use
repositories (new WebauthnCredentialRepository; SsoProviderRepository
listEnabled; HostRepository findDecryptedByIdAs/listProxmoxEnabled).
Remaining raw access: db boot code, simple-db-ops and docker.ts, which are
removed/restructured in later phases.
2026-07-16 00:04:36 -05:00
LukeGus
ef4969dd35
refactor(db): collapse repository rollout scaffolding into single factory
...
Repositories are now the only data path. Replaces the 41 current-*-repository
wrapper files, the DATABASE_LAYER_REPOSITORY_ROLLOUT flag/alias map and the
unused database/runtime adapter with repositories/factory.ts, a plain
DatabaseContext type and an in-memory TestSqliteDatabase test harness.
2026-07-15 23:56:02 -05:00
ZacharyZcR
1e7c9ea53c
draft: database layer refactor ( #1054 )
...
* feat(sshid) - sshid.io equivalent for termix (#919 )
* feat(ssh-id): database schema, migrations and field encryption
Adds ssh_identities, ssh_identity_keys and ssh_identity_ca tables (public keys
stored plaintext for the unauthenticated resolver; CA private key registered
for per-user field encryption), with UNIQUE(user_id), an index on
ssh_identity_keys(identity_id), and idempotent CREATE TABLE migrations.
* feat(ssh-id): backend API — resolver, key management, CA and certificates
Mounts /sshid (nginx route added). Public text/plain authorized_keys resolver
(+ exact /:algo filter, HTML viewer) and CA public-key endpoint; no-store +
noindex headers on every resolver response including early 404s. Authenticated
management: claim/rename/delete handle, add/import/generate/enable/delete keys,
and a per-user CA (create/rotate/delete) with pure-Node OpenSSH certificate
issuance. Audit logging on all mutations; UNIQUE races map to a precise 409.
Unit tests for key parsing and certificate signing (ssh-keygen-validated).
* feat(ssh-id): frontend panel, API client and i18n
SSH ID panel wired into the app rail and AppShell: claim handle, resolver URL +
curl one-liner, key list, generate, paste/import, CA enable/rotate/remove with
server trust command, and per-key certificate issuance. API client re-exported
through main-axios.ts; all strings i18n'd.
* style(ssh-id): align panel and resolver page with Termix theme
- Rebuild the SSH ID sidebar panel with the theme's square components
(SectionCard / SettingRow / FakeSwitch) instead of rounded ad-hoc cards;
use accent-brand and destructive tokens rather than raw red/green.
- Fix panel scrolling: move overflow to a block scroll container so the
cards keep their natural height instead of being clipped.
- Restyle the public resolver HTML page (/sshid/u/:handle) to the Termix
dark theme: square corners, #18181b/#303032 palette, #f59145 accent,
uppercase section labels.
- Tidy copy: 'Save To Credentials' label, drop the redundant generate intro,
and correct the generate tooltip (the key is stored when saving to vault).
* feat: rename to Termix ID, improve UI, backend inconsistencies, and general bug fixes
---------
Co-authored-by: LukeGus <bugattiguy527@gmail.com >
* ci(deps): bump actions/checkout from 6 to 7 in the github-actions group (#922 )
Bumps the github-actions group with 1 update: [actions/checkout](https://github.com/actions/checkout ).
Updates `actions/checkout` from 6 to 7
- [Release notes](https://github.com/actions/checkout/releases )
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md )
- [Commits](https://github.com/actions/checkout/compare/v6...v7 )
---
updated-dependencies:
- dependency-name: actions/checkout
dependency-version: '7'
dependency-type: direct:production
update-type: version-update:semver-major
dependency-group: github-actions
...
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* chore(deps-dev): bump the dev-patch-updates group with 11 updates (#923 )
Bumps the dev-patch-updates group with 11 updates:
| Package | From | To |
| --- | --- | --- |
| [@codemirror/search](https://github.com/codemirror/search ) | `6.7.0` | `6.7.1` |
| [@codemirror/view](https://github.com/codemirror/view ) | `6.43.0` | `6.43.1` |
| [@tailwindcss/vite](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-vite ) | `4.3.0` | `4.3.1` |
| [@vitest/coverage-v8](https://github.com/vitest-dev/vitest/tree/HEAD/packages/coverage-v8 ) | `4.1.8` | `4.1.9` |
| [@vitest/ui](https://github.com/vitest-dev/vitest/tree/HEAD/packages/ui ) | `4.1.8` | `4.1.9` |
| [eslint-plugin-react-refresh](https://github.com/ArnaudBarre/eslint-plugin-react-refresh ) | `0.5.2` | `0.5.3` |
| [lint-staged](https://github.com/lint-staged/lint-staged ) | `17.0.7` | `17.0.8` |
| [prettier](https://github.com/prettier/prettier ) | `3.8.3` | `3.8.4` |
| [sharp](https://github.com/lovell/sharp ) | `0.35.1` | `0.35.2` |
| [tailwindcss](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/tailwindcss ) | `4.3.0` | `4.3.1` |
| [vitest](https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest ) | `4.1.8` | `4.1.9` |
Updates `@codemirror/search` from 6.7.0 to 6.7.1
- [Changelog](https://github.com/codemirror/search/blob/main/CHANGELOG.md )
- [Commits](https://github.com/codemirror/search/commits )
Updates `@codemirror/view` from 6.43.0 to 6.43.1
- [Changelog](https://github.com/codemirror/view/blob/main/CHANGELOG.md )
- [Commits](https://github.com/codemirror/view/commits )
Updates `@tailwindcss/vite` from 4.3.0 to 4.3.1
- [Release notes](https://github.com/tailwindlabs/tailwindcss/releases )
- [Changelog](https://github.com/tailwindlabs/tailwindcss/blob/main/CHANGELOG.md )
- [Commits](https://github.com/tailwindlabs/tailwindcss/commits/v4.3.1/packages/@tailwindcss-vite )
Updates `@vitest/coverage-v8` from 4.1.8 to 4.1.9
- [Release notes](https://github.com/vitest-dev/vitest/releases )
- [Changelog](https://github.com/vitest-dev/vitest/blob/main/docs/releases.md )
- [Commits](https://github.com/vitest-dev/vitest/commits/v4.1.9/packages/coverage-v8 )
Updates `@vitest/ui` from 4.1.8 to 4.1.9
- [Release notes](https://github.com/vitest-dev/vitest/releases )
- [Changelog](https://github.com/vitest-dev/vitest/blob/main/docs/releases.md )
- [Commits](https://github.com/vitest-dev/vitest/commits/v4.1.9/packages/ui )
Updates `eslint-plugin-react-refresh` from 0.5.2 to 0.5.3
- [Release notes](https://github.com/ArnaudBarre/eslint-plugin-react-refresh/releases )
- [Changelog](https://github.com/ArnaudBarre/eslint-plugin-react-refresh/blob/main/CHANGELOG.md )
- [Commits](https://github.com/ArnaudBarre/eslint-plugin-react-refresh/compare/v0.5.2...v0.5.3 )
Updates `lint-staged` from 17.0.7 to 17.0.8
- [Release notes](https://github.com/lint-staged/lint-staged/releases )
- [Changelog](https://github.com/lint-staged/lint-staged/blob/main/CHANGELOG.md )
- [Commits](https://github.com/lint-staged/lint-staged/compare/v17.0.7...v17.0.8 )
Updates `prettier` from 3.8.3 to 3.8.4
- [Release notes](https://github.com/prettier/prettier/releases )
- [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md )
- [Commits](https://github.com/prettier/prettier/compare/3.8.3...3.8.4 )
Updates `sharp` from 0.35.1 to 0.35.2
- [Release notes](https://github.com/lovell/sharp/releases )
- [Commits](https://github.com/lovell/sharp/compare/v0.35.1...v0.35.2 )
Updates `tailwindcss` from 4.3.0 to 4.3.1
- [Release notes](https://github.com/tailwindlabs/tailwindcss/releases )
- [Changelog](https://github.com/tailwindlabs/tailwindcss/blob/main/CHANGELOG.md )
- [Commits](https://github.com/tailwindlabs/tailwindcss/commits/v4.3.1/packages/tailwindcss )
Updates `vitest` from 4.1.8 to 4.1.9
- [Release notes](https://github.com/vitest-dev/vitest/releases )
- [Changelog](https://github.com/vitest-dev/vitest/blob/main/docs/releases.md )
- [Commits](https://github.com/vitest-dev/vitest/commits/v4.1.9/packages/vitest )
---
updated-dependencies:
- dependency-name: "@codemirror/search"
dependency-version: 6.7.1
dependency-type: direct:development
update-type: version-update:semver-patch
dependency-group: dev-patch-updates
- dependency-name: "@codemirror/view"
dependency-version: 6.43.1
dependency-type: direct:development
update-type: version-update:semver-patch
dependency-group: dev-patch-updates
- dependency-name: "@tailwindcss/vite"
dependency-version: 4.3.1
dependency-type: direct:development
update-type: version-update:semver-patch
dependency-group: dev-patch-updates
- dependency-name: "@vitest/coverage-v8"
dependency-version: 4.1.9
dependency-type: direct:development
update-type: version-update:semver-patch
dependency-group: dev-patch-updates
- dependency-name: "@vitest/ui"
dependency-version: 4.1.9
dependency-type: direct:development
update-type: version-update:semver-patch
dependency-group: dev-patch-updates
- dependency-name: eslint-plugin-react-refresh
dependency-version: 0.5.3
dependency-type: direct:development
update-type: version-update:semver-patch
dependency-group: dev-patch-updates
- dependency-name: lint-staged
dependency-version: 17.0.8
dependency-type: direct:development
update-type: version-update:semver-patch
dependency-group: dev-patch-updates
- dependency-name: prettier
dependency-version: 3.8.4
dependency-type: direct:development
update-type: version-update:semver-patch
dependency-group: dev-patch-updates
- dependency-name: sharp
dependency-version: 0.35.2
dependency-type: direct:development
update-type: version-update:semver-patch
dependency-group: dev-patch-updates
- dependency-name: tailwindcss
dependency-version: 4.3.1
dependency-type: direct:development
update-type: version-update:semver-patch
dependency-group: dev-patch-updates
- dependency-name: vitest
dependency-version: 4.1.9
dependency-type: direct:development
update-type: version-update:semver-patch
dependency-group: dev-patch-updates
...
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* chore(deps): bump nanoid in the prod-patch-updates group (#925 )
Bumps the prod-patch-updates group with 1 update: [nanoid](https://github.com/ai/nanoid ).
Updates `nanoid` from 5.1.11 to 5.1.15
- [Release notes](https://github.com/ai/nanoid/releases )
- [Changelog](https://github.com/ai/nanoid/blob/main/CHANGELOG.md )
- [Commits](https://github.com/ai/nanoid/compare/5.1.11...5.1.15 )
---
updated-dependencies:
- dependency-name: nanoid
dependency-version: 5.1.15
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: prod-patch-updates
...
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* chore(deps): bump the major-updates group with 5 updates (#926 )
Bumps the major-updates group with 5 updates:
| Package | From | To |
| --- | --- | --- |
| [js-yaml](https://github.com/nodeca/js-yaml ) | `4.2.0` | `5.0.0` |
| [@eslint/js](https://github.com/eslint/eslint/tree/HEAD/packages/js ) | `9.39.4` | `10.0.1` |
| [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node ) | `25.9.2` | `26.0.0` |
| [concurrently](https://github.com/open-cli-tools/concurrently ) | `9.2.1` | `10.0.3` |
| [eslint](https://github.com/eslint/eslint ) | `9.39.4` | `10.5.0` |
Updates `js-yaml` from 4.2.0 to 5.0.0
- [Changelog](https://github.com/nodeca/js-yaml/blob/master/CHANGELOG.md )
- [Commits](https://github.com/nodeca/js-yaml/compare/4.2.0...5.0.0 )
Updates `@eslint/js` from 9.39.4 to 10.0.1
- [Release notes](https://github.com/eslint/eslint/releases )
- [Commits](https://github.com/eslint/eslint/commits/v10.0.1/packages/js )
Updates `@types/node` from 25.9.2 to 26.0.0
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases )
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node )
Updates `concurrently` from 9.2.1 to 10.0.3
- [Release notes](https://github.com/open-cli-tools/concurrently/releases )
- [Commits](https://github.com/open-cli-tools/concurrently/compare/v9.2.1...v10.0.3 )
Updates `eslint` from 9.39.4 to 10.5.0
- [Release notes](https://github.com/eslint/eslint/releases )
- [Commits](https://github.com/eslint/eslint/compare/v9.39.4...v10.5.0 )
---
updated-dependencies:
- dependency-name: js-yaml
dependency-version: 5.0.0
dependency-type: direct:production
update-type: version-update:semver-major
dependency-group: major-updates
- dependency-name: "@eslint/js"
dependency-version: 10.0.1
dependency-type: direct:development
update-type: version-update:semver-major
dependency-group: major-updates
- dependency-name: "@types/node"
dependency-version: 26.0.0
dependency-type: direct:development
update-type: version-update:semver-major
dependency-group: major-updates
- dependency-name: concurrently
dependency-version: 10.0.3
dependency-type: direct:development
update-type: version-update:semver-major
dependency-group: major-updates
- dependency-name: eslint
dependency-version: 10.5.0
dependency-type: direct:development
update-type: version-update:semver-major
dependency-group: major-updates
...
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* feat(ssh): add HashiCorp Vault SSH signer authentication
* fix: small fixes to vault feature to align with Termix codebase
* chore: add view docs links for vault/termix id
* fix: file upload fails with 400 and missing schema migrations on upgrade (#929 )
Two bugs introduced in v2.4.1:
1. uploadFileStream uses fileManagerApi.post() which triggers axios's
transformRequest to JSON-serialize the FormData because the instance
default Content-Type is application/json. Change to postForm() which
sets Content-Type: multipart/form-data so the browser XHR sends the
correct multipart body with boundary.
2. Two schema items added to schema.ts were not included in migrateSchema()
in db/index.ts, causing 500 errors on existing installations upgrading
from v2.4.0:
- user_preferences.status_color_scheme (no such column)
- dashboard_service_links table (no such table)
Fixes #928
Co-authored-by: sash <sash@fominykh.io >
* fix: support PuTTY PPK ssh keys (#930 )
* fix: chunk large file manager uploads (#932 )
* fix: route dashboard hosts by protocol (#934 )
* fix: resolve tunnel endpoints reliably (#935 )
* Fix Electron OIDC browser auth failures (#936 )
* Allow RDP connections without stored credentials (#937 )
* Sync role credential shares for OIDC users (#938 )
* Fix terminal link dialog layering (#940 )
* Confirm large files before opening editor (#942 )
* Confirm closing active host connections (#943 )
* Preserve file path case in file manager UI (#941 )
* fix: preserve unicode guacamole tokens (#933 )
* Persist VNC authentication settings (#944 )
* Fix Guacamole websocket base path (#946 )
* Promote file manager terminals to tabs (#939 )
* Guard Guacamole disconnect during startup (#945 )
* chore: increment ver
* feat: bitwarden ssh agent integration
* feat: serial connections support
* fix: various small bug fixes
* feat: open all sessions in a folder and terminal custom theme color support
* feat: cross host file manager clipboard and several small bug fixes
* feat: tailscale/wireguard support and added a new status state for when backend is checking status
* feat: grafana like server stats history, new alert system, ntfy/webhook support
* feat: new grid and widget based homepage function
* feat: new donate button in dashboard
* fix: alert ui incorrectly using termix css and fixed issue with alert system not loading
* chore: start database layer refactor
* docs: plan database layer refactor
* docs: audit database layer refactor phase zero
* chore: add database runtime adapter skeleton
* chore: add settings repository skeleton
* chore: add user session repository skeleton
* chore: add host credential repository skeleton
* chore: add field encryption boundary
* chore: migrate settings route slice
* chore: migrate user settings routes
* chore: migrate host metrics settings routes
* chore: migrate acme settings route
* chore: migrate terminal settings route
* chore: migrate tailscale settings read
* chore: migrate guacamole settings reads
* chore: migrate session timeout settings reads
* chore: migrate auth route settings reads
* chore: migrate host metrics settings reads
* chore: migrate startup settings reads
* chore: migrate user settings cleanup
* chore: migrate password reset settings
* chore: migrate oidc legacy settings read
* chore: migrate user route settings slice
* chore: migrate oidc state settings
* chore: migrate user login settings reads
* chore: migrate user crypto settings
* chore: consolidate startup settings defaults
* chore: consolidate database settings import export
* chore: migrate core session auth paths
* chore: migrate remaining session auth paths
* chore: migrate admin user routes
* chore: migrate user route admin checks
* chore: migrate user lifecycle routes
* chore: migrate auth user lookups
* chore: migrate oidc user routes
* chore: migrate api key repository paths
* docs: add database gray rollout guide
* chore: migrate trusted device paths
* chore: migrate user session route user lookups
* chore: add database repository rollout guard
* chore: expose repository rollout status
* chore: warn on repository rollout misconfiguration
* chore: migrate remaining user lookup helpers
* chore: migrate ssh user lookups
* chore: migrate user settings admin lookups
* chore: migrate acme ssl user lookups
* chore: migrate audit log admin checks
* chore: migrate oidc account user updates
* chore: migrate password reset user updates
* chore: migrate user deletion core records
* chore: migrate snippet audit user lookups
* chore: migrate ldap user sync paths
* chore: migrate totp user updates
* chore: migrate rbac user checks
* chore: migrate rbac role paths
* chore: migrate permission role lookups
* chore: migrate rbac access list reads
* chore: migrate shared rbac reads
* chore: migrate rbac access writes
* chore: migrate permission host access
* chore: migrate role host access lookup
* chore: migrate snippet access lookup
* chore: migrate shared credential access lookups
* chore: migrate host access cleanup writes
* chore: migrate host list access checks
* chore: migrate host access cleanup routes
* chore: migrate shared credential role lookups
* chore: migrate user role cleanup
* chore: migrate admin role sync
* chore: migrate ldap role sync
* chore: migrate user role assignment
* chore: migrate sso provider access
* chore: migrate audit log access
* chore: migrate user preference access
* chore: migrate open tab access
* chore: migrate dismissed alert access
* chore: migrate homepage layout access
* chore: migrate network topology access
* chore: migrate dashboard service link access
* chore: migrate command history access
* chore: migrate recent activity cleanup
* chore: migrate ssh credential usage access
* chore: migrate transfer recent access
* chore: migrate file manager bookmark access
* chore: migrate c2s tunnel preset access
* chore: migrate homepage item access
* chore: migrate session recording access
* chore: migrate tmux session tag access
* chore: migrate opkssh token access
* chore: migrate vault token access
* chore: migrate vault profile access
* chore: migrate host metrics preference access
* chore: migrate host health access
* chore: migrate host metrics history access
* chore: migrate alert persistence access
* chore: route alert host lookup through repository
* chore: migrate user data export reads
* chore: route host metrics stats sync through repository
* chore: migrate host folder persistence
* chore: migrate host resolution reads
* chore: route jump host resolution reads
* chore: route docker console jump host reads
* chore: route docker ssh resolution reads
* chore: route proxmox discovery resolution reads
* chore: route file manager activity host reads
* chore: route host metrics resolution reads
* chore: route ssh auth credential reads
* chore: route tunnel endpoint credential reads
* chore: route credential deployment resolution reads
* chore: route command history host flag reads
* chore: route snippet execution resolution reads
* chore: route terminal host resolution reads
* chore: route vault oidc host resolution reads
* chore: route wake on lan host reads
* chore: route internal host list reads
* chore: route host key verification persistence
* chore: route credential read paths
* chore: route credential host usage reads
* chore: route credential folder rename
* chore: route host owner access checks
* chore: route shared credential source reads
* chore: route user host credential cleanup
* chore: route credential delete reads
* chore: route credential update reads
* chore: route host credential reads
* chore: route host read paths
* chore: route host projection reads
* chore: route host list reads
* chore: route snippet read paths
* chore: route snippet folder writes
* chore: route snippet crud paths
* chore: route snippet bulk import
* chore: route rbac ownership reads
* chore: route user count reads
* chore: route cleanup snippets folders
* chore: route shared credential persistence
* chore: route dashboard activity
* chore: route guacamole host reads
* chore: route host bulk lookups
* chore: remove unlock-only simple db ops
* chore: route host autostart persistence
* chore: route ldap provisioning through users
* chore: route credential encrypted writes
* chore: route host encrypted writes
* chore: route bulk host encrypted writes
* chore: route termix id credentials
* chore: route termix id ca persistence
* chore: route termix identity persistence
* chore: route credential system migration
* chore: isolate user encryption migration storage
* chore: remove legacy simple db ops
* chore: isolate legacy sqlite migration copy
* chore: route database settings import export
* chore: route database host credential export
* chore: route database host credential import
* chore: route database file-manager import export
* chore: route database alert usage import export
* chore: route database user checks
* chore: isolate auth lazy migration storage
* chore: route explicit database saves
* chore: initialize database save boundary
* chore: route migration snapshot saves
* chore: isolate sqlite import constraints
* chore: route import sqlite boundary
* chore: route user encryption migration store
* chore: centralize current repository runtime
* chore: route more current repositories
* chore: route activity repository runtimes
* chore: route token repository runtimes
* chore: route health repository runtimes
* chore: route identity repository runtimes
* chore: route rbac repository runtime
* chore: centralize current sqlite runtime access
* chore: route user deletion key cleanup
* chore: route user deletion vault cleanup
* chore: route user deletion homepage cleanup
* chore: route user deletion health cleanup
* chore: route user deletion alert cleanup
* chore: route user deletion identity cleanup
* chore: add database layer preupgrade backup
* Fix database repository type errors
* fix: complete post-merge compile fixes for database refactor
Restore missing DatabaseSaveTrigger/getDb imports, session log format
fallback, OIDC provider resolution, guacamole recording insert, and
passwordFallbackOnly typing after merging current dev.
---------
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: DivByZero <mr.oplus@yahoo.fr >
Co-authored-by: LukeGus <bugattiguy527@gmail.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: devdanetra <46488477+devdanetra@users.noreply.github.com >
Co-authored-by: Aleksandr Fominykh <neoformalex@users.noreply.github.com >
Co-authored-by: sash <sash@fominykh.io >
2026-07-15 23:28:10 -05:00
ZacharyZcR
ed6cda4ea4
Add Proxmox guest auto sync ( #1053 )
2026-07-15 23:10:12 -05:00
LukeGus
b2c5b9cde3
chore: package lock sync
2026-07-15 23:02:10 -05:00
LukeGus
b7a1cffb52
Merge remote-tracking branch 'origin/main' into dev-2.5.1
2026-07-15 23:01:03 -05:00
Stephan Groth
ced78961a0
feat(auth): opt-in OIDC DEK unlock for API-key requests (ALLOW_APIKEY_DATA_UNLOCK) ( #1064 )
...
* chore: fix release workflow to merge docs branch
* fix: svg donation generator push fail
* fix: svg donation generator push fail
* Update termix.rb
* fix: svg donation generator push fail
* chore: move donation badge to badges branch to avoid ruleset conflicts
* chore: remove unneeded token from donation badge workflow
* chore: debug donation badge commit step
* fix: escape < character in donation SVG
* fix: point donation badge to badges branch
* chore: remove unused donation badge svg from main
* Add Rack Genius logo to README
Added Rack Genius logo to the README.
* chore: improve donation goal svg generator to include stablecoins
* chore: donation goal generator syntax error
* chore: donation goal generator incorrect docs url usage
* chore: donation bar reporting wrong result
* feat: add Open File Manager to tab right-click menu (#1046 )
* Revert "feat: add Open File Manager to tab right-click menu (#1046 )" (#1050 )
This reverts commit 0712fdd731 .
* Remove donation badge from README
Removed donation badge from README.
* Delete .github/workflows/donation-goal.yml
* feat(auth): opt-in OIDC DEK unlock for API-key requests
API keys authenticate but cannot touch the encrypted credential/host store
('User data not unlocked') unless the user has a live interactive session,
making them unusable for headless automation. For OIDC users the DEK is
server-derivable (deriveOIDCSystemKey), so handleApiKeyAuth can unlock it
without a password.
Gated behind ALLOW_APIKEY_DATA_UNLOCK (default off) because enabling it widens
the blast radius of a leaked API key. OIDC-only; password users are untouched.
Refs #1063
---------
Co-authored-by: LukeGus <bugattiguy527@gmail.com >
Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com >
Co-authored-by: Sankeerth Nara <sankeerthnara@gmail.com >
Co-authored-by: ZacharyZcR <zacharyzcr1984@gmail.com >
2026-07-15 22:59:18 -05:00
Sankeerth Nara
0a16adf237
Update Auto-complete.tsx ( #1061 )
...
* chore: fix release workflow to merge docs branch
* fix: svg donation generator push fail
* fix: svg donation generator push fail
* Update termix.rb
* fix: svg donation generator push fail
* chore: move donation badge to badges branch to avoid ruleset conflicts
* chore: remove unneeded token from donation badge workflow
* chore: debug donation badge commit step
* fix: escape < character in donation SVG
* fix: point donation badge to badges branch
* chore: remove unused donation badge svg from main
* Add Rack Genius logo to README
Added Rack Genius logo to the README.
* chore: improve donation goal svg generator to include stablecoins
* chore: donation goal generator syntax error
* chore: donation goal generator incorrect docs url usage
* chore: donation bar reporting wrong result
* feat: add Open File Manager to tab right-click menu (#1046 )
* Revert "feat: add Open File Manager to tab right-click menu (#1046 )" (#1050 )
This reverts commit 0712fdd731 .
* Remove donation badge from README
Removed donation badge from README.
* Delete .github/workflows/donation-goal.yml
* Update Auto-complete.tsx
---------
Co-authored-by: LukeGus <bugattiguy527@gmail.com >
Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com >
Co-authored-by: ZacharyZcR <zacharyzcr1984@gmail.com >
2026-07-15 22:58:33 -05:00
ZacharyZcR
71a63ae5e8
fix: restore database import in embedded desktop mode ( #1060 )
2026-07-15 22:52:53 -05:00
ZacharyZcR
39d40db8c6
fix: render RDP sessions at native pixel density ( #1059 )
2026-07-15 22:52:37 -05:00
ZacharyZcR
84d4e9522a
fix: sync cloud preference storage mode ( #1058 )
2026-07-15 22:52:26 -05:00
ZacharyZcR
7da5c24457
fix: preserve file editor position on save ( #1057 )
2026-07-15 22:52:12 -05:00
ZacharyZcR
b2328ce2f7
fix: restore sudo password autofill settings ( #1056 )
2026-07-15 22:52:04 -05:00
ZacharyZcR
287b0fa656
feat: save quick connect sessions as hosts ( #1055 )
2026-07-15 22:51:53 -05:00
LukeGus
a6d0658e41
chore: display donations in readme
2026-07-15 15:41:29 -05:00
ZacharyZcR
22124e1bc4
Merge commit from fork
2026-07-15 15:07:06 +08:00
ZacharyZcR
401ec7e8fc
Merge commit from fork
2026-07-15 15:06:38 +08:00
ZacharyZcR
1ee4cacbe9
Merge commit from fork
2026-07-15 15:06:19 +08:00
ZacharyZcR
fafff94e5e
Merge commit from fork
2026-07-15 15:05:53 +08:00
ZacharyZcR
9d336bf9df
Merge commit from fork
2026-07-15 14:57:40 +08:00
ZacharyZcR
e1d1a3e53d
Merge commit from fork
2026-07-15 14:55:27 +08:00
ZacharyZcR
4b2a60a854
Merge commit from fork
2026-07-15 14:55:05 +08:00
ZacharyZcR
3d42a2c09c
Merge commit from fork
2026-07-15 14:31:44 +08:00
ZacharyZcR
9ed77d42d4
Merge commit from fork
2026-07-15 14:31:27 +08:00
ZacharyZcR
c7a9063a72
Merge commit from fork
2026-07-15 14:30:28 +08:00
ZacharyZcR
a0ae397e63
Merge commit from fork
2026-07-15 14:21:38 +08:00
ZacharyZcR
b0598294a6
Merge commit from fork
2026-07-15 14:21:13 +08:00
ZacharyZcR
867058bddd
perf: frontend request cache, poll pause, and code-split shell ( #1052 )
...
Host/status caching, shell code-split, SSH pool waits, host-metrics concurrency, background-tab idle, per-host status subscriptions, homepage poll quieting, and virtualized host sidebar + file manager lists.
2026-07-14 13:58:28 +08:00
Luke Gustafson
1aea3603a7
Delete .github/workflows/donation-goal.yml
2026-07-13 20:04:16 -05:00
Luke Gustafson
972e27eb64
Remove donation badge from README
...
Removed donation badge from README.
2026-07-13 20:03:42 -05:00
ZacharyZcR
6e66a5a4ef
feat: add Open File Manager to tab right-click menu ( #1051 )
...
Co-authored-by: SankeerthNara <sankeerthnara@gmail.com >
2026-07-14 01:39:33 +08:00
ZacharyZcR
38e128bd16
Revert "feat: add Open File Manager to tab right-click menu ( #1046 )" ( #1050 )
...
This reverts commit 0712fdd731 .
2026-07-14 01:36:12 +08:00
Sankeerth Nara
0712fdd731
feat: add Open File Manager to tab right-click menu ( #1046 )
2026-07-14 01:16:11 +08:00
ZacharyZcR
07d5f5a133
Add terminal font size shortcuts ( #1047 )
2026-07-14 01:14:24 +08:00
ZacharyZcR
d44695eb79
Fix status checks through jump hosts ( #1045 )
2026-07-14 01:14:20 +08:00
ZacharyZcR
c6a2ac69dc
feat(session): add recording and replay ( #1049 )
2026-07-14 01:11:20 +08:00
ZacharyZcR
a3e615b59c
Fix Firefox desktop OIDC callback ( #1044 )
2026-07-13 23:00:22 +08:00
ZacharyZcR
f2b7dae234
Allow pinned hosts with name sorting ( #1043 )
2026-07-13 23:00:16 +08:00
ZacharyZcR
d33c90dd06
Fix external editor actions in file preview ( #1042 )
2026-07-13 23:00:09 +08:00
ZacharyZcR
553cba5a78
Fix Proxmox discovery over HTTPS ( #1041 )
2026-07-13 23:00:04 +08:00