Commit Graph

108 Commits

Author SHA1 Message Date
LukeGus aa71183d08 chore: continued redesign readme 2026-05-20 16:56:02 -05:00
LukeGus 0bb127737c chore: remove unneeded npm packages and redesign readme 2026-05-20 16:38:29 -05:00
LukeGus bc713aca7d feat: terminal theme improvemnts, file manager improvements, host manager improvements (ready for initial user testing?) 2026-05-20 14:55:41 -05:00
LukeGus dca2222689 Merge remote-tracking branch 'origin/dev-2.3.0' into dev-2.3.0 2026-05-20 13:58:28 -05:00
LukeGus ec69c338da feat: host manager improvements and added over electron files 2026-05-20 13:58:15 -05:00
TomyJan 3375733789 fix: resolve backend build errors, preserve sudo file read buffers, and format code (#798)
* fix: resolve backend TypeScript build errors and preserve sudo file read buffers

* style: format code

* fix: ssh2 ESM import failure

---------

Co-authored-by: LukeGus <bugattiguy527@gmail.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-20 13:18:42 -05:00
ZacharyZcR 21f24a8386 feat: add OIDC auto-provision setting independent of registration toggle (#795)
Allows OIDC-authenticated users to be auto-provisioned even when
"Allow new account registration" is disabled. Adds an admin UI toggle
and corresponding API endpoints (GET/PATCH /users/oidc-auto-provision).
Falls back to OIDC_ALLOW_REGISTRATION env var if the setting is unset.
2026-05-20 13:16:05 -05:00
ZacharyZcR ecb7f4f2c5 fix: add 3-way horizontal split variant and fix file manager overflow in split view (#796)
Adds a "3-Way (H)" layout option (2 top + 1 bottom) alongside the
existing "3-Way (V)" (1 left + 2 right).

Fixes file manager content overflowing its split pane by adding
min-h-0 to nested flex containers that were missing it.
2026-05-20 13:15:59 -05:00
TomyJan 5971bcfe88 feat(auth): add silent OIDC sign-in (#799) 2026-05-20 13:15:08 -05:00
LukeGus d3fa8c4420 feat: host manager bug fixes, i18n improvements, general tab fixes 2026-05-20 13:13:56 -05:00
ZacharyZcR a966cc930b fix: load Caskaydia Cove Nerd Font via @font-face declarations (#794)
The default terminal font was configured but never loaded via CSS,
causing browsers to fall back to generic monospace. This broke column
alignment and TUI rendering (ncurses menus, box-drawing chars).
2026-05-18 14:51:56 +08:00
ZacharyZcR 63c8d601b5 feat: add confirmation prompt before closing active session tabs (#793)
Shows a toast confirmation when closing terminal, RDP, VNC or telnet
tabs to prevent accidental session loss from misclicks.
2026-05-18 05:53:15 +08:00
ZacharyZcR 65d67e6f79 fix: host connections failing with "Authentication failed" (#791)
Co-authored-by: LukeGus <bugattiguy527@gmail.com>
2026-05-18 05:17:10 +08:00
ZacharyZcR a354a45b1c Merge pull request #765 from ZacharyZcR/feat/ctrl-alt-delete-button
feat: add ctrl+alt+delete button for rdp/vnc sessions
2026-05-18 04:47:35 +08:00
ZacharyZcR c488f92e00 Merge pull request #767 from ZacharyZcR/feat/clone-host
feat: implement clone host functionality
2026-05-18 04:47:30 +08:00
ZacharyZcR 125ba1e82c Merge pull request #770 from ZacharyZcR/fix/default-session-persistence
fix: enable terminal session persistence by default
2026-05-18 04:47:26 +08:00
ZacharyZcR d74e1b141a Merge pull request #781 from ZacharyZcR/feat/guacd-status-check
feat: check guacd availability before RDP/VNC connection
2026-05-18 04:47:22 +08:00
ZacharyZcR fc9860c4d0 feat: add ctrl+alt+delete button for rdp/vnc sessions 2026-05-18 04:43:53 +08:00
ZacharyZcR 6a98e3db7a feat: implement clone host functionality 2026-05-18 04:41:49 +08:00
ZacharyZcR dd0bfb5190 fix: enable terminal session persistence by default 2026-05-18 04:40:27 +08:00
ZacharyZcR a1a442281b feat: check guacd availability before RDP/VNC connection 2026-05-18 04:39:46 +08:00
ZacharyZcR 47d660a509 feat: improve tmux session management and UX
Replace hardcoded setTimeout timing with exec channel polling for
reliable tmux session readiness detection. Add meaningful session
naming (termix-<hostId>-<rand>), aggressive-resize for multi-client
support, and a detach button in the terminal UI.
2026-05-18 04:38:19 +08:00
ZacharyZcR e156052cc7 Merge pull request #760 from ZacharyZcR/fix/folder-drag-upload
fix: support folder drag-and-drop upload in file manager
2026-05-18 04:36:41 +08:00
ZacharyZcR c9886b1a76 Merge pull request #772 from ZacharyZcR/fix/large-file-download-streaming
fix: use streaming download for large files in file manager
2026-05-18 04:36:25 +08:00
ZacharyZcR 5b1d84656b Merge pull request #788 from ZacharyZcR/feat/system-browser-oidc-auth
feat: implement RFC 8252 system browser OIDC authentication for desktop
2026-05-18 04:35:55 +08:00
ZacharyZcR 3d5296cdaa Merge pull request #763 from ZacharyZcR/feat/pinned-hosts-quick-actions
feat: show pinned hosts in quick actions card
2026-05-18 04:35:52 +08:00
ZacharyZcR 982cfab978 Merge pull request #775 from ZacharyZcR/fix/guacamole-drive-redirection
fix: implement guacamole drive redirection file transfer
2026-05-18 04:35:16 +08:00
ZacharyZcR d27d8ad149 Merge pull request #769 from ZacharyZcR/fix/electron-url-handler
fix: validate terminal link URLs before opening in external browser
2026-05-18 04:35:11 +08:00
ZacharyZcR 93716c9d64 Merge pull request #766 from ZacharyZcR/feat/runtime-base-path
feat: support runtime base path configuration via BASE_PATH env var
2026-05-18 04:35:07 +08:00
LukeGus c26288e024 feat: continued improvements 2026-05-14 00:55:12 -05:00
LukeGus 5bf59f87c0 feat: improve all connection types 2026-05-13 17:44:13 -05:00
ZacharyZcR 4f23e3d22c feat: implement RFC 8252 system browser OIDC authentication for desktop 2026-05-13 19:18:44 +08:00
ZacharyZcR 453b6ea138 fix: implement guacamole drive redirection file transfer 2026-05-13 17:17:16 +08:00
ZacharyZcR fafc1437cd fix: use streaming download for large files in file manager 2026-05-13 16:52:56 +08:00
ZacharyZcR dcc75c980b fix: validate terminal link URLs before opening in external browser 2026-05-13 16:30:41 +08:00
ZacharyZcR 1727601fbe feat: support runtime base path configuration via BASE_PATH env var 2026-05-13 16:13:20 +08:00
ZacharyZcR 9f316922c3 feat: show pinned hosts in quick actions card 2026-05-13 15:56:49 +08:00
ZacharyZcR 77c1a1b518 fix: support folder drag-and-drop upload in file manager 2026-05-13 15:25:21 +08:00
LukeGus 84a8dfa050 fix: remove git commit head line 2026-05-13 01:36:35 -05:00
LukeGus ec87f8a4d1 feat: improve admin settings and user profile 2026-05-13 01:31:11 -05:00
LukeGus 1be5d20744 feat: improve network graph 2026-05-13 01:31:10 -05:00
LukeGus 6212a24567 feat: improve dashboard and commpand pallete 2026-05-13 01:31:10 -05:00
LukeGus 835b98a102 feat: continued migration 2026-05-13 01:30:24 -05:00
LukeGus 0efcb7de7e fix: eslint error and format 2026-05-13 01:29:44 -05:00
LukeGus 93fa749d09 feat: continue migrating content for ui redesign 2026-05-13 01:29:43 -05:00
LukeGus 33dcde0827 feat: initial ui redesign from demo 2026-05-13 01:29:43 -05:00
LukeGus eaa758effe fix: rdp fails with readText undefined error 2026-05-13 01:06:34 -05:00
LukeGus 604de8a683 fix: remote desktop blank screen 2026-05-12 22:50:51 -05:00
Luke Gustafson 10794f1e8d v2.2.1 (#754)
* fix: rdp, desktop app, and mobile app login issues and guacd issues

* fix: general fixes

* fix: mobile/desktop login isssues

* fix: mobile/desktop login isssues

* fix: mobile/desktop login isssues

* chore: format
2026-05-12 21:55:14 -05:00
Luke Gustafson 2768f11dfc v2.2.0 (#738)
* Improve Docker container list UI

* Rework SSH tunnel forwarding

* Update macOS Electron packaging

* Optimize frontend bundle splitting

* Add beta version update status

* Add client tunnel preset management

* Secure cookie authentication flows

* Add client tunnel bridge support

* Preserve sessions on restart

* Update runtime to Node 24

* Add client remote tunnel support

* Fix stale frontend cache handling

* Fix Docker image platforms for Node 24

* Fix Electron packaging workflows

* Fix client auth cache after upgrades

* chore: cleanup files

* fix: npm i error

* Fix OIDC auth cookie readiness

* Fix Docker npm ci config

* Add react-is peer dependency

* Fix Electron auth and cache handling

* Improve terminal clipboard and refresh actions

* feat: add API keys

* feat: improve lazy loading with loading spinners

* feat: Introduce FolderTree component with lazy-loading and motion animations for improved file manager UX (#735)

* feat: integrate FolderTree component with lazy-loading for file manager sidebar

- Add motion animation library (v12.38.0) for smooth UI transitions
- Create new FolderTree component with advanced keyboard navigation support
- Refactor kbd component: introduce KbdKey and KbdSeparator subcomponents
- Implement lazy-loading strategy for directory tree in FileManagerSidebar
- Refactor FileManagerSidebar with improved code organization and better separation of concerns
- Update keyboard shortcut displays across CommandPalette, FileViewer, and Dashboard
- Change React/ReactDOM dependency flags from dev to devOptional in package-lock.json

BREAKING CHANGE: KbdGroup component has been replaced. Use <Kbd><KbdKey>...</KbdKey><KbdSeparator /></Kbd> instead.

- Improves UX with smooth animations and better folder navigation
- Reduces initial load time through lazy-loading subdirectories
- Enhances accessibility with ARIA labels and keyboard navigation
- Maintains dark mode support and proper styling

* fix: incorrect use of the theme system and linked file manger sidebar with current folder

---------

Co-authored-by: suryacagur <suryacagur.dev@gmail.com>
Co-authored-by: LukeGus <bugattiguy527@gmail.com>
Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>

* Enhance VNC token generation to include optional username parameter and refactor username input handling in HostGeneralTab (#733)

* Fix Docker build info generation

* Remove unused node-fetch dependency

* feat: prompt user for SSH key passphrase on use (#715)

When an encrypted SSH key has no stored passphrase, show a lightweight
dialog prompting the user to enter it at connection time instead of
failing with a parse error. Supports both desktop and mobile terminals.

Closes Termix-SSH/Support#354

* fix: prevent session crash when uploading to permission-denied directory (#716)

- Wrap writeFile sftp.stat callback in try-catch to prevent uncaught
  exceptions from escaping the callback into the event loop
- Add missing stream.stderr error handler in writeFile fallback to
  prevent unhandled error events from crashing the process
- Remove bogus activeOperations decrement in both writeFile and
  uploadFile fallback methods (counter was never incremented)
- Add res.headersSent checks in fallback disconnect paths to prevent
  ERR_HTTP_HEADERS_SENT crashes

Closes Termix-SSH/Support#652

* feat: add LOG_TIMESTAMP_FORMAT env var for 24h/ISO log timestamps (#718)

Support LOG_TIMESTAMP_FORMAT environment variable with values:
- "24h": 24-hour format (14:58:45)
- "iso": ISO 8601 format (2026-04-25T14:58:45.000Z)
- default: locale format (2:58:45 PM)

Closes Termix-SSH/Support#650

* feat: open file manager at terminal current working directory (#719)

* feat: open file manager at terminal current working directory

When right-clicking in the terminal and selecting "Open File Manager
Here", query the current working directory via a separate SSH exec
channel and pass it as the initial path to the file manager tab.

Closes Termix-SSH/Support#649

* chore: sync package-lock.json with node-fetch and deps

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix: remove undefined TerminalContextMenu from bad merge resolution

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

---------

Co-authored-by: LukeGus <bugattiguy527@gmail.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>

* fix: show reconnect overlay when SSH server reboots (#720)

When the remote server reboots, the SSH connection closes while the
stream is still active. The close handler only sent the "disconnected"
message when sshStream was null, so the frontend never received the
disconnect notification and hung with a blinking cursor.

Change the else-if condition to always send the "disconnected" message
regardless of stream state.

Closes Termix-SSH/Support#648

* feat: support read-only Docker container mode (#721)

Move nginx runtime files (config, pid, logs, temp dirs) from /app/nginx/
to /tmp/nginx/ so the container can run with read_only: true. Template
files remain in /app/nginx/ as read-only assets.

Users can now harden the container with:
  read_only: true
  tmpfs:
    - /tmp

Closes Termix-SSH/Support#647

* fix: allow editing host folder without re-entering password (#722)

When editing an existing host, the password field is stripped by the
backend for security. The form validation treated the empty password
as invalid, disabling the Update Host button even for non-auth changes
like folder assignment.

Use an "existing_password" sentinel (mirroring the existing
"existing_key" pattern) to represent an unchanged password during
editing, skip validation for it, and omit it from the update payload.

Closes Termix-SSH/Support#645

* fix: auto-close tab on graceful SSH disconnect (exit/Ctrl+D) (#723)

Distinguish between graceful shell exit and unexpected disconnection
using the stream close event's exit code. When the shell exits normally
(code != null), send "session_ended" instead of "disconnected". The
frontend auto-closes the tab on session_ended, and shows the reconnect
overlay only on unexpected disconnections.

Closes Termix-SSH/Support#643

* fix: reattach existing SSH session on WebSocket reconnect (#724)

WebSocket reconnection was always creating a new SSH connection with
full authentication instead of reattaching to the existing SSH session.
The condition `!isReconnectingRef.current` prevented session reattach
during reconnection, causing repeated password auth attempts that
trigger SSHGuard/fail2ban blocking.

Remove the guard so reconnection tries to reattach the persisted
session first. If the session has expired, the backend sends
sessionExpired and the frontend falls back to a new connection.

Closes Termix-SSH/Support#644

* fix: prevent browser crash when uploading large files (>100MB) (#725)

The file-to-base64 conversion used a byte-by-byte string concatenation
loop (String.fromCharCode + btoa), which allocated ~3x the file size
in intermediate strings, causing the browser tab to OOM on files over
~100MB.

Replace with FileReader.readAsDataURL which delegates base64 encoding
to the browser engine natively, avoiding the intermediate allocations.

Closes Termix-SSH/Support#577

* fix: support SSH multi-factor auth with publickey + password (#726)

When sshd requires AuthenticationMethods publickey,password, the
connection failed because the key auth branch only set privateKey
without also setting password. After publickey partial auth succeeded,
ssh2 sent keyboard-interactive (due to tryKeyboard:true) instead of
password, which the server rejected.

Pass the credential password alongside the private key so ssh2 can
complete the password step after publickey succeeds.

Closes Termix-SSH/Support#629

* feat(oidc): add OIDC_ALLOW_REGISTRATION env to bypass allow_registration for OIDC (#727)

The `allow_registration` setting blocks both password-based and OIDC user
creation. Admins who want to close password registration but still onboard
new users via a trusted IdP (with the existing `OIDC_ALLOWED_USERS` whitelist)
have no way to do that today.

Introduce an `OIDC_ALLOW_REGISTRATION` env var. When set to `true`, the OIDC
callback skips the `allow_registration` settings check while still honoring
the `OIDC_ALLOWED_USERS` whitelist. Password registration via `POST
/users/create` continues to respect `allow_registration`.

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* perf: lazy load locales, file previews, and decouple startup imports (#729)

* perf: lazy load locale bundles

* perf: lazy load file preview modules

* perf: avoid eager api client load on startup

* chore: remove dead code, tighten types, fix lint warnings (#730)

* chore: clean up low-risk lint warnings

* chore: tighten utility types

* chore: preserve backend error causes

* chore: simplify command palette host state

* chore: remove unused frontend code

* chore: prune stale frontend state

* chore: trim unused navigation code

* chore: prune unused user settings props

* chore: trim unused sidebar state

* chore: remove stale host editor imports

* chore: tighten shared frontend types

* chore: narrow desktop helper types

* chore: type network topology data

* chore: type connection log errors

* chore: use typed tab context

* chore: type api client error metadata

* chore: tighten terminal config types

* chore: type host proxy chains

* chore: type host editor form data

* chore: use typed host viewer fields

* chore: format app builder patch script

* Fix client auth cache after upgrades

* chore: fix pr checks after dev merge

* fix: remove duplicate session-expired useEffect in FullScreenAppWrapper

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Xenthys <x@dis.gg>
Co-authored-by: LukeGus <bugattiguy527@gmail.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix: npm package warnings

* feat: reconnect after file manager disconnects

* feat: add docs button in api keys

* feat: change colors for server tunnels

* fix: fetch password from API for Copy Password button (#736)

* chore: update readme's

* feat: improve c2s UI in user profile

* feat: improve ssh key detection and move open file manager at path for terminal button

* fix: restore missing getHostPassword import in Tab.tsx (#737)

* fix: security related fixes

* feat: improve alert code

* Fix Electron clipboard handling

* fix: untranslated alert text

---------

Co-authored-by: Xenthys <x@dis.gg>
Co-authored-by: PT Kelana Tech Solutions <ptkelanatechsolutions@gmail.com>
Co-authored-by: suryacagur <suryacagur.dev@gmail.com>
Co-authored-by: zimmra <28514085+zimmra@users.noreply.github.com>
Co-authored-by: ZacharyZcR <zacharyzcr1984@gmail.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: Fuad <funtik1229@yandex.ru>
2026-05-06 15:12:07 -05:00