Commit Graph

291 Commits

Author SHA1 Message Date
LukeGus 6a7211249a feat: improve alert code 2026-05-02 22:43:18 -05:00
LukeGus 735ac44bc9 fix: security related fixes 2026-05-01 13:41:11 -05:00
ZacharyZcR ee856cd5ec fix: restore missing getHostPassword import in Tab.tsx (#737) 2026-05-01 13:32:00 -05:00
LukeGus 3e2de42cae feat: improve ssh key detection and move open file manager at path for terminal button 2026-04-30 16:07:20 -05:00
LukeGus 7cf257a5ac feat: improve c2s UI in user profile 2026-04-30 15:13:11 -05:00
LukeGus 3602e0cd49 Merge remote-tracking branch 'origin/dev-2.2.0' into dev-2.2.0 2026-04-30 14:58:28 -05:00
LukeGus 32f377b59e chore: update readme's 2026-04-30 14:58:02 -05:00
ZacharyZcR 50690c7fe4 fix: fetch password from API for Copy Password button (#736) 2026-04-30 13:32:53 -05:00
LukeGus 9673d5f5ef feat: change colors for server tunnels 2026-04-29 23:30:10 -05:00
LukeGus 17b960a1b8 feat: add docs button in api keys 2026-04-29 23:24:03 -05:00
LukeGus d361027529 feat: reconnect after file manager disconnects 2026-04-29 23:02:17 -05:00
LukeGus 9ba2cf4b08 fix: npm package warnings 2026-04-29 21:36:38 -05:00
ZacharyZcR 5cea427405 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>
2026-04-29 21:32:23 -05:00
ZacharyZcR 298f59d76c 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
2026-04-29 21:28:39 -05:00
Fuad 5f70a31bd4 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>
2026-04-29 21:28:26 -05:00
ZacharyZcR 1d6bb2a056 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
2026-04-29 21:27:54 -05:00
ZacharyZcR f8fad3edd7 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
2026-04-29 21:27:40 -05:00
ZacharyZcR 82d3854173 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
2026-04-29 21:27:08 -05:00
ZacharyZcR 77c7240e4e 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
2026-04-29 21:26:27 -05:00
ZacharyZcR de5818b92e 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
2026-04-29 21:26:13 -05:00
ZacharyZcR 134f55d67d 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
2026-04-29 21:26:00 -05:00
ZacharyZcR 8992b2b1b9 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
2026-04-29 21:25:44 -05:00
ZacharyZcR b579dee0e4 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>
2026-04-29 21:25:25 -05:00
ZacharyZcR b7f15696fe 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
2026-04-29 19:18:26 -05:00
ZacharyZcR c392834e73 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
2026-04-29 19:18:15 -05:00
ZacharyZcR 612a1d2ac4 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
2026-04-29 19:18:04 -05:00
Xenthys 28edf1a86f Remove unused node-fetch dependency 2026-04-29 23:17:06 +00:00
Xenthys 2be78021cf Fix Docker build info generation 2026-04-29 23:02:45 +00:00
zimmra 05da4d8b9c Enhance VNC token generation to include optional username parameter and refactor username input handling in HostGeneralTab (#733) 2026-04-29 17:23:47 -05:00
PT Kelana Tech Solutions 2d4d32d0a2 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>
2026-04-29 17:23:11 -05:00
LukeGus 38eda1c7cf feat: improve lazy loading with loading spinners 2026-04-29 17:00:07 -05:00
LukeGus ad7683e3e2 feat: add API keys 2026-04-29 16:43:45 -05:00
Xenthys e583a17de9 Improve terminal clipboard and refresh actions 2026-04-29 20:24:25 +00:00
Xenthys 1bbc001bcb Fix Electron auth and cache handling 2026-04-29 19:51:30 +00:00
Xenthys 761e488ee1 Add react-is peer dependency 2026-04-28 20:11:31 +00:00
Xenthys 66aa76c276 Fix Docker npm ci config 2026-04-28 19:43:55 +00:00
Xenthys 5e52de33e1 Fix OIDC auth cookie readiness 2026-04-28 15:36:33 +00:00
LukeGus 50b2f32d93 fix: npm i error 2026-04-26 23:54:03 -05:00
LukeGus 1699aa6058 chore: cleanup files 2026-04-26 23:48:24 -05:00
Xenthys f3fd847001 Fix client auth cache after upgrades 2026-04-25 18:32:01 +02:00
Xenthys ef390730bc Fix Electron packaging workflows 2026-04-25 03:56:28 +02:00
Xenthys 50a0a941c0 Fix Docker image platforms for Node 24 2026-04-25 03:25:11 +02:00
Xenthys 6267e5d07b Fix stale frontend cache handling 2026-04-25 02:59:34 +02:00
Xenthys 2171d13499 Add client remote tunnel support 2026-04-25 02:13:44 +02:00
Xenthys 182a51cdcb Update runtime to Node 24 2026-04-25 00:46:08 +02:00
Xenthys 06727eeede Preserve sessions on restart 2026-04-24 23:17:26 +02:00
Xenthys 9a7bfc2fa3 Add client tunnel bridge support 2026-04-24 21:48:39 +02:00
Xenthys 1a2d330d29 Secure cookie authentication flows 2026-04-24 21:03:11 +02:00
Xenthys 0596e2212b Add client tunnel preset management 2026-04-24 20:18:52 +02:00
Xenthys de277fde86 Add beta version update status 2026-04-24 19:44:36 +02:00