From ad86c2040b70c1a8b2df3f83037c1b904a67bfe4 Mon Sep 17 00:00:00 2001 From: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Date: Wed, 31 Dec 2025 22:20:12 -0600 Subject: [PATCH] v1.10.0 (#471) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix select edit host but not update view (#438) * fix: Checksum issue with chocolatey * fix: Remove homebrew old stuff * Add Korean translation (#439) Co-authored-by: 송준우 <2484@coreit.co.kr> * feat: Automate flatpak * fix: Add imagemagik to electron builder to resolve build error * fix: Build error with runtime repo flag * fix: Flatpak runtime error and install freedesktop ver warning * fix: Flatpak runtime error and install freedesktop ver warning * feat: Re-add homebrew cask and move scripts to backend * fix: No sandbox flag issue * fix: Change name for electron macos cask output * fix: Sandbox error with Linux * fix: Remove comming soon for app stores in readme * Adding Comment at the end of the public_key on the host on deploy (#440) * Add termix.rb Cask file * Update Termix to version 1.9.0 with new checksum * Update README to remove 'coming soon' notes * -Add New Interface for Credential DB -Add Credential Name as a comment into the server authorized_key file --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> * Sudo auto fill password (#441) * Add termix.rb Cask file * Update Termix to version 1.9.0 with new checksum * Update README to remove 'coming soon' notes * Feature Sudo password auto-fill; * Fix locale json shema; --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> * Added Italian Language; (#445) * Add termix.rb Cask file * Update Termix to version 1.9.0 with new checksum * Update README to remove 'coming soon' notes * Added Italian Language; --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> * Auto collapse snippet folders (#448) * Add termix.rb Cask file * Update Termix to version 1.9.0 with new checksum * Update README to remove 'coming soon' notes * feat: Add collapsable snippets (customizable in user profile) * Translations (#447) * Add termix.rb Cask file * Update Termix to version 1.9.0 with new checksum * Update README to remove 'coming soon' notes * Added Italian Language; * Fix translations; Removed duplicate keys, synchronised other languages using English as the source, translated added keys, fixed inaccurate translations. --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> * Remove PTY-level keepalive (#449) * Add termix.rb Cask file * Update Termix to version 1.9.0 with new checksum * Update README to remove 'coming soon' notes * Remove PTY-level keepalive to prevent unwanted terminal output; use SSH-level keepalive instead --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> * feat: Seperate server stats and tunnel management (improved both UI's) then started initial docker implementation * fix: finalize adding docker to db * feat: Add docker management support (local squash) * Fix RBAC role system bugs and improve UX (#446) * Fix RBAC role system bugs and improve UX - Fix user list dropdown selection in host sharing - Fix role sharing permissions to include role-based access - Fix translation template interpolation for success messages - Standardize system roles to admin and user only - Auto-assign user role to new registrations - Remove blocking confirmation dialogs in modal contexts - Add missing i18n keys for common actions - Fix button type to prevent unintended form submissions * Enhance RBAC system with UI improvements and security fixes - Move role assignment to Users tab with per-user role management - Protect system roles (admin/user) from editing and manual assignment - Simplify permission system: remove Use level, keep View and Manage - Hide Update button and Sharing tab for view-only/shared hosts - Prevent users from sharing hosts with themselves - Unify table and modal styling across admin panels - Auto-assign system roles on user registration - Add permission metadata to host interface * Add empty state message for role assignment - Display helpful message when no custom roles available - Clarify that system roles are auto-assigned - Add noCustomRolesToAssign translation in English and Chinese * fix: Prevent credential sharing errors for shared hosts - Skip credential resolution for shared hosts with credential authentication to prevent decryption errors (credentials are encrypted per-user) - Add warning alert in sharing tab when host uses credential authentication - Inform users that shared users cannot connect to credential-based hosts - Add translations for credential sharing warning (EN/ZH) This prevents authentication failures when sharing hosts configured with credential authentication while maintaining security by keeping credentials isolated per user. * feat: Improve rbac UI and fixes some bugs --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Co-authored-by: LukeGus * SOCKS5 support (#452) * Add termix.rb Cask file * Update Termix to version 1.9.0 with new checksum * Update README to remove 'coming soon' notes * SOCKS5 support Adding single and chain socks5 proxy support * fix: cleanup files --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Co-authored-by: LukeGus * Notes and Expiry fields add (#453) * Add termix.rb Cask file * Update Termix to version 1.9.0 with new checksum * Update README to remove 'coming soon' notes * Notes and Expiry add * fix: cleanup files --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Co-authored-by: LukeGus * fix: ssh host types * fix: sudo incorrect styling and remove expiration date * feat: add sudo password and add diagonal bg's * fix: snippet running on enter key * fix: base64 decoding * fix: improve server stats / rbac * fix: wrap ssh host json export in hosts array * feat: auto trim host inputs, fix file manager jump hosts, dashboard prevent duplicates, file manager terminal not size updating, improve left sidebar sorting, hide/show tags, add apperance user profile tab, add new host manager tabs. * feat: improve terminal connection speed * fix: sqlite constriant errors and support non-root user (nginx perm issue) * feat: add beta syntax highlighing to terminal * feat: update imports and improve admin settings user management * chore: update translations * chore: update translations * feat: Complete light mode implementation with semantic theme system (#450) - Add comprehensive light/dark mode CSS variables with semantic naming - Implement theme-aware scrollbars using CSS variables - Add light mode backgrounds: --bg-base, --bg-elevated, --bg-surface, etc. - Add theme-aware borders: --border-base, --border-panel, --border-subtle - Add semantic text colors: --foreground-secondary, --foreground-subtle - Convert oklch colors to hex for better compatibility - Add theme awareness to CodeMirror editors - Update dark mode colors for consistency (background, sidebar, card, muted, input) - Add Tailwind color mappings for semantic classes Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> * fix: syntax errors * chore: updating/match themes and split admin settings * feat: add translation workflow and remove old translation.json * fix: translation workflow error * fix: translation workflow error * feat: improve translation system and update workflow * fix: wrong path for translations * fix: change translation to flat files * fix: gh rule error * chore: auto-translate to multiple languages (#458) * chore: improve organization and made a few styling changes in host manager * feat: improve terminal stability and split out the host manager * fix: add unnversiioned files * chore: migrate all to use the new theme system * fix: wrong animation line colors * fix: rbac implementation general issues (local squash) * fix: remove unneeded files * feat: add 10 new langs * chore: update gitnore * chore: auto-translate to multiple languages (#459) * fix: improve tunnel system * fix: properly split tabs, still need to fix up the host manager * chore: cleanup files (possible RC) * feat: add norwegian * chore: auto-translate to multiple languages (#461) * fix: small qol fixes and began readme update * fix: run cleanup script * feat: add docker docs button * feat: general bug fixes and readme updates * fix: translations * chore: auto-translate to multiple languages (#462) * fix: cleanup files * fix: test new translation issue and add better server-stats support * fix: fix translate error * chore: auto-translate to multiple languages (#463) * fix: fix translate mismatching text * chore: auto-translate to multiple languages (#465) * fix: fix translate mismatching text * fix: fix translate mismatching text * chore: auto-translate to multiple languages (#466) * fix: fix translate mismatching text * fix: fix translate mismatching text * fix: fix translate mismatching text * chore: auto-translate to multiple languages (#467) * fix: fix translate mismatching text * chore: auto-translate to multiple languages (#468) * feat: add to readme, a few qol changes, and improve server stats in general * chore: auto-translate to multiple languages (#469) * feat: turned disk uage into graph and fixed issue with termina console * fix: electron build error and hide icons when shared * chore: run clean * fix: general server stats issues, file manager decoding, ui qol * fix: add dashboard line breaks * fix: docker console error * fix: docker console not loading and mismatched stripped background for electron * fix: docker console not loading * chore: docker console not loading in docker * chore: translate readme to chinese * chore: match package lock to package json * chore: nginx config issue for dokcer console * chore: auto-translate to multiple languages (#470) --------- Co-authored-by: Tran Trung Kien Co-authored-by: junu Co-authored-by: 송준우 <2484@coreit.co.kr> Co-authored-by: SlimGary Co-authored-by: Nunzio Marfè Co-authored-by: Wesley Reid Co-authored-by: ZacharyZcR Co-authored-by: Denis <38875137+Medvedinca@users.noreply.github.com> Co-authored-by: Peet McKinney <68706879+PeetMcK@users.noreply.github.com> --- .github/workflows/electron.yml | 406 +- .github/workflows/translate.yml | 443 ++- .gitignore | 1 + README-CN.md | 16 +- README.md | 20 +- docker/Dockerfile | 21 +- docker/entrypoint.sh | 22 +- docker/nginx-https.conf | 74 +- docker/nginx.conf | 68 +- electron-builder.json | 3 +- electron/main.cjs | 8 +- electron/preload.js | 15 - flatpak/com.karmaa.termix.desktop | 2 +- flatpak/com.karmaa.termix.flatpakref | 12 + flatpak/com.karmaa.termix.metainfo.xml | 2 +- flatpak/com.karmaa.termix.yml | 30 +- flatpak/prepare-flatpak.sh | 34 - package-lock.json | 1061 +++++- package.json | 8 +- repo-images/Image 10.png | Bin 0 -> 161442 bytes repo-images/Image 4.png | Bin 416728 -> 363400 bytes repo-images/Image 8.png | Bin 0 -> 232133 bytes repo-images/Image 9.png | Bin 0 -> 156221 bytes src/backend/dashboard.ts | 36 +- src/backend/database/database.ts | 2 + src/backend/database/db/index.ts | 413 +++ src/backend/database/db/schema.ts | 171 + src/backend/database/routes/credentials.ts | 65 +- src/backend/database/routes/rbac.ts | 850 +++++ src/backend/database/routes/ssh.ts | 472 ++- src/backend/database/routes/users.ts | 181 +- .../backend/scripts}/enable-ssl.sh | 0 {scripts => src/backend/scripts}/setup-ssl.sh | 0 src/backend/ssh/docker-console.ts | 632 ++++ src/backend/ssh/docker.ts | 1904 ++++++++++ src/backend/ssh/file-manager.ts | 133 +- src/backend/ssh/server-stats.ts | 1148 +++++- src/backend/ssh/terminal.ts | 171 +- src/backend/ssh/tunnel.ts | 670 +++- src/backend/ssh/widgets/common-utils.ts | 71 +- src/backend/ssh/widgets/cpu-collector.ts | 20 +- .../ssh/widgets/login-stats-collector.ts | 35 +- src/backend/ssh/widgets/network-collector.ts | 7 +- .../ssh/widgets/processes-collector.ts | 21 +- src/backend/ssh/widgets/system-collector.ts | 5 +- src/backend/ssh/widgets/uptime-collector.ts | 7 +- src/backend/starter.ts | 2 + src/backend/utils/auth-manager.ts | 52 +- .../credential-system-encryption-migration.ts | 131 + src/backend/utils/data-crypto.ts | 46 + src/backend/utils/database-file-encryption.ts | 6 +- src/backend/utils/logger.ts | 2 +- src/backend/utils/permission-manager.ts | 436 +++ .../utils/shared-credential-manager.ts | 700 ++++ src/backend/utils/simple-db-ops.ts | 35 +- src/backend/utils/socks5-helper.ts | 131 + src/backend/utils/system-crypto.ts | 63 + src/components/ui/alert-dialog.tsx | 155 + src/components/ui/badge.tsx | 2 +- src/components/ui/button.tsx | 2 +- src/components/ui/card.tsx | 2 +- src/components/ui/command.tsx | 2 +- src/components/ui/dialog.tsx | 2 +- src/components/ui/input.tsx | 2 +- src/components/ui/resizable.tsx | 4 +- src/components/ui/select.tsx | 2 +- src/components/ui/sheet.tsx | 2 +- src/components/ui/sidebar.tsx | 2 +- src/components/ui/slider.tsx | 2 +- src/components/ui/sonner.tsx | 2 +- src/components/ui/table.tsx | 2 +- src/components/ui/textarea.tsx | 2 +- src/constants/terminal-themes.ts | 57 + src/hooks/use-confirmation.ts | 65 +- src/i18n/i18n.ts | 125 +- src/index.css | 264 +- src/lib/terminal-syntax-highlighter.ts | 263 ++ src/locales/ar.json | 2402 ++++++++++++ src/locales/bn.json | 2402 ++++++++++++ src/locales/cs.json | 2402 ++++++++++++ src/locales/de.json | 2402 ++++++++++++ src/locales/de/translation.json | 1638 -------- src/locales/el.json | 2402 ++++++++++++ src/locales/{en/translation.json => en.json} | 764 +++- src/locales/es.json | 2402 ++++++++++++ src/locales/fr.json | 2402 ++++++++++++ src/locales/fr/translation.json | 1609 -------- src/locales/he.json | 2402 ++++++++++++ src/locales/hi.json | 2402 ++++++++++++ src/locales/id.json | 2402 ++++++++++++ src/locales/it.json | 2402 ++++++++++++ src/locales/ja.json | 2402 ++++++++++++ src/locales/ko.json | 2402 ++++++++++++ src/locales/nb.json | 2402 ++++++++++++ src/locales/nl.json | 2402 ++++++++++++ src/locales/pl.json | 2402 ++++++++++++ src/locales/pt-BR/translation.json | 1531 -------- src/locales/pt.json | 2402 ++++++++++++ src/locales/ro.json | 2402 ++++++++++++ src/locales/ru.json | 2402 ++++++++++++ src/locales/ru/translation.json | 1725 --------- src/locales/sv.json | 2402 ++++++++++++ src/locales/th.json | 2402 ++++++++++++ src/locales/tr.json | 2402 ++++++++++++ src/locales/uk.json | 2402 ++++++++++++ src/locales/vi.json | 2402 ++++++++++++ src/locales/zh.json | 2402 ++++++++++++ src/locales/zh/translation.json | 1689 --------- src/main.tsx | 6 +- src/types/index.ts | 136 +- src/ui/desktop/DesktopApp.tsx | 68 +- src/ui/desktop/admin/AdminSettings.tsx | 1620 -------- src/ui/desktop/apps/admin/AdminSettings.tsx | 442 +++ .../apps/admin/dialogs/CreateUserDialog.tsx | 163 + .../apps/admin/dialogs/LinkAccountDialog.tsx | 143 + .../apps/admin/dialogs/UserEditDialog.tsx | 582 +++ .../apps/admin/tabs/DatabaseSecurityTab.tsx | 319 ++ .../apps/admin/tabs/GeneralSettingsTab.tsx | 125 + .../apps/admin/tabs/OIDCSettingsTab.tsx | 319 ++ src/ui/desktop/apps/admin/tabs/RolesTab.tsx | 300 ++ .../apps/admin/tabs/SessionManagementTab.tsx | 213 ++ .../apps/admin/tabs/UserManagementTab.tsx | 177 + .../apps/command-palette/CommandPalette.tsx | 154 +- .../apps/credentials/CredentialEditor.tsx | 1175 ------ src/ui/desktop/apps/dashboard/Dashboard.tsx | 295 +- .../desktop/apps/dashboard/apps/UpdateLog.tsx | 30 +- .../apps/features/docker/DockerManager.tsx | 606 +++ .../docker/components/ConsoleTerminal.tsx | 441 +++ .../docker/components/ContainerCard.tsx | 432 +++ .../docker/components/ContainerDetail.tsx | 124 + .../docker/components/ContainerList.tsx | 135 + .../docker/components/ContainerStats.tsx | 256 ++ .../features/docker/components/LogViewer.tsx | 239 ++ .../file-manager/DragIndicator.tsx | 4 +- .../file-manager/FileManager.tsx | 96 +- .../file-manager/FileManagerContextMenu.tsx | 10 +- .../file-manager/FileManagerGrid.tsx | 32 +- .../file-manager/FileManagerSidebar.tsx | 28 +- .../components/CompressDialog.tsx | 18 +- .../file-manager/components/DiffViewer.tsx | 14 +- .../file-manager/components/DiffWindow.tsx | 6 +- .../components/DraggableWindow.tsx | 2 +- .../file-manager/components/FileViewer.tsx | 74 +- .../file-manager/components/FileWindow.tsx | 8 +- .../components/PermissionsDialog.tsx | 16 +- .../components/TerminalWindow.tsx | 14 +- .../file-manager/components/WindowManager.tsx | 0 .../file-manager/hooks/useDragAndDrop.ts | 0 .../file-manager/hooks/useFileSelection.ts | 0 .../features/server-stats/ServerStats.tsx | 850 +++++ .../server-stats}/widgets/CpuWidget.tsx | 13 +- .../server-stats/widgets/DiskWidget.tsx | 125 + .../widgets/LoginStatsWidget.tsx | 34 +- .../server-stats}/widgets/MemoryWidget.tsx | 24 +- .../server-stats}/widgets/NetworkWidget.tsx | 18 +- .../server-stats}/widgets/ProcessesWidget.tsx | 28 +- .../server-stats}/widgets/SystemWidget.tsx | 16 +- .../server-stats}/widgets/UptimeWidget.tsx | 8 +- .../features/server-stats/widgets/index.ts | 8 + .../apps/{ => features}/terminal/Terminal.tsx | 369 +- .../terminal/TerminalPreview.tsx | 50 +- .../command-history/CommandAutocomplete.tsx | 10 +- .../command-history/CommandHistoryContext.tsx | 0 .../apps/{ => features}/tunnel/Tunnel.tsx | 80 +- .../apps/features/tunnel/TunnelManager.tsx | 143 + .../{ => features}/tunnel/TunnelObject.tsx | 66 +- .../{ => features}/tunnel/TunnelViewer.tsx | 19 +- .../apps/host-manager/HostManagerEditor.tsx | 3296 ----------------- .../credentials/CredentialEditor.tsx | 542 +++ .../credentials/CredentialSelector.tsx | 4 +- .../credentials/CredentialViewer.tsx | 121 +- .../credentials/CredentialsManager.tsx | 55 +- .../tabs/CredentialAuthenticationTab.tsx | 514 +++ .../credentials/tabs/CredentialGeneralTab.tsx | 193 + .../credentials/tabs/shared/tab-types.ts | 35 + .../FolderEditDialog.tsx | 14 +- .../host-manager/{ => hosts}/HostManager.tsx | 84 +- .../host-manager/hosts/HostManagerEditor.tsx | 1225 ++++++ .../{ => hosts}/HostManagerViewer.tsx | 704 ++-- .../host-manager/hosts/tabs/HostDockerTab.tsx | 38 + .../hosts/tabs/HostFileManagerTab.tsx | 57 + .../hosts/tabs/HostGeneralTab.tsx | 1047 ++++++ .../hosts/tabs/HostSharingTab.tsx | 571 +++ .../hosts/tabs/HostStatisticsTab.tsx | 340 ++ .../hosts/tabs/HostTerminalTab.tsx | 767 ++++ .../host-manager/hosts/tabs/HostTunnelTab.tsx | 361 ++ .../hosts/tabs/shared/JumpHostItem.tsx | 104 + .../hosts/tabs/shared/QuickActionItem.tsx | 111 + .../hosts/tabs/shared/tab-types.ts | 100 + src/ui/desktop/apps/server/Server.tsx | 621 ---- .../apps/server/widgets/DiskWidget.tsx | 99 - src/ui/desktop/apps/server/widgets/index.ts | 8 - src/ui/desktop/apps/tools/SSHToolsSidebar.tsx | 471 ++- src/ui/desktop/authentication/Auth.tsx | 216 +- .../authentication/ElectronLoginForm.tsx | 6 +- .../authentication/ElectronServerConfig.tsx | 142 +- src/ui/desktop/navigation/AppView.tsx | 174 +- src/ui/desktop/navigation/LeftSidebar.tsx | 118 +- src/ui/desktop/navigation/SSHAuthDialog.tsx | 7 +- src/ui/desktop/navigation/TOTPDialog.tsx | 5 +- src/ui/desktop/navigation/TopNavbar.tsx | 25 +- .../navigation/animations/SimpleLoader.tsx | 10 +- .../desktop/navigation/hosts/FolderCard.tsx | 4 +- src/ui/desktop/navigation/hosts/Host.tsx | 111 +- src/ui/desktop/navigation/tabs/Tab.tsx | 35 +- src/ui/desktop/navigation/tabs/TabContext.tsx | 32 +- .../desktop/navigation/tabs/TabDropdown.tsx | 22 +- src/ui/desktop/user/ElectronVersionCheck.tsx | 56 +- src/ui/desktop/user/LanguageSwitcher.tsx | 34 +- src/ui/desktop/user/PasswordReset.tsx | 2 +- src/ui/desktop/user/UserProfile.tsx | 316 +- src/ui/main-axios.ts | 589 ++- src/ui/mobile/MobileApp.tsx | 17 +- .../mobile/apps/navigation/BottomNavbar.tsx | 8 +- src/ui/mobile/apps/navigation/LeftSidebar.tsx | 6 +- .../apps/navigation/hosts/FolderCard.tsx | 4 +- src/ui/mobile/apps/navigation/hosts/Host.tsx | 4 +- src/ui/mobile/apps/terminal/Terminal.tsx | 34 +- .../mobile/apps/terminal/TerminalKeyboard.tsx | 10 +- .../mobile/apps/terminal/kb-light-theme.css | 29 + src/ui/mobile/authentication/Auth.tsx | 8 +- src/ui/mobile/navigation/BottomNavbar.tsx | 8 +- src/ui/mobile/navigation/LeftSidebar.tsx | 28 +- src/ui/mobile/navigation/hosts/FolderCard.tsx | 4 +- src/ui/mobile/navigation/hosts/Host.tsx | 4 +- 225 files changed, 87356 insertions(+), 17706 deletions(-) create mode 100644 flatpak/com.karmaa.termix.flatpakref delete mode 100644 flatpak/prepare-flatpak.sh create mode 100644 repo-images/Image 10.png create mode 100644 repo-images/Image 8.png create mode 100644 repo-images/Image 9.png create mode 100644 src/backend/database/routes/rbac.ts rename {scripts => src/backend/scripts}/enable-ssl.sh (100%) rename {scripts => src/backend/scripts}/setup-ssl.sh (100%) create mode 100644 src/backend/ssh/docker-console.ts create mode 100644 src/backend/ssh/docker.ts create mode 100644 src/backend/utils/credential-system-encryption-migration.ts create mode 100644 src/backend/utils/permission-manager.ts create mode 100644 src/backend/utils/shared-credential-manager.ts create mode 100644 src/backend/utils/socks5-helper.ts create mode 100644 src/components/ui/alert-dialog.tsx create mode 100644 src/lib/terminal-syntax-highlighter.ts create mode 100644 src/locales/ar.json create mode 100644 src/locales/bn.json create mode 100644 src/locales/cs.json create mode 100644 src/locales/de.json delete mode 100644 src/locales/de/translation.json create mode 100644 src/locales/el.json rename src/locales/{en/translation.json => en.json} (73%) create mode 100644 src/locales/es.json create mode 100644 src/locales/fr.json delete mode 100644 src/locales/fr/translation.json create mode 100644 src/locales/he.json create mode 100644 src/locales/hi.json create mode 100644 src/locales/id.json create mode 100644 src/locales/it.json create mode 100644 src/locales/ja.json create mode 100644 src/locales/ko.json create mode 100644 src/locales/nb.json create mode 100644 src/locales/nl.json create mode 100644 src/locales/pl.json delete mode 100644 src/locales/pt-BR/translation.json create mode 100644 src/locales/pt.json create mode 100644 src/locales/ro.json create mode 100644 src/locales/ru.json delete mode 100644 src/locales/ru/translation.json create mode 100644 src/locales/sv.json create mode 100644 src/locales/th.json create mode 100644 src/locales/tr.json create mode 100644 src/locales/uk.json create mode 100644 src/locales/vi.json create mode 100644 src/locales/zh.json delete mode 100644 src/locales/zh/translation.json delete mode 100644 src/ui/desktop/admin/AdminSettings.tsx create mode 100644 src/ui/desktop/apps/admin/AdminSettings.tsx create mode 100644 src/ui/desktop/apps/admin/dialogs/CreateUserDialog.tsx create mode 100644 src/ui/desktop/apps/admin/dialogs/LinkAccountDialog.tsx create mode 100644 src/ui/desktop/apps/admin/dialogs/UserEditDialog.tsx create mode 100644 src/ui/desktop/apps/admin/tabs/DatabaseSecurityTab.tsx create mode 100644 src/ui/desktop/apps/admin/tabs/GeneralSettingsTab.tsx create mode 100644 src/ui/desktop/apps/admin/tabs/OIDCSettingsTab.tsx create mode 100644 src/ui/desktop/apps/admin/tabs/RolesTab.tsx create mode 100644 src/ui/desktop/apps/admin/tabs/SessionManagementTab.tsx create mode 100644 src/ui/desktop/apps/admin/tabs/UserManagementTab.tsx delete mode 100644 src/ui/desktop/apps/credentials/CredentialEditor.tsx create mode 100644 src/ui/desktop/apps/features/docker/DockerManager.tsx create mode 100644 src/ui/desktop/apps/features/docker/components/ConsoleTerminal.tsx create mode 100644 src/ui/desktop/apps/features/docker/components/ContainerCard.tsx create mode 100644 src/ui/desktop/apps/features/docker/components/ContainerDetail.tsx create mode 100644 src/ui/desktop/apps/features/docker/components/ContainerList.tsx create mode 100644 src/ui/desktop/apps/features/docker/components/ContainerStats.tsx create mode 100644 src/ui/desktop/apps/features/docker/components/LogViewer.tsx rename src/ui/desktop/apps/{ => features}/file-manager/DragIndicator.tsx (96%) rename src/ui/desktop/apps/{ => features}/file-manager/FileManager.tsx (95%) rename src/ui/desktop/apps/{ => features}/file-manager/FileManagerContextMenu.tsx (97%) rename src/ui/desktop/apps/{ => features}/file-manager/FileManagerGrid.tsx (96%) rename src/ui/desktop/apps/{ => features}/file-manager/FileManagerSidebar.tsx (94%) rename src/ui/desktop/apps/{ => features}/file-manager/components/CompressDialog.tsx (89%) rename src/ui/desktop/apps/{ => features}/file-manager/components/DiffViewer.tsx (97%) rename src/ui/desktop/apps/{ => features}/file-manager/components/DiffWindow.tsx (90%) rename src/ui/desktop/apps/{ => features}/file-manager/components/DraggableWindow.tsx (99%) rename src/ui/desktop/apps/{ => features}/file-manager/components/FileViewer.tsx (96%) rename src/ui/desktop/apps/{ => features}/file-manager/components/FileWindow.tsx (98%) rename src/ui/desktop/apps/{ => features}/file-manager/components/PermissionsDialog.tsx (95%) rename src/ui/desktop/apps/{ => features}/file-manager/components/TerminalWindow.tsx (86%) rename src/ui/desktop/apps/{ => features}/file-manager/components/WindowManager.tsx (100%) rename src/ui/desktop/apps/{ => features}/file-manager/hooks/useDragAndDrop.ts (100%) rename src/ui/desktop/apps/{ => features}/file-manager/hooks/useFileSelection.ts (100%) create mode 100644 src/ui/desktop/apps/features/server-stats/ServerStats.tsx rename src/ui/desktop/apps/{server => features/server-stats}/widgets/CpuWidget.tsx (86%) create mode 100644 src/ui/desktop/apps/features/server-stats/widgets/DiskWidget.tsx rename src/ui/desktop/apps/{server => features/server-stats}/widgets/LoginStatsWidget.tsx (75%) rename src/ui/desktop/apps/{server => features/server-stats}/widgets/MemoryWidget.tsx (81%) rename src/ui/desktop/apps/{server => features/server-stats}/widgets/NetworkWidget.tsx (74%) rename src/ui/desktop/apps/{server => features/server-stats}/widgets/ProcessesWidget.tsx (70%) rename src/ui/desktop/apps/{server => features/server-stats}/widgets/SystemWidget.tsx (73%) rename src/ui/desktop/apps/{server => features/server-stats}/widgets/UptimeWidget.tsx (81%) create mode 100644 src/ui/desktop/apps/features/server-stats/widgets/index.ts rename src/ui/desktop/apps/{ => features}/terminal/Terminal.tsx (84%) rename src/ui/desktop/apps/{ => features}/terminal/TerminalPreview.tsx (59%) rename src/ui/desktop/apps/{ => features}/terminal/command-history/CommandAutocomplete.tsx (84%) rename src/ui/desktop/apps/{ => features}/terminal/command-history/CommandHistoryContext.tsx (100%) rename src/ui/desktop/apps/{ => features}/tunnel/Tunnel.tsx (69%) create mode 100644 src/ui/desktop/apps/features/tunnel/TunnelManager.tsx rename src/ui/desktop/apps/{ => features}/tunnel/TunnelObject.tsx (93%) rename src/ui/desktop/apps/{ => features}/tunnel/TunnelViewer.tsx (75%) delete mode 100644 src/ui/desktop/apps/host-manager/HostManagerEditor.tsx create mode 100644 src/ui/desktop/apps/host-manager/credentials/CredentialEditor.tsx rename src/ui/desktop/apps/{ => host-manager}/credentials/CredentialSelector.tsx (98%) rename src/ui/desktop/apps/{ => host-manager}/credentials/CredentialViewer.tsx (77%) rename src/ui/desktop/apps/{ => host-manager}/credentials/CredentialsManager.tsx (96%) create mode 100644 src/ui/desktop/apps/host-manager/credentials/tabs/CredentialAuthenticationTab.tsx create mode 100644 src/ui/desktop/apps/host-manager/credentials/tabs/CredentialGeneralTab.tsx create mode 100644 src/ui/desktop/apps/host-manager/credentials/tabs/shared/tab-types.ts rename src/ui/desktop/apps/host-manager/{components => dialogs}/FolderEditDialog.tsx (93%) rename src/ui/desktop/apps/host-manager/{ => hosts}/HostManager.tsx (66%) create mode 100644 src/ui/desktop/apps/host-manager/hosts/HostManagerEditor.tsx rename src/ui/desktop/apps/host-manager/{ => hosts}/HostManagerViewer.tsx (75%) create mode 100644 src/ui/desktop/apps/host-manager/hosts/tabs/HostDockerTab.tsx create mode 100644 src/ui/desktop/apps/host-manager/hosts/tabs/HostFileManagerTab.tsx create mode 100644 src/ui/desktop/apps/host-manager/hosts/tabs/HostGeneralTab.tsx create mode 100644 src/ui/desktop/apps/host-manager/hosts/tabs/HostSharingTab.tsx create mode 100644 src/ui/desktop/apps/host-manager/hosts/tabs/HostStatisticsTab.tsx create mode 100644 src/ui/desktop/apps/host-manager/hosts/tabs/HostTerminalTab.tsx create mode 100644 src/ui/desktop/apps/host-manager/hosts/tabs/HostTunnelTab.tsx create mode 100644 src/ui/desktop/apps/host-manager/hosts/tabs/shared/JumpHostItem.tsx create mode 100644 src/ui/desktop/apps/host-manager/hosts/tabs/shared/QuickActionItem.tsx create mode 100644 src/ui/desktop/apps/host-manager/hosts/tabs/shared/tab-types.ts delete mode 100644 src/ui/desktop/apps/server/Server.tsx delete mode 100644 src/ui/desktop/apps/server/widgets/DiskWidget.tsx delete mode 100644 src/ui/desktop/apps/server/widgets/index.ts create mode 100644 src/ui/mobile/apps/terminal/kb-light-theme.css diff --git a/.github/workflows/electron.yml b/.github/workflows/electron.yml index bd1a5b4c..2fcd3d55 100644 --- a/.github/workflows/electron.yml +++ b/.github/workflows/electron.yml @@ -27,7 +27,7 @@ on: jobs: build-windows: runs-on: windows-latest - if: github.event.inputs.build_type == 'all' || github.event.inputs.build_type == 'windows' || github.event.inputs.build_type == '' + if: (github.event.inputs.build_type == 'all' || github.event.inputs.build_type == 'windows' || github.event.inputs.build_type == '') && github.event.inputs.artifact_destination != 'submit' permissions: contents: write @@ -72,10 +72,6 @@ jobs: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: npm run build && npx electron-builder --win --x64 --ia32 - - name: List release files - run: | - dir release - - name: Upload Windows x64 NSIS Installer uses: actions/upload-artifact@v4 if: hashFiles('release/termix_windows_x64_nsis.exe') != '' && github.event.inputs.artifact_destination != 'none' @@ -136,7 +132,7 @@ jobs: build-linux: runs-on: blacksmith-4vcpu-ubuntu-2404 - if: github.event.inputs.build_type == 'all' || github.event.inputs.build_type == 'linux' || github.event.inputs.build_type == '' + if: (github.event.inputs.build_type == 'all' || github.event.inputs.build_type == 'linux' || github.event.inputs.build_type == '') && github.event.inputs.artifact_destination != 'submit' permissions: contents: write @@ -199,17 +195,6 @@ jobs: cd .. - - name: List release files - run: | - ls -la release/ - - - name: Debug electron-builder output - if: always() - run: | - if [ -f "release/builder-debug.yml" ]; then - cat release/builder-debug.yml - fi - - name: Upload Linux x64 AppImage uses: actions/upload-artifact@v4 if: hashFiles('release/termix_linux_x64_appimage.AppImage') != '' && github.event.inputs.artifact_destination != 'none' @@ -282,6 +267,93 @@ jobs: path: release/termix_linux_armv7l_portable.tar.gz retention-days: 30 + - name: Install Flatpak builder and dependencies + run: | + sudo apt-get update + sudo apt-get install -y flatpak flatpak-builder imagemagick + + - name: Add Flathub repository + run: | + sudo flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo + + - name: Install Flatpak runtime and SDK + run: | + sudo flatpak install -y flathub org.freedesktop.Platform//24.08 + sudo flatpak install -y flathub org.freedesktop.Sdk//24.08 + sudo flatpak install -y flathub org.electronjs.Electron2.BaseApp//24.08 + + - name: Get version for Flatpak + id: flatpak-version + run: | + VERSION=$(node -p "require('./package.json').version") + RELEASE_DATE=$(date +%Y-%m-%d) + echo "version=$VERSION" >> $GITHUB_OUTPUT + echo "release_date=$RELEASE_DATE" >> $GITHUB_OUTPUT + + - name: Prepare Flatpak files + run: | + VERSION="${{ steps.flatpak-version.outputs.version }}" + RELEASE_DATE="${{ steps.flatpak-version.outputs.release_date }}" + + CHECKSUM_X64=$(sha256sum "release/termix_linux_x64_appimage.AppImage" | awk '{print $1}') + CHECKSUM_ARM64=$(sha256sum "release/termix_linux_arm64_appimage.AppImage" | awk '{print $1}') + + mkdir -p flatpak-build + cp flatpak/com.karmaa.termix.yml flatpak-build/ + cp flatpak/com.karmaa.termix.desktop flatpak-build/ + cp flatpak/com.karmaa.termix.metainfo.xml flatpak-build/ + cp public/icon.svg flatpak-build/com.karmaa.termix.svg + convert public/icon.png -resize 256x256 flatpak-build/icon-256.png + convert public/icon.png -resize 128x128 flatpak-build/icon-128.png + + cd flatpak-build + sed -i "s|https://github.com/Termix-SSH/Termix/releases/download/release-VERSION_PLACEHOLDER-tag/termix_linux_x64_appimage.AppImage|file://$(realpath ../release/termix_linux_x64_appimage.AppImage)|g" com.karmaa.termix.yml + sed -i "s|https://github.com/Termix-SSH/Termix/releases/download/release-VERSION_PLACEHOLDER-tag/termix_linux_arm64_appimage.AppImage|file://$(realpath ../release/termix_linux_arm64_appimage.AppImage)|g" com.karmaa.termix.yml + sed -i "s/CHECKSUM_X64_PLACEHOLDER/$CHECKSUM_X64/g" com.karmaa.termix.yml + sed -i "s/CHECKSUM_ARM64_PLACEHOLDER/$CHECKSUM_ARM64/g" com.karmaa.termix.yml + sed -i "s/VERSION_PLACEHOLDER/$VERSION/g" com.karmaa.termix.metainfo.xml + sed -i "s/DATE_PLACEHOLDER/$RELEASE_DATE/g" com.karmaa.termix.metainfo.xml + + - name: Build Flatpak bundle + run: | + cd flatpak-build + flatpak-builder --repo=repo --force-clean --disable-rofiles-fuse build-dir com.karmaa.termix.yml + + # Determine the architecture + ARCH=$(uname -m) + if [ "$ARCH" = "x86_64" ]; then + FLATPAK_ARCH="x86_64" + elif [ "$ARCH" = "aarch64" ]; then + FLATPAK_ARCH="aarch64" + else + FLATPAK_ARCH="$ARCH" + fi + + # Build bundle for the current architecture + flatpak build-bundle repo ../release/termix_linux_flatpak.flatpak com.karmaa.termix --runtime-repo=https://flathub.org/repo/flathub.flatpakrepo + + - name: Create flatpakref file + run: | + VERSION="${{ steps.flatpak-version.outputs.version }}" + cp flatpak/com.karmaa.termix.flatpakref release/ + sed -i "s|VERSION_PLACEHOLDER|release-${VERSION}-tag|g" release/com.karmaa.termix.flatpakref + + - name: Upload Flatpak bundle + uses: actions/upload-artifact@v4 + if: hashFiles('release/termix_linux_flatpak.flatpak') != '' && github.event.inputs.artifact_destination != 'none' + with: + name: termix_linux_flatpak + path: release/termix_linux_flatpak.flatpak + retention-days: 30 + + - name: Upload Flatpakref + uses: actions/upload-artifact@v4 + if: hashFiles('release/com.karmaa.termix.flatpakref') != '' && github.event.inputs.artifact_destination != 'none' + with: + name: termix_linux_flatpakref + path: release/com.karmaa.termix.flatpakref + retention-days: 30 + build-macos: runs-on: macos-latest if: github.event.inputs.build_type == 'macos' || github.event.inputs.build_type == 'all' @@ -425,11 +497,6 @@ jobs: export GH_TOKEN="${{ secrets.GITHUB_TOKEN }}" npx electron-builder --mac dmg --universal --x64 --arm64 --publish never - - name: List release directory - if: steps.check_certs.outputs.has_certs == 'true' - run: | - ls -R release/ || echo "Release directory not found" - - name: Upload macOS MAS PKG if: steps.check_certs.outputs.has_certs == 'true' && hashFiles('release/termix_macos_universal_mas.pkg') != '' && (github.event.inputs.artifact_destination == 'file' || github.event.inputs.artifact_destination == 'release' || github.event.inputs.artifact_destination == 'submit') uses: actions/upload-artifact@v4 @@ -463,42 +530,51 @@ jobs: path: release/termix_macos_arm64_dmg.dmg retention-days: 30 - - name: Check for App Store Connect API credentials - if: steps.check_certs.outputs.has_certs == 'true' - id: check_asc_creds + - name: Get version for Homebrew + id: homebrew-version run: | - if [ -n "${{ secrets.APPLE_KEY_ID }}" ] && [ -n "${{ secrets.APPLE_ISSUER_ID }}" ] && [ -n "${{ secrets.APPLE_KEY_CONTENT }}" ]; then - echo "has_credentials=true" >> $GITHUB_OUTPUT - fi + VERSION=$(node -p "require('./package.json').version") + echo "version=$VERSION" >> $GITHUB_OUTPUT - - name: Setup Ruby for Fastlane - if: steps.check_asc_creds.outputs.has_credentials == 'true' && github.event.inputs.artifact_destination == 'submit' - uses: ruby/setup-ruby@v1 + - name: Generate Homebrew Cask + if: hashFiles('release/termix_macos_universal_dmg.dmg') != '' && (github.event.inputs.artifact_destination == 'file' || github.event.inputs.artifact_destination == 'release') + run: | + VERSION="${{ steps.homebrew-version.outputs.version }}" + DMG_PATH="release/termix_macos_universal_dmg.dmg" + + CHECKSUM=$(shasum -a 256 "$DMG_PATH" | awk '{print $1}') + + mkdir -p homebrew-generated + cp Casks/termix.rb homebrew-generated/termix.rb + + sed -i '' "s/VERSION_PLACEHOLDER/$VERSION/g" homebrew-generated/termix.rb + sed -i '' "s/CHECKSUM_PLACEHOLDER/$CHECKSUM/g" homebrew-generated/termix.rb + sed -i '' "s|version \".*\"|version \"$VERSION\"|g" homebrew-generated/termix.rb + sed -i '' "s|sha256 \".*\"|sha256 \"$CHECKSUM\"|g" homebrew-generated/termix.rb + sed -i '' "s|release-[0-9.]*-tag|release-$VERSION-tag|g" homebrew-generated/termix.rb + + - name: Upload Homebrew Cask as artifact + uses: actions/upload-artifact@v4 + if: hashFiles('homebrew-generated/termix.rb') != '' && github.event.inputs.artifact_destination == 'file' with: - ruby-version: "3.2" - bundler-cache: false + name: termix_macos_homebrew_cask + path: homebrew-generated/termix.rb + retention-days: 30 - - name: Install Fastlane - if: steps.check_asc_creds.outputs.has_credentials == 'true' && github.event.inputs.artifact_destination == 'submit' + - name: Upload Homebrew Cask to release + if: hashFiles('homebrew-generated/termix.rb') != '' && github.event.inputs.artifact_destination == 'release' + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | - gem install fastlane -N + VERSION="${{ steps.homebrew-version.outputs.version }}" + RELEASE_TAG="release-$VERSION-tag" - - name: Deploy to App Store Connect (TestFlight) - if: steps.check_asc_creds.outputs.has_credentials == 'true' && github.event.inputs.artifact_destination == 'submit' - run: | - PKG_FILE=$(find release -name "*.pkg" -type f | head -n 1) - if [ -z "$PKG_FILE" ]; then + gh release list --repo ${{ github.repository }} --limit 100 | grep -q "$RELEASE_TAG" || { + echo "Release $RELEASE_TAG not found" exit 1 - fi + } - mkdir -p ~/private_keys - echo "${{ secrets.APPLE_KEY_CONTENT }}" | base64 --decode > ~/private_keys/AuthKey_${{ secrets.APPLE_KEY_ID }}.p8 - - xcrun altool --upload-app -f "$PKG_FILE" \ - --type macos \ - --apiKey "${{ secrets.APPLE_KEY_ID }}" \ - --apiIssuer "${{ secrets.APPLE_ISSUER_ID }}" - continue-on-error: true + gh release upload "$RELEASE_TAG" homebrew-generated/termix.rb --repo ${{ github.repository }} --clobber - name: Clean up keychains if: always() @@ -509,7 +585,6 @@ jobs: submit-to-chocolatey: runs-on: windows-latest if: github.event.inputs.artifact_destination == 'submit' - needs: [build-windows] permissions: contents: read @@ -525,20 +600,25 @@ jobs: $VERSION = (Get-Content package.json | ConvertFrom-Json).version echo "version=$VERSION" >> $env:GITHUB_OUTPUT - - name: Download Windows x64 MSI artifact - uses: actions/download-artifact@v4 - with: - name: termix_windows_x64_msi - path: artifact - - - name: Get MSI file info + - name: Download and prepare MSI info from public release id: msi-info run: | $VERSION = "${{ steps.package-version.outputs.version }}" - $MSI_FILE = Get-ChildItem -Path artifact -Filter "*.msi" | Select-Object -First 1 - $MSI_NAME = $MSI_FILE.Name - $CHECKSUM = (Get-FileHash -Path $MSI_FILE.FullName -Algorithm SHA256).Hash + $MSI_NAME = "termix_windows_x64_msi.msi" + $DOWNLOAD_URL = "https://github.com/Termix-SSH/Termix/releases/download/release-$($VERSION)-tag/$($MSI_NAME)" + Write-Host "Downloading from $DOWNLOAD_URL" + New-Item -ItemType Directory -Force -Path "release_asset" + $DOWNLOAD_PATH = "release_asset\$MSI_NAME" + + try { + Invoke-WebRequest -Uri $DOWNLOAD_URL -OutFile $DOWNLOAD_PATH -UseBasicParsing + } catch { + Write-Error "Failed to download MSI from $DOWNLOAD_URL. Please ensure the release and asset exist." + exit 1 + } + + $CHECKSUM = (Get-FileHash -Path $DOWNLOAD_PATH -Algorithm SHA256).Hash echo "msi_name=$MSI_NAME" >> $env:GITHUB_OUTPUT echo "checksum=$CHECKSUM" >> $env:GITHUB_OUTPUT @@ -610,7 +690,7 @@ jobs: submit-to-flatpak: runs-on: ubuntu-latest if: github.event.inputs.artifact_destination == 'submit' - needs: [build-linux] + needs: [] permissions: contents: read @@ -628,30 +708,27 @@ jobs: echo "version=$VERSION" >> $GITHUB_OUTPUT echo "release_date=$RELEASE_DATE" >> $GITHUB_OUTPUT - - name: Download Linux x64 AppImage artifact - uses: actions/download-artifact@v4 - with: - name: termix_linux_x64_appimage - path: artifact-x64 - - - name: Download Linux arm64 AppImage artifact - uses: actions/download-artifact@v4 - with: - name: termix_linux_arm64_appimage - path: artifact-arm64 - - - name: Get AppImage file info + - name: Download and prepare AppImage info from public release id: appimage-info run: | VERSION="${{ steps.package-version.outputs.version }}" + mkdir -p release_assets - APPIMAGE_X64_FILE=$(find artifact-x64 -name "*.AppImage" -type f | head -n 1) - APPIMAGE_X64_NAME=$(basename "$APPIMAGE_X64_FILE") - CHECKSUM_X64=$(sha256sum "$APPIMAGE_X64_FILE" | awk '{print $1}') + APPIMAGE_X64_NAME="termix_linux_x64_appimage.AppImage" + URL_X64="https://github.com/Termix-SSH/Termix/releases/download/release-$VERSION-tag/$APPIMAGE_X64_NAME" + PATH_X64="release_assets/$APPIMAGE_X64_NAME" + echo "Downloading x64 AppImage from $URL_X64" + curl -L -o "$PATH_X64" "$URL_X64" + chmod +x "$PATH_X64" + CHECKSUM_X64=$(sha256sum "$PATH_X64" | awk '{print $1}') - APPIMAGE_ARM64_FILE=$(find artifact-arm64 -name "*.AppImage" -type f | head -n 1) - APPIMAGE_ARM64_NAME=$(basename "$APPIMAGE_ARM64_FILE") - CHECKSUM_ARM64=$(sha256sum "$APPIMAGE_ARM64_FILE" | awk '{print $1}') + APPIMAGE_ARM64_NAME="termix_linux_arm64_appimage.AppImage" + URL_ARM64="https://github.com/Termix-SSH/Termix/releases/download/release-$VERSION-tag/$APPIMAGE_ARM64_NAME" + PATH_ARM64="release_assets/$APPIMAGE_ARM64_NAME" + echo "Downloading arm64 AppImage from $URL_ARM64" + curl -L -o "$PATH_ARM64" "$URL_ARM64" + chmod +x "$PATH_ARM64" + CHECKSUM_ARM64=$(sha256sum "$PATH_ARM64" | awk '{print $1}') echo "appimage_x64_name=$APPIMAGE_X64_NAME" >> $GITHUB_OUTPUT echo "checksum_x64=$CHECKSUM_X64" >> $GITHUB_OUTPUT @@ -690,10 +767,6 @@ jobs: sed -i "s/VERSION_PLACEHOLDER/$VERSION/g" flatpak-submission/com.karmaa.termix.metainfo.xml sed -i "s/DATE_PLACEHOLDER/$RELEASE_DATE/g" flatpak-submission/com.karmaa.termix.metainfo.xml - - name: List submission files - run: | - ls -la flatpak-submission/ - - name: Upload Flatpak submission as artifact uses: actions/upload-artifact@v4 with: @@ -704,7 +777,7 @@ jobs: submit-to-homebrew: runs-on: macos-latest if: github.event.inputs.artifact_destination == 'submit' - needs: [build-macos] + needs: [] permissions: contents: read @@ -720,19 +793,19 @@ jobs: VERSION=$(node -p "require('./package.json').version") echo "version=$VERSION" >> $GITHUB_OUTPUT - - name: Download macOS Universal DMG artifact - uses: actions/download-artifact@v4 - with: - name: termix_macos_universal_dmg - path: artifact - - - name: Get DMG file info + - name: Download and prepare DMG info from public release id: dmg-info run: | VERSION="${{ steps.package-version.outputs.version }}" - DMG_FILE=$(find artifact -name "*.dmg" -type f | head -n 1) - DMG_NAME=$(basename "$DMG_FILE") - CHECKSUM=$(shasum -a 256 "$DMG_FILE" | awk '{print $1}') + DMG_NAME="termix_macos_universal_dmg.dmg" + URL="https://github.com/Termix-SSH/Termix/releases/download/release-$VERSION-tag/$DMG_NAME" + + mkdir -p release_asset + PATH="release_asset/$DMG_NAME" + echo "Downloading DMG from $URL" + curl -L -o "$PATH" "$URL" + + CHECKSUM=$(shasum -a 256 "$PATH" | awk '{print $1}') echo "dmg_name=$DMG_NAME" >> $GITHUB_OUTPUT echo "checksum=$CHECKSUM" >> $GITHUB_OUTPUT @@ -745,23 +818,15 @@ jobs: mkdir -p homebrew-submission/Casks/t - cp homebrew/termix.rb homebrew-submission/Casks/t/termix.rb + cp Casks/termix.rb homebrew-submission/Casks/t/termix.rb sed -i '' "s/VERSION_PLACEHOLDER/$VERSION/g" homebrew-submission/Casks/t/termix.rb sed -i '' "s/CHECKSUM_PLACEHOLDER/$CHECKSUM/g" homebrew-submission/Casks/t/termix.rb - name: Verify Cask syntax run: | - if ! command -v brew &> /dev/null; then - /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" - fi - ruby -c homebrew-submission/Casks/t/termix.rb - - name: List submission files - run: | - find homebrew-submission -type f - - name: Upload Homebrew submission as artifact uses: actions/upload-artifact@v4 with: @@ -789,10 +854,6 @@ jobs: env: GH_TOKEN: ${{ github.token }} - - name: Display artifact structure - run: | - ls -R artifacts/ - - name: Upload artifacts to latest release run: | cd artifacts @@ -808,3 +869,130 @@ jobs: done env: GH_TOKEN: ${{ github.token }} + + submit-to-testflight: + runs-on: macos-latest + if: github.event.inputs.artifact_destination == 'submit' + needs: [] + permissions: + contents: write + + steps: + - name: Checkout repository + uses: actions/checkout@v5 + with: + fetch-depth: 1 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: "20" + cache: "npm" + + - name: Install dependencies + run: | + for i in 1 2 3; + do + if npm ci; then + break + else + if [ $i -eq 3 ]; then + exit 1 + fi + sleep 10 + fi + done + npm install --force @rollup/rollup-darwin-arm64 + npm install dmg-license + + - name: Check for Code Signing Certificates + id: check_certs + run: | + if [ -n "${{ secrets.MAC_BUILD_CERTIFICATE_BASE64 }}" ] && [ -n "${{ secrets.MAC_P12_PASSWORD }}" ]; then + echo "has_certs=true" >> $GITHUB_OUTPUT + fi + + - name: Import Code Signing Certificates + if: steps.check_certs.outputs.has_certs == 'true' + env: + MAC_BUILD_CERTIFICATE_BASE64: ${{ secrets.MAC_BUILD_CERTIFICATE_BASE64 }} + MAC_INSTALLER_CERTIFICATE_BASE64: ${{ secrets.MAC_INSTALLER_CERTIFICATE_BASE64 }} + MAC_P12_PASSWORD: ${{ secrets.MAC_P12_PASSWORD }} + MAC_KEYCHAIN_PASSWORD: ${{ secrets.MAC_KEYCHAIN_PASSWORD }} + run: | + APP_CERT_PATH=$RUNNER_TEMP/app_certificate.p12 + INSTALLER_CERT_PATH=$RUNNER_TEMP/installer_certificate.p12 + KEYCHAIN_PATH=$RUNNER_TEMP/app-signing.keychain-db + + echo -n "$MAC_BUILD_CERTIFICATE_BASE64" | base64 --decode -o $APP_CERT_PATH + + if [ -n "$MAC_INSTALLER_CERTIFICATE_BASE64" ]; then + echo -n "$MAC_INSTALLER_CERTIFICATE_BASE64" | base64 --decode -o $INSTALLER_CERT_PATH + fi + + security create-keychain -p "$MAC_KEYCHAIN_PASSWORD" $KEYCHAIN_PATH + security set-keychain-settings -lut 21600 $KEYCHAIN_PATH + security unlock-keychain -p "$MAC_KEYCHAIN_PASSWORD" $KEYCHAIN_PATH + + security import $APP_CERT_PATH -P "$MAC_P12_PASSWORD" -A -t cert -f pkcs12 -k $KEYCHAIN_PATH + + if [ -f "$INSTALLER_CERT_PATH" ]; then + security import $INSTALLER_CERT_PATH -P "$MAC_P12_PASSWORD" -A -t cert -f pkcs12 -k $KEYCHAIN_PATH + fi + + security list-keychain -d user -s $KEYCHAIN_PATH + + security find-identity -v -p codesigning $KEYCHAIN_PATH + + - name: Build macOS App Store Package + if: steps.check_certs.outputs.has_certs == 'true' + env: + ELECTRON_BUILDER_ALLOW_UNRESOLVED_DEPENDENCIES: true + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + CURRENT_VERSION=$(node -p "require('./package.json').version") + BUILD_VERSION="${{ github.run_number }}" + + npm run build && npx electron-builder --mac mas --universal --config.buildVersion="$BUILD_VERSION" + + - name: Check for App Store Connect API credentials + id: check_asc_creds + run: | + if [ -n "${{ secrets.APPLE_KEY_ID }}" ] && [ -n "${{ secrets.APPLE_ISSUER_ID }}" ] && [ -n "${{ secrets.APPLE_KEY_CONTENT }}" ]; then + echo "has_credentials=true" >> $GITHUB_OUTPUT + fi + + - name: Setup Ruby for Fastlane + if: steps.check_asc_creds.outputs.has_credentials == 'true' + uses: ruby/setup-ruby@v1 + with: + ruby-version: "3.2" + bundler-cache: false + + - name: Install Fastlane + if: steps.check_asc_creds.outputs.has_credentials == 'true' + run: | + gem install fastlane -N + + - name: Deploy to App Store Connect (TestFlight) + if: steps.check_asc_creds.outputs.has_credentials == 'true' + run: | + PKG_FILE=$(find artifact-mas -name "*.pkg" -type f | head -n 1) + if [ -z "$PKG_FILE" ]; then + echo "PKG file not found, exiting." + exit 1 + fi + + mkdir -p ~/private_keys + echo "${{ secrets.APPLE_KEY_CONTENT }}" | base64 --decode > ~/private_keys/AuthKey_${{ secrets.APPLE_KEY_ID }}.p8 + + xcrun altool --upload-app -f "$PKG_FILE" \ + --type macos \ + --apiKey "${{ secrets.APPLE_KEY_ID }}" \ + --apiIssuer "${{ secrets.APPLE_ISSUER_ID }}" + continue-on-error: true + + - name: Clean up keychains + if: always() + run: | + security delete-keychain $RUNNER_TEMP/app-signing.keychain-db || true diff --git a/.github/workflows/translate.yml b/.github/workflows/translate.yml index 416c2e5b..7c9db568 100644 --- a/.github/workflows/translate.yml +++ b/.github/workflows/translate.yml @@ -3,26 +3,435 @@ name: Auto Translate on: workflow_dispatch: +permissions: + contents: write + pull-requests: write + jobs: - translate: + translate-zh: runs-on: ubuntu-latest - steps: - - name: Checkout code - uses: actions/checkout@v4 - - - name: Translate with i18n-ai-translate - uses: taahamahdi/i18n-ai-translate@master + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 with: - json-file-path: src/locales/en/translation.json - api-key: ${{ secrets.GEMINI_API_KEY }} - engine: gemini - output-languages: de fr it ko pt-br ru zh + node-version: "20" + - run: npx i18n-auto-translation -k ${{ secrets.GOOGLE_TRANSLATE_API_KEY }} -d "src/locales" -f en -t zh --maxLinesPerRequest 1 + - uses: actions/upload-artifact@v4 + with: + name: translations-zh + path: src/locales/zh.json + continue-on-error: true - - name: Commit and push translations + translate-ru: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: "20" + - run: npx i18n-auto-translation -k ${{ secrets.GOOGLE_TRANSLATE_API_KEY }} -d "src/locales" -f en -t ru --maxLinesPerRequest 1 + - uses: actions/upload-artifact@v4 + with: + name: translations-ru + path: src/locales/ru.json + continue-on-error: true + + translate-pt: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: "20" + - run: npx i18n-auto-translation -k ${{ secrets.GOOGLE_TRANSLATE_API_KEY }} -d "src/locales" -f en -t pt --maxLinesPerRequest 1 + - uses: actions/upload-artifact@v4 + with: + name: translations-pt + path: src/locales/pt.json + continue-on-error: true + + translate-fr: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: "20" + - run: npx i18n-auto-translation -k ${{ secrets.GOOGLE_TRANSLATE_API_KEY }} -d "src/locales" -f en -t fr --maxLinesPerRequest 1 + - uses: actions/upload-artifact@v4 + with: + name: translations-fr + path: src/locales/fr.json + continue-on-error: true + + translate-es: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: "20" + - run: npx i18n-auto-translation -k ${{ secrets.GOOGLE_TRANSLATE_API_KEY }} -d "src/locales" -f en -t es --maxLinesPerRequest 1 + - uses: actions/upload-artifact@v4 + with: + name: translations-es + path: src/locales/es.json + continue-on-error: true + + translate-de: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: "20" + - run: npx i18n-auto-translation -k ${{ secrets.GOOGLE_TRANSLATE_API_KEY }} -d "src/locales" -f en -t de --maxLinesPerRequest 1 + - uses: actions/upload-artifact@v4 + with: + name: translations-de + path: src/locales/de.json + continue-on-error: true + + translate-hi: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: "20" + - run: npx i18n-auto-translation -k ${{ secrets.GOOGLE_TRANSLATE_API_KEY }} -d "src/locales" -f en -t hi --maxLinesPerRequest 1 + - uses: actions/upload-artifact@v4 + with: + name: translations-hi + path: src/locales/hi.json + continue-on-error: true + + translate-bn: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: "20" + - run: npx i18n-auto-translation -k ${{ secrets.GOOGLE_TRANSLATE_API_KEY }} -d "src/locales" -f en -t bn --maxLinesPerRequest 1 + - uses: actions/upload-artifact@v4 + with: + name: translations-bn + path: src/locales/bn.json + continue-on-error: true + + translate-ja: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: "20" + - run: npx i18n-auto-translation -k ${{ secrets.GOOGLE_TRANSLATE_API_KEY }} -d "src/locales" -f en -t ja --maxLinesPerRequest 1 + - uses: actions/upload-artifact@v4 + with: + name: translations-ja + path: src/locales/ja.json + continue-on-error: true + + translate-vi: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: "20" + - run: npx i18n-auto-translation -k ${{ secrets.GOOGLE_TRANSLATE_API_KEY }} -d "src/locales" -f en -t vi --maxLinesPerRequest 1 + - uses: actions/upload-artifact@v4 + with: + name: translations-vi + path: src/locales/vi.json + continue-on-error: true + + translate-tr: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: "20" + - run: npx i18n-auto-translation -k ${{ secrets.GOOGLE_TRANSLATE_API_KEY }} -d "src/locales" -f en -t tr --maxLinesPerRequest 1 + - uses: actions/upload-artifact@v4 + with: + name: translations-tr + path: src/locales/tr.json + continue-on-error: true + + translate-ko: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: "20" + - run: npx i18n-auto-translation -k ${{ secrets.GOOGLE_TRANSLATE_API_KEY }} -d "src/locales" -f en -t ko --maxLinesPerRequest 1 + - uses: actions/upload-artifact@v4 + with: + name: translations-ko + path: src/locales/ko.json + continue-on-error: true + + translate-it: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: "20" + - run: npx i18n-auto-translation -k ${{ secrets.GOOGLE_TRANSLATE_API_KEY }} -d "src/locales" -f en -t it --maxLinesPerRequest 1 + - uses: actions/upload-artifact@v4 + with: + name: translations-it + path: src/locales/it.json + continue-on-error: true + + translate-he: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: "20" + - run: npx i18n-auto-translation -k ${{ secrets.GOOGLE_TRANSLATE_API_KEY }} -d "src/locales" -f en -t he --maxLinesPerRequest 1 + - uses: actions/upload-artifact@v4 + with: + name: translations-he + path: src/locales/he.json + continue-on-error: true + + translate-ar: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: "20" + - run: npx i18n-auto-translation -k ${{ secrets.GOOGLE_TRANSLATE_API_KEY }} -d "src/locales" -f en -t ar --maxLinesPerRequest 1 + - uses: actions/upload-artifact@v4 + with: + name: translations-ar + path: src/locales/ar.json + continue-on-error: true + + translate-pl: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: "20" + - run: npx i18n-auto-translation -k ${{ secrets.GOOGLE_TRANSLATE_API_KEY }} -d "src/locales" -f en -t pl --maxLinesPerRequest 1 + - uses: actions/upload-artifact@v4 + with: + name: translations-pl + path: src/locales/pl.json + continue-on-error: true + + translate-nl: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: "20" + - run: npx i18n-auto-translation -k ${{ secrets.GOOGLE_TRANSLATE_API_KEY }} -d "src/locales" -f en -t nl --maxLinesPerRequest 1 + - uses: actions/upload-artifact@v4 + with: + name: translations-nl + path: src/locales/nl.json + continue-on-error: true + + translate-sv: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: "20" + - run: npx i18n-auto-translation -k ${{ secrets.GOOGLE_TRANSLATE_API_KEY }} -d "src/locales" -f en -t sv --maxLinesPerRequest 1 + - uses: actions/upload-artifact@v4 + with: + name: translations-sv + path: src/locales/sv.json + continue-on-error: true + + translate-id: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: "20" + - run: npx i18n-auto-translation -k ${{ secrets.GOOGLE_TRANSLATE_API_KEY }} -d "src/locales" -f en -t id --maxLinesPerRequest 1 + - uses: actions/upload-artifact@v4 + with: + name: translations-id + path: src/locales/id.json + continue-on-error: true + + translate-th: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: "20" + - run: npx i18n-auto-translation -k ${{ secrets.GOOGLE_TRANSLATE_API_KEY }} -d "src/locales" -f en -t th --maxLinesPerRequest 1 + - uses: actions/upload-artifact@v4 + with: + name: translations-th + path: src/locales/th.json + continue-on-error: true + + translate-uk: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: "20" + - run: npx i18n-auto-translation -k ${{ secrets.GOOGLE_TRANSLATE_API_KEY }} -d "src/locales" -f en -t uk --maxLinesPerRequest 1 + - uses: actions/upload-artifact@v4 + with: + name: translations-uk + path: src/locales/uk.json + continue-on-error: true + + translate-cs: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: "20" + - run: npx i18n-auto-translation -k ${{ secrets.GOOGLE_TRANSLATE_API_KEY }} -d "src/locales" -f en -t cs --maxLinesPerRequest 1 + - uses: actions/upload-artifact@v4 + with: + name: translations-cs + path: src/locales/cs.json + continue-on-error: true + + translate-ro: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: "20" + - run: npx i18n-auto-translation -k ${{ secrets.GOOGLE_TRANSLATE_API_KEY }} -d "src/locales" -f en -t ro --maxLinesPerRequest 1 + - uses: actions/upload-artifact@v4 + with: + name: translations-ro + path: src/locales/ro.json + continue-on-error: true + + translate-el: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: "20" + - run: npx i18n-auto-translation -k ${{ secrets.GOOGLE_TRANSLATE_API_KEY }} -d "src/locales" -f en -t el --maxLinesPerRequest 1 + - uses: actions/upload-artifact@v4 + with: + name: translations-el + path: src/locales/el.json + continue-on-error: true + + translate-nb: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: "20" + - run: npx i18n-auto-translation -k ${{ secrets.GOOGLE_TRANSLATE_API_KEY }} -d "src/locales" -f en -t nb --maxLinesPerRequest 1 + - uses: actions/upload-artifact@v4 + with: + name: translations-nb + path: src/locales/nb.json + continue-on-error: true + + create-pr: + needs: + [ + translate-zh, + translate-ru, + translate-pt, + translate-fr, + translate-es, + translate-de, + translate-hi, + translate-bn, + translate-ja, + translate-vi, + translate-tr, + translate-ko, + translate-it, + translate-he, + translate-ar, + translate-pl, + translate-nl, + translate-sv, + translate-id, + translate-th, + translate-uk, + translate-cs, + translate-ro, + translate-el, + translate-nb, + ] + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + token: ${{ secrets.GHCR_TOKEN }} + + - name: Download all artifacts + uses: actions/download-artifact@v4 + with: + path: translations-temp + + - name: Move translations to src/locales run: | - git config --local user.email "github-actions[bot]@users.noreply.github.com" - git config --local user.name "github-actions[bot]" - git add src/locales/ - git diff --staged --quiet || git commit -m "chore: auto-translate to multiple languages [skip ci]" - git push + cp translations-temp/translations-zh/zh.json src/locales/ 2>/dev/null || true + cp translations-temp/translations-ru/ru.json src/locales/ 2>/dev/null || true + cp translations-temp/translations-pt/pt.json src/locales/ 2>/dev/null || true + cp translations-temp/translations-fr/fr.json src/locales/ 2>/dev/null || true + cp translations-temp/translations-es/es.json src/locales/ 2>/dev/null || true + cp translations-temp/translations-de/de.json src/locales/ 2>/dev/null || true + cp translations-temp/translations-hi/hi.json src/locales/ 2>/dev/null || true + cp translations-temp/translations-bn/bn.json src/locales/ 2>/dev/null || true + cp translations-temp/translations-ja/ja.json src/locales/ 2>/dev/null || true + cp translations-temp/translations-vi/vi.json src/locales/ 2>/dev/null || true + cp translations-temp/translations-tr/tr.json src/locales/ 2>/dev/null || true + cp translations-temp/translations-ko/ko.json src/locales/ 2>/dev/null || true + cp translations-temp/translations-it/it.json src/locales/ 2>/dev/null || true + cp translations-temp/translations-he/he.json src/locales/ 2>/dev/null || true + cp translations-temp/translations-ar/ar.json src/locales/ 2>/dev/null || true + cp translations-temp/translations-pl/pl.json src/locales/ 2>/dev/null || true + cp translations-temp/translations-nl/nl.json src/locales/ 2>/dev/null || true + cp translations-temp/translations-sv/sv.json src/locales/ 2>/dev/null || true + cp translations-temp/translations-id/id.json src/locales/ 2>/dev/null || true + cp translations-temp/translations-th/th.json src/locales/ 2>/dev/null || true + cp translations-temp/translations-uk/uk.json src/locales/ 2>/dev/null || true + cp translations-temp/translations-cs/cs.json src/locales/ 2>/dev/null || true + cp translations-temp/translations-ro/ro.json src/locales/ 2>/dev/null || true + cp translations-temp/translations-el/el.json src/locales/ 2>/dev/null || true + cp translations-temp/translations-nb/nb.json src/locales/ 2>/dev/null || true + rm -rf translations-temp + + - name: Create Pull Request + uses: peter-evans/create-pull-request@v6 + with: + token: ${{ secrets.GHCR_TOKEN }} + commit-message: "chore: auto-translate to multiple languages" + branch: translations-update + delete-branch: true + title: "chore: Update translations for all languages" diff --git a/.gitignore b/.gitignore index af4f217b..c3d02880 100644 --- a/.gitignore +++ b/.gitignore @@ -28,3 +28,4 @@ dist-ssr /.mcp.json /nul /.vscode/ +/CLAUDE.md diff --git a/README-CN.md b/README-CN.md index a882666c..593c6a23 100644 --- a/README-CN.md +++ b/README-CN.md @@ -51,20 +51,22 @@ Termix 是一个开源、永久免费、自托管的一体化服务器管理平 - **SSH 终端访问** - 功能齐全的终端,具有分屏支持(最多 4 个面板)和类似浏览器的选项卡系统。包括对自定义终端的支持,包括常见终端主题、字体和其他组件 - **SSH 隧道管理** - 创建和管理 SSH 隧道,具有自动重新连接和健康监控功能 - **远程文件管理器** - 直接在远程服务器上管理文件,支持查看和编辑代码、图像、音频和视频。无缝上传、下载、重命名、删除和移动文件 +- **Docker 管理** - 启动、停止、暂停、删除容器。查看容器统计信息。使用 docker exec 终端控制容器。它不是用来替代 Portainer 或 Dockge,而是用于简单管理你的容器而不是创建它们。 - **SSH 主机管理器** - 保存、组织和管理您的 SSH 连接,支持标签和文件夹,并轻松保存可重用的登录信息,同时能够自动部署 SSH 密钥 - **服务器统计** - 在任何 SSH 服务器上查看 CPU、内存和磁盘使用情况以及网络、正常运行时间和系统信息 - **仪表板** - 在仪表板上一目了然地查看服务器信息 +- **RBAC** - 创建角色并在用户/角色之间共享主机 - **用户认证** - 安全的用户管理,具有管理员控制以及 OIDC 和 2FA (TOTP) 支持。查看所有平台上的活动用户会话并撤销权限。将您的 OIDC/本地帐户链接在一起。 - **数据库加密** - 后端存储为加密的 SQLite 数据库文件。查看[文档](https://docs.termix.site/security)了解更多信息。 - **数据导出/导入** - 导出和导入 SSH 主机、凭据和文件管理器数据 - **自动 SSL 设置** - 内置 SSL 证书生成和管理,支持 HTTPS 重定向 -- **现代用户界面** - 使用 React、Tailwind CSS 和 Shadcn 构建的简洁的桌面/移动设备友好界面 -- **语言** - 内置支持英语、中文、德语和葡萄牙语 +- **现代用户界面** - 使用 React、Tailwind CSS 和 Shadcn 构建的简洁的桌面/移动设备友好界面。可选择基于深色或浅色模式的用户界面。 +- **语言** - 内置支持约 30 种语言(通过 Google 翻译批量翻译,结果可能有所不同) - **平台支持** - 可作为 Web 应用程序、桌面应用程序(Windows、Linux 和 macOS)以及适用于 iOS 和 Android 的专用移动/平板电脑应用程序。 - **SSH 工具** - 创建可重用的命令片段,单击即可执行。在多个打开的终端上同时运行一个命令。 - **命令历史** - 自动完成并查看以前运行的 SSH 命令 - **命令面板** - 双击左 Shift 键可快速使用键盘访问 SSH 连接 -- **SSH 功能丰富** - 支持跳板机、warpgate、基于 TOTP 的连接等。 +- **SSH 功能丰富** - 支持跳板机、warpgate、基于 TOTP 的连接、SOCKS5、密码自动填充等。 # 计划功能 @@ -140,6 +142,12 @@ volumes:

Termix Demo 7 + Termix Demo 8 +

+ +

+ Termix Demo 9 + Termix Demo 110

@@ -147,7 +155,7 @@ volumes: 你的浏览器不支持 video 标签。

-视频和图像可能已过时。 +某些视频和图像可能已过时或可能无法完美展示功能。 # 许可证 diff --git a/README.md b/README.md index 80fc69e9..9ddf04d6 100644 --- a/README.md +++ b/README.md @@ -45,7 +45,7 @@ If you would like, you can support the project here!\ Termix is an open-source, forever-free, self-hosted all-in-one server management platform. It provides a multi-platform solution for managing your servers and infrastructure through a single, intuitive interface. Termix offers SSH terminal -access, SSH tunneling capabilities, and remote file management, with many more tools to come. Termix is the perfect +access, SSH tunneling capabilities, remote file management, and many other tools. Termix is the perfect free and self-hosted alternative to Termius available for all platforms. # Features @@ -53,20 +53,22 @@ free and self-hosted alternative to Termius available for all platforms. - **SSH Terminal Access** - Full-featured terminal with split-screen support (up to 4 panels) with a browser-like tab system. Includes support for customizing the terminal including common terminal themes, fonts, and other components - **SSH Tunnel Management** - Create and manage SSH tunnels with automatic reconnection and health monitoring - **Remote File Manager** - Manage files directly on remote servers with support for viewing and editing code, images, audio, and video. Upload, download, rename, delete, and move files seamlessly +- **Docker Management** - Start, stop, pause, remove containers. View container stats. Control container using docker exec terminal. It was not made to replace Portainer or Dockge but rather to simply manage your containers compared to creating them. - **SSH Host Manager** - Save, organize, and manage your SSH connections with tags and folders, and easily save reusable login info while being able to automate the deployment of SSH keys - **Server Stats** - View CPU, memory, and disk usage along with network, uptime, and system information on any SSH server - **Dashboard** - View server information at a glance on your dashboard +- **RBAC** - Create roles and share hosts across users/roles - **User Authentication** - Secure user management with admin controls and OIDC and 2FA (TOTP) support. View active user sessions across all platforms and revoke permissions. Link your OIDC/Local accounts together. - **Database Encryption** - Backend stored as encrypted SQLite database files. View [docs](https://docs.termix.site/security) for more. - **Data Export/Import** - Export and import SSH hosts, credentials, and file manager data - **Automatic SSL Setup** - Built-in SSL certificate generation and management with HTTPS redirects -- **Modern UI** - Clean desktop/mobile-friendly interface built with React, Tailwind CSS, and Shadcn -- **Languages** - Built-in support for English, Chinese, German, and Portuguese +- **Modern UI** - Clean desktop/mobile-friendly interface built with React, Tailwind CSS, and Shadcn. Choose between dark or light mode based UI. +- **Languages** - Built-in support ~30 languages (bulk translated via Google Translate, results may vary ofc) - **Platform Support** - Available as a web app, desktop application (Windows, Linux, and macOS), and dedicated mobile/tablet app for iOS and Android. - **SSH Tools** - Create reusable command snippets that execute with a single click. Run one command simultaneously across multiple open terminals. - **Command History** - Auto-complete and view previously ran SSH commands - **Command Palette** - Double tap left shift to quickly access SSH connections with your keyboard -- **SSH Feature Rich** - Supports jump hosts, warpgate, TOTP based connections, etc. +- **SSH Feature Rich** - Supports jump hosts, warpgate, TOTP based connections, SOCKS5, password autofill, etc. # Planned Features @@ -124,7 +126,7 @@ If you need help or want to request a feature with Termix, visit the [Issues](ht Please be as detailed as possible in your issue, preferably written in English. You can also join the [Discord](https://discord.gg/jVQGdvHDrf) server and visit the support channel, however, response times may be longer. -# Show-off +# Screenshots

Termix Demo 1 @@ -143,6 +145,12 @@ channel, however, response times may be longer.

Termix Demo 7 + Termix Demo 8 +

+ +

+ Termix Demo 9 + Termix Demo 110

@@ -150,7 +158,7 @@ channel, however, response times may be longer. Your browser does not support the video tag.

-Videos and images may be out of date. +Some videos and images may be out of date or may not perfectly showcase features. # License diff --git a/docker/Dockerfile b/docker/Dockerfile index c67b6686..f29cfb3b 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -53,16 +53,18 @@ ENV DATA_DIR=/app/data \ RUN apt-get update && apt-get install -y nginx gettext-base openssl && \ rm -rf /var/lib/apt/lists/* && \ - mkdir -p /app/data /app/uploads && \ - chown -R node:node /app/data /app/uploads && \ - useradd -r -s /bin/false nginx + mkdir -p /app/data /app/uploads /app/nginx /app/nginx/logs /app/nginx/cache /app/nginx/client_body && \ + chown -R node:node /app && \ + chmod 755 /app/data /app/uploads /app/nginx && \ + touch /app/nginx/nginx.conf && \ + chown node:node /app/nginx/nginx.conf -COPY docker/nginx.conf /etc/nginx/nginx.conf -COPY docker/nginx-https.conf /etc/nginx/nginx-https.conf +COPY docker/nginx.conf /app/nginx/nginx.conf.template +COPY docker/nginx-https.conf /app/nginx/nginx-https.conf.template -COPY --chown=nginx:nginx --from=frontend-builder /app/dist /usr/share/nginx/html -COPY --chown=nginx:nginx --from=frontend-builder /app/src/locales /usr/share/nginx/html/locales -COPY --chown=nginx:nginx --from=frontend-builder /app/public/fonts /usr/share/nginx/html/fonts +COPY --chown=node:node --from=frontend-builder /app/dist /app/html +COPY --chown=node:node --from=frontend-builder /app/src/locales /app/html/locales +COPY --chown=node:node --from=frontend-builder /app/public/fonts /app/html/fonts COPY --chown=node:node --from=production-deps /app/node_modules /app/node_modules COPY --chown=node:node --from=backend-builder /app/dist/backend ./dist/backend @@ -74,4 +76,7 @@ EXPOSE ${PORT} 30001 30002 30003 30004 30005 30006 COPY docker/entrypoint.sh /entrypoint.sh RUN chmod +x /entrypoint.sh + +USER node + CMD ["/entrypoint.sh"] diff --git a/docker/entrypoint.sh b/docker/entrypoint.sh index 67d389c2..165c9ee2 100644 --- a/docker/entrypoint.sh +++ b/docker/entrypoint.sh @@ -11,24 +11,21 @@ echo "Configuring web UI to run on port: $PORT" if [ "$ENABLE_SSL" = "true" ]; then echo "SSL enabled - using HTTPS configuration with redirect" - NGINX_CONF_SOURCE="/etc/nginx/nginx-https.conf" + NGINX_CONF_SOURCE="/app/nginx/nginx-https.conf.template" else echo "SSL disabled - using HTTP-only configuration (default)" - NGINX_CONF_SOURCE="/etc/nginx/nginx.conf" + NGINX_CONF_SOURCE="/app/nginx/nginx.conf.template" fi -envsubst '${PORT} ${SSL_PORT} ${SSL_CERT_PATH} ${SSL_KEY_PATH}' < $NGINX_CONF_SOURCE > /etc/nginx/nginx.conf.tmp -mv /etc/nginx/nginx.conf.tmp /etc/nginx/nginx.conf +envsubst '${PORT} ${SSL_PORT} ${SSL_CERT_PATH} ${SSL_KEY_PATH}' < $NGINX_CONF_SOURCE > /app/nginx/nginx.conf mkdir -p /app/data /app/uploads -chown -R node:node /app/data /app/uploads -chmod 755 /app/data /app/uploads +chmod 755 /app/data /app/uploads 2>/dev/null || true if [ "$ENABLE_SSL" = "true" ]; then echo "Checking SSL certificate configuration..." mkdir -p /app/data/ssl - chown -R node:node /app/data/ssl - chmod 755 /app/data/ssl + chmod 755 /app/data/ssl 2>/dev/null || true DOMAIN=${SSL_DOMAIN:-localhost} @@ -84,7 +81,6 @@ EOF chmod 600 /app/data/ssl/termix.key chmod 644 /app/data/ssl/termix.crt - chown node:node /app/data/ssl/termix.key /app/data/ssl/termix.crt rm -f /app/data/ssl/openssl.conf @@ -93,7 +89,7 @@ EOF fi echo "Starting nginx..." -nginx +nginx -c /app/nginx/nginx.conf echo "Starting backend services..." cd /app @@ -110,11 +106,7 @@ else echo "Warning: package.json not found" fi -if command -v su-exec > /dev/null 2>&1; then - su-exec node node dist/backend/backend/starter.js -else - su -s /bin/sh node -c "node dist/backend/backend/starter.js" -fi +node dist/backend/backend/starter.js echo "All services started" diff --git a/docker/nginx-https.conf b/docker/nginx-https.conf index 5e6126bf..7788848b 100644 --- a/docker/nginx-https.conf +++ b/docker/nginx-https.conf @@ -1,11 +1,22 @@ +pid /app/nginx/nginx.pid; +error_log /app/nginx/logs/error.log warn; + events { worker_connections 1024; } http { - include mime.types; + include /etc/nginx/mime.types; default_type application/octet-stream; + access_log /app/nginx/logs/access.log; + + client_body_temp_path /app/nginx/client_body; + proxy_temp_path /app/nginx/proxy_temp; + fastcgi_temp_path /app/nginx/fastcgi_temp; + uwsgi_temp_path /app/nginx/uwsgi_temp; + scgi_temp_path /app/nginx/scgi_temp; + sendfile on; keepalive_timeout 65; client_header_timeout 300s; @@ -37,9 +48,17 @@ http { add_header X-Content-Type-Options nosniff always; add_header X-XSS-Protection "1; mode=block" always; + location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ { + root /app/html; + expires 1y; + add_header Cache-Control "public, immutable"; + try_files $uri =404; + } + location / { - root /usr/share/nginx/html; + root /app/html; index index.html index.htm; + try_files $uri $uri/ /index.html; } location ~* \.map$ { @@ -93,6 +112,15 @@ http { proxy_set_header X-Forwarded-Proto $scheme; } + location ~ ^/rbac(/.*)?$ { + proxy_pass http://127.0.0.1:30001; + proxy_http_version 1.1; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } + location ~ ^/credentials(/.*)?$ { proxy_pass http://127.0.0.1:30001; proxy_http_version 1.1; @@ -283,6 +311,10 @@ http { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; + + proxy_connect_timeout 60s; + proxy_send_timeout 60s; + proxy_read_timeout 60s; } location ~ ^/uptime(/.*)?$ { @@ -303,9 +335,45 @@ http { proxy_set_header X-Forwarded-Proto $scheme; } + location ^~ /docker/console/ { + proxy_pass http://127.0.0.1:30008/; + proxy_http_version 1.1; + + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + proxy_set_header Host $host; + proxy_cache_bypass $http_upgrade; + + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + + proxy_read_timeout 86400s; + proxy_send_timeout 86400s; + proxy_connect_timeout 10s; + + proxy_buffering off; + proxy_request_buffering off; + + proxy_next_upstream error timeout invalid_header http_500 http_502 http_503; + } + + location ~ ^/docker(/.*)?$ { + proxy_pass http://127.0.0.1:30007; + proxy_http_version 1.1; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + + proxy_connect_timeout 60s; + proxy_send_timeout 300s; + proxy_read_timeout 300s; + } + error_page 500 502 503 504 /50x.html; location = /50x.html { - root /usr/share/nginx/html; + root /app/html; } } } diff --git a/docker/nginx.conf b/docker/nginx.conf index db5546f0..ac6b7112 100644 --- a/docker/nginx.conf +++ b/docker/nginx.conf @@ -1,11 +1,22 @@ +pid /app/nginx/nginx.pid; +error_log /app/nginx/logs/error.log warn; + events { worker_connections 1024; } http { - include mime.types; + include /etc/nginx/mime.types; default_type application/octet-stream; + access_log /app/nginx/logs/access.log; + + client_body_temp_path /app/nginx/client_body; + proxy_temp_path /app/nginx/proxy_temp; + fastcgi_temp_path /app/nginx/fastcgi_temp; + uwsgi_temp_path /app/nginx/uwsgi_temp; + scgi_temp_path /app/nginx/scgi_temp; + sendfile on; keepalive_timeout 65; client_header_timeout 300s; @@ -27,14 +38,14 @@ http { add_header X-XSS-Protection "1; mode=block" always; location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ { - root /usr/share/nginx/html; + root /app/html; expires 1y; add_header Cache-Control "public, immutable"; try_files $uri =404; } location / { - root /usr/share/nginx/html; + root /app/html; index index.html index.htm; try_files $uri $uri/ /index.html; } @@ -90,6 +101,15 @@ http { proxy_set_header X-Forwarded-Proto $scheme; } + location ~ ^/rbac(/.*)?$ { + proxy_pass http://127.0.0.1:30001; + proxy_http_version 1.1; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } + location ~ ^/credentials(/.*)?$ { proxy_pass http://127.0.0.1:30001; proxy_http_version 1.1; @@ -280,6 +300,10 @@ http { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; + + proxy_connect_timeout 60s; + proxy_send_timeout 60s; + proxy_read_timeout 60s; } location ~ ^/uptime(/.*)?$ { @@ -300,9 +324,45 @@ http { proxy_set_header X-Forwarded-Proto $scheme; } + location ^~ /docker/console/ { + proxy_pass http://127.0.0.1:30008/; + proxy_http_version 1.1; + + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + proxy_set_header Host $host; + proxy_cache_bypass $http_upgrade; + + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + + proxy_read_timeout 86400s; + proxy_send_timeout 86400s; + proxy_connect_timeout 10s; + + proxy_buffering off; + proxy_request_buffering off; + + proxy_next_upstream error timeout invalid_header http_500 http_502 http_503; + } + + location ~ ^/docker(/.*)?$ { + proxy_pass http://127.0.0.1:30007; + proxy_http_version 1.1; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + + proxy_connect_timeout 60s; + proxy_send_timeout 300s; + proxy_read_timeout 300s; + } + error_page 500 502 503 504 /50x.html; location = /50x.html { - root /usr/share/nginx/html; + root /app/html; } } } diff --git a/electron-builder.json b/electron-builder.json index 218153e1..8137f73d 100644 --- a/electron-builder.json +++ b/electron-builder.json @@ -124,5 +124,6 @@ "ITSAppUsesNonExemptEncryption": false, "NSAppleEventsUsageDescription": "Termix needs access to control other applications for terminal operations." } - } + }, + "generateUpdatesFilesForAllChannels": true } diff --git a/electron/main.cjs b/electron/main.cjs index 97ced567..06dc9ea2 100644 --- a/electron/main.cjs +++ b/electron/main.cjs @@ -11,13 +11,9 @@ const fs = require("fs"); const os = require("os"); if (process.platform === "linux") { - app.commandLine.appendSwitch("--no-sandbox"); - app.commandLine.appendSwitch("--disable-setuid-sandbox"); - app.commandLine.appendSwitch("--disable-dev-shm-usage"); + app.commandLine.appendSwitch("--ozone-platform-hint=auto"); - app.disableHardwareAcceleration(); - app.commandLine.appendSwitch("--disable-gpu"); - app.commandLine.appendSwitch("--disable-gpu-compositing"); + app.commandLine.appendSwitch("--enable-features=VaapiVideoDecoder"); } app.commandLine.appendSwitch("--ignore-certificate-errors"); diff --git a/electron/preload.js b/electron/preload.js index 1db1b356..ea1f3458 100644 --- a/electron/preload.js +++ b/electron/preload.js @@ -2,21 +2,6 @@ const { contextBridge, ipcRenderer } = require("electron"); contextBridge.exposeInMainWorld("electronAPI", { getAppVersion: () => ipcRenderer.invoke("get-app-version"), - getPlatform: () => ipcRenderer.invoke("get-platform"), - checkElectronUpdate: () => ipcRenderer.invoke("check-electron-update"), - - getServerConfig: () => ipcRenderer.invoke("get-server-config"), - saveServerConfig: (config) => - ipcRenderer.invoke("save-server-config", config), - testServerConnection: (serverUrl) => - ipcRenderer.invoke("test-server-connection", serverUrl), - - showSaveDialog: (options) => ipcRenderer.invoke("show-save-dialog", options), - showOpenDialog: (options) => ipcRenderer.invoke("show-open-dialog", options), - - onUpdateAvailable: (callback) => ipcRenderer.on("update-available", callback), - onUpdateDownloaded: (callback) => - ipcRenderer.on("update-downloaded", callback), removeAllListeners: (channel) => ipcRenderer.removeAllListeners(channel), isElectron: true, diff --git a/flatpak/com.karmaa.termix.desktop b/flatpak/com.karmaa.termix.desktop index 3aabfd06..59d27c13 100644 --- a/flatpak/com.karmaa.termix.desktop +++ b/flatpak/com.karmaa.termix.desktop @@ -1,7 +1,7 @@ [Desktop Entry] Name=Termix Comment=Web-based server management platform with SSH terminal, tunneling, and file editing -Exec=termix %U +Exec=run.sh %U Icon=com.karmaa.termix Terminal=false Type=Application diff --git a/flatpak/com.karmaa.termix.flatpakref b/flatpak/com.karmaa.termix.flatpakref new file mode 100644 index 00000000..7d2e9892 --- /dev/null +++ b/flatpak/com.karmaa.termix.flatpakref @@ -0,0 +1,12 @@ +[Flatpak Ref] +Name=Termix +Branch=stable +Title=Termix - SSH Server Management Platform +IsRuntime=false +Url=https://github.com/Termix-SSH/Termix/releases/download/VERSION_PLACEHOLDER/termix_linux_flatpak.flatpak +GPGKey= +RuntimeRepo=https://flathub.org/repo/flathub.flatpakrepo +Comment=Web-based server management platform with SSH terminal, tunneling, and file editing +Description=Termix is an open-source, forever-free, self-hosted all-in-one server management platform. It provides SSH terminal access, tunneling capabilities, and remote file management. +Icon=https://raw.githubusercontent.com/Termix-SSH/Termix/main/public/icon.png +Homepage=https://github.com/Termix-SSH/Termix diff --git a/flatpak/com.karmaa.termix.metainfo.xml b/flatpak/com.karmaa.termix.metainfo.xml index 0c3c6895..335d902c 100644 --- a/flatpak/com.karmaa.termix.metainfo.xml +++ b/flatpak/com.karmaa.termix.metainfo.xml @@ -5,7 +5,7 @@ Web-based server management platform with SSH terminal, tunneling, and file editing CC0-1.0 - GPL-3.0-or-later + Apache-2.0 bugattiguy527 diff --git a/flatpak/com.karmaa.termix.yml b/flatpak/com.karmaa.termix.yml index 4405a10f..7b67c0e7 100644 --- a/flatpak/com.karmaa.termix.yml +++ b/flatpak/com.karmaa.termix.yml @@ -1,10 +1,10 @@ app-id: com.karmaa.termix runtime: org.freedesktop.Platform -runtime-version: "23.08" +runtime-version: "24.08" sdk: org.freedesktop.Sdk base: org.electronjs.Electron2.BaseApp -base-version: "23.08" -command: termix +base-version: "24.08" +command: run.sh separate-locales: false finish-args: @@ -16,8 +16,11 @@ finish-args: - --device=dri - --filesystem=home - --socket=ssh-auth - - --talk-name=org.freedesktop.Notifications + - --socket=session-bus - --talk-name=org.freedesktop.secrets + - --env=ELECTRON_TRASH=gio + - --env=XCURSOR_PATH=/run/host/user-share/icons:/run/host/share/icons + - --env=ELECTRON_OZONE_PLATFORM_HINT=auto modules: - name: termix @@ -30,6 +33,21 @@ modules: - cp -r squashfs-root/resources /app/bin/ - cp -r squashfs-root/locales /app/bin/ || true + - cp squashfs-root/*.so /app/bin/ || true + - cp squashfs-root/*.pak /app/bin/ || true + - cp squashfs-root/*.bin /app/bin/ || true + - cp squashfs-root/*.dat /app/bin/ || true + - cp squashfs-root/*.json /app/bin/ || true + + - | + cat > run.sh << 'EOF' + #!/bin/bash + export TMPDIR="$XDG_RUNTIME_DIR/app/$FLATPAK_ID" + exec zypak-wrapper /app/bin/termix "$@" + EOF + - chmod +x run.sh + - install -Dm755 run.sh /app/bin/run.sh + - install -Dm644 com.karmaa.termix.desktop /app/share/applications/com.karmaa.termix.desktop - install -Dm644 com.karmaa.termix.metainfo.xml /app/share/metainfo/com.karmaa.termix.metainfo.xml @@ -40,14 +58,14 @@ modules: sources: - type: file - url: https://github.com/Termix-SSH/Termix/releases/download/release-VERSION_PLACEHOLDER-tag/termix_linux_x64_VERSION_PLACEHOLDER_appimage.AppImage + url: https://github.com/Termix-SSH/Termix/releases/download/release-VERSION_PLACEHOLDER-tag/termix_linux_x64_appimage.AppImage sha256: CHECKSUM_X64_PLACEHOLDER dest-filename: termix.AppImage only-arches: - x86_64 - type: file - url: https://github.com/Termix-SSH/Termix/releases/download/release-VERSION_PLACEHOLDER-tag/termix_linux_arm64_VERSION_PLACEHOLDER_appimage.AppImage + url: https://github.com/Termix-SSH/Termix/releases/download/release-VERSION_PLACEHOLDER-tag/termix_linux_arm64_appimage.AppImage sha256: CHECKSUM_ARM64_PLACEHOLDER dest-filename: termix.AppImage only-arches: diff --git a/flatpak/prepare-flatpak.sh b/flatpak/prepare-flatpak.sh deleted file mode 100644 index 05162b64..00000000 --- a/flatpak/prepare-flatpak.sh +++ /dev/null @@ -1,34 +0,0 @@ -#!/bin/bash -set -e - -VERSION="$1" -CHECKSUM="$2" -RELEASE_DATE="$3" - -if [ -z "$VERSION" ] || [ -z "$CHECKSUM" ] || [ -z "$RELEASE_DATE" ]; then - echo "Usage: $0 " - echo "Example: $0 1.8.0 abc123... 2025-10-26" - exit 1 -fi - -echo "Preparing Flatpak submission for version $VERSION" - -cp public/icon.svg flatpak/com.karmaa.termix.svg -echo "✓ Copied SVG icon" - -if command -v convert &> /dev/null; then - convert public/icon.png -resize 256x256 flatpak/icon-256.png - convert public/icon.png -resize 128x128 flatpak/icon-128.png - echo "✓ Generated PNG icons" -else - cp public/icon.png flatpak/icon-256.png - cp public/icon.png flatpak/icon-128.png - echo "⚠ ImageMagick not found, using original icon" -fi - -sed -i "s/VERSION_PLACEHOLDER/$VERSION/g" flatpak/com.karmaa.termix.yml -sed -i "s/CHECKSUM_PLACEHOLDER/$CHECKSUM/g" flatpak/com.karmaa.termix.yml -echo "✓ Updated manifest with version $VERSION" - -sed -i "s/VERSION_PLACEHOLDER/$VERSION/g" flatpak/com.karmaa.termix.metainfo.xml -sed -i "s/DATE_PLACEHOLDER/$RELEASE_DATE/g" flatpak/com.karmaa.termix.metainfo.xml diff --git a/package-lock.json b/package-lock.json index 14f680ed..1c9d6013 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "termix", - "version": "1.8.1", + "version": "1.10.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "termix", - "version": "1.8.1", + "version": "1.10.0", "dependencies": { "@codemirror/autocomplete": "^6.18.7", "@codemirror/commands": "^6.3.3", @@ -16,6 +16,7 @@ "@hookform/resolvers": "^5.1.1", "@monaco-editor/react": "^4.7.0", "@radix-ui/react-accordion": "^1.2.11", + "@radix-ui/react-alert-dialog": "^1.1.15", "@radix-ui/react-checkbox": "^1.3.2", "@radix-ui/react-dialog": "^1.1.15", "@radix-ui/react-dropdown-menu": "^2.1.15", @@ -26,7 +27,7 @@ "@radix-ui/react-select": "^2.2.5", "@radix-ui/react-separator": "^1.1.7", "@radix-ui/react-slider": "^1.3.6", - "@radix-ui/react-slot": "^1.2.3", + "@radix-ui/react-slot": "^1.2.4", "@radix-ui/react-switch": "^1.2.5", "@radix-ui/react-tabs": "^1.1.12", "@radix-ui/react-tooltip": "^1.2.8", @@ -38,6 +39,7 @@ "@types/qrcode": "^1.5.5", "@types/speakeasy": "^2.0.10", "@uiw/codemirror-extensions-langs": "^4.24.1", + "@uiw/codemirror-theme-github": "^4.25.4", "@uiw/react-codemirror": "^4.24.1", "@xterm/addon-clipboard": "^0.1.0", "@xterm/addon-fit": "^0.10.0", @@ -57,6 +59,7 @@ "dotenv": "^17.2.0", "drizzle-orm": "^0.44.3", "express": "^5.1.0", + "i18n-auto-translation": "^2.2.3", "i18next": "^25.4.2", "i18next-browser-languagedetector": "^8.2.0", "jose": "^5.2.3", @@ -84,6 +87,7 @@ "react-xtermjs": "^1.0.10", "recharts": "^3.2.1", "remark-gfm": "^4.0.1", + "socks": "^2.8.7", "sonner": "^2.0.7", "speakeasy": "^2.0.0", "ssh2": "^1.16.0", @@ -2250,6 +2254,94 @@ "dev": true, "license": "MIT" }, + "node_modules/@google-cloud/common": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@google-cloud/common/-/common-6.0.0.tgz", + "integrity": "sha512-IXh04DlkLMxWgYLIUYuHHKXKOUwPDzDgke1ykkkJPe48cGIS9kkL2U/o0pm4ankHLlvzLF/ma1eO86n/bkumIA==", + "dependencies": { + "@google-cloud/projectify": "^4.0.0", + "@google-cloud/promisify": "^4.0.0", + "arrify": "^2.0.0", + "duplexify": "^4.1.3", + "extend": "^3.0.2", + "google-auth-library": "^10.0.0-rc.1", + "html-entities": "^2.5.2", + "retry-request": "^8.0.0", + "teeny-request": "^10.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@google-cloud/common/node_modules/@google-cloud/promisify": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@google-cloud/promisify/-/promisify-4.1.0.tgz", + "integrity": "sha512-G/FQx5cE/+DqBbOpA5jKsegGwdPniU6PuIEMt+qxWgFxvxuFOzVmp6zYchtYuwAWV5/8Dgs0yAmjvNZv3uXLQg==", + "engines": { + "node": ">=18" + } + }, + "node_modules/@google-cloud/projectify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@google-cloud/projectify/-/projectify-4.0.0.tgz", + "integrity": "sha512-MmaX6HeSvyPbWGwFq7mXdo0uQZLGBYCwziiLIGq5JVX+/bdI3SAq6bP98trV5eTWfLuvsMcIC1YJOF2vfteLFA==", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@google-cloud/promisify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@google-cloud/promisify/-/promisify-5.0.0.tgz", + "integrity": "sha512-N8qS6dlORGHwk7WjGXKOSsLjIjNINCPicsOX6gyyLiYk7mq3MtII96NZ9N2ahwA2vnkLmZODOIH9rlNniYWvCQ==", + "engines": { + "node": ">=18" + } + }, + "node_modules/@google-cloud/translate": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/@google-cloud/translate/-/translate-9.2.0.tgz", + "integrity": "sha512-LBKoXMXsM6jyqD9RDO74E3Q8uUn9TWy7YwIrF+WS4I9erdI+VZHxmdffi4sFfQ196FeprfwMMAFa8Oy6u7G8xw==", + "dependencies": { + "@google-cloud/common": "^6.0.0", + "@google-cloud/promisify": "^5.0.0", + "arrify": "^2.0.0", + "extend": "^3.0.2", + "google-gax": "^5.0.0", + "is-html": "^2.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@grpc/grpc-js": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.14.3.tgz", + "integrity": "sha512-Iq8QQQ/7X3Sac15oB6p0FmUg/klxQvXLeileoqrTRGJYLV+/9tubbr9ipz0GKHjmXVsgFPo/+W+2cA8eNcR+XA==", + "dependencies": { + "@grpc/proto-loader": "^0.8.0", + "@js-sdsl/ordered-map": "^4.4.2" + }, + "engines": { + "node": ">=12.10.0" + } + }, + "node_modules/@grpc/proto-loader": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.8.0.tgz", + "integrity": "sha512-rc1hOQtjIWGxcxpb9aHAfLpIctjEnsDehj0DAiVfBlmT84uvR0uUtN2hEi/ecvWVjXUGf5qPF4qEgiLOx1YIMQ==", + "dependencies": { + "lodash.camelcase": "^4.3.0", + "long": "^5.0.0", + "protobufjs": "^7.5.3", + "yargs": "^17.7.2" + }, + "bin": { + "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/@hapi/address": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/@hapi/address/-/address-5.1.1.tgz", @@ -2387,7 +2479,6 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==", - "dev": true, "license": "MIT", "engines": { "node": "20 || >=22" @@ -2397,7 +2488,6 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz", "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==", - "dev": true, "license": "MIT", "dependencies": { "@isaacs/balanced-match": "^4.0.1" @@ -2410,7 +2500,6 @@ "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dev": true, "license": "ISC", "dependencies": { "string-width": "^5.1.2", @@ -2428,7 +2517,6 @@ "version": "6.2.3", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", - "dev": true, "license": "MIT", "engines": { "node": ">=12" @@ -2441,14 +2529,12 @@ "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true, "license": "MIT" }, "node_modules/@isaacs/cliui/node_modules/string-width": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, "license": "MIT", "dependencies": { "eastasianwidth": "^0.2.0", @@ -2466,7 +2552,6 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^6.1.0", @@ -2525,6 +2610,15 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "node_modules/@js-sdsl/ordered-map": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@js-sdsl/ordered-map/-/ordered-map-4.4.2.tgz", + "integrity": "sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/js-sdsl" + } + }, "node_modules/@lezer/common": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/@lezer/common/-/common-1.3.0.tgz", @@ -3094,13 +3188,66 @@ "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "dev": true, "license": "MIT", "optional": true, "engines": { "node": ">=14" } }, + "node_modules/@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" + }, + "node_modules/@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" + }, + "node_modules/@protobufjs/codegen": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" + }, + "node_modules/@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" + }, + "node_modules/@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", + "dependencies": { + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" + } + }, + "node_modules/@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" + }, + "node_modules/@protobufjs/inquire": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" + }, + "node_modules/@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" + }, + "node_modules/@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" + }, + "node_modules/@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" + }, "node_modules/@radix-ui/number": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@radix-ui/number/-/number-1.1.1.tgz", @@ -3144,6 +3291,52 @@ } } }, + "node_modules/@radix-ui/react-alert-dialog": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/@radix-ui/react-alert-dialog/-/react-alert-dialog-1.1.15.tgz", + "integrity": "sha512-oTVLkEw5GpdRe29BqJ0LSDFWI3qu0vR1M0mUkOQWDIUnY/QIkLpgDMWuKxP94c2NAC2LGcgVhG1ImF3jkZ5wXw==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-dialog": "1.1.15", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-alert-dialog/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/@radix-ui/react-arrow": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.7.tgz", @@ -3253,6 +3446,24 @@ } } }, + "node_modules/@radix-ui/react-collection/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/@radix-ui/react-compose-refs": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", @@ -3319,6 +3530,24 @@ } } }, + "node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/@radix-ui/react-direction": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.1.tgz", @@ -3511,6 +3740,24 @@ } } }, + "node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/@radix-ui/react-popover": { "version": "1.1.15", "resolved": "https://registry.npmjs.org/@radix-ui/react-popover/-/react-popover-1.1.15.tgz", @@ -3548,6 +3795,24 @@ } } }, + "node_modules/@radix-ui/react-popover/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/@radix-ui/react-popper": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.2.8.tgz", @@ -3651,6 +3916,24 @@ } } }, + "node_modules/@radix-ui/react-primitive/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/@radix-ui/react-progress": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/@radix-ui/react-progress/-/react-progress-1.1.7.tgz", @@ -3780,6 +4063,24 @@ } } }, + "node_modules/@radix-ui/react-select/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/@radix-ui/react-separator": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/@radix-ui/react-separator/-/react-separator-1.1.7.tgz", @@ -3837,9 +4138,9 @@ } }, "node_modules/@radix-ui/react-slot": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", - "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.4.tgz", + "integrity": "sha512-Jl+bCv8HxKnlTLVrcDE8zTMJ09R9/ukw4qBs/oZClOfoQk/cOTbDn+NceXfV7j09YPVQUryJPHurafcSg6EVKA==", "license": "MIT", "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" @@ -3947,6 +4248,24 @@ } } }, + "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/@radix-ui/react-use-callback-ref": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.1.tgz", @@ -4782,7 +5101,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", - "dev": true, "license": "MIT", "engines": { "node": ">= 10" @@ -5603,6 +5921,37 @@ "@codemirror/language-data": ">=6.0.0" } }, + "node_modules/@uiw/codemirror-theme-github": { + "version": "4.25.4", + "resolved": "https://registry.npmjs.org/@uiw/codemirror-theme-github/-/codemirror-theme-github-4.25.4.tgz", + "integrity": "sha512-M5zRT2vIpNsuKN0Lz+DwLnmhHW8Eddp1M9zC0hm3V+bvffmaSn/pUDey1eqGIv5xNNmjhqvDAz0a90xLYCzvSw==", + "license": "MIT", + "dependencies": { + "@uiw/codemirror-themes": "4.25.4" + }, + "funding": { + "url": "https://jaywcjlove.github.io/#/sponsor" + } + }, + "node_modules/@uiw/codemirror-themes": { + "version": "4.25.4", + "resolved": "https://registry.npmjs.org/@uiw/codemirror-themes/-/codemirror-themes-4.25.4.tgz", + "integrity": "sha512-2SLktItgcZC4p0+PfFusEbAHwbuAWe3bOOntCevVgHtrWGtGZX3IPv2k8IKZMgOXtAHyGKpJvT9/nspPn/uCQg==", + "license": "MIT", + "dependencies": { + "@codemirror/language": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.0.0" + }, + "funding": { + "url": "https://jaywcjlove.github.io/#/sponsor" + }, + "peerDependencies": { + "@codemirror/language": ">=6.0.0", + "@codemirror/state": ">=6.0.0", + "@codemirror/view": ">=6.0.0" + } + }, "node_modules/@uiw/react-codemirror": { "version": "4.25.2", "resolved": "https://registry.npmjs.org/@uiw/react-codemirror/-/react-codemirror-4.25.2.tgz", @@ -5775,7 +6124,6 @@ "version": "7.1.4", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", - "dev": true, "license": "MIT", "engines": { "node": ">= 14" @@ -5845,7 +6193,6 @@ "version": "6.2.2", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", - "dev": true, "license": "MIT", "engines": { "node": ">=12" @@ -5985,6 +6332,14 @@ "dev": true, "license": "MIT" }, + "node_modules/arrify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", + "engines": { + "node": ">=8" + } + }, "node_modules/asn1": { "version": "0.2.6", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", @@ -6074,7 +6429,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true, "license": "MIT" }, "node_modules/base32.js": { @@ -6184,6 +6538,14 @@ "node": "20.x || 22.x || 23.x || 24.x" } }, + "node_modules/bignumber.js": { + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.3.1.tgz", + "integrity": "sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==", + "engines": { + "node": "*" + } + }, "node_modules/bindings": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", @@ -6826,7 +7188,6 @@ "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, "license": "ISC", "dependencies": { "string-width": "^4.2.0", @@ -6841,7 +7202,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -6851,7 +7211,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -6864,7 +7223,6 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", @@ -7396,7 +7754,6 @@ "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, "license": "MIT", "dependencies": { "path-key": "^3.1.0", @@ -7679,6 +8036,11 @@ "dev": true, "license": "MIT" }, + "node_modules/deep-object-diff": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/deep-object-diff/-/deep-object-diff-1.1.9.tgz", + "integrity": "sha512-Rn+RuwkmkDwCi2/oXOFS9Gsr5lJZu/yTGpK7wAaAIE75CC+LCGEZHpY6VQJa/RoJcrmaA/docWJZvYohlNkWPA==" + }, "node_modules/defaults": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", @@ -8142,11 +8504,34 @@ "node": ">= 0.4" } }, + "node_modules/duplexify": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.3.tgz", + "integrity": "sha512-M3BmBhwJRZsSx38lZyhE53Csddgzl5R7xGJNk7CVddZD6CcmwMCH8J+7AprIrQKH7TonKxaCjcv27Qmf+sQ+oA==", + "dependencies": { + "end-of-stream": "^1.4.1", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1", + "stream-shift": "^1.0.2" + } + }, + "node_modules/duplexify/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true, "license": "MIT" }, "node_modules/ecdsa-sig-formatter": { @@ -8579,7 +8964,6 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -9376,7 +9760,6 @@ "version": "3.3.1", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", - "dev": true, "license": "ISC", "dependencies": { "cross-spawn": "^7.0.6", @@ -9529,6 +9912,96 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/gaxios": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-7.1.3.tgz", + "integrity": "sha512-YGGyuEdVIjqxkxVH1pUTMY/XtmmsApXrCVv5EU25iX6inEPbV+VakJfLealkBtJN69AQmh1eGOdCl9Sm1UP6XQ==", + "dependencies": { + "extend": "^3.0.2", + "https-proxy-agent": "^7.0.1", + "node-fetch": "^3.3.2", + "rimraf": "^5.0.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/gaxios/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/gaxios/node_modules/glob": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", + "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/gaxios/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/gaxios/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/gaxios/node_modules/rimraf": { + "version": "5.0.10", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.10.tgz", + "integrity": "sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==", + "dependencies": { + "glob": "^10.3.7" + }, + "bin": { + "rimraf": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/gcp-metadata": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-8.1.2.tgz", + "integrity": "sha512-zV/5HKTfCeKWnxG0Dmrw51hEWFGfcF2xiXqcA3+J90WDuP0SvoiSO5ORvcBsifmx/FoIjgQN3oNOGaQ5PhLFkg==", + "dependencies": { + "gaxios": "^7.0.0", + "google-logging-utils": "^1.0.0", + "json-bigint": "^1.0.0" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -9552,7 +10025,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.4.0.tgz", "integrity": "sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==", - "dev": true, "license": "MIT", "engines": { "node": ">=18" @@ -9761,6 +10233,134 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/google-auth-library": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-10.5.0.tgz", + "integrity": "sha512-7ABviyMOlX5hIVD60YOfHw4/CxOfBhyduaYB+wbFWCWoni4N7SLcV46hrVRktuBbZjFC9ONyqamZITN7q3n32w==", + "dependencies": { + "base64-js": "^1.3.0", + "ecdsa-sig-formatter": "^1.0.11", + "gaxios": "^7.0.0", + "gcp-metadata": "^8.0.0", + "google-logging-utils": "^1.0.0", + "gtoken": "^8.0.0", + "jws": "^4.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/google-auth-library/node_modules/jwa": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.1.tgz", + "integrity": "sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==", + "dependencies": { + "buffer-equal-constant-time": "^1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/google-auth-library/node_modules/jws": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.1.tgz", + "integrity": "sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA==", + "dependencies": { + "jwa": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/google-gax": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/google-gax/-/google-gax-5.0.6.tgz", + "integrity": "sha512-1kGbqVQBZPAAu4+/R1XxPQKP0ydbNYoLAr4l0ZO2bMV0kLyLW4I1gAk++qBLWt7DPORTzmWRMsCZe86gDjShJA==", + "dependencies": { + "@grpc/grpc-js": "^1.12.6", + "@grpc/proto-loader": "^0.8.0", + "duplexify": "^4.1.3", + "google-auth-library": "^10.1.0", + "google-logging-utils": "^1.1.1", + "node-fetch": "^3.3.2", + "object-hash": "^3.0.0", + "proto3-json-serializer": "^3.0.0", + "protobufjs": "^7.5.3", + "retry-request": "^8.0.0", + "rimraf": "^5.0.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/google-gax/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/google-gax/node_modules/glob": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", + "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/google-gax/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/google-gax/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/google-gax/node_modules/rimraf": { + "version": "5.0.10", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.10.tgz", + "integrity": "sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==", + "dependencies": { + "glob": "^10.3.7" + }, + "bin": { + "rimraf": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/google-logging-utils": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/google-logging-utils/-/google-logging-utils-1.1.3.tgz", + "integrity": "sha512-eAmLkjDjAFCVXg7A1unxHsLf961m6y17QFqXqAXGj/gVkKFrEICfStRfwUlGNfeCEjNRa32JEWOUTlYXPyyKvA==", + "engines": { + "node": ">=14" + } + }, "node_modules/gopd": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", @@ -9812,6 +10412,37 @@ "dev": true, "license": "MIT" }, + "node_modules/gtoken": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-8.0.0.tgz", + "integrity": "sha512-+CqsMbHPiSTdtSO14O51eMNlrp9N79gmeqmXeouJOhfucAedHw9noVe/n5uJk3tbKE6a+6ZCQg3RPhVhHByAIw==", + "dependencies": { + "gaxios": "^7.0.0", + "jws": "^4.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/gtoken/node_modules/jwa": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.1.tgz", + "integrity": "sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==", + "dependencies": { + "buffer-equal-constant-time": "^1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/gtoken/node_modules/jws": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.1.tgz", + "integrity": "sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA==", + "dependencies": { + "jwa": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -10079,6 +10710,17 @@ "void-elements": "3.1.0" } }, + "node_modules/html-tags": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", + "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/html-url-attributes": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/html-url-attributes/-/html-url-attributes-3.0.1.tgz", @@ -10153,7 +10795,6 @@ "version": "7.0.6", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", - "dev": true, "license": "MIT", "dependencies": { "agent-base": "^7.1.2", @@ -10189,6 +10830,162 @@ "url": "https://github.com/sponsors/typicode" } }, + "node_modules/i18n-auto-translation": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/i18n-auto-translation/-/i18n-auto-translation-2.2.3.tgz", + "integrity": "sha512-Gu3qGOq4mG8qBcEYqfvga5SQGsmfKjTakXdXqFV+FmMk12KGnpOcftzvp/7TcgXM6MvLDPenAf2M61a/R0N9Lw==", + "dependencies": { + "@google-cloud/translate": "9.2.0", + "axios": "1.12.2", + "deep-object-diff": "1.1.9", + "glob": "11.0.3", + "html-entities": "2.6.0", + "just-extend": "6.2.0", + "yargs": "18.0.0", + "yocto-spinner": "1.0.0" + }, + "bin": { + "i18n-auto-translation": "dist/src/index.js" + }, + "engines": { + "node": ">= 14.17" + } + }, + "node_modules/i18n-auto-translation/node_modules/axios": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.12.2.tgz", + "integrity": "sha512-vMJzPewAlRyOgxV2dU0Cuz2O8zzzx9VYtbJOaBgXFeLc4IV/Eg50n4LowmehOOR61S8ZMpc2K5Sa7g6A4jfkUw==", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.4", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/i18n-auto-translation/node_modules/cliui": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-9.0.1.tgz", + "integrity": "sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==", + "dependencies": { + "string-width": "^7.2.0", + "strip-ansi": "^7.1.0", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/i18n-auto-translation/node_modules/emoji-regex": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==" + }, + "node_modules/i18n-auto-translation/node_modules/glob": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.3.tgz", + "integrity": "sha512-2Nim7dha1KVkaiF4q6Dj+ngPPMdfvLJEOpZk/jKiUAkqKebpGAWQXAq9z1xu9HKu5lWfqw/FASuccEjyznjPaA==", + "dependencies": { + "foreground-child": "^3.3.1", + "jackspeak": "^4.1.1", + "minimatch": "^10.0.3", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^2.0.0" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/i18n-auto-translation/node_modules/jackspeak": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.1.1.tgz", + "integrity": "sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/i18n-auto-translation/node_modules/lru-cache": { + "version": "11.2.4", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.4.tgz", + "integrity": "sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg==", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/i18n-auto-translation/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/i18n-auto-translation/node_modules/path-scurry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.1.tgz", + "integrity": "sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA==", + "dependencies": { + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/i18n-auto-translation/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/i18n-auto-translation/node_modules/yargs": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-18.0.0.tgz", + "integrity": "sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg==", + "dependencies": { + "cliui": "^9.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "string-width": "^7.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^22.0.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=23" + } + }, + "node_modules/i18n-auto-translation/node_modules/yargs-parser": { + "version": "22.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-22.0.0.tgz", + "integrity": "sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==", + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=23" + } + }, "node_modules/i18next": { "version": "25.6.0", "resolved": "https://registry.npmjs.org/i18next/-/i18next-25.6.0.tgz", @@ -10432,7 +11229,6 @@ "version": "10.0.1", "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.0.1.tgz", "integrity": "sha512-NWv9YLW4PoW2B7xtzaS3NCot75m6nK7Icdv0o3lfMceJVRfSoQwqD4wEH5rLwoKJwUiZ/rfpiVBhnaF0FK4HoA==", - "dev": true, "license": "MIT", "engines": { "node": ">= 12" @@ -10543,6 +11339,17 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/is-html": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-html/-/is-html-2.0.0.tgz", + "integrity": "sha512-S+OpgB5i7wzIue/YSE5hg0e5ZYfG3hhpNh9KGl6ayJ38p7ED6wxQLd1TV91xHpcTvw90KMJ9EwN3F/iNflHBVg==", + "dependencies": { + "html-tags": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/is-interactive": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", @@ -10647,14 +11454,12 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true, "license": "ISC" }, "node_modules/jackspeak": { "version": "3.4.3", "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", - "dev": true, "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/cliui": "^8.0.2" @@ -10758,6 +11563,14 @@ "node": ">=6" } }, + "node_modules/json-bigint": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", + "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", + "dependencies": { + "bignumber.js": "^9.0.0" + } + }, "node_modules/json-buffer": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", @@ -10881,6 +11694,11 @@ "setimmediate": "^1.0.5" } }, + "node_modules/just-extend": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-6.2.0.tgz", + "integrity": "sha512-cYofQu2Xpom82S6qD778jBDpwvvy39s1l/hrYij2u9AMdQcGRpaBu6kY4mVhuno5kJVi1DAz4aiphA2WI1/OAw==" + }, "node_modules/jwa": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.2.tgz", @@ -11375,7 +12193,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", - "dev": true, "license": "MIT" }, "node_modules/lodash.includes": { @@ -11552,6 +12369,11 @@ "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, + "node_modules/long": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz", + "integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==" + }, "node_modules/longest-streak": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", @@ -12786,7 +13608,6 @@ "version": "10.1.1", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.1.tgz", "integrity": "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==", - "dev": true, "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/brace-expansion": "^5.0.0" @@ -13179,6 +14000,14 @@ "node": ">=0.10.0" } }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "engines": { + "node": ">= 6" + } + }, "node_modules/object-inspect": { "version": "1.13.4", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", @@ -13454,7 +14283,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", - "dev": true, "license": "BlueOak-1.0.0" }, "node_modules/pako": { @@ -13559,7 +14387,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -13569,7 +14396,6 @@ "version": "1.11.1", "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "dev": true, "license": "BlueOak-1.0.0", "dependencies": { "lru-cache": "^10.2.0", @@ -13586,14 +14412,12 @@ "version": "10.4.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true, "license": "ISC" }, "node_modules/path-scurry/node_modules/minipass": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true, "license": "ISC", "engines": { "node": ">=16 || 14 >=14.17" @@ -13935,6 +14759,40 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/proto3-json-serializer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/proto3-json-serializer/-/proto3-json-serializer-3.0.4.tgz", + "integrity": "sha512-E1sbAYg3aEbXrq0n1ojJkRHQJGE1kaE/O6GLA94y8rnJBfgvOPTOd1b9hOceQK1FFZI9qMh1vBERCyO2ifubcw==", + "dependencies": { + "protobufjs": "^7.4.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/protobufjs": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.5.4.tgz", + "integrity": "sha512-CvexbZtbov6jW2eXAvLukXjXUW1TzFaivC46BpWc/3BpcCysb5Vffu+B3XHMm8lVEuy2Mm4XGex8hBSg1yapPg==", + "hasInstallScript": true, + "dependencies": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/node": ">=13.7.0", + "long": "^5.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -14936,6 +15794,18 @@ "node": ">= 4" } }, + "node_modules/retry-request": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/retry-request/-/retry-request-8.0.2.tgz", + "integrity": "sha512-JzFPAfklk1kjR1w76f0QOIhoDkNkSqW8wYKT08n9yysTmZfB+RQ2QoXoTAeOi1HD9ZipTyTAZg3c4pM/jeqgSw==", + "dependencies": { + "extend": "^3.0.2", + "teeny-request": "^10.0.0" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/reusify": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", @@ -15225,7 +16095,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" @@ -15238,7 +16107,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -15333,7 +16201,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, "license": "ISC", "engines": { "node": ">=14" @@ -15420,7 +16287,6 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", - "dev": true, "license": "MIT", "engines": { "node": ">= 6.0.0", @@ -15431,7 +16297,6 @@ "version": "2.8.7", "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.7.tgz", "integrity": "sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==", - "dev": true, "license": "MIT", "dependencies": { "ip-address": "^10.0.1", @@ -15611,6 +16476,19 @@ "node": ">= 0.8" } }, + "node_modules/stream-events": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/stream-events/-/stream-events-1.0.5.tgz", + "integrity": "sha512-E1GUzBSgvct8Jsb3v2X15pjzN1tYebtbLaMg+eBOUOAxgbLoSbT2NS91ckc5lJD1KfLjId+jXJRgo0qnV5Nerg==", + "dependencies": { + "stubs": "^3.0.0" + } + }, + "node_modules/stream-shift": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.3.tgz", + "integrity": "sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==" + }, "node_modules/streamsearch": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", @@ -15663,7 +16541,6 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", @@ -15678,7 +16555,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -15688,7 +16564,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -15736,7 +16611,6 @@ "version": "7.1.2", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", - "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" @@ -15753,7 +16627,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -15766,7 +16639,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -15785,6 +16657,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/stubs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/stubs/-/stubs-3.0.0.tgz", + "integrity": "sha512-PdHt7hHUJKxvTCgbKX9C1V/ftOcjJQgz8BZwNfV5c4B6dcGqlpelTbJ999jBGZ2jYiPAwcX5dP6oBwVlBlUbxw==" + }, "node_modules/style-mod": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/style-mod/-/style-mod-4.1.3.tgz", @@ -15952,6 +16829,56 @@ "dev": true, "license": "ISC" }, + "node_modules/teeny-request": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/teeny-request/-/teeny-request-10.1.0.tgz", + "integrity": "sha512-3ZnLvgWF29jikg1sAQ1g0o+lr5JX6sVgYvfUJazn7ZjJroDBUTWp44/+cFVX0bULjv4vci+rBD+oGVAkWqhUbw==", + "dependencies": { + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "node-fetch": "^3.3.2", + "stream-events": "^1.0.5" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/teeny-request/node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/teeny-request/node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/teeny-request/node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/temp": { "version": "0.9.4", "resolved": "https://registry.npmjs.org/temp/-/temp-0.9.4.tgz", @@ -16909,7 +17836,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, "license": "ISC", "dependencies": { "isexe": "^2.0.0" @@ -16950,7 +17876,6 @@ "version": "9.0.2", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", - "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^6.2.1", @@ -16969,7 +17894,6 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", @@ -16987,7 +17911,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -16997,7 +17920,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -17010,7 +17932,6 @@ "version": "6.2.3", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", - "dev": true, "license": "MIT", "engines": { "node": ">=12" @@ -17023,14 +17944,12 @@ "version": "10.6.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", - "dev": true, "license": "MIT" }, "node_modules/wrap-ansi/node_modules/string-width": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", - "dev": true, "license": "MIT", "dependencies": { "emoji-regex": "^10.3.0", @@ -17094,7 +18013,6 @@ "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, "license": "ISC", "engines": { "node": ">=10" @@ -17124,7 +18042,6 @@ "version": "17.7.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dev": true, "license": "MIT", "dependencies": { "cliui": "^8.0.1", @@ -17143,7 +18060,6 @@ "version": "21.1.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, "license": "ISC", "engines": { "node": ">=12" @@ -17173,6 +18089,31 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/yocto-spinner": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/yocto-spinner/-/yocto-spinner-1.0.0.tgz", + "integrity": "sha512-VPX8P/+Z2Fnpx8PC/JELbxp3QRrBxjAekio6yulGtA5gKt9YyRc5ycCb+NHgZCbZ0kx9KxwZp7gC6UlrCcCdSQ==", + "dependencies": { + "yoctocolors": "^2.1.1" + }, + "engines": { + "node": ">=18.19" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yoctocolors": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yoctocolors/-/yoctocolors-2.1.2.tgz", + "integrity": "sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/youtube-video-element": { "version": "1.6.2", "resolved": "https://registry.npmjs.org/youtube-video-element/-/youtube-video-element-1.6.2.tgz", diff --git a/package.json b/package.json index a26dd5f8..412c290c 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "termix", "private": true, - "version": "1.9.0", + "version": "1.10.0", "description": "A web-based server management platform with SSH terminal, tunneling, and file editing capabilities", "author": "Karmaa", "main": "electron/main.cjs", @@ -35,6 +35,7 @@ "@hookform/resolvers": "^5.1.1", "@monaco-editor/react": "^4.7.0", "@radix-ui/react-accordion": "^1.2.11", + "@radix-ui/react-alert-dialog": "^1.1.15", "@radix-ui/react-checkbox": "^1.3.2", "@radix-ui/react-dialog": "^1.1.15", "@radix-ui/react-dropdown-menu": "^2.1.15", @@ -45,7 +46,7 @@ "@radix-ui/react-select": "^2.2.5", "@radix-ui/react-separator": "^1.1.7", "@radix-ui/react-slider": "^1.3.6", - "@radix-ui/react-slot": "^1.2.3", + "@radix-ui/react-slot": "^1.2.4", "@radix-ui/react-switch": "^1.2.5", "@radix-ui/react-tabs": "^1.1.12", "@radix-ui/react-tooltip": "^1.2.8", @@ -57,6 +58,7 @@ "@types/qrcode": "^1.5.5", "@types/speakeasy": "^2.0.10", "@uiw/codemirror-extensions-langs": "^4.24.1", + "@uiw/codemirror-theme-github": "^4.25.4", "@uiw/react-codemirror": "^4.24.1", "@xterm/addon-clipboard": "^0.1.0", "@xterm/addon-fit": "^0.10.0", @@ -76,6 +78,7 @@ "dotenv": "^17.2.0", "drizzle-orm": "^0.44.3", "express": "^5.1.0", + "i18n-auto-translation": "^2.2.3", "i18next": "^25.4.2", "i18next-browser-languagedetector": "^8.2.0", "jose": "^5.2.3", @@ -103,6 +106,7 @@ "react-xtermjs": "^1.0.10", "recharts": "^3.2.1", "remark-gfm": "^4.0.1", + "socks": "^2.8.7", "sonner": "^2.0.7", "speakeasy": "^2.0.0", "ssh2": "^1.16.0", diff --git a/repo-images/Image 10.png b/repo-images/Image 10.png new file mode 100644 index 0000000000000000000000000000000000000000..efc0c012f1d70907ee4dbd8a06dd8e14b4912ae5 GIT binary patch literal 161442 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%0A6r-Bd;(}{;>DHBV_5OEiNe$?J|E#D{}v$ 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

0j?uX)H#lXZb-rhadVl0ci6OjEZ7gBo~@sM zGJ67;twK6eff1Frb^tCx%l&YN;&HU(X^HSd;145fmfvxO972upCY;2UAa@UG+aA{R zUuk`c(;y)X5hESMdWwh$CpS4eNcp&SZ&|F>xx15RH`5y1dk^It=QaCPdeiOj*|V;T zI5CAVqF8VBFG`+227lh!q%i^WI-3>LI%(e_#{>0jv&h{J7nFV9Jydtfwi4Xq_e72O zQ;d&U8Vuwl4N{Cp8`@`}sG{K%^E+e^Eus)HQFfAjBpu3#uZtnC633;2^lN_rOdo(x zjpTYHZFq6|Kba%Mi?f4~mDtl9@y&2t{O|dKzmCv$pflRdd}4=OuHS&Cv^OU3tdT9H zCCxn1Dz|3RA6E(|}-E@-=eHTfwJ@3@YPL(S~ftxtUXQ5~|Z{Qddko zBNPeLJ~$77mlDZrcGhM3^>x~DJOkU+|#3MMKH0fs) z^lIOglZK;s?_bx;N=S+TlHIQF(({7LZa6vo(s1rJh%nq>Gu!g zZ4+MtuJQA01LVok$ldPy_>pMFn#0DLP@zEEgq%JPh2pskVLxHB_5JleyA(wSV#U({ zG~mdxaGKh^Yx zE?=kV42Y8(028cFP$$&muj5P;eOE4vV?k5TXh@GkQQ5PHU}1o#J-jG_<91zpJw#pw6+n+@_dA&4CV1ck6jii_xR=W zPGegG;k<9U!UbE3$eY=-fmy;i4-0!Uc8Dpt2D7v?R*32DTEgyWB*5}Jt6rWnS#G7y z<4g9*L);uGU%5@>6u*-5S^x=qtkf^NVIuakZhN2;W+<7>_7q8DT5oNLivE;^Qwyet zzAWC2ee(UrXV-*xf~*;0r>r3wOnKzh|7eQS96$$eN*);%Z;!yHpK{66RrZ zc7D)bh$1QHe!4$sqCPYA*2Ya%Ypxqui??)3TCaHSwg0YJx_r5ho=WLtOqwba9XAj? z%EwWQqS5!4G^_{>OTV&o~JWIgg)~i?P6|^J@kU>MZs*P-y!1ROc1;@=8 z%SG%-?1rw0MCrZHPwTN8l=wB-b^*HS1w74ako$=`6Lv`ZJE>2??JaI z2=szX(6_qTW=e=_Ubb3kCYX!J=$1(Zh)#aecBWO4JQzLY5pBN3fe01i_hZ0!<6 zD+1A%UjBQ<_j8HuP*xY4k>i&g|1-3u4xZXgk(Au=L7C~Bln|5$GSdFtdnz#X&v=Uw zqyZ40Z5XY%fQ{pRWs{28E8*Buh0#a7}LhpAbc{hh)&7ifC zh(@H~hE5c>g_0aUQn)pP)@ix6+_lAWv(R_0O!&H6vAHq;fYQPf|tfL%p^9tT}v$AOQrP`tS<0&(`Av3K3ym_5o@5LlEpBu^D;OhZM) z4COm;{L)~YUg)!UzGQ2{?>M43XsG^#@Ma*jKAOjqxH578tV3M#`d(EX{rtvf+WO;FQ7%y4R2oSp_3J zt_unZaydNXvI1qn#y!JFRKi;N9t$(7!fp$_(rElI7sC=^KiMh(g`&a; zBxN60QHr~SQQIPy3PB6(tPsV4S;>;&rmDU$qyi4 z`O=k+sq<^YZUuKJ4uG&^)uq-td_n-=n{8OG9FT^G}kmLYMy1_2^pkobtO#Co<=4) zl;3t{Rm`yK*czdwt2qogQd9LvaSk!Ym zokNSvVF+mivnM;V7Tj|Aqsd8~jT??m!h&R!vU6j8L*5W={qP3W*K0s*NF_!+KetT= z@mb8}PtnewHUp4s>l+D1H$l+E4GBuRcGlP1ecyM*3FFN~_!zz3a5Lpaqwcz&Iz&)5aDH0_P}kww^-z)Dj-H;` z)|{hPA6XjcBXXRxrxj0m!%r&kX7b=l+x4v3#Z#KNlHs+T; z%Jl&pf6EOB{clTzVo2eNVPCrCmBTd{5x~Xwl+aCikp%5eTk>`#q=-qJbPZa&q*6xw z#=9`XdrsGr_WH1NrcZxOY;{kDPYpnTT;Jc|gbC)ut`1yedWmOf2$x*n(4&TC5YY-f ztUkzik0jKqjrJT0yFQx7KZ$sF=KyQ+l<>w7u>{9yB~#Q z1v}yo%0@jMkh27nqCEqGHFYZNqr(iGyyx>vOCuWuPsPR=%y3;`c0f4s80-@)MUSmz zi-_SgpaUoGX!p32jbSBLc58}fn8u$@2Q`dz#TPJl+En%A8P>{xd1ySDi&r-8Zam!d zob!H=aQNXoQ1kejnQ=H8YlyA-dc9A#bf$zphluW4p!HgBoww(-XQ{E(;$HDxvCYfB& zJlk>3S_v7m1`!@t|%^g*d3ICUQK+X(?7*72)G4F{*8nO(Cc5d zVvmtmoH**mK8ko1GUTdwKl4}on%aX1d~LkKKs6*UQSqnAQAIeg8*K18hy5d{6anJ_ zfer0v`&zr&sUSY&(~Y9lTY_HM>rNgk9LSH3(47!6X?9_%u{nz5OpUqgF5kL(BcixV zi2M4|B40DGHlR_S0G2IE8QNc66We{~)baw+Ci^sbSEqb_n8`-ASrf`7Gb1l|rsAMu zF*XC}n}ai^UG)@!dwZ@xC3)sb^%HeO^ky3wd97W$Xk<&@^@C0dweGfCWhk?9o;TYj z%VS`FXXWj1AsCU|Br*0XwM!KqP477k>|Vp!j}cHg!{Ny*r#x8L-^gxX%^F*QjcZFj zYM%fy?lw+u3JQE5m6~@%-Y6e^60=rogk@aLr-@&lk|L!fWMwR81TyB#q^yTr*ME%U z8;QB^F4XIOF`B#I<-CM70rE3fuP;4-45o|Sy2CdOILM$b&oAF-(g;e6-4KXZ4Oqrm zm%O#j&6l>{_Gmj;R833mmks2h2=mjeF?TI7L-!f7%H=8}>3&XV!N%m57JA=Hux8M~ zWQu?RFSL}RkBL3y9p5*b`V8;MIS}4Wbr|=7{AwKjiGZ)S~(AIfXd8|0P3E7Rjsdq zsNbI$YXUgMPfiBme@x&WGmE$B(#V=&RjXP7uyiJy?GH*R{x`O{)ow! z$m6w-fxiy4243aoeIX=^GP3%p%AhYhLa6I!UNP#IZHs%pJtvhql(Tg5olf%Y5fx|@ zi1U>i*3jF;1%OG4$?b)w81?mktXceBvO(VJX<)#(4nr?>L~(1gJg6AnEfl$&ja^JE zwr}AMqEwV;qGRl{(kwSM_}rH7GTllQ1>-@o*Xj|m7V%M!_C23jizjIFou9^^G z6F>vq5w=5*@4)uv_L}zhZXcBTG@OupUxB0Y7uPf#<;lC}Gh*j@ckW)fvEmrD|a6i(_+XuibCj@c1|rBvbLP*M(~9ou17>TU7i8!xt)A`#ub< z&)BSYcART2WcQ3?Kgf$S+pl6-RsL^=VO41{p6XzdVQ)m*#Cyb|B2KFY)oADv@;kJ_ za8SD%8BE1HylD2VGP^@??mY3Hxw?gbE_(`e8DV4ikX9JD5YNbshuww?sjFY)G$JP! zHz)5`l;;THbc0Zt$Y)Ih3FIqQ=aa_d-%_U}Hi$l-_jA~J0o~rZ(OZI~vsBYsD3=Kf z92~K|tEqsCtw_tAJe|k&@~0W;fP-ma_RsDca>d7%D|LFjIr;rzs*5J?!5_ z>$jLS`8+%O=|Y0@-6h^na!J;lCQ%vDa58Ou4ls(bNrE$#+eWD?`jaz9hEJd##3q4t zvSU%V!Nx&*Q}#^o;%>(6Clwws6h^_P;!Xm$&?dLW1<1%E5#YJEmmz$z)p=EZLd`mC zf{w<%#&hGt6iu0>w}6bXQ5kDpOknb?4l}HB@KyCmiO9;-4bXLV9?-GSwYl3F5!a+X zx4Qed%rORMa78;;Ihuck9;%jk0kX6yke^3$s_g3@R=3X?*Ushb{&;#UV{WNz0x5uu zbz%4soGwxmYlPZfpa$nNd@QhEB;?8+eL7FuEY)95BW-XWdf)BFT7MH_yvei&I|dU~ zrNX)#dZ?gSZ&YP-KGNIyWpw`*Y7a47D%&cEz|%J14O`7u_LZ5kYhHmAAizxZo%Qni zTH_^H^&`o!o+hO@0#jhTKUqkPXa~h?(+EDSiAJx?D-b%by}2h+BXlyrWee0Z5Z;o| z+3GqN2(p-^yVf~OPcP7L_v@WhYirY^G>6pn3690L9LZ^N0RM>B$Dz#Ic=6`W@A&tR zqeDix`rV}AxGHe+VbH@89M{Ko(^~f^;=DXDqcpEB0QYiMWAi=?xlW?}OP}sb2CcMlw;+Ot*l~Z{go}W>@iggv;wFP?e`|lTRjPNOt ztZJ`HGc0RWSyiDpo2n+i${^hOc30zvB~t1#4+kl9tNI_sa@rKHoF!d&VV#zGAh6dZ zXt+B^L%cVoL1wH;U(BZtZ=d`cWCK!m_PmvHTS$EYn{lkcSY?FI*Z#5CQmMVjA*0bb z)TJ8BIkD5e$kRVrYdwenTdhoRXZ|O$k-pT=RjxrnBi%J`7Jgz4?rd4jE!Ss_hYfrZ zSYaR4r7e$06>Mw)Q2O^Z7N5aNiY(-4IbVZQJb7NJdl)hw1;~vq*CP4 zz8HH})0ZxG4P*~)bC|q*gG_ql89A74b&uN#pZO{zr^toWMl0vLPYOQ0Oqrg z9+w{8pU1X}9#<4PUprbcbS(rAL`V6`&LpI1wNK*+Lyp{#L=Dtp?h^9l`C)cP?%b>O zi;oXUO*w0*k!M}K(6tLsR%*9ilw=Z&Cd($U2H+8w*1hG2EZxe;UQ~{HV)KKD0TH>k zQm-xKGH$}b)Rfdo4ekGd{KuO3J%CZUZk$=iysB2#z&efW57(+uzS+IP!HbMh z7*6vJ-x;u;u72pN)mK=l5eFXwnZQ(s)Ha++n-wT1MSn|!^j9dREuSzqAe1x7rIkX& zAe8T78GCjzk1q2-Ywva{9E~n@4tD`~)gZ^xENSWCewNWIyP6vW+HZ@fGY_*o;tuM@ z5Efm!;k8<3M_ow$(#9Wu;s&wGW91@{r5e{9VS?1(^>UShC)Up(flg1kPlpFQk%3$5 zl-x1sij9gPDcowI{cuQ|H4{*}u>L;cakY#ACm*+P?xE6=*pYKFnUtm&F@?+p?fTbg z9Ernjgph2CXPuFE#&n&Nt!bxQlwS$q+8U82TjPOI;h|tYSSJ+|G!9JpQaF2o%JiV4 zQi)~sKw$BD)+~u~Tw^6&%Mfw;Yed1p6*0aWa;?8oRZpxD;-B&#^RQ&~uX$MW(yzwNIjcV#-g+ZF)|_^Ba~PGF=S=aaxKPfn(%WHql{#}A;R%8$BY9s8ho>UH;WOWa z4P~#*0`CXhabeWQOQ{BW^DtGiRd9C7sCzdN(Hvo{7mG{0*vlIQ8>obsszOqGs zv;1?}P=@YZOP?yYe1nQCQB;%n+F3tMPkTbGejL2bh6a6GtNNaYu1A`4*?4EcfEQ8; zLb85dSSd`F9iai|7PBW7fgQwqt*h*8Pb-`De3oub0ztp^Y5Jo<4@;BrLU`SvrU8J0 z|4Fc9Uazx@Lb6%JyT2?{2-)>Tz*;CLpd8;drVBx3&-9?rfsZNsJ>Gzxu8sb$9kO)p zgH`lUcF+2~trgD7%1X6|gWNw7e4M(kQJoU2at42*aA*9oJ!r1Ya2hdKMJ=48Er^!X z?ETeS&TOKIB&zN4x%%Q^93fL+MGC+|l8a zy{ieTol>0Vy4I29Em!OdZ@OEjmV-y||A$bxIy*g%j|I}bqW=@6SxHl z!tnN|V^Q#6lW{Wmex+_;k@K9=bU8{lNQdGIueD2PeilV$h^~W4p06rz00<4}@!}Ob z0MQNOUGg_87RxG28EDJkg7M z-oJO`>KTj9#eVJMl*R>q7zcKyP0N_vmIQE!UXS|4+&6^?sFo{2whL@;;`!MyE1p$6 zEazEy`Yd1F%4m&iXUSh3Cl@b#LDWm5$7}u9IHkV^Cw)Cg+C+C1*i`s@E1p*?T`1Fg zJyQC$b`567m~r4Wm⪙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 z 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%0DG!()`8^X8yl$tKPHsEXRD0VUkUh{) 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

|iwC_m@CT6K(k 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

FTz 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�RK*Y$6^~mC5oPGapq9fIt{s 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 literal 416728 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

ClRfx^IT{zjd}u=e%E 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

arY8Ev-LnmX6ZQ=wOX5xD5oYsK-6& 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 z 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

    # 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 literal 0 HcmV?d00001 diff --git a/src/backend/dashboard.ts b/src/backend/dashboard.ts index 465ab9d8..86978dbf 100644 --- a/src/backend/dashboard.ts +++ b/src/backend/dashboard.ts @@ -2,8 +2,8 @@ import express from "express"; import cors from "cors"; import cookieParser from "cookie-parser"; import { getDb } from "./database/db/index.js"; -import { recentActivity, sshData } from "./database/db/schema.js"; -import { eq, and, desc } from "drizzle-orm"; +import { recentActivity, sshData, hostAccess } from "./database/db/schema.js"; +import { eq, and, desc, or } from "drizzle-orm"; import { dashboardLogger } from "./utils/logger.js"; import { SimpleDBOps } from "./utils/simple-db-ops.js"; import { AuthManager } from "./utils/auth-manager.js"; @@ -15,7 +15,7 @@ const authManager = AuthManager.getInstance(); const serverStartTime = Date.now(); const activityRateLimiter = new Map(); -const RATE_LIMIT_MS = 1000; // 1 second window +const RATE_LIMIT_MS = 1000; app.use( cors({ @@ -127,9 +127,18 @@ app.post("/activity/log", async (req, res) => { }); } - if (type !== "terminal" && type !== "file_manager") { + if ( + ![ + "terminal", + "file_manager", + "server_stats", + "tunnel", + "docker", + ].includes(type) + ) { return res.status(400).json({ - error: "Invalid activity type. Must be 'terminal' or 'file_manager'", + error: + "Invalid activity type. Must be 'terminal', 'file_manager', 'server_stats', 'tunnel', or 'docker'", }); } @@ -155,7 +164,7 @@ app.post("/activity/log", async (req, res) => { entriesToDelete.forEach((key) => activityRateLimiter.delete(key)); } - const hosts = await SimpleDBOps.select( + const ownedHosts = await SimpleDBOps.select( getDb() .select() .from(sshData) @@ -164,8 +173,19 @@ app.post("/activity/log", async (req, res) => { userId, ); - if (hosts.length === 0) { - return res.status(404).json({ error: "Host not found" }); + if (ownedHosts.length === 0) { + const sharedHosts = await getDb() + .select() + .from(hostAccess) + .where( + and(eq(hostAccess.hostId, hostId), eq(hostAccess.userId, userId)), + ); + + if (sharedHosts.length === 0) { + return res + .status(404) + .json({ error: "Host not found or access denied" }); + } } const result = (await SimpleDBOps.insert( diff --git a/src/backend/database/database.ts b/src/backend/database/database.ts index 1eca73d9..744f2889 100644 --- a/src/backend/database/database.ts +++ b/src/backend/database/database.ts @@ -8,6 +8,7 @@ import alertRoutes from "./routes/alerts.js"; import credentialsRoutes from "./routes/credentials.js"; import snippetsRoutes from "./routes/snippets.js"; import terminalRoutes from "./routes/terminal.js"; +import rbacRoutes from "./routes/rbac.js"; import cors from "cors"; import fetch from "node-fetch"; import fs from "fs"; @@ -1436,6 +1437,7 @@ app.use("/alerts", alertRoutes); app.use("/credentials", credentialsRoutes); app.use("/snippets", snippetsRoutes); app.use("/terminal", terminalRoutes); +app.use("/rbac", rbacRoutes); app.use( ( diff --git a/src/backend/database/db/index.ts b/src/backend/database/db/index.ts index f9e1017f..0479b3e9 100644 --- a/src/backend/database/db/index.ts +++ b/src/backend/database/db/index.ts @@ -201,13 +201,21 @@ async function initializeCompleteDatabase(): Promise { enable_tunnel INTEGER NOT NULL DEFAULT 1, tunnel_connections TEXT, enable_file_manager INTEGER NOT NULL DEFAULT 1, + enable_docker INTEGER NOT NULL DEFAULT 0, default_path TEXT, autostart_password TEXT, autostart_key TEXT, autostart_key_password TEXT, force_keyboard_interactive TEXT, stats_config TEXT, + docker_config TEXT, terminal_config TEXT, + notes TEXT, + use_socks5 INTEGER, + socks5_host TEXT, + socks5_port INTEGER, + socks5_username TEXT, + socks5_password TEXT, created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE @@ -328,6 +336,81 @@ async function initializeCompleteDatabase(): Promise { FOREIGN KEY (host_id) REFERENCES ssh_data (id) ON DELETE CASCADE ); + CREATE TABLE IF NOT EXISTS host_access ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + host_id INTEGER NOT NULL, + user_id TEXT, + role_id INTEGER, + granted_by TEXT NOT NULL, + permission_level TEXT NOT NULL DEFAULT 'use', + expires_at TEXT, + created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP, + last_accessed_at TEXT, + access_count INTEGER NOT NULL DEFAULT 0, + FOREIGN KEY (host_id) REFERENCES ssh_data (id) ON DELETE CASCADE, + FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE, + FOREIGN KEY (role_id) REFERENCES roles (id) ON DELETE CASCADE, + FOREIGN KEY (granted_by) REFERENCES users (id) ON DELETE CASCADE + ); + + CREATE TABLE IF NOT EXISTS roles ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + name TEXT NOT NULL UNIQUE, + display_name TEXT NOT NULL, + description TEXT, + is_system INTEGER NOT NULL DEFAULT 0, + permissions TEXT, + created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP + ); + + CREATE TABLE IF NOT EXISTS user_roles ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + user_id TEXT NOT NULL, + role_id INTEGER NOT NULL, + granted_by TEXT, + granted_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP, + UNIQUE(user_id, role_id), + FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE, + FOREIGN KEY (role_id) REFERENCES roles (id) ON DELETE CASCADE, + FOREIGN KEY (granted_by) REFERENCES users (id) ON DELETE SET NULL + ); + + CREATE TABLE IF NOT EXISTS audit_logs ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + user_id TEXT NOT NULL, + username TEXT NOT NULL, + action TEXT NOT NULL, + resource_type TEXT NOT NULL, + resource_id TEXT, + resource_name TEXT, + details TEXT, + ip_address TEXT, + user_agent TEXT, + success INTEGER NOT NULL, + error_message TEXT, + timestamp TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP, + FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE + ); + + CREATE TABLE IF NOT EXISTS session_recordings ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + host_id INTEGER NOT NULL, + user_id TEXT NOT NULL, + access_id INTEGER, + started_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP, + ended_at TEXT, + duration INTEGER, + commands TEXT, + dangerous_actions TEXT, + recording_path TEXT, + terminated_by_owner INTEGER DEFAULT 0, + termination_reason TEXT, + FOREIGN KEY (host_id) REFERENCES ssh_data (id) ON DELETE CASCADE, + FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE, + FOREIGN KEY (access_id) REFERENCES host_access (id) ON DELETE SET NULL + ); + `); try { @@ -486,11 +569,30 @@ const migrateSchema = () => { addColumnIfNotExists("ssh_data", "stats_config", "TEXT"); addColumnIfNotExists("ssh_data", "terminal_config", "TEXT"); addColumnIfNotExists("ssh_data", "quick_actions", "TEXT"); + addColumnIfNotExists( + "ssh_data", + "enable_docker", + "INTEGER NOT NULL DEFAULT 0", + ); + addColumnIfNotExists("ssh_data", "docker_config", "TEXT"); + + addColumnIfNotExists("ssh_data", "notes", "TEXT"); + + addColumnIfNotExists("ssh_data", "use_socks5", "INTEGER"); + addColumnIfNotExists("ssh_data", "socks5_host", "TEXT"); + addColumnIfNotExists("ssh_data", "socks5_port", "INTEGER"); + addColumnIfNotExists("ssh_data", "socks5_username", "TEXT"); + addColumnIfNotExists("ssh_data", "socks5_password", "TEXT"); + addColumnIfNotExists("ssh_data", "socks5_proxy_chain", "TEXT"); addColumnIfNotExists("ssh_credentials", "private_key", "TEXT"); addColumnIfNotExists("ssh_credentials", "public_key", "TEXT"); addColumnIfNotExists("ssh_credentials", "detected_key_type", "TEXT"); + addColumnIfNotExists("ssh_credentials", "system_password", "TEXT"); + addColumnIfNotExists("ssh_credentials", "system_key", "TEXT"); + addColumnIfNotExists("ssh_credentials", "system_key_password", "TEXT"); + addColumnIfNotExists("file_manager_recent", "host_id", "INTEGER NOT NULL"); addColumnIfNotExists("file_manager_pinned", "host_id", "INTEGER NOT NULL"); addColumnIfNotExists("file_manager_shortcuts", "host_id", "INTEGER NOT NULL"); @@ -551,6 +653,317 @@ const migrateSchema = () => { } } + try { + sqlite.prepare("SELECT id FROM host_access LIMIT 1").get(); + } catch { + try { + sqlite.exec(` + CREATE TABLE IF NOT EXISTS host_access ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + host_id INTEGER NOT NULL, + user_id TEXT, + role_id INTEGER, + granted_by TEXT NOT NULL, + permission_level TEXT NOT NULL DEFAULT 'use', + expires_at TEXT, + created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP, + last_accessed_at TEXT, + access_count INTEGER NOT NULL DEFAULT 0, + FOREIGN KEY (host_id) REFERENCES ssh_data (id) ON DELETE CASCADE, + FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE, + FOREIGN KEY (role_id) REFERENCES roles (id) ON DELETE CASCADE, + FOREIGN KEY (granted_by) REFERENCES users (id) ON DELETE CASCADE + ); + `); + } catch (createError) { + databaseLogger.warn("Failed to create host_access table", { + operation: "schema_migration", + error: createError, + }); + } + } + + try { + sqlite.prepare("SELECT role_id FROM host_access LIMIT 1").get(); + } catch { + try { + sqlite.exec("ALTER TABLE host_access ADD COLUMN role_id INTEGER REFERENCES roles(id) ON DELETE CASCADE"); + } catch (alterError) { + databaseLogger.warn("Failed to add role_id column", { + operation: "schema_migration", + error: alterError, + }); + } + } + + try { + sqlite.prepare("SELECT sudo_password FROM ssh_data LIMIT 1").get(); + } catch { + try { + sqlite.exec("ALTER TABLE ssh_data ADD COLUMN sudo_password TEXT"); + } catch (alterError) { + databaseLogger.warn("Failed to add sudo_password column", { + operation: "schema_migration", + error: alterError, + }); + } + } + + try { + sqlite.prepare("SELECT id FROM roles LIMIT 1").get(); + } catch { + try { + sqlite.exec(` + CREATE TABLE IF NOT EXISTS roles ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + name TEXT NOT NULL UNIQUE, + display_name TEXT NOT NULL, + description TEXT, + is_system INTEGER NOT NULL DEFAULT 0, + permissions TEXT, + created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP + ); + `); + } catch (createError) { + databaseLogger.warn("Failed to create roles table", { + operation: "schema_migration", + error: createError, + }); + } + } + + try { + sqlite.prepare("SELECT id FROM user_roles LIMIT 1").get(); + } catch { + try { + sqlite.exec(` + CREATE TABLE IF NOT EXISTS user_roles ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + user_id TEXT NOT NULL, + role_id INTEGER NOT NULL, + granted_by TEXT, + granted_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP, + UNIQUE(user_id, role_id), + FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE, + FOREIGN KEY (role_id) REFERENCES roles (id) ON DELETE CASCADE, + FOREIGN KEY (granted_by) REFERENCES users (id) ON DELETE SET NULL + ); + `); + } catch (createError) { + databaseLogger.warn("Failed to create user_roles table", { + operation: "schema_migration", + error: createError, + }); + } + } + + try { + sqlite.prepare("SELECT id FROM audit_logs LIMIT 1").get(); + } catch { + try { + sqlite.exec(` + CREATE TABLE IF NOT EXISTS audit_logs ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + user_id TEXT NOT NULL, + username TEXT NOT NULL, + action TEXT NOT NULL, + resource_type TEXT NOT NULL, + resource_id TEXT, + resource_name TEXT, + details TEXT, + ip_address TEXT, + user_agent TEXT, + success INTEGER NOT NULL, + error_message TEXT, + timestamp TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP, + FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE + ); + `); + } catch (createError) { + databaseLogger.warn("Failed to create audit_logs table", { + operation: "schema_migration", + error: createError, + }); + } + } + + try { + sqlite.prepare("SELECT id FROM session_recordings LIMIT 1").get(); + } catch { + try { + sqlite.exec(` + CREATE TABLE IF NOT EXISTS session_recordings ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + host_id INTEGER NOT NULL, + user_id TEXT NOT NULL, + access_id INTEGER, + started_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP, + ended_at TEXT, + duration INTEGER, + commands TEXT, + dangerous_actions TEXT, + recording_path TEXT, + terminated_by_owner INTEGER DEFAULT 0, + termination_reason TEXT, + FOREIGN KEY (host_id) REFERENCES ssh_data (id) ON DELETE CASCADE, + FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE, + FOREIGN KEY (access_id) REFERENCES host_access (id) ON DELETE SET NULL + ); + `); + } catch (createError) { + databaseLogger.warn("Failed to create session_recordings table", { + operation: "schema_migration", + error: createError, + }); + } + } + + try { + sqlite.prepare("SELECT id FROM shared_credentials LIMIT 1").get(); + } catch { + try { + sqlite.exec(` + CREATE TABLE IF NOT EXISTS shared_credentials ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + host_access_id INTEGER NOT NULL, + original_credential_id INTEGER NOT NULL, + target_user_id TEXT NOT NULL, + encrypted_username TEXT NOT NULL, + encrypted_auth_type TEXT NOT NULL, + encrypted_password TEXT, + encrypted_key TEXT, + encrypted_key_password TEXT, + encrypted_key_type TEXT, + created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP, + needs_re_encryption INTEGER NOT NULL DEFAULT 0, + FOREIGN KEY (host_access_id) REFERENCES host_access (id) ON DELETE CASCADE, + FOREIGN KEY (original_credential_id) REFERENCES ssh_credentials (id) ON DELETE CASCADE, + FOREIGN KEY (target_user_id) REFERENCES users (id) ON DELETE CASCADE + ); + `); + } catch (createError) { + databaseLogger.warn("Failed to create shared_credentials table", { + operation: "schema_migration", + error: createError, + }); + } + } + + try { + const existingRoles = sqlite.prepare("SELECT name, is_system FROM roles").all() as Array<{ name: string; is_system: number }>; + + try { + const validSystemRoles = ['admin', 'user']; + const unwantedRoleNames = ['superAdmin', 'powerUser', 'readonly', 'member']; + let deletedCount = 0; + + const deleteByName = sqlite.prepare("DELETE FROM roles WHERE name = ?"); + for (const roleName of unwantedRoleNames) { + const result = deleteByName.run(roleName); + if (result.changes > 0) { + deletedCount += result.changes; + } + } + + const deleteOldSystemRole = sqlite.prepare("DELETE FROM roles WHERE name = ? AND is_system = 1"); + for (const role of existingRoles) { + if (role.is_system === 1 && !validSystemRoles.includes(role.name) && !unwantedRoleNames.includes(role.name)) { + const result = deleteOldSystemRole.run(role.name); + if (result.changes > 0) { + deletedCount += result.changes; + } + } + } + } catch (cleanupError) { + databaseLogger.warn("Failed to clean up old system roles", { + operation: "schema_migration", + error: cleanupError, + }); + } + + const systemRoles = [ + { + name: "admin", + displayName: "rbac.roles.admin", + description: "Administrator with full access", + permissions: null, + }, + { + name: "user", + displayName: "rbac.roles.user", + description: "Regular user", + permissions: null, + }, + ]; + + for (const role of systemRoles) { + const existingRole = sqlite.prepare("SELECT id FROM roles WHERE name = ?").get(role.name); + if (!existingRole) { + try { + sqlite.prepare(` + INSERT INTO roles (name, display_name, description, is_system, permissions) + VALUES (?, ?, ?, 1, ?) + `).run(role.name, role.displayName, role.description, role.permissions); + } catch (insertError) { + databaseLogger.warn(`Failed to create system role: ${role.name}`, { + operation: "schema_migration", + error: insertError, + }); + } + } + } + + try { + const adminUsers = sqlite.prepare("SELECT id FROM users WHERE is_admin = 1").all() as { id: string }[]; + const normalUsers = sqlite.prepare("SELECT id FROM users WHERE is_admin = 0").all() as { id: string }[]; + + const adminRole = sqlite.prepare("SELECT id FROM roles WHERE name = 'admin'").get() as { id: number } | undefined; + const userRole = sqlite.prepare("SELECT id FROM roles WHERE name = 'user'").get() as { id: number } | undefined; + + if (adminRole) { + const insertUserRole = sqlite.prepare(` + INSERT OR IGNORE INTO user_roles (user_id, role_id, granted_at) + VALUES (?, ?, CURRENT_TIMESTAMP) + `); + + for (const admin of adminUsers) { + try { + insertUserRole.run(admin.id, adminRole.id); + } catch (error) { + // Ignore duplicate errors + } + } + } + + if (userRole) { + const insertUserRole = sqlite.prepare(` + INSERT OR IGNORE INTO user_roles (user_id, role_id, granted_at) + VALUES (?, ?, CURRENT_TIMESTAMP) + `); + + for (const user of normalUsers) { + try { + insertUserRole.run(user.id, userRole.id); + } catch (error) { + // Ignore duplicate errors + } + } + } + } catch (migrationError) { + databaseLogger.warn("Failed to migrate existing users to roles", { + operation: "schema_migration", + error: migrationError, + }); + } + } catch (seedError) { + databaseLogger.warn("Failed to seed system roles", { + operation: "schema_migration", + error: seedError, + }); + } + databaseLogger.success("Schema migration completed", { operation: "schema_migration", }); diff --git a/src/backend/database/db/schema.ts b/src/backend/database/db/schema.ts index 074b4103..71c07653 100644 --- a/src/backend/database/db/schema.ts +++ b/src/backend/database/db/schema.ts @@ -66,6 +66,7 @@ export const sshData = sqliteTable("ssh_data", { key: text("key", { length: 8192 }), key_password: text("key_password"), keyType: text("key_type"), + sudoPassword: text("sudo_password"), autostartPassword: text("autostart_password"), autostartKey: text("autostart_key", { length: 8192 }), @@ -86,10 +87,22 @@ export const sshData = sqliteTable("ssh_data", { enableFileManager: integer("enable_file_manager", { mode: "boolean" }) .notNull() .default(true), + enableDocker: integer("enable_docker", { mode: "boolean" }) + .notNull() + .default(false), defaultPath: text("default_path"), statsConfig: text("stats_config"), terminalConfig: text("terminal_config"), quickActions: text("quick_actions"), + notes: text("notes"), + + useSocks5: integer("use_socks5", { mode: "boolean" }), + socks5Host: text("socks5_host"), + socks5Port: integer("socks5_port"), + socks5Username: text("socks5_username"), + socks5Password: text("socks5_password"), + socks5ProxyChain: text("socks5_proxy_chain"), + createdAt: text("created_at") .notNull() .default(sql`CURRENT_TIMESTAMP`), @@ -172,6 +185,11 @@ export const sshCredentials = sqliteTable("ssh_credentials", { key_password: text("key_password"), keyType: text("key_type"), detectedKeyType: text("detected_key_type"), + + systemPassword: text("system_password"), + systemKey: text("system_key", { length: 16384 }), + systemKeyPassword: text("system_key_password"), + usageCount: integer("usage_count").notNull().default(0), lastUsed: text("last_used"), createdAt: text("created_at") @@ -276,3 +294,156 @@ export const commandHistory = sqliteTable("command_history", { .notNull() .default(sql`CURRENT_TIMESTAMP`), }); + +export const hostAccess = sqliteTable("host_access", { + id: integer("id").primaryKey({ autoIncrement: true }), + hostId: integer("host_id") + .notNull() + .references(() => sshData.id, { onDelete: "cascade" }), + + userId: text("user_id") + .references(() => users.id, { onDelete: "cascade" }), + roleId: integer("role_id") + .references(() => roles.id, { onDelete: "cascade" }), + + grantedBy: text("granted_by") + .notNull() + .references(() => users.id, { onDelete: "cascade" }), + + permissionLevel: text("permission_level") + .notNull() + .default("view"), + + expiresAt: text("expires_at"), + + createdAt: text("created_at") + .notNull() + .default(sql`CURRENT_TIMESTAMP`), + lastAccessedAt: text("last_accessed_at"), + accessCount: integer("access_count").notNull().default(0), +}); + +export const sharedCredentials = sqliteTable("shared_credentials", { + id: integer("id").primaryKey({ autoIncrement: true }), + + hostAccessId: integer("host_access_id") + .notNull() + .references(() => hostAccess.id, { onDelete: "cascade" }), + + originalCredentialId: integer("original_credential_id") + .notNull() + .references(() => sshCredentials.id, { onDelete: "cascade" }), + + targetUserId: text("target_user_id") + .notNull() + .references(() => users.id, { onDelete: "cascade" }), + + encryptedUsername: text("encrypted_username").notNull(), + encryptedAuthType: text("encrypted_auth_type").notNull(), + encryptedPassword: text("encrypted_password"), + encryptedKey: text("encrypted_key", { length: 16384 }), + encryptedKeyPassword: text("encrypted_key_password"), + encryptedKeyType: text("encrypted_key_type"), + + createdAt: text("created_at") + .notNull() + .default(sql`CURRENT_TIMESTAMP`), + updatedAt: text("updated_at") + .notNull() + .default(sql`CURRENT_TIMESTAMP`), + + needsReEncryption: integer("needs_re_encryption", { mode: "boolean" }) + .notNull() + .default(false), +}); + +export const roles = sqliteTable("roles", { + id: integer("id").primaryKey({ autoIncrement: true }), + name: text("name").notNull().unique(), + displayName: text("display_name").notNull(), + description: text("description"), + + isSystem: integer("is_system", { mode: "boolean" }) + .notNull() + .default(false), + + permissions: text("permissions"), + + createdAt: text("created_at") + .notNull() + .default(sql`CURRENT_TIMESTAMP`), + updatedAt: text("updated_at") + .notNull() + .default(sql`CURRENT_TIMESTAMP`), +}); + +export const userRoles = sqliteTable("user_roles", { + id: integer("id").primaryKey({ autoIncrement: true }), + userId: text("user_id") + .notNull() + .references(() => users.id, { onDelete: "cascade" }), + roleId: integer("role_id") + .notNull() + .references(() => roles.id, { onDelete: "cascade" }), + + grantedBy: text("granted_by").references(() => users.id, { + onDelete: "set null", + }), + grantedAt: text("granted_at") + .notNull() + .default(sql`CURRENT_TIMESTAMP`), +}); + +export const auditLogs = sqliteTable("audit_logs", { + id: integer("id").primaryKey({ autoIncrement: true }), + + userId: text("user_id") + .notNull() + .references(() => users.id, { onDelete: "cascade" }), + username: text("username").notNull(), + + action: text("action").notNull(), + resourceType: text("resource_type").notNull(), + resourceId: text("resource_id"), + resourceName: text("resource_name"), + + details: text("details"), + ipAddress: text("ip_address"), + userAgent: text("user_agent"), + + success: integer("success", { mode: "boolean" }).notNull(), + errorMessage: text("error_message"), + + timestamp: text("timestamp") + .notNull() + .default(sql`CURRENT_TIMESTAMP`), +}); + +export const sessionRecordings = sqliteTable("session_recordings", { + id: integer("id").primaryKey({ autoIncrement: true }), + + hostId: integer("host_id") + .notNull() + .references(() => sshData.id, { onDelete: "cascade" }), + userId: text("user_id") + .notNull() + .references(() => users.id, { onDelete: "cascade" }), + accessId: integer("access_id").references(() => hostAccess.id, { + onDelete: "set null", + }), + + startedAt: text("started_at") + .notNull() + .default(sql`CURRENT_TIMESTAMP`), + endedAt: text("ended_at"), + duration: integer("duration"), + + commands: text("commands"), + dangerousActions: text("dangerous_actions"), + + recordingPath: text("recording_path"), + + terminatedByOwner: integer("terminated_by_owner", { mode: "boolean" }) + .default(false), + terminationReason: text("termination_reason"), +}); diff --git a/src/backend/database/routes/credentials.ts b/src/backend/database/routes/credentials.ts index df9ab936..6d0b0ab5 100644 --- a/src/backend/database/routes/credentials.ts +++ b/src/backend/database/routes/credentials.ts @@ -1,7 +1,15 @@ -import type { AuthenticatedRequest } from "../../../types/index.js"; +import type { + AuthenticatedRequest, + CredentialBackend, +} from "../../../types/index.js"; import express from "express"; import { db } from "../db/index.js"; -import { sshCredentials, sshCredentialUsage, sshData } from "../db/schema.js"; +import { + sshCredentials, + sshCredentialUsage, + sshData, + hostAccess, +} from "../db/schema.js"; import { eq, and, desc, sql } from "drizzle-orm"; import type { Request, Response } from "express"; import { authLogger } from "../../utils/logger.js"; @@ -470,6 +478,14 @@ router.put( userId, ); + const { SharedCredentialManager } = + await import("../../utils/shared-credential-manager.js"); + const sharedCredManager = SharedCredentialManager.getInstance(); + await sharedCredManager.updateSharedCredentialsForOriginal( + parseInt(id), + userId, + ); + const credential = updated[0]; authLogger.success( `SSH credential updated: ${credential.name} (${credential.authType}) by user ${userId}`, @@ -524,8 +540,6 @@ router.delete( return res.status(404).json({ error: "Credential not found" }); } - // Update hosts using this credential to set credentialId to null - // This prevents orphaned references before deletion const hostsUsingCredential = await db .select() .from(sshData) @@ -552,10 +566,32 @@ router.delete( eq(sshData.userId, userId), ), ); + + for (const host of hostsUsingCredential) { + const revokedShares = await db + .delete(hostAccess) + .where(eq(hostAccess.hostId, host.id)) + .returning({ id: hostAccess.id }); + + if (revokedShares.length > 0) { + authLogger.info( + "Auto-revoked host shares due to credential deletion", + { + operation: "auto_revoke_shares", + hostId: host.id, + credentialId: parseInt(id), + revokedCount: revokedShares.length, + reason: "credential_deleted", + }, + ); + } + } } - // sshCredentialUsage will be automatically deleted by ON DELETE CASCADE - // No need for manual deletion + const { SharedCredentialManager } = + await import("../../utils/shared-credential-manager.js"); + const sharedCredManager = SharedCredentialManager.getInstance(); + await sharedCredManager.deleteSharedCredentialsForOriginal(parseInt(id)); await db .delete(sshCredentials) @@ -1124,10 +1160,9 @@ router.post( async function deploySSHKeyToHost( hostConfig: Record, - publicKey: string, - // eslint-disable-next-line @typescript-eslint/no-unused-vars - _credentialData: Record, + credData: CredentialBackend, ): Promise<{ success: boolean; message?: string; error?: string }> { + const publicKey = credData.public_key as string; return new Promise((resolve) => { const conn = new Client(); @@ -1248,7 +1283,7 @@ async function deploySSHKeyToHost( .replace(/'/g, "'\\''"); conn.exec( - `printf '%s\\n' '${escapedKey}' >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys`, + `printf '%s\\n' '${escapedKey} ${credData.name}@Termix' >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys`, (err, stream) => { if (err) { clearTimeout(addTimeout); @@ -1510,7 +1545,7 @@ router.post( }); } - const credData = credential[0]; + const credData = credential[0] as unknown as CredentialBackend; if (credData.authType !== "key") { return res.status(400).json({ @@ -1519,7 +1554,7 @@ router.post( }); } - const publicKey = credData.public_key || credData.publicKey; + const publicKey = credData.public_key; if (!publicKey) { return res.status(400).json({ success: false, @@ -1599,11 +1634,7 @@ router.post( } } - const deployResult = await deploySSHKeyToHost( - hostConfig, - publicKey as string, - credData, - ); + const deployResult = await deploySSHKeyToHost(hostConfig, credData); if (deployResult.success) { res.json({ diff --git a/src/backend/database/routes/rbac.ts b/src/backend/database/routes/rbac.ts new file mode 100644 index 00000000..6e6f0033 --- /dev/null +++ b/src/backend/database/routes/rbac.ts @@ -0,0 +1,850 @@ +import type { AuthenticatedRequest } from "../../../types/index.js"; +import express from "express"; +import { db } from "../db/index.js"; +import { + hostAccess, + sshData, + users, + roles, + userRoles, + auditLogs, + sharedCredentials, +} from "../db/schema.js"; +import { eq, and, desc, sql, or, isNull, gte } from "drizzle-orm"; +import type { Request, Response } from "express"; +import { databaseLogger } from "../../utils/logger.js"; +import { AuthManager } from "../../utils/auth-manager.js"; +import { PermissionManager } from "../../utils/permission-manager.js"; + +const router = express.Router(); + +const authManager = AuthManager.getInstance(); +const permissionManager = PermissionManager.getInstance(); + +const authenticateJWT = authManager.createAuthMiddleware(); + +function isNonEmptyString(value: unknown): value is string { + return typeof value === "string" && value.trim().length > 0; +} + +//Share a host with a user or role +//POST /rbac/host/:id/share +router.post( + "/host/:id/share", + authenticateJWT, + async (req: AuthenticatedRequest, res: Response) => { + const hostId = parseInt(req.params.id, 10); + const userId = req.userId!; + + if (isNaN(hostId)) { + return res.status(400).json({ error: "Invalid host ID" }); + } + + try { + const { + targetType = "user", + targetUserId, + targetRoleId, + durationHours, + permissionLevel = "view", + } = req.body; + + if (!["user", "role"].includes(targetType)) { + return res + .status(400) + .json({ error: "Invalid target type. Must be 'user' or 'role'" }); + } + + if (targetType === "user" && !isNonEmptyString(targetUserId)) { + return res + .status(400) + .json({ error: "Target user ID is required when sharing with user" }); + } + if (targetType === "role" && !targetRoleId) { + return res + .status(400) + .json({ error: "Target role ID is required when sharing with role" }); + } + + const host = await db + .select() + .from(sshData) + .where(and(eq(sshData.id, hostId), eq(sshData.userId, userId))) + .limit(1); + + if (host.length === 0) { + databaseLogger.warn("Attempt to share host not owned by user", { + operation: "share_host", + userId, + hostId, + }); + return res.status(403).json({ error: "Not host owner" }); + } + + if (!host[0].credentialId) { + return res.status(400).json({ + error: + "Only hosts using credentials can be shared. Please create a credential and assign it to this host before sharing.", + code: "CREDENTIAL_REQUIRED_FOR_SHARING", + }); + } + + if (targetType === "user") { + const targetUser = await db + .select({ id: users.id, username: users.username }) + .from(users) + .where(eq(users.id, targetUserId)) + .limit(1); + + if (targetUser.length === 0) { + return res.status(404).json({ error: "Target user not found" }); + } + } else { + const targetRole = await db + .select({ id: roles.id, name: roles.name }) + .from(roles) + .where(eq(roles.id, targetRoleId)) + .limit(1); + + if (targetRole.length === 0) { + return res.status(404).json({ error: "Target role not found" }); + } + } + + let expiresAt: string | null = null; + if ( + durationHours && + typeof durationHours === "number" && + durationHours > 0 + ) { + const expiryDate = new Date(); + expiryDate.setHours(expiryDate.getHours() + durationHours); + expiresAt = expiryDate.toISOString(); + } + + const validLevels = ["view"]; + if (!validLevels.includes(permissionLevel)) { + return res.status(400).json({ + error: "Invalid permission level. Only 'view' is supported.", + validLevels, + }); + } + + const whereConditions = [eq(hostAccess.hostId, hostId)]; + if (targetType === "user") { + whereConditions.push(eq(hostAccess.userId, targetUserId)); + } else { + whereConditions.push(eq(hostAccess.roleId, targetRoleId)); + } + + const existing = await db + .select() + .from(hostAccess) + .where(and(...whereConditions)) + .limit(1); + + if (existing.length > 0) { + await db + .update(hostAccess) + .set({ + permissionLevel, + expiresAt, + }) + .where(eq(hostAccess.id, existing[0].id)); + + await db + .delete(sharedCredentials) + .where(eq(sharedCredentials.hostAccessId, existing[0].id)); + + const { SharedCredentialManager } = + await import("../../utils/shared-credential-manager.js"); + const sharedCredManager = SharedCredentialManager.getInstance(); + if (targetType === "user") { + await sharedCredManager.createSharedCredentialForUser( + existing[0].id, + host[0].credentialId, + targetUserId!, + userId, + ); + } else { + await sharedCredManager.createSharedCredentialsForRole( + existing[0].id, + host[0].credentialId, + targetRoleId!, + userId, + ); + } + + return res.json({ + success: true, + message: "Host access updated", + expiresAt, + }); + } + + const result = await db.insert(hostAccess).values({ + hostId, + userId: targetType === "user" ? targetUserId : null, + roleId: targetType === "role" ? targetRoleId : null, + grantedBy: userId, + permissionLevel, + expiresAt, + }); + + const { SharedCredentialManager } = + await import("../../utils/shared-credential-manager.js"); + const sharedCredManager = SharedCredentialManager.getInstance(); + + if (targetType === "user") { + await sharedCredManager.createSharedCredentialForUser( + result.lastInsertRowid as number, + host[0].credentialId, + targetUserId!, + userId, + ); + } else { + await sharedCredManager.createSharedCredentialsForRole( + result.lastInsertRowid as number, + host[0].credentialId, + targetRoleId!, + userId, + ); + } + + res.json({ + success: true, + message: `Host shared successfully with ${targetType}`, + expiresAt, + }); + } catch (error) { + databaseLogger.error("Failed to share host", error, { + operation: "share_host", + hostId, + userId, + }); + res.status(500).json({ error: "Failed to share host" }); + } + }, +); + +// Revoke host access +// DELETE /rbac/host/:id/access/:accessId +router.delete( + "/host/:id/access/:accessId", + authenticateJWT, + async (req: AuthenticatedRequest, res: Response) => { + const hostId = parseInt(req.params.id, 10); + const accessId = parseInt(req.params.accessId, 10); + const userId = req.userId!; + + if (isNaN(hostId) || isNaN(accessId)) { + return res.status(400).json({ error: "Invalid ID" }); + } + + try { + const host = await db + .select() + .from(sshData) + .where(and(eq(sshData.id, hostId), eq(sshData.userId, userId))) + .limit(1); + + if (host.length === 0) { + return res.status(403).json({ error: "Not host owner" }); + } + + await db.delete(hostAccess).where(eq(hostAccess.id, accessId)); + + res.json({ success: true, message: "Access revoked" }); + } catch (error) { + databaseLogger.error("Failed to revoke host access", error, { + operation: "revoke_host_access", + hostId, + accessId, + userId, + }); + res.status(500).json({ error: "Failed to revoke access" }); + } + }, +); + +// Get host access list +// GET /rbac/host/:id/access +router.get( + "/host/:id/access", + authenticateJWT, + async (req: AuthenticatedRequest, res: Response) => { + const hostId = parseInt(req.params.id, 10); + const userId = req.userId!; + + if (isNaN(hostId)) { + return res.status(400).json({ error: "Invalid host ID" }); + } + + try { + const host = await db + .select() + .from(sshData) + .where(and(eq(sshData.id, hostId), eq(sshData.userId, userId))) + .limit(1); + + if (host.length === 0) { + return res.status(403).json({ error: "Not host owner" }); + } + + const rawAccessList = await db + .select({ + id: hostAccess.id, + userId: hostAccess.userId, + roleId: hostAccess.roleId, + username: users.username, + roleName: roles.name, + roleDisplayName: roles.displayName, + grantedBy: hostAccess.grantedBy, + grantedByUsername: sql`(SELECT username FROM users WHERE id = ${hostAccess.grantedBy})`, + permissionLevel: hostAccess.permissionLevel, + expiresAt: hostAccess.expiresAt, + createdAt: hostAccess.createdAt, + }) + .from(hostAccess) + .leftJoin(users, eq(hostAccess.userId, users.id)) + .leftJoin(roles, eq(hostAccess.roleId, roles.id)) + .where(eq(hostAccess.hostId, hostId)) + .orderBy(desc(hostAccess.createdAt)); + + const accessList = rawAccessList.map((access) => ({ + id: access.id, + targetType: access.userId ? "user" : "role", + userId: access.userId, + roleId: access.roleId, + username: access.username, + roleName: access.roleName, + roleDisplayName: access.roleDisplayName, + grantedBy: access.grantedBy, + grantedByUsername: access.grantedByUsername, + permissionLevel: access.permissionLevel, + expiresAt: access.expiresAt, + createdAt: access.createdAt, + })); + + res.json({ accessList }); + } catch (error) { + databaseLogger.error("Failed to get host access list", error, { + operation: "get_host_access_list", + hostId, + userId, + }); + res.status(500).json({ error: "Failed to get access list" }); + } + }, +); + +// Get user's shared hosts (hosts shared WITH this user) +// GET /rbac/shared-hosts +router.get( + "/shared-hosts", + authenticateJWT, + async (req: AuthenticatedRequest, res: Response) => { + const userId = req.userId!; + + try { + const now = new Date().toISOString(); + + const sharedHosts = await db + .select({ + id: sshData.id, + name: sshData.name, + ip: sshData.ip, + port: sshData.port, + username: sshData.username, + folder: sshData.folder, + tags: sshData.tags, + permissionLevel: hostAccess.permissionLevel, + expiresAt: hostAccess.expiresAt, + grantedBy: hostAccess.grantedBy, + ownerUsername: users.username, + }) + .from(hostAccess) + .innerJoin(sshData, eq(hostAccess.hostId, sshData.id)) + .innerJoin(users, eq(sshData.userId, users.id)) + .where( + and( + eq(hostAccess.userId, userId), + or(isNull(hostAccess.expiresAt), gte(hostAccess.expiresAt, now)), + ), + ) + .orderBy(desc(hostAccess.createdAt)); + + res.json({ sharedHosts }); + } catch (error) { + databaseLogger.error("Failed to get shared hosts", error, { + operation: "get_shared_hosts", + userId, + }); + res.status(500).json({ error: "Failed to get shared hosts" }); + } + }, +); + +// Get all roles +// GET /rbac/roles +router.get( + "/roles", + authenticateJWT, + permissionManager.requireAdmin(), + async (req: AuthenticatedRequest, res: Response) => { + try { + const allRoles = await db + .select() + .from(roles) + .orderBy(roles.isSystem, roles.name); + + const rolesWithParsedPermissions = allRoles.map((role) => ({ + ...role, + permissions: JSON.parse(role.permissions), + })); + + res.json({ roles: rolesWithParsedPermissions }); + } catch (error) { + databaseLogger.error("Failed to get roles", error, { + operation: "get_roles", + }); + res.status(500).json({ error: "Failed to get roles" }); + } + }, +); + +// Get all roles +// GET /rbac/roles +router.get( + "/roles", + authenticateJWT, + async (req: AuthenticatedRequest, res: Response) => { + try { + const rolesList = await db + .select({ + id: roles.id, + name: roles.name, + displayName: roles.displayName, + description: roles.description, + isSystem: roles.isSystem, + createdAt: roles.createdAt, + updatedAt: roles.updatedAt, + }) + .from(roles) + .orderBy(roles.isSystem, roles.name); + + res.json({ roles: rolesList }); + } catch (error) { + databaseLogger.error("Failed to get roles", error, { + operation: "get_roles", + }); + res.status(500).json({ error: "Failed to get roles" }); + } + }, +); + +// Create new role +// POST /rbac/roles +router.post( + "/roles", + authenticateJWT, + permissionManager.requireAdmin(), + async (req: AuthenticatedRequest, res: Response) => { + const { name, displayName, description } = req.body; + + if (!isNonEmptyString(name) || !isNonEmptyString(displayName)) { + return res.status(400).json({ + error: "Role name and display name are required", + }); + } + + if (!/^[a-z0-9_-]+$/.test(name)) { + return res.status(400).json({ + error: + "Role name must contain only lowercase letters, numbers, underscores, and hyphens", + }); + } + + try { + const existing = await db + .select({ id: roles.id }) + .from(roles) + .where(eq(roles.name, name)) + .limit(1); + + if (existing.length > 0) { + return res.status(409).json({ + error: "A role with this name already exists", + }); + } + + const result = await db.insert(roles).values({ + name, + displayName, + description: description || null, + isSystem: false, + permissions: null, + }); + + const newRoleId = result.lastInsertRowid; + + res.status(201).json({ + success: true, + roleId: newRoleId, + message: "Role created successfully", + }); + } catch (error) { + databaseLogger.error("Failed to create role", error, { + operation: "create_role", + roleName: name, + }); + res.status(500).json({ error: "Failed to create role" }); + } + }, +); + +// Update role +// PUT /rbac/roles/:id +router.put( + "/roles/:id", + authenticateJWT, + permissionManager.requireAdmin(), + async (req: AuthenticatedRequest, res: Response) => { + const roleId = parseInt(req.params.id, 10); + const { displayName, description } = req.body; + + if (isNaN(roleId)) { + return res.status(400).json({ error: "Invalid role ID" }); + } + + if (!displayName && description === undefined) { + return res.status(400).json({ + error: "At least one field (displayName or description) is required", + }); + } + + try { + const existingRole = await db + .select({ + id: roles.id, + name: roles.name, + isSystem: roles.isSystem, + }) + .from(roles) + .where(eq(roles.id, roleId)) + .limit(1); + + if (existingRole.length === 0) { + return res.status(404).json({ error: "Role not found" }); + } + + const updates: { + displayName?: string; + description?: string | null; + updatedAt: string; + } = { + updatedAt: new Date().toISOString(), + }; + + if (displayName) { + updates.displayName = displayName; + } + + if (description !== undefined) { + updates.description = description || null; + } + + await db.update(roles).set(updates).where(eq(roles.id, roleId)); + + res.json({ + success: true, + message: "Role updated successfully", + }); + } catch (error) { + databaseLogger.error("Failed to update role", error, { + operation: "update_role", + roleId, + }); + res.status(500).json({ error: "Failed to update role" }); + } + }, +); + +// Delete role +// DELETE /rbac/roles/:id +router.delete( + "/roles/:id", + authenticateJWT, + permissionManager.requireAdmin(), + async (req: AuthenticatedRequest, res: Response) => { + const roleId = parseInt(req.params.id, 10); + + if (isNaN(roleId)) { + return res.status(400).json({ error: "Invalid role ID" }); + } + + try { + const role = await db + .select({ + id: roles.id, + name: roles.name, + isSystem: roles.isSystem, + }) + .from(roles) + .where(eq(roles.id, roleId)) + .limit(1); + + if (role.length === 0) { + return res.status(404).json({ error: "Role not found" }); + } + + if (role[0].isSystem) { + return res.status(403).json({ + error: "Cannot delete system roles", + }); + } + + const deletedUserRoles = await db + .delete(userRoles) + .where(eq(userRoles.roleId, roleId)) + .returning({ userId: userRoles.userId }); + + for (const { userId } of deletedUserRoles) { + permissionManager.invalidateUserPermissionCache(userId); + } + + const deletedHostAccess = await db + .delete(hostAccess) + .where(eq(hostAccess.roleId, roleId)) + .returning({ id: hostAccess.id }); + + await db.delete(roles).where(eq(roles.id, roleId)); + + res.json({ + success: true, + message: "Role deleted successfully", + }); + } catch (error) { + databaseLogger.error("Failed to delete role", error, { + operation: "delete_role", + roleId, + }); + res.status(500).json({ error: "Failed to delete role" }); + } + }, +); + +// Assign role to user +// POST /rbac/users/:userId/roles +router.post( + "/users/:userId/roles", + authenticateJWT, + permissionManager.requireAdmin(), + async (req: AuthenticatedRequest, res: Response) => { + const targetUserId = req.params.userId; + const currentUserId = req.userId!; + + try { + const { roleId } = req.body; + + if (typeof roleId !== "number") { + return res.status(400).json({ error: "Role ID is required" }); + } + + const targetUser = await db + .select() + .from(users) + .where(eq(users.id, targetUserId)) + .limit(1); + + if (targetUser.length === 0) { + return res.status(404).json({ error: "User not found" }); + } + + const role = await db + .select() + .from(roles) + .where(eq(roles.id, roleId)) + .limit(1); + + if (role.length === 0) { + return res.status(404).json({ error: "Role not found" }); + } + + if (role[0].isSystem) { + return res.status(403).json({ + error: + "System roles (admin, user) are automatically assigned and cannot be manually assigned", + }); + } + + const existing = await db + .select() + .from(userRoles) + .where( + and(eq(userRoles.userId, targetUserId), eq(userRoles.roleId, roleId)), + ) + .limit(1); + + if (existing.length > 0) { + return res.status(409).json({ error: "Role already assigned" }); + } + + await db.insert(userRoles).values({ + userId: targetUserId, + roleId, + grantedBy: currentUserId, + }); + + const hostsSharedWithRole = await db + .select() + .from(hostAccess) + .innerJoin(sshData, eq(hostAccess.hostId, sshData.id)) + .where(eq(hostAccess.roleId, roleId)); + + const { SharedCredentialManager } = + await import("../../utils/shared-credential-manager.js"); + const sharedCredManager = SharedCredentialManager.getInstance(); + + for (const { host_access, ssh_data } of hostsSharedWithRole) { + if (ssh_data.credentialId) { + try { + await sharedCredManager.createSharedCredentialForUser( + host_access.id, + ssh_data.credentialId, + targetUserId, + ssh_data.userId, + ); + } catch (error) { + databaseLogger.error( + "Failed to create shared credential for new role member", + error, + { + operation: "assign_role_create_credentials", + targetUserId, + roleId, + hostId: ssh_data.id, + }, + ); + } + } + } + + permissionManager.invalidateUserPermissionCache(targetUserId); + + res.json({ + success: true, + message: "Role assigned successfully", + }); + } catch (error) { + databaseLogger.error("Failed to assign role", error, { + operation: "assign_role", + targetUserId, + }); + res.status(500).json({ error: "Failed to assign role" }); + } + }, +); + +// Remove role from user +// DELETE /rbac/users/:userId/roles/:roleId +router.delete( + "/users/:userId/roles/:roleId", + authenticateJWT, + permissionManager.requireAdmin(), + async (req: AuthenticatedRequest, res: Response) => { + const targetUserId = req.params.userId; + const roleId = parseInt(req.params.roleId, 10); + + if (isNaN(roleId)) { + return res.status(400).json({ error: "Invalid role ID" }); + } + + try { + const role = await db + .select({ + id: roles.id, + name: roles.name, + isSystem: roles.isSystem, + }) + .from(roles) + .where(eq(roles.id, roleId)) + .limit(1); + + if (role.length === 0) { + return res.status(404).json({ error: "Role not found" }); + } + + if (role[0].isSystem) { + return res.status(403).json({ + error: + "System roles (admin, user) are automatically assigned and cannot be removed", + }); + } + + await db + .delete(userRoles) + .where( + and(eq(userRoles.userId, targetUserId), eq(userRoles.roleId, roleId)), + ); + + permissionManager.invalidateUserPermissionCache(targetUserId); + + res.json({ + success: true, + message: "Role removed successfully", + }); + } catch (error) { + databaseLogger.error("Failed to remove role", error, { + operation: "remove_role", + targetUserId, + roleId, + }); + res.status(500).json({ error: "Failed to remove role" }); + } + }, +); + +// Get user's roles +// GET /rbac/users/:userId/roles +router.get( + "/users/:userId/roles", + authenticateJWT, + async (req: AuthenticatedRequest, res: Response) => { + const targetUserId = req.params.userId; + const currentUserId = req.userId!; + + if ( + targetUserId !== currentUserId && + !(await permissionManager.isAdmin(currentUserId)) + ) { + return res.status(403).json({ error: "Access denied" }); + } + + try { + const userRolesList = await db + .select({ + id: userRoles.id, + roleId: roles.id, + roleName: roles.name, + roleDisplayName: roles.displayName, + description: roles.description, + isSystem: roles.isSystem, + grantedAt: userRoles.grantedAt, + }) + .from(userRoles) + .innerJoin(roles, eq(userRoles.roleId, roles.id)) + .where(eq(userRoles.userId, targetUserId)); + + res.json({ roles: userRolesList }); + } catch (error) { + databaseLogger.error("Failed to get user roles", error, { + operation: "get_user_roles", + targetUserId, + }); + res.status(500).json({ error: "Failed to get user roles" }); + } + }, +); + +export default router; diff --git a/src/backend/database/routes/ssh.ts b/src/backend/database/routes/ssh.ts index 955135a4..8e7e9086 100644 --- a/src/backend/database/routes/ssh.ts +++ b/src/backend/database/routes/ssh.ts @@ -11,13 +11,27 @@ import { sshFolders, commandHistory, recentActivity, + hostAccess, + userRoles, + sessionRecordings, } from "../db/schema.js"; -import { eq, and, desc, isNotNull, or } from "drizzle-orm"; +import { + eq, + and, + desc, + isNotNull, + or, + isNull, + gte, + sql, + inArray, +} from "drizzle-orm"; import type { Request, Response } from "express"; import multer from "multer"; import { sshLogger } from "../../utils/logger.js"; import { SimpleDBOps } from "../../utils/simple-db-ops.js"; import { AuthManager } from "../../utils/auth-manager.js"; +import { PermissionManager } from "../../utils/permission-manager.js"; import { DataCrypto } from "../../utils/data-crypto.js"; import { SystemCrypto } from "../../utils/system-crypto.js"; import { DatabaseSaveTrigger } from "../db/index.js"; @@ -35,6 +49,7 @@ function isValidPort(port: unknown): port is number { } const authManager = AuthManager.getInstance(); +const permissionManager = PermissionManager.getInstance(); const authenticateJWT = authManager.createAuthMiddleware(); const requireDataAccess = authManager.createDataAccessMiddleware(); @@ -231,10 +246,12 @@ router.post( key, keyPassword, keyType, + sudoPassword, pin, enableTerminal, enableTunnel, enableFileManager, + enableDocker, defaultPath, tunnelConnections, jumpHosts, @@ -242,7 +259,16 @@ router.post( statsConfig, terminalConfig, forceKeyboardInteractive, + notes, + useSocks5, + socks5Host, + socks5Port, + socks5Username, + socks5Password, + socks5ProxyChain, + overrideCredentialUsername, } = hostData; + if ( !isNonEmptyString(userId) || !isNonEmptyString(ip) || @@ -269,6 +295,7 @@ router.post( username, authType: effectiveAuthType, credentialId: credentialId || null, + overrideCredentialUsername: overrideCredentialUsername ? 1 : 0, pin: pin ? 1 : 0, enableTerminal: enableTerminal ? 1 : 0, enableTunnel: enableTunnel ? 1 : 0, @@ -280,10 +307,21 @@ router.post( ? JSON.stringify(quickActions) : null, enableFileManager: enableFileManager ? 1 : 0, + enableDocker: enableDocker ? 1 : 0, defaultPath: defaultPath || null, statsConfig: statsConfig ? JSON.stringify(statsConfig) : null, terminalConfig: terminalConfig ? JSON.stringify(terminalConfig) : null, forceKeyboardInteractive: forceKeyboardInteractive ? "true" : "false", + notes: notes || null, + sudoPassword: sudoPassword || null, + useSocks5: useSocks5 ? 1 : 0, + socks5Host: socks5Host || null, + socks5Port: socks5Port || null, + socks5Username: socks5Username || null, + socks5Password: socks5Password || null, + socks5ProxyChain: socks5ProxyChain + ? JSON.stringify(socks5ProxyChain) + : null, }; if (effectiveAuthType === "password") { @@ -341,12 +379,14 @@ router.post( ? JSON.parse(createdHost.jumpHosts as string) : [], enableFileManager: !!createdHost.enableFileManager, + enableDocker: !!createdHost.enableDocker, statsConfig: createdHost.statsConfig ? JSON.parse(createdHost.statsConfig as string) : undefined, }; - const resolvedHost = (await resolveHostCredentials(baseHost)) || baseHost; + const resolvedHost = + (await resolveHostCredentials(baseHost, userId)) || baseHost; sshLogger.success( `SSH host created: ${name} (${ip}:${port}) by user ${userId}`, @@ -453,10 +493,12 @@ router.put( key, keyPassword, keyType, + sudoPassword, pin, enableTerminal, enableTunnel, enableFileManager, + enableDocker, defaultPath, tunnelConnections, jumpHosts, @@ -464,7 +506,16 @@ router.put( statsConfig, terminalConfig, forceKeyboardInteractive, + notes, + useSocks5, + socks5Host, + socks5Port, + socks5Username, + socks5Password, + socks5ProxyChain, + overrideCredentialUsername, } = hostData; + if ( !isNonEmptyString(userId) || !isNonEmptyString(ip) || @@ -492,6 +543,7 @@ router.put( username, authType: effectiveAuthType, credentialId: credentialId || null, + overrideCredentialUsername: overrideCredentialUsername ? 1 : 0, pin: pin ? 1 : 0, enableTerminal: enableTerminal ? 1 : 0, enableTunnel: enableTunnel ? 1 : 0, @@ -503,10 +555,21 @@ router.put( ? JSON.stringify(quickActions) : null, enableFileManager: enableFileManager ? 1 : 0, + enableDocker: enableDocker ? 1 : 0, defaultPath: defaultPath || null, statsConfig: statsConfig ? JSON.stringify(statsConfig) : null, terminalConfig: terminalConfig ? JSON.stringify(terminalConfig) : null, forceKeyboardInteractive: forceKeyboardInteractive ? "true" : "false", + notes: notes || null, + sudoPassword: sudoPassword || null, + useSocks5: useSocks5 ? 1 : 0, + socks5Host: socks5Host || null, + socks5Port: socks5Port || null, + socks5Username: socks5Username || null, + socks5Password: socks5Password || null, + socks5ProxyChain: socks5ProxyChain + ? JSON.stringify(socks5ProxyChain) + : null, }; if (effectiveAuthType === "password") { @@ -535,23 +598,100 @@ router.put( } try { + const accessInfo = await permissionManager.canAccessHost( + userId, + Number(hostId), + "write", + ); + + if (!accessInfo.hasAccess) { + sshLogger.warn("User does not have permission to update host", { + operation: "host_update", + hostId: parseInt(hostId), + userId, + }); + return res.status(403).json({ error: "Access denied" }); + } + + if (!accessInfo.isOwner) { + sshLogger.warn("Shared user attempted to update host (view-only)", { + operation: "host_update", + hostId: parseInt(hostId), + userId, + }); + return res.status(403).json({ + error: "Only the host owner can modify host configuration", + }); + } + + const hostRecord = await db + .select({ + userId: sshData.userId, + credentialId: sshData.credentialId, + authType: sshData.authType, + }) + .from(sshData) + .where(eq(sshData.id, Number(hostId))) + .limit(1); + + if (hostRecord.length === 0) { + sshLogger.warn("Host not found for update", { + operation: "host_update", + hostId: parseInt(hostId), + userId, + }); + return res.status(404).json({ error: "Host not found" }); + } + + const ownerId = hostRecord[0].userId; + + if ( + !accessInfo.isOwner && + sshDataObj.credentialId !== undefined && + sshDataObj.credentialId !== hostRecord[0].credentialId + ) { + return res.status(403).json({ + error: "Only the host owner can change the credential", + }); + } + + if ( + !accessInfo.isOwner && + sshDataObj.authType !== undefined && + sshDataObj.authType !== hostRecord[0].authType + ) { + return res.status(403).json({ + error: "Only the host owner can change the authentication type", + }); + } + + if (sshDataObj.credentialId !== undefined) { + if ( + hostRecord[0].credentialId !== null && + sshDataObj.credentialId === null + ) { + const revokedShares = await db + .delete(hostAccess) + .where(eq(hostAccess.hostId, Number(hostId))) + .returning({ id: hostAccess.id, userId: hostAccess.userId }); + } + } + await SimpleDBOps.update( sshData, "ssh_data", - and(eq(sshData.id, Number(hostId)), eq(sshData.userId, userId)), + eq(sshData.id, Number(hostId)), sshDataObj, - userId, + ownerId, ); const updatedHosts = await SimpleDBOps.select( db .select() .from(sshData) - .where( - and(eq(sshData.id, Number(hostId)), eq(sshData.userId, userId)), - ), + .where(eq(sshData.id, Number(hostId))), "ssh_data", - userId, + ownerId, ); if (updatedHosts.length === 0) { @@ -582,12 +722,17 @@ router.put( ? JSON.parse(updatedHost.jumpHosts as string) : [], enableFileManager: !!updatedHost.enableFileManager, + enableDocker: !!updatedHost.enableDocker, statsConfig: updatedHost.statsConfig ? JSON.parse(updatedHost.statsConfig as string) : undefined, + dockerConfig: updatedHost.dockerConfig + ? JSON.parse(updatedHost.dockerConfig as string) + : undefined, }; - const resolvedHost = (await resolveHostCredentials(baseHost)) || baseHost; + const resolvedHost = + (await resolveHostCredentials(baseHost, userId)) || baseHost; sshLogger.success( `SSH host updated: ${name} (${ip}:${port}) by user ${userId}`, @@ -656,11 +801,115 @@ router.get( return res.status(400).json({ error: "Invalid userId" }); } try { - const data = await SimpleDBOps.select( - db.select().from(sshData).where(eq(sshData.userId, userId)), - "ssh_data", - userId, - ); + const now = new Date().toISOString(); + + const userRoleIds = await db + .select({ roleId: userRoles.roleId }) + .from(userRoles) + .where(eq(userRoles.userId, userId)); + const roleIds = userRoleIds.map((r) => r.roleId); + + const rawData = await db + .select({ + id: sshData.id, + userId: sshData.userId, + name: sshData.name, + ip: sshData.ip, + port: sshData.port, + username: sshData.username, + folder: sshData.folder, + tags: sshData.tags, + pin: sshData.pin, + authType: sshData.authType, + password: sshData.password, + key: sshData.key, + keyPassword: sshData.key_password, + keyType: sshData.keyType, + enableTerminal: sshData.enableTerminal, + enableTunnel: sshData.enableTunnel, + tunnelConnections: sshData.tunnelConnections, + jumpHosts: sshData.jumpHosts, + enableFileManager: sshData.enableFileManager, + defaultPath: sshData.defaultPath, + autostartPassword: sshData.autostartPassword, + autostartKey: sshData.autostartKey, + autostartKeyPassword: sshData.autostartKeyPassword, + forceKeyboardInteractive: sshData.forceKeyboardInteractive, + statsConfig: sshData.statsConfig, + terminalConfig: sshData.terminalConfig, + createdAt: sshData.createdAt, + updatedAt: sshData.updatedAt, + credentialId: sshData.credentialId, + overrideCredentialUsername: sshData.overrideCredentialUsername, + quickActions: sshData.quickActions, + notes: sshData.notes, + enableDocker: sshData.enableDocker, + useSocks5: sshData.useSocks5, + socks5Host: sshData.socks5Host, + socks5Port: sshData.socks5Port, + socks5Username: sshData.socks5Username, + socks5Password: sshData.socks5Password, + socks5ProxyChain: sshData.socks5ProxyChain, + + ownerId: sshData.userId, + isShared: sql`${hostAccess.id} IS NOT NULL`, + permissionLevel: hostAccess.permissionLevel, + expiresAt: hostAccess.expiresAt, + }) + .from(sshData) + .leftJoin( + hostAccess, + and( + eq(hostAccess.hostId, sshData.id), + or( + eq(hostAccess.userId, userId), + roleIds.length > 0 + ? inArray(hostAccess.roleId, roleIds) + : sql`false`, + ), + or(isNull(hostAccess.expiresAt), gte(hostAccess.expiresAt, now)), + ), + ) + .where( + or( + eq(sshData.userId, userId), + and( + eq(hostAccess.userId, userId), + or(isNull(hostAccess.expiresAt), gte(hostAccess.expiresAt, now)), + ), + roleIds.length > 0 + ? and( + inArray(hostAccess.roleId, roleIds), + or( + isNull(hostAccess.expiresAt), + gte(hostAccess.expiresAt, now), + ), + ) + : sql`false`, + ), + ); + + const ownHosts = rawData.filter((row) => row.userId === userId); + const sharedHosts = rawData.filter((row) => row.userId !== userId); + + let decryptedOwnHosts: any[] = []; + try { + decryptedOwnHosts = await SimpleDBOps.select( + Promise.resolve(ownHosts), + "ssh_data", + userId, + ); + } catch (decryptError) { + sshLogger.error("Failed to decrypt own hosts", decryptError, { + operation: "host_fetch_own_decrypt_failed", + userId, + }); + decryptedOwnHosts = []; + } + + const sanitizedSharedHosts = sharedHosts; + + const data = [...decryptedOwnHosts, ...sanitizedSharedHosts]; const result = await Promise.all( data.map(async (row: Record) => { @@ -683,6 +932,7 @@ router.get( ? JSON.parse(row.quickActions as string) : [], enableFileManager: !!row.enableFileManager, + enableDocker: !!row.enableDocker, statsConfig: row.statsConfig ? JSON.parse(row.statsConfig as string) : undefined, @@ -690,9 +940,18 @@ router.get( ? JSON.parse(row.terminalConfig as string) : undefined, forceKeyboardInteractive: row.forceKeyboardInteractive === "true", + socks5ProxyChain: row.socks5ProxyChain + ? JSON.parse(row.socks5ProxyChain as string) + : [], + + isShared: !!row.isShared, + permissionLevel: row.permissionLevel || undefined, + sharedExpiresAt: row.expiresAt || undefined, }; - return (await resolveHostCredentials(baseHost)) || baseHost; + const resolved = + (await resolveHostCredentials(baseHost, userId)) || baseHost; + return resolved; }), ); @@ -765,9 +1024,12 @@ router.get( ? JSON.parse(host.terminalConfig) : undefined, forceKeyboardInteractive: host.forceKeyboardInteractive === "true", + socks5ProxyChain: host.socks5ProxyChain + ? JSON.parse(host.socks5ProxyChain) + : [], }; - res.json((await resolveHostCredentials(result)) || result); + res.json((await resolveHostCredentials(result, userId)) || result); } catch (err) { sshLogger.error("Failed to fetch SSH host by ID from database", err, { operation: "host_fetch_by_id", @@ -811,7 +1073,7 @@ router.get( const host = hosts[0]; - const resolvedHost = (await resolveHostCredentials(host)) || host; + const resolvedHost = (await resolveHostCredentials(host, userId)) || host; const exportData = { name: resolvedHost.name, @@ -836,6 +1098,9 @@ router.get( tunnelConnections: resolvedHost.tunnelConnections ? JSON.parse(resolvedHost.tunnelConnections as string) : [], + socks5ProxyChain: resolvedHost.socks5ProxyChain + ? JSON.parse(resolvedHost.socks5ProxyChain as string) + : [], }; sshLogger.success("Host exported with decrypted credentials", { @@ -893,57 +1158,33 @@ router.delete( await db .delete(fileManagerRecent) - .where( - and( - eq(fileManagerRecent.hostId, numericHostId), - eq(fileManagerRecent.userId, userId), - ), - ); + .where(eq(fileManagerRecent.hostId, numericHostId)); await db .delete(fileManagerPinned) - .where( - and( - eq(fileManagerPinned.hostId, numericHostId), - eq(fileManagerPinned.userId, userId), - ), - ); + .where(eq(fileManagerPinned.hostId, numericHostId)); await db .delete(fileManagerShortcuts) - .where( - and( - eq(fileManagerShortcuts.hostId, numericHostId), - eq(fileManagerShortcuts.userId, userId), - ), - ); + .where(eq(fileManagerShortcuts.hostId, numericHostId)); await db .delete(commandHistory) - .where( - and( - eq(commandHistory.hostId, numericHostId), - eq(commandHistory.userId, userId), - ), - ); + .where(eq(commandHistory.hostId, numericHostId)); await db .delete(sshCredentialUsage) - .where( - and( - eq(sshCredentialUsage.hostId, numericHostId), - eq(sshCredentialUsage.userId, userId), - ), - ); + .where(eq(sshCredentialUsage.hostId, numericHostId)); await db .delete(recentActivity) - .where( - and( - eq(recentActivity.hostId, numericHostId), - eq(recentActivity.userId, userId), - ), - ); + .where(eq(recentActivity.hostId, numericHostId)); + + await db.delete(hostAccess).where(eq(hostAccess.hostId, numericHostId)); + + await db + .delete(sessionRecordings) + .where(eq(sessionRecordings.hostId, numericHostId)); await db .delete(sshData) @@ -1450,11 +1691,54 @@ router.delete( async function resolveHostCredentials( host: Record, + requestingUserId?: string, ): Promise> { try { - if (host.credentialId && host.userId) { + if (host.credentialId && (host.userId || host.ownerId)) { const credentialId = host.credentialId as number; - const userId = host.userId as string; + const ownerId = (host.ownerId || host.userId) as string; + + if (requestingUserId && requestingUserId !== ownerId) { + try { + const { SharedCredentialManager } = + await import("../../utils/shared-credential-manager.js"); + const sharedCredManager = SharedCredentialManager.getInstance(); + const sharedCred = await sharedCredManager.getSharedCredentialForUser( + host.id as number, + requestingUserId, + ); + + if (sharedCred) { + const resolvedHost: Record = { + ...host, + authType: sharedCred.authType, + password: sharedCred.password, + key: sharedCred.key, + keyPassword: sharedCred.keyPassword, + keyType: sharedCred.keyType, + }; + + if (!host.overrideCredentialUsername) { + resolvedHost.username = sharedCred.username; + } + + return resolvedHost; + } + } catch (sharedCredError) { + sshLogger.warn( + "Failed to get shared credential, falling back to owner credential", + { + operation: "resolve_shared_credential_fallback", + hostId: host.id as number, + requestingUserId, + error: + sharedCredError instanceof Error + ? sharedCredError.message + : "Unknown error", + }, + ); + } + } const credentials = await SimpleDBOps.select( db @@ -1463,24 +1747,29 @@ async function resolveHostCredentials( .where( and( eq(sshCredentials.id, credentialId), - eq(sshCredentials.userId, userId), + eq(sshCredentials.userId, ownerId), ), ), "ssh_credentials", - userId, + ownerId, ); if (credentials.length > 0) { const credential = credentials[0]; - return { + const resolvedHost: Record = { ...host, - username: credential.username, authType: credential.auth_type || credential.authType, password: credential.password, key: credential.key, keyPassword: credential.key_password || credential.keyPassword, keyType: credential.key_type || credential.keyType, }; + + if (!host.overrideCredentialUsername) { + resolvedHost.username = credential.username; + } + + return resolvedHost; } } @@ -1680,6 +1969,40 @@ router.delete( }); } + const hostIds = hostsToDelete.map((host) => host.id); + + if (hostIds.length > 0) { + await db + .delete(fileManagerRecent) + .where(inArray(fileManagerRecent.hostId, hostIds)); + + await db + .delete(fileManagerPinned) + .where(inArray(fileManagerPinned.hostId, hostIds)); + + await db + .delete(fileManagerShortcuts) + .where(inArray(fileManagerShortcuts.hostId, hostIds)); + + await db + .delete(commandHistory) + .where(inArray(commandHistory.hostId, hostIds)); + + await db + .delete(sshCredentialUsage) + .where(inArray(sshCredentialUsage.hostId, hostIds)); + + await db + .delete(recentActivity) + .where(inArray(recentActivity.hostId, hostIds)); + + await db.delete(hostAccess).where(inArray(hostAccess.hostId, hostIds)); + + await db + .delete(sessionRecordings) + .where(inArray(sessionRecordings.hostId, hostIds)); + } + await db .delete(sshData) .where(and(eq(sshData.userId, userId), eq(sshData.folder, folderName))); @@ -1782,10 +2105,12 @@ router.post( continue; } - if (!["password", "key", "credential"].includes(hostData.authType)) { + if ( + !["password", "key", "credential", "none"].includes(hostData.authType) + ) { results.failed++; results.errors.push( - `Host ${i + 1}: Invalid authType. Must be 'password', 'key', or 'credential'`, + `Host ${i + 1}: Invalid authType. Must be 'password', 'key', 'credential', or 'none'`, ); continue; } @@ -1840,13 +2165,38 @@ router.post( enableTerminal: hostData.enableTerminal !== false, enableTunnel: hostData.enableTunnel !== false, enableFileManager: hostData.enableFileManager !== false, + enableDocker: hostData.enableDocker || false, defaultPath: hostData.defaultPath || "/", tunnelConnections: hostData.tunnelConnections ? JSON.stringify(hostData.tunnelConnections) : "[]", + jumpHosts: hostData.jumpHosts + ? JSON.stringify(hostData.jumpHosts) + : null, + quickActions: hostData.quickActions + ? JSON.stringify(hostData.quickActions) + : null, statsConfig: hostData.statsConfig ? JSON.stringify(hostData.statsConfig) : null, + terminalConfig: hostData.terminalConfig + ? JSON.stringify(hostData.terminalConfig) + : null, + forceKeyboardInteractive: hostData.forceKeyboardInteractive + ? "true" + : "false", + notes: hostData.notes || null, + useSocks5: hostData.useSocks5 ? 1 : 0, + socks5Host: hostData.socks5Host || null, + socks5Port: hostData.socks5Port || null, + socks5Username: hostData.socks5Username || null, + socks5Password: hostData.socks5Password || null, + socks5ProxyChain: hostData.socks5ProxyChain + ? JSON.stringify(hostData.socks5ProxyChain) + : null, + overrideCredentialUsername: hostData.overrideCredentialUsername + ? 1 + : 0, createdAt: new Date().toISOString(), updatedAt: new Date().toISOString(), }; diff --git a/src/backend/database/routes/users.ts b/src/backend/database/routes/users.ts index 473654d9..7d896ca7 100644 --- a/src/backend/database/routes/users.ts +++ b/src/backend/database/routes/users.ts @@ -15,6 +15,11 @@ import { sshCredentialUsage, recentActivity, snippets, + snippetFolders, + sshFolders, + commandHistory, + roles, + userRoles, } from "../db/schema.js"; import { eq, and } from "drizzle-orm"; import bcrypt from "bcryptjs"; @@ -134,6 +139,54 @@ function isNonEmptyString(val: unknown): val is string { const authenticateJWT = authManager.createAuthMiddleware(); const requireAdmin = authManager.createAdminMiddleware(); +async function deleteUserAndRelatedData(userId: string): Promise { + try { + await db + .delete(sshCredentialUsage) + .where(eq(sshCredentialUsage.userId, userId)); + + await db + .delete(fileManagerRecent) + .where(eq(fileManagerRecent.userId, userId)); + await db + .delete(fileManagerPinned) + .where(eq(fileManagerPinned.userId, userId)); + await db + .delete(fileManagerShortcuts) + .where(eq(fileManagerShortcuts.userId, userId)); + + await db.delete(recentActivity).where(eq(recentActivity.userId, userId)); + await db.delete(dismissedAlerts).where(eq(dismissedAlerts.userId, userId)); + + await db.delete(snippets).where(eq(snippets.userId, userId)); + await db.delete(snippetFolders).where(eq(snippetFolders.userId, userId)); + + await db.delete(sshFolders).where(eq(sshFolders.userId, userId)); + + await db.delete(commandHistory).where(eq(commandHistory.userId, userId)); + + await db.delete(sshData).where(eq(sshData.userId, userId)); + await db.delete(sshCredentials).where(eq(sshCredentials.userId, userId)); + + db.$client + .prepare("DELETE FROM settings WHERE key LIKE ?") + .run(`user_%_${userId}`); + + await db.delete(users).where(eq(users.id, userId)); + + authLogger.success("User and all related data deleted successfully", { + operation: "delete_user_and_related_data_complete", + userId, + }); + } catch (error) { + authLogger.error("Failed to delete user and related data", error, { + operation: "delete_user_and_related_data_failed", + userId, + }); + throw error; + } +} + // Route: Create traditional user (username/password) // POST /users/create router.post("/create", async (req, res) => { @@ -210,6 +263,34 @@ router.post("/create", async (req, res) => { totp_backup_codes: null, }); + try { + const defaultRoleName = isFirstUser ? "admin" : "user"; + const defaultRole = await db + .select({ id: roles.id }) + .from(roles) + .where(eq(roles.name, defaultRoleName)) + .limit(1); + + if (defaultRole.length > 0) { + await db.insert(userRoles).values({ + userId: id, + roleId: defaultRole[0].id, + grantedBy: id, + }); + } else { + authLogger.warn("Default role not found during user registration", { + operation: "assign_default_role", + userId: id, + roleName: defaultRoleName, + }); + } + } catch (roleError) { + authLogger.error("Failed to assign default role", roleError, { + operation: "assign_default_role", + userId: id, + }); + } + try { await authManager.registerUser(id, password); } catch (encryptionError) { @@ -816,6 +897,41 @@ router.get("/oidc/callback", async (req, res) => { scopes: String(config.scopes), }); + try { + const defaultRoleName = isFirstUser ? "admin" : "user"; + const defaultRole = await db + .select({ id: roles.id }) + .from(roles) + .where(eq(roles.name, defaultRoleName)) + .limit(1); + + if (defaultRole.length > 0) { + await db.insert(userRoles).values({ + userId: id, + roleId: defaultRole[0].id, + grantedBy: id, + }); + } else { + authLogger.warn( + "Default role not found during OIDC user registration", + { + operation: "assign_default_role_oidc", + userId: id, + roleName: defaultRoleName, + }, + ); + } + } catch (roleError) { + authLogger.error( + "Failed to assign default role to OIDC user", + roleError, + { + operation: "assign_default_role_oidc", + userId: id, + }, + ); + } + try { const sessionDurationMs = deviceInfo.type === "desktop" || deviceInfo.type === "mobile" @@ -1055,6 +1171,19 @@ router.post("/login", async (req, res) => { return res.status(401).json({ error: "Incorrect password" }); } + try { + const { SharedCredentialManager } = + await import("../../utils/shared-credential-manager.js"); + const sharedCredManager = SharedCredentialManager.getInstance(); + await sharedCredManager.reEncryptPendingCredentialsForUser(userRecord.id); + } catch (error) { + authLogger.warn("Failed to re-encrypt pending shared credentials", { + operation: "reencrypt_pending_credentials", + userId: userRecord.id, + error, + }); + } + if (userRecord.totp_enabled) { const tempToken = await authManager.generateJWTToken(userRecord.id, { pendingTOTP: true, @@ -1128,15 +1257,7 @@ router.post("/logout", authenticateJWT, async (req, res) => { try { const payload = await authManager.verifyJWTToken(token); sessionId = payload?.sessionId; - } catch (error) { - authLogger.debug( - "Token verification failed during logout (expected if token expired)", - { - operation: "logout_token_verify_failed", - userId, - }, - ); - } + } catch (error) {} } await authManager.logoutUser(userId, sessionId); @@ -2252,36 +2373,8 @@ router.delete("/delete-user", authenticateJWT, async (req, res) => { const targetUserId = targetUser[0].id; - try { - await db - .delete(sshCredentialUsage) - .where(eq(sshCredentialUsage.userId, targetUserId)); - await db - .delete(fileManagerRecent) - .where(eq(fileManagerRecent.userId, targetUserId)); - await db - .delete(fileManagerPinned) - .where(eq(fileManagerPinned.userId, targetUserId)); - await db - .delete(fileManagerShortcuts) - .where(eq(fileManagerShortcuts.userId, targetUserId)); - await db - .delete(recentActivity) - .where(eq(recentActivity.userId, targetUserId)); - await db - .delete(dismissedAlerts) - .where(eq(dismissedAlerts.userId, targetUserId)); - await db.delete(snippets).where(eq(snippets.userId, targetUserId)); - await db.delete(sshData).where(eq(sshData.userId, targetUserId)); - await db - .delete(sshCredentials) - .where(eq(sshCredentials.userId, targetUserId)); - } catch (cleanupError) { - authLogger.error(`Cleanup failed for user ${username}:`, cleanupError); - throw cleanupError; - } - - await db.delete(users).where(eq(users.id, targetUserId)); + // Use the comprehensive deletion utility + await deleteUserAndRelatedData(targetUserId); authLogger.success( `User ${username} deleted by admin ${adminUser[0].username}`, @@ -2696,15 +2789,7 @@ router.post("/link-oidc-to-password", authenticateJWT, async (req, res) => { await authManager.revokeAllUserSessions(oidcUserId); authManager.logoutUser(oidcUserId); - await db - .delete(recentActivity) - .where(eq(recentActivity.userId, oidcUserId)); - - await db.delete(users).where(eq(users.id, oidcUserId)); - - db.$client - .prepare("DELETE FROM settings WHERE key LIKE ?") - .run(`user_%_${oidcUserId}`); + await deleteUserAndRelatedData(oidcUserId); try { const { saveMemoryDatabaseToFile } = await import("../db/index.js"); diff --git a/scripts/enable-ssl.sh b/src/backend/scripts/enable-ssl.sh similarity index 100% rename from scripts/enable-ssl.sh rename to src/backend/scripts/enable-ssl.sh diff --git a/scripts/setup-ssl.sh b/src/backend/scripts/setup-ssl.sh similarity index 100% rename from scripts/setup-ssl.sh rename to src/backend/scripts/setup-ssl.sh diff --git a/src/backend/ssh/docker-console.ts b/src/backend/ssh/docker-console.ts new file mode 100644 index 00000000..d6f7a6e1 --- /dev/null +++ b/src/backend/ssh/docker-console.ts @@ -0,0 +1,632 @@ +import { Client as SSHClient } from "ssh2"; +import { WebSocketServer, WebSocket } from "ws"; +import { parse as parseUrl } from "url"; +import { AuthManager } from "../utils/auth-manager.js"; +import { sshData, sshCredentials } from "../database/db/schema.js"; +import { and, eq } from "drizzle-orm"; +import { getDb } from "../database/db/index.js"; +import { SimpleDBOps } from "../utils/simple-db-ops.js"; +import { systemLogger } from "../utils/logger.js"; +import type { SSHHost } from "../../types/index.js"; + +const dockerConsoleLogger = systemLogger; + +interface SSHSession { + client: SSHClient; + stream: any; + isConnected: boolean; + containerId?: string; + shell?: string; +} + +const activeSessions = new Map(); + +const wss = new WebSocketServer({ + host: "0.0.0.0", + port: 30008, + verifyClient: async (info) => { + try { + const url = parseUrl(info.req.url || "", true); + const token = url.query.token as string; + + if (!token) { + return false; + } + + const authManager = AuthManager.getInstance(); + const decoded = await authManager.verifyJWTToken(token); + + if (!decoded || !decoded.userId) { + return false; + } + + return true; + } catch (error) { + return false; + } + }, +}); + +async function detectShell( + session: SSHSession, + containerId: string, +): Promise { + const shells = ["bash", "sh", "ash"]; + + for (const shell of shells) { + try { + await new Promise((resolve, reject) => { + session.client.exec( + `docker exec ${containerId} which ${shell}`, + (err, stream) => { + if (err) return reject(err); + + let output = ""; + stream.on("data", (data: Buffer) => { + output += data.toString(); + }); + + stream.on("close", (code: number) => { + if (code === 0 && output.trim()) { + resolve(); + } else { + reject(new Error(`Shell ${shell} not found`)); + } + }); + + stream.stderr.on("data", () => { + // Ignore stderr + }); + }, + ); + }); + + return shell; + } catch { + continue; + } + } + + return "sh"; +} + +async function createJumpHostChain( + jumpHosts: any[], + userId: string, +): Promise { + if (!jumpHosts || jumpHosts.length === 0) { + return null; + } + + let currentClient: SSHClient | null = null; + + for (let i = 0; i < jumpHosts.length; i++) { + const jumpHostId = jumpHosts[i].hostId; + + const jumpHostData = await SimpleDBOps.select( + getDb() + .select() + .from(sshData) + .where(and(eq(sshData.id, jumpHostId), eq(sshData.userId, userId))), + "ssh_data", + userId, + ); + + if (jumpHostData.length === 0) { + throw new Error(`Jump host ${jumpHostId} not found`); + } + + const jumpHost = jumpHostData[0] as unknown as SSHHost; + if (typeof jumpHost.jumpHosts === "string" && jumpHost.jumpHosts) { + try { + jumpHost.jumpHosts = JSON.parse(jumpHost.jumpHosts); + } catch (e) { + dockerConsoleLogger.error("Failed to parse jump hosts", e, { + hostId: jumpHost.id, + }); + jumpHost.jumpHosts = []; + } + } + + let resolvedCredentials: any = { + password: jumpHost.password, + sshKey: jumpHost.key, + keyPassword: jumpHost.keyPassword, + authType: jumpHost.authType, + }; + + if (jumpHost.credentialId) { + const credentials = await SimpleDBOps.select( + getDb() + .select() + .from(sshCredentials) + .where( + and( + eq(sshCredentials.id, jumpHost.credentialId as number), + eq(sshCredentials.userId, userId), + ), + ), + "ssh_credentials", + userId, + ); + + if (credentials.length > 0) { + const credential = credentials[0]; + resolvedCredentials = { + password: credential.password, + sshKey: + credential.private_key || credential.privateKey || credential.key, + keyPassword: credential.key_password || credential.keyPassword, + authType: credential.auth_type || credential.authType, + }; + } + } + + const client = new SSHClient(); + + const config: any = { + host: jumpHost.ip, + port: jumpHost.port || 22, + username: jumpHost.username, + tryKeyboard: true, + readyTimeout: 60000, + keepaliveInterval: 30000, + keepaliveCountMax: 120, + tcpKeepAlive: true, + tcpKeepAliveInitialDelay: 30000, + }; + + if ( + resolvedCredentials.authType === "password" && + resolvedCredentials.password + ) { + config.password = resolvedCredentials.password; + } else if ( + resolvedCredentials.authType === "key" && + resolvedCredentials.sshKey + ) { + const cleanKey = resolvedCredentials.sshKey + .trim() + .replace(/\r\n/g, "\n") + .replace(/\r/g, "\n"); + config.privateKey = Buffer.from(cleanKey, "utf8"); + if (resolvedCredentials.keyPassword) { + config.passphrase = resolvedCredentials.keyPassword; + } + } + + if (currentClient) { + await new Promise((resolve, reject) => { + currentClient!.forwardOut( + "127.0.0.1", + 0, + jumpHost.ip, + jumpHost.port || 22, + (err, stream) => { + if (err) return reject(err); + config.sock = stream; + resolve(); + }, + ); + }); + } + + await new Promise((resolve, reject) => { + client.on("ready", () => resolve()); + client.on("error", reject); + client.connect(config); + }); + + currentClient = client; + } + + return currentClient; +} + +wss.on("connection", async (ws: WebSocket, req) => { + const userId = (req as any).userId; + const sessionId = `docker-console-${Date.now()}-${Math.random()}`; + + let sshSession: SSHSession | null = null; + + ws.on("message", async (data) => { + try { + const message = JSON.parse(data.toString()); + + switch (message.type) { + case "connect": { + const { hostConfig, containerId, shell, cols, rows } = + message.data as { + hostConfig: SSHHost; + containerId: string; + shell?: string; + cols?: number; + rows?: number; + }; + + if ( + typeof hostConfig.jumpHosts === "string" && + hostConfig.jumpHosts + ) { + try { + hostConfig.jumpHosts = JSON.parse(hostConfig.jumpHosts); + } catch (e) { + dockerConsoleLogger.error("Failed to parse jump hosts", e, { + hostId: hostConfig.id, + }); + hostConfig.jumpHosts = []; + } + } + + if (!hostConfig || !containerId) { + ws.send( + JSON.stringify({ + type: "error", + message: "Host configuration and container ID are required", + }), + ); + return; + } + + if (!hostConfig.enableDocker) { + ws.send( + JSON.stringify({ + type: "error", + message: + "Docker is not enabled for this host. Enable it in Host Settings.", + }), + ); + return; + } + + try { + let resolvedCredentials: any = { + password: hostConfig.password, + sshKey: hostConfig.key, + keyPassword: hostConfig.keyPassword, + authType: hostConfig.authType, + }; + + if (hostConfig.credentialId) { + const credentials = await SimpleDBOps.select( + getDb() + .select() + .from(sshCredentials) + .where( + and( + eq(sshCredentials.id, hostConfig.credentialId as number), + eq(sshCredentials.userId, userId), + ), + ), + "ssh_credentials", + userId, + ); + + if (credentials.length > 0) { + const credential = credentials[0]; + resolvedCredentials = { + password: credential.password, + sshKey: + credential.private_key || + credential.privateKey || + credential.key, + keyPassword: + credential.key_password || credential.keyPassword, + authType: credential.auth_type || credential.authType, + }; + } + } + + const client = new SSHClient(); + + const config: any = { + host: hostConfig.ip, + port: hostConfig.port || 22, + username: hostConfig.username, + tryKeyboard: true, + readyTimeout: 60000, + keepaliveInterval: 30000, + keepaliveCountMax: 120, + tcpKeepAlive: true, + tcpKeepAliveInitialDelay: 30000, + }; + + if ( + resolvedCredentials.authType === "password" && + resolvedCredentials.password + ) { + config.password = resolvedCredentials.password; + } else if ( + resolvedCredentials.authType === "key" && + resolvedCredentials.sshKey + ) { + const cleanKey = resolvedCredentials.sshKey + .trim() + .replace(/\r\n/g, "\n") + .replace(/\r/g, "\n"); + config.privateKey = Buffer.from(cleanKey, "utf8"); + if (resolvedCredentials.keyPassword) { + config.passphrase = resolvedCredentials.keyPassword; + } + } + + if (hostConfig.jumpHosts && hostConfig.jumpHosts.length > 0) { + const jumpClient = await createJumpHostChain( + hostConfig.jumpHosts, + userId, + ); + if (jumpClient) { + const stream = await new Promise((resolve, reject) => { + jumpClient.forwardOut( + "127.0.0.1", + 0, + hostConfig.ip, + hostConfig.port || 22, + (err, stream) => { + if (err) return reject(err); + resolve(stream); + }, + ); + }); + config.sock = stream; + } + } + + await new Promise((resolve, reject) => { + client.on("ready", () => resolve()); + client.on("error", reject); + client.connect(config); + }); + + sshSession = { + client, + stream: null, + isConnected: true, + containerId, + }; + + activeSessions.set(sessionId, sshSession); + + let shellToUse = shell || "bash"; + + if (shell) { + try { + await new Promise((resolve, reject) => { + client.exec( + `docker exec ${containerId} which ${shell}`, + (err, stream) => { + if (err) return reject(err); + + let output = ""; + stream.on("data", (data: Buffer) => { + output += data.toString(); + }); + + stream.on("close", (code: number) => { + if (code === 0 && output.trim()) { + resolve(); + } else { + reject(new Error(`Shell ${shell} not available`)); + } + }); + + stream.stderr.on("data", () => { + // Ignore stderr + }); + }, + ); + }); + } catch { + dockerConsoleLogger.warn( + `Requested shell ${shell} not found, detecting available shell`, + { + operation: "shell_validation", + sessionId, + containerId, + requestedShell: shell, + }, + ); + shellToUse = await detectShell(sshSession, containerId); + } + } else { + shellToUse = await detectShell(sshSession, containerId); + } + + sshSession.shell = shellToUse; + + const execCommand = `docker exec -it ${containerId} /bin/${shellToUse}`; + + client.exec( + execCommand, + { + pty: { + term: "xterm-256color", + cols: cols || 80, + rows: rows || 24, + }, + }, + (err, stream) => { + if (err) { + dockerConsoleLogger.error( + "Failed to create docker exec", + err, + { + operation: "docker_exec", + sessionId, + containerId, + }, + ); + + ws.send( + JSON.stringify({ + type: "error", + message: `Failed to start console: ${err.message}`, + }), + ); + return; + } + + sshSession!.stream = stream; + + stream.on("data", (data: Buffer) => { + if (ws.readyState === WebSocket.OPEN) { + ws.send( + JSON.stringify({ + type: "output", + data: data.toString("utf8"), + }), + ); + } + }); + + stream.stderr.on("data", (data: Buffer) => {}); + + stream.on("close", () => { + if (ws.readyState === WebSocket.OPEN) { + ws.send( + JSON.stringify({ + type: "disconnected", + message: "Console session ended", + }), + ); + } + + if (sshSession) { + sshSession.client.end(); + activeSessions.delete(sessionId); + } + }); + + ws.send( + JSON.stringify({ + type: "connected", + data: { + shell: shellToUse, + requestedShell: shell, + shellChanged: shell && shell !== shellToUse, + }, + }), + ); + }, + ); + } catch (error) { + dockerConsoleLogger.error("Failed to connect to container", error, { + operation: "console_connect", + sessionId, + containerId: message.data.containerId, + }); + + ws.send( + JSON.stringify({ + type: "error", + message: + error instanceof Error + ? error.message + : "Failed to connect to container", + }), + ); + } + break; + } + + case "input": { + if (sshSession && sshSession.stream) { + sshSession.stream.write(message.data); + } + break; + } + + case "resize": { + if (sshSession && sshSession.stream) { + const { cols, rows } = message.data; + sshSession.stream.setWindow(rows, cols); + } + break; + } + + case "disconnect": { + if (sshSession) { + if (sshSession.stream) { + sshSession.stream.end(); + } + sshSession.client.end(); + activeSessions.delete(sessionId); + + ws.send( + JSON.stringify({ + type: "disconnected", + message: "Disconnected from container", + }), + ); + } + break; + } + + case "ping": { + if (ws.readyState === WebSocket.OPEN) { + ws.send(JSON.stringify({ type: "pong" })); + } + break; + } + + default: + dockerConsoleLogger.warn("Unknown message type", { + operation: "ws_message", + type: message.type, + }); + } + } catch (error) { + dockerConsoleLogger.error("WebSocket message error", error, { + operation: "ws_message", + sessionId, + }); + + ws.send( + JSON.stringify({ + type: "error", + message: error instanceof Error ? error.message : "An error occurred", + }), + ); + } + }); + + ws.on("close", () => { + if (sshSession) { + if (sshSession.stream) { + sshSession.stream.end(); + } + sshSession.client.end(); + activeSessions.delete(sessionId); + } + }); + + ws.on("error", (error) => { + dockerConsoleLogger.error("WebSocket error", error, { + operation: "ws_error", + sessionId, + }); + + if (sshSession) { + if (sshSession.stream) { + sshSession.stream.end(); + } + sshSession.client.end(); + activeSessions.delete(sessionId); + } + }); +}); + +process.on("SIGTERM", () => { + activeSessions.forEach((session, sessionId) => { + if (session.stream) { + session.stream.end(); + } + session.client.end(); + }); + + activeSessions.clear(); + + wss.close(() => { + process.exit(0); + }); +}); diff --git a/src/backend/ssh/docker.ts b/src/backend/ssh/docker.ts new file mode 100644 index 00000000..ee984be4 --- /dev/null +++ b/src/backend/ssh/docker.ts @@ -0,0 +1,1904 @@ +import express from "express"; +import cors from "cors"; +import cookieParser from "cookie-parser"; +import axios from "axios"; +import { Client as SSHClient } from "ssh2"; +import type { ClientChannel } from "ssh2"; +import { getDb } from "../database/db/index.js"; +import { sshData, sshCredentials } from "../database/db/schema.js"; +import { eq, and } from "drizzle-orm"; +import { logger } from "../utils/logger.js"; +import { SimpleDBOps } from "../utils/simple-db-ops.js"; +import { AuthManager } from "../utils/auth-manager.js"; +import { createSocks5Connection } from "../utils/socks5-helper.js"; +import type { AuthenticatedRequest, SSHHost } from "../../types/index.js"; + +const dockerLogger = logger; + +interface SSHSession { + client: SSHClient; + isConnected: boolean; + lastActive: number; + timeout?: NodeJS.Timeout; + activeOperations: number; + hostId?: number; +} + +interface PendingTOTPSession { + client: SSHClient; + finish: (responses: string[]) => void; + config: any; + createdAt: number; + sessionId: string; + hostId?: number; + ip?: string; + port?: number; + username?: string; + userId?: string; + prompts?: Array<{ prompt: string; echo: boolean }>; + totpPromptIndex?: number; + resolvedPassword?: string; + totpAttempts: number; +} + +const sshSessions: Record = {}; +const pendingTOTPSessions: Record = {}; + +const SESSION_IDLE_TIMEOUT = 60 * 60 * 1000; + +setInterval(() => { + const now = Date.now(); + Object.keys(pendingTOTPSessions).forEach((sessionId) => { + const session = pendingTOTPSessions[sessionId]; + if (now - session.createdAt > 180000) { + try { + session.client.end(); + } catch {} + delete pendingTOTPSessions[sessionId]; + } + }); +}, 60000); + +function cleanupSession(sessionId: string) { + const session = sshSessions[sessionId]; + if (session) { + if (session.activeOperations > 0) { + dockerLogger.warn( + `Deferring session cleanup for ${sessionId} - ${session.activeOperations} active operations`, + { + operation: "cleanup_deferred", + sessionId, + activeOperations: session.activeOperations, + }, + ); + scheduleSessionCleanup(sessionId); + return; + } + + try { + session.client.end(); + } catch (error) {} + clearTimeout(session.timeout); + delete sshSessions[sessionId]; + } +} + +function scheduleSessionCleanup(sessionId: string) { + const session = sshSessions[sessionId]; + if (session) { + if (session.timeout) clearTimeout(session.timeout); + + session.timeout = setTimeout(() => { + cleanupSession(sessionId); + }, SESSION_IDLE_TIMEOUT); + } +} + +async function resolveJumpHost( + hostId: number, + userId: string, +): Promise { + try { + const hosts = await SimpleDBOps.select( + getDb() + .select() + .from(sshData) + .where(and(eq(sshData.id, hostId), eq(sshData.userId, userId))), + "ssh_data", + userId, + ); + + if (hosts.length === 0) { + return null; + } + + const host = hosts[0]; + + if (host.credentialId) { + const credentials = await SimpleDBOps.select( + getDb() + .select() + .from(sshCredentials) + .where( + and( + eq(sshCredentials.id, host.credentialId as number), + eq(sshCredentials.userId, userId), + ), + ), + "ssh_credentials", + userId, + ); + + if (credentials.length > 0) { + const credential = credentials[0]; + return { + ...host, + password: credential.password, + key: + credential.private_key || credential.privateKey || credential.key, + keyPassword: credential.key_password || credential.keyPassword, + keyType: credential.key_type || credential.keyType, + authType: credential.auth_type || credential.authType, + }; + } + } + + return host; + } catch (error) { + dockerLogger.error("Failed to resolve jump host", error, { + operation: "resolve_jump_host", + hostId, + userId, + }); + return null; + } +} + +async function createJumpHostChain( + jumpHosts: Array<{ hostId: number }>, + userId: string, +): Promise { + if (!jumpHosts || jumpHosts.length === 0) { + return null; + } + + let currentClient: SSHClient | null = null; + const clients: SSHClient[] = []; + + try { + const jumpHostConfigs = await Promise.all( + jumpHosts.map((jh) => resolveJumpHost(jh.hostId, userId)), + ); + + for (let i = 0; i < jumpHostConfigs.length; i++) { + if (!jumpHostConfigs[i]) { + dockerLogger.error(`Jump host ${i + 1} not found`, undefined, { + operation: "jump_host_chain", + hostId: jumpHosts[i].hostId, + }); + clients.forEach((c) => c.end()); + return null; + } + } + + for (let i = 0; i < jumpHostConfigs.length; i++) { + const jumpHostConfig = jumpHostConfigs[i]; + + const jumpClient = new SSHClient(); + clients.push(jumpClient); + + const connected = await new Promise((resolve) => { + const timeout = setTimeout(() => { + resolve(false); + }, 30000); + + jumpClient.on("ready", () => { + clearTimeout(timeout); + resolve(true); + }); + + jumpClient.on("error", (err) => { + clearTimeout(timeout); + dockerLogger.error(`Jump host ${i + 1} connection failed`, err, { + operation: "jump_host_connect", + hostId: jumpHostConfig.id, + ip: jumpHostConfig.ip, + }); + resolve(false); + }); + + const connectConfig: any = { + host: jumpHostConfig.ip, + port: jumpHostConfig.port || 22, + username: jumpHostConfig.username, + tryKeyboard: true, + readyTimeout: 30000, + }; + + if (jumpHostConfig.authType === "password" && jumpHostConfig.password) { + connectConfig.password = jumpHostConfig.password; + } else if (jumpHostConfig.authType === "key" && jumpHostConfig.key) { + const cleanKey = jumpHostConfig.key + .trim() + .replace(/\r\n/g, "\n") + .replace(/\r/g, "\n"); + connectConfig.privateKey = Buffer.from(cleanKey, "utf8"); + if (jumpHostConfig.keyPassword) { + connectConfig.passphrase = jumpHostConfig.keyPassword; + } + } + + if (currentClient) { + currentClient.forwardOut( + "127.0.0.1", + 0, + jumpHostConfig.ip, + jumpHostConfig.port || 22, + (err, stream) => { + if (err) { + clearTimeout(timeout); + resolve(false); + return; + } + connectConfig.sock = stream; + jumpClient.connect(connectConfig); + }, + ); + } else { + jumpClient.connect(connectConfig); + } + }); + + if (!connected) { + clients.forEach((c) => c.end()); + return null; + } + + currentClient = jumpClient; + } + + return currentClient; + } catch (error) { + dockerLogger.error("Failed to create jump host chain", error, { + operation: "jump_host_chain", + }); + clients.forEach((c) => c.end()); + return null; + } +} + +async function executeDockerCommand( + session: SSHSession, + command: string, +): Promise { + return new Promise((resolve, reject) => { + session.client.exec(command, (err, stream) => { + if (err) { + dockerLogger.error("Docker command execution error", err, { + operation: "execute_docker_command", + command, + }); + return reject(err); + } + + let stdout = ""; + let stderr = ""; + + stream.on("close", (code: number) => { + if (code !== 0) { + dockerLogger.error("Docker command failed", undefined, { + operation: "execute_docker_command", + command, + exitCode: code, + stderr, + }); + reject(new Error(stderr || `Command exited with code ${code}`)); + } else { + resolve(stdout); + } + }); + + stream.on("data", (data: Buffer) => { + stdout += data.toString(); + }); + + stream.stderr.on("data", (data: Buffer) => { + stderr += data.toString(); + }); + + stream.on("error", (streamErr: Error) => { + dockerLogger.error("Docker command stream error", streamErr, { + operation: "execute_docker_command", + command, + }); + reject(streamErr); + }); + }); + }); +} + +const app = express(); + +app.use( + cors({ + origin: (origin, callback) => { + if (!origin) { + return callback(null, true); + } + + if (origin.startsWith("https://")) { + return callback(null, true); + } + + if (origin.startsWith("http://")) { + return callback(null, true); + } + + const allowedOrigins = [ + "http://localhost:5173", + "http://localhost:3000", + "http://127.0.0.1:5173", + "http://127.0.0.1:3000", + ]; + + if (allowedOrigins.includes(origin)) { + return callback(null, true); + } + + return callback(new Error("Not allowed by CORS")); + }, + credentials: true, + methods: ["GET", "POST", "PUT", "DELETE", "OPTIONS"], + allowedHeaders: [ + "Content-Type", + "Authorization", + "User-Agent", + "X-Electron-App", + ], + }), +); + +app.use(cookieParser()); +app.use(express.json({ limit: "100mb" })); +app.use(express.urlencoded({ limit: "100mb", extended: true })); + +const authManager = AuthManager.getInstance(); +app.use(authManager.createAuthMiddleware()); + +// POST /docker/ssh/connect - Establish SSH session +app.post("/docker/ssh/connect", async (req, res) => { + const { + sessionId, + hostId, + userProvidedPassword, + userProvidedSshKey, + userProvidedKeyPassword, + forceKeyboardInteractive, + useSocks5, + socks5Host, + socks5Port, + socks5Username, + socks5Password, + socks5ProxyChain, + } = req.body; + const userId = (req as any).userId; + + if (!userId) { + dockerLogger.error( + "Docker SSH connection rejected: no authenticated user", + { + operation: "docker_connect_auth", + sessionId, + }, + ); + return res.status(401).json({ error: "Authentication required" }); + } + + if (!SimpleDBOps.isUserDataUnlocked(userId)) { + return res.status(401).json({ + error: "Session expired - please log in again", + code: "SESSION_EXPIRED", + }); + } + + if (!sessionId || !hostId) { + dockerLogger.warn("Missing Docker SSH connection parameters", { + operation: "docker_connect", + sessionId, + hasHostId: !!hostId, + }); + return res.status(400).json({ error: "Missing sessionId or hostId" }); + } + + try { + const hosts = await SimpleDBOps.select( + getDb().select().from(sshData).where(eq(sshData.id, hostId)), + "ssh_data", + userId, + ); + + if (hosts.length === 0) { + return res.status(404).json({ error: "Host not found" }); + } + + const host = hosts[0] as unknown as SSHHost; + + if (host.userId !== userId) { + const { PermissionManager } = + await import("../utils/permission-manager.js"); + const permissionManager = PermissionManager.getInstance(); + const accessInfo = await permissionManager.canAccessHost( + userId, + hostId, + "execute", + ); + + if (!accessInfo.hasAccess) { + dockerLogger.warn("User does not have access to host", { + operation: "docker_connect", + hostId, + userId, + }); + return res.status(403).json({ error: "Access denied" }); + } + } + if (typeof host.jumpHosts === "string" && host.jumpHosts) { + try { + host.jumpHosts = JSON.parse(host.jumpHosts); + } catch (e) { + dockerLogger.error("Failed to parse jump hosts", e, { + hostId: host.id, + }); + host.jumpHosts = []; + } + } + + if (!host.enableDocker) { + dockerLogger.warn("Docker not enabled for host", { + operation: "docker_connect", + hostId, + userId, + }); + return res.status(403).json({ + error: + "Docker is not enabled for this host. Enable it in Host Settings.", + code: "DOCKER_DISABLED", + }); + } + + if (sshSessions[sessionId]) { + cleanupSession(sessionId); + } + + if (pendingTOTPSessions[sessionId]) { + try { + pendingTOTPSessions[sessionId].client.end(); + } catch {} + delete pendingTOTPSessions[sessionId]; + } + + let resolvedCredentials: any = { + password: host.password, + sshKey: host.key, + keyPassword: host.keyPassword, + authType: host.authType, + }; + + if (userProvidedPassword) { + resolvedCredentials.password = userProvidedPassword; + } + if (userProvidedSshKey) { + resolvedCredentials.sshKey = userProvidedSshKey; + resolvedCredentials.authType = "key"; + } + if (userProvidedKeyPassword) { + resolvedCredentials.keyPassword = userProvidedKeyPassword; + } + + if (host.credentialId) { + const ownerId = host.userId; + + if (userId !== ownerId) { + try { + const { SharedCredentialManager } = + await import("../utils/shared-credential-manager.js"); + const sharedCredManager = SharedCredentialManager.getInstance(); + const sharedCred = await sharedCredManager.getSharedCredentialForUser( + host.id, + userId, + ); + + if (sharedCred) { + resolvedCredentials = { + password: sharedCred.password, + sshKey: sharedCred.key, + keyPassword: sharedCred.keyPassword, + authType: sharedCred.authType, + }; + } + } catch (error) { + dockerLogger.error("Failed to resolve shared credential", error, { + operation: "docker_connect", + hostId, + userId, + }); + } + } else { + const credentials = await SimpleDBOps.select( + getDb() + .select() + .from(sshCredentials) + .where( + and( + eq(sshCredentials.id, host.credentialId as number), + eq(sshCredentials.userId, userId), + ), + ), + "ssh_credentials", + userId, + ); + + if (credentials.length > 0) { + const credential = credentials[0]; + resolvedCredentials = { + password: credential.password, + sshKey: + credential.private_key || credential.privateKey || credential.key, + keyPassword: credential.key_password || credential.keyPassword, + authType: credential.auth_type || credential.authType, + }; + } + } + } + + const client = new SSHClient(); + + const config: any = { + host: host.ip, + port: host.port || 22, + username: host.username, + tryKeyboard: true, + keepaliveInterval: 30000, + keepaliveCountMax: 3, + readyTimeout: 60000, + tcpKeepAlive: true, + tcpKeepAliveInitialDelay: 30000, + }; + + if (resolvedCredentials.authType === "none") { + } else if (resolvedCredentials.authType === "password") { + if (resolvedCredentials.password) { + config.password = resolvedCredentials.password; + } + } else if ( + resolvedCredentials.authType === "key" && + resolvedCredentials.sshKey + ) { + try { + if ( + !resolvedCredentials.sshKey.includes("-----BEGIN") || + !resolvedCredentials.sshKey.includes("-----END") + ) { + dockerLogger.error("Invalid SSH key format", { + operation: "docker_connect", + sessionId, + hostId, + }); + return res.status(400).json({ + error: "Invalid private key format", + }); + } + + const cleanKey = resolvedCredentials.sshKey + .trim() + .replace(/\r\n/g, "\n") + .replace(/\r/g, "\n"); + config.privateKey = Buffer.from(cleanKey, "utf8"); + if (resolvedCredentials.keyPassword) { + config.passphrase = resolvedCredentials.keyPassword; + } + } catch (error) { + dockerLogger.error("SSH key processing error", error, { + operation: "docker_connect", + sessionId, + hostId, + }); + return res.status(400).json({ + error: "SSH key format error: Invalid private key format", + }); + } + } else if (resolvedCredentials.authType === "key") { + dockerLogger.error( + "SSH key authentication requested but no key provided", + { + operation: "docker_connect", + sessionId, + hostId, + }, + ); + return res.status(400).json({ + error: "SSH key authentication requested but no key provided", + }); + } + + let responseSent = false; + let keyboardInteractiveResponded = false; + + client.on("ready", () => { + if (responseSent) return; + responseSent = true; + + sshSessions[sessionId] = { + client, + isConnected: true, + lastActive: Date.now(), + activeOperations: 0, + hostId, + }; + + scheduleSessionCleanup(sessionId); + + res.json({ success: true, message: "SSH connection established" }); + }); + + client.on("error", (err) => { + if (responseSent) return; + responseSent = true; + + dockerLogger.error("Docker SSH connection failed", err, { + operation: "docker_connect", + sessionId, + hostId, + userId, + }); + + if ( + resolvedCredentials.authType === "none" && + (err.message.includes("authentication") || + err.message.includes("All configured authentication methods failed")) + ) { + res.json({ + status: "auth_required", + reason: "no_keyboard", + }); + } else { + res.status(500).json({ + success: false, + message: err.message || "SSH connection failed", + }); + } + }); + + client.on("close", () => { + if (sshSessions[sessionId]) { + sshSessions[sessionId].isConnected = false; + cleanupSession(sessionId); + } + }); + + client.on( + "keyboard-interactive", + ( + name: string, + instructions: string, + instructionsLang: string, + prompts: Array<{ prompt: string; echo: boolean }>, + finish: (responses: string[]) => void, + ) => { + const totpPromptIndex = prompts.findIndex((p) => + /verification code|verification_code|token|otp|2fa|authenticator|google.*auth/i.test( + p.prompt, + ), + ); + + if (totpPromptIndex !== -1) { + if (responseSent) { + const responses = prompts.map((p) => { + if (/password/i.test(p.prompt) && resolvedCredentials.password) { + return resolvedCredentials.password; + } + return ""; + }); + finish(responses); + return; + } + responseSent = true; + + if (pendingTOTPSessions[sessionId]) { + const responses = prompts.map((p) => { + if (/password/i.test(p.prompt) && resolvedCredentials.password) { + return resolvedCredentials.password; + } + return ""; + }); + finish(responses); + return; + } + + keyboardInteractiveResponded = true; + + pendingTOTPSessions[sessionId] = { + client, + finish, + config, + createdAt: Date.now(), + sessionId, + hostId, + ip: host.ip, + port: host.port || 22, + username: host.username, + userId, + prompts, + totpPromptIndex, + resolvedPassword: resolvedCredentials.password, + totpAttempts: 0, + }; + + res.json({ + requires_totp: true, + sessionId, + prompt: prompts[totpPromptIndex].prompt, + }); + } else { + const passwordPromptIndex = prompts.findIndex((p) => + /password/i.test(p.prompt), + ); + + if ( + resolvedCredentials.authType === "none" && + passwordPromptIndex !== -1 + ) { + if (responseSent) return; + responseSent = true; + client.end(); + res.json({ + status: "auth_required", + reason: "no_keyboard", + }); + return; + } + + const hasStoredPassword = + resolvedCredentials.password && + resolvedCredentials.authType !== "none"; + + if (!hasStoredPassword && passwordPromptIndex !== -1) { + if (responseSent) { + const responses = prompts.map((p) => { + if ( + /password/i.test(p.prompt) && + resolvedCredentials.password + ) { + return resolvedCredentials.password; + } + return ""; + }); + finish(responses); + return; + } + responseSent = true; + + if (pendingTOTPSessions[sessionId]) { + const responses = prompts.map((p) => { + if ( + /password/i.test(p.prompt) && + resolvedCredentials.password + ) { + return resolvedCredentials.password; + } + return ""; + }); + finish(responses); + return; + } + + keyboardInteractiveResponded = true; + + pendingTOTPSessions[sessionId] = { + client, + finish, + config, + createdAt: Date.now(), + sessionId, + hostId, + ip: host.ip, + port: host.port || 22, + username: host.username, + userId, + prompts, + totpPromptIndex: passwordPromptIndex, + resolvedPassword: resolvedCredentials.password, + totpAttempts: 0, + }; + + res.json({ + requires_totp: true, + sessionId, + prompt: prompts[passwordPromptIndex].prompt, + isPassword: true, + }); + return; + } + + const responses = prompts.map((p) => { + if (/password/i.test(p.prompt) && resolvedCredentials.password) { + return resolvedCredentials.password; + } + return ""; + }); + finish(responses); + } + }, + ); + + if ( + useSocks5 && + (socks5Host || (socks5ProxyChain && (socks5ProxyChain as any).length > 0)) + ) { + try { + const socks5Socket = await createSocks5Connection( + host.ip, + host.port || 22, + { + useSocks5, + socks5Host, + socks5Port, + socks5Username, + socks5Password, + socks5ProxyChain: socks5ProxyChain as any, + }, + ); + + if (socks5Socket) { + config.sock = socks5Socket; + client.connect(config); + return; + } + } catch (socks5Error) { + dockerLogger.error("SOCKS5 connection failed", socks5Error, { + operation: "docker_socks5_connect", + sessionId, + hostId, + proxyHost: socks5Host, + proxyPort: socks5Port || 1080, + }); + if (!responseSent) { + responseSent = true; + return res.status(500).json({ + error: + "SOCKS5 proxy connection failed: " + + (socks5Error instanceof Error + ? socks5Error.message + : "Unknown error"), + }); + } + return; + } + } else if (host.jumpHosts && host.jumpHosts.length > 0) { + const jumpClient = await createJumpHostChain( + host.jumpHosts as Array<{ hostId: number }>, + userId, + ); + + if (!jumpClient) { + return res.status(500).json({ + error: "Failed to establish jump host chain", + }); + } + + jumpClient.forwardOut( + "127.0.0.1", + 0, + host.ip, + host.port || 22, + (err, stream) => { + if (err) { + dockerLogger.error("Failed to forward through jump host", err, { + operation: "docker_jump_forward", + sessionId, + hostId, + }); + jumpClient.end(); + if (!responseSent) { + responseSent = true; + return res.status(500).json({ + error: "Failed to forward through jump host: " + err.message, + }); + } + return; + } + + config.sock = stream; + client.connect(config); + }, + ); + } else { + client.connect(config); + } + } catch (error) { + dockerLogger.error("Docker SSH connection error", error, { + operation: "docker_connect", + sessionId, + hostId, + userId, + }); + res.status(500).json({ + success: false, + message: error instanceof Error ? error.message : "Unknown error", + }); + } +}); + +// POST /docker/ssh/disconnect - Close SSH session +app.post("/docker/ssh/disconnect", async (req, res) => { + const { sessionId } = req.body; + + if (!sessionId) { + return res.status(400).json({ error: "Session ID is required" }); + } + + cleanupSession(sessionId); + + res.json({ success: true, message: "SSH session disconnected" }); +}); + +// POST /docker/ssh/connect-totp - Verify TOTP and complete connection +app.post("/docker/ssh/connect-totp", async (req, res) => { + const { sessionId, totpCode } = req.body; + const userId = (req as any).userId; + + if (!userId) { + dockerLogger.error("TOTP verification rejected: no authenticated user", { + operation: "docker_totp_auth", + sessionId, + }); + return res.status(401).json({ error: "Authentication required" }); + } + + if (!sessionId || !totpCode) { + return res.status(400).json({ error: "Session ID and TOTP code required" }); + } + + const session = pendingTOTPSessions[sessionId]; + + if (!session) { + dockerLogger.warn("TOTP session not found or expired", { + operation: "docker_totp_verify", + sessionId, + userId, + availableSessions: Object.keys(pendingTOTPSessions), + }); + return res + .status(404) + .json({ error: "TOTP session expired. Please reconnect." }); + } + + if (Date.now() - session.createdAt > 180000) { + delete pendingTOTPSessions[sessionId]; + try { + session.client.end(); + } catch {} + dockerLogger.warn("TOTP session timeout before code submission", { + operation: "docker_totp_verify", + sessionId, + userId, + age: Date.now() - session.createdAt, + }); + return res + .status(408) + .json({ error: "TOTP session timeout. Please reconnect." }); + } + + const responses = (session.prompts || []).map((p, index) => { + if (index === session.totpPromptIndex) { + return totpCode; + } + if (/password/i.test(p.prompt) && session.resolvedPassword) { + return session.resolvedPassword; + } + return ""; + }); + + let responseSent = false; + let responseTimeout: NodeJS.Timeout; + + session.client.once("ready", () => { + if (responseSent) return; + responseSent = true; + clearTimeout(responseTimeout); + + delete pendingTOTPSessions[sessionId]; + + setTimeout(() => { + sshSessions[sessionId] = { + client: session.client, + isConnected: true, + lastActive: Date.now(), + activeOperations: 0, + hostId: session.hostId, + }; + scheduleSessionCleanup(sessionId); + + res.json({ + status: "success", + message: "TOTP verified, SSH connection established", + }); + + if (session.hostId && session.userId) { + (async () => { + try { + const hosts = await SimpleDBOps.select( + getDb() + .select() + .from(sshData) + .where( + and( + eq(sshData.id, session.hostId!), + eq(sshData.userId, session.userId!), + ), + ), + "ssh_data", + session.userId!, + ); + + const hostName = + hosts.length > 0 && hosts[0].name + ? hosts[0].name + : `${session.username}@${session.ip}:${session.port}`; + + await axios.post( + "http://localhost:30006/activity/log", + { + type: "docker", + hostId: session.hostId, + hostName, + }, + { + headers: { + Authorization: `Bearer ${await authManager.generateJWTToken(session.userId!)}`, + }, + }, + ); + } catch (error) { + dockerLogger.warn("Failed to log Docker activity (TOTP)", { + operation: "activity_log_error", + userId: session.userId, + hostId: session.hostId, + error: error instanceof Error ? error.message : "Unknown error", + }); + } + })(); + } + }, 200); + }); + + session.client.once("error", (err) => { + if (responseSent) return; + responseSent = true; + clearTimeout(responseTimeout); + + delete pendingTOTPSessions[sessionId]; + + dockerLogger.error("TOTP verification failed", { + operation: "docker_totp_verify", + sessionId, + userId, + error: err.message, + }); + + res.status(401).json({ status: "error", message: "Invalid TOTP code" }); + }); + + responseTimeout = setTimeout(() => { + if (!responseSent) { + responseSent = true; + delete pendingTOTPSessions[sessionId]; + dockerLogger.warn("TOTP verification timeout", { + operation: "docker_totp_verify", + sessionId, + userId, + }); + res.status(408).json({ error: "TOTP verification timeout" }); + } + }, 60000); + + session.finish(responses); +}); + +// POST /docker/ssh/keepalive - Keep session alive +app.post("/docker/ssh/keepalive", async (req, res) => { + const { sessionId } = req.body; + + if (!sessionId) { + return res.status(400).json({ error: "Session ID is required" }); + } + + const session = sshSessions[sessionId]; + + if (!session || !session.isConnected) { + return res.status(400).json({ + error: "SSH session not found or not connected", + connected: false, + }); + } + + session.lastActive = Date.now(); + scheduleSessionCleanup(sessionId); + + res.json({ + success: true, + connected: true, + message: "Session keepalive successful", + lastActive: session.lastActive, + }); +}); + +// GET /docker/ssh/status - Check session status +app.get("/docker/ssh/status", async (req, res) => { + const sessionId = req.query.sessionId as string; + + if (!sessionId) { + return res.status(400).json({ error: "Session ID is required" }); + } + + const isConnected = !!sshSessions[sessionId]?.isConnected; + + res.json({ success: true, connected: isConnected }); +}); + +// GET /docker/validate/:sessionId - Validate Docker availability +app.get("/docker/validate/:sessionId", async (req, res) => { + const { sessionId } = req.params; + const userId = (req as any).userId; + + if (!userId) { + return res.status(401).json({ error: "Authentication required" }); + } + + const session = sshSessions[sessionId]; + + if (!session || !session.isConnected) { + return res.status(400).json({ + error: "SSH session not found or not connected", + }); + } + + session.lastActive = Date.now(); + session.activeOperations++; + + try { + try { + const versionOutput = await executeDockerCommand( + session, + "docker --version", + ); + const versionMatch = versionOutput.match(/Docker version ([^\s,]+)/); + const version = versionMatch ? versionMatch[1] : "unknown"; + + try { + await executeDockerCommand(session, "docker ps >/dev/null 2>&1"); + + session.activeOperations--; + return res.json({ + available: true, + version, + }); + } catch (daemonError) { + session.activeOperations--; + const errorMsg = + daemonError instanceof Error ? daemonError.message : ""; + + if (errorMsg.includes("Cannot connect to the Docker daemon")) { + return res.json({ + available: false, + error: + "Docker daemon is not running. Start it with: sudo systemctl start docker", + code: "DAEMON_NOT_RUNNING", + }); + } + + if (errorMsg.includes("permission denied")) { + return res.json({ + available: false, + error: + "Permission denied. Add your user to the docker group: sudo usermod -aG docker $USER", + code: "PERMISSION_DENIED", + }); + } + + return res.json({ + available: false, + error: errorMsg, + code: "DOCKER_ERROR", + }); + } + } catch (installError) { + session.activeOperations--; + return res.json({ + available: false, + error: + "Docker is not installed on this host. Please install Docker to use this feature.", + code: "NOT_INSTALLED", + }); + } + } catch (error) { + session.activeOperations--; + dockerLogger.error("Docker validation error", error, { + operation: "docker_validate", + sessionId, + userId, + }); + + res.status(500).json({ + available: false, + error: error instanceof Error ? error.message : "Validation failed", + }); + } +}); + +// GET /docker/containers/:sessionId - List all containers +app.get("/docker/containers/:sessionId", async (req, res) => { + const { sessionId } = req.params; + const all = req.query.all !== "false"; + const userId = (req as any).userId; + + if (!userId) { + return res.status(401).json({ error: "Authentication required" }); + } + + const session = sshSessions[sessionId]; + + if (!session || !session.isConnected) { + return res.status(400).json({ + error: "SSH session not found or not connected", + }); + } + + session.lastActive = Date.now(); + session.activeOperations++; + + try { + const allFlag = all ? "-a " : ""; + const command = `docker ps ${allFlag}--format '{"id":"{{.ID}}","name":"{{.Names}}","image":"{{.Image}}","status":"{{.Status}}","state":"{{.State}}","ports":"{{.Ports}}","created":"{{.CreatedAt}}"}'`; + + const output = await executeDockerCommand(session, command); + + const containers = output + .split("\n") + .filter((line) => line.trim()) + .map((line) => { + try { + return JSON.parse(line); + } catch (e) { + dockerLogger.warn("Failed to parse container line", { + operation: "parse_container", + line, + }); + return null; + } + }) + .filter((c) => c !== null); + + session.activeOperations--; + + res.json(containers); + } catch (error) { + session.activeOperations--; + dockerLogger.error("Failed to list Docker containers", error, { + operation: "list_containers", + sessionId, + userId, + }); + + res.status(500).json({ + error: + error instanceof Error ? error.message : "Failed to list containers", + }); + } +}); + +// GET /docker/containers/:sessionId/:containerId - Get container details +app.get("/docker/containers/:sessionId/:containerId", async (req, res) => { + const { sessionId, containerId } = req.params; + const userId = (req as any).userId; + + if (!userId) { + return res.status(401).json({ error: "Authentication required" }); + } + + const session = sshSessions[sessionId]; + + if (!session || !session.isConnected) { + return res.status(400).json({ + error: "SSH session not found or not connected", + }); + } + + session.lastActive = Date.now(); + session.activeOperations++; + + try { + const command = `docker inspect ${containerId}`; + const output = await executeDockerCommand(session, command); + const details = JSON.parse(output); + + session.activeOperations--; + + if (details && details.length > 0) { + res.json(details[0]); + } else { + res.status(404).json({ + error: "Container not found", + code: "CONTAINER_NOT_FOUND", + }); + } + } catch (error) { + session.activeOperations--; + + const errorMsg = error instanceof Error ? error.message : ""; + if (errorMsg.includes("No such container")) { + return res.status(404).json({ + error: "Container not found", + code: "CONTAINER_NOT_FOUND", + }); + } + + dockerLogger.error("Failed to get container details", error, { + operation: "get_container_details", + sessionId, + containerId, + userId, + }); + + res.status(500).json({ + error: errorMsg || "Failed to get container details", + }); + } +}); + +// POST /docker/containers/:sessionId/:containerId/start - Start container +app.post( + "/docker/containers/:sessionId/:containerId/start", + async (req, res) => { + const { sessionId, containerId } = req.params; + const userId = (req as any).userId; + + if (!userId) { + return res.status(401).json({ error: "Authentication required" }); + } + + const session = sshSessions[sessionId]; + + if (!session || !session.isConnected) { + return res.status(400).json({ + error: "SSH session not found or not connected", + }); + } + + session.lastActive = Date.now(); + session.activeOperations++; + + try { + await executeDockerCommand(session, `docker start ${containerId}`); + + session.activeOperations--; + + res.json({ + success: true, + message: "Container started successfully", + }); + } catch (error) { + session.activeOperations--; + + const errorMsg = error instanceof Error ? error.message : ""; + if (errorMsg.includes("No such container")) { + return res.status(404).json({ + success: false, + error: "Container not found", + code: "CONTAINER_NOT_FOUND", + }); + } + + dockerLogger.error("Failed to start container", error, { + operation: "start_container", + sessionId, + containerId, + userId, + }); + + res.status(500).json({ + success: false, + error: errorMsg || "Failed to start container", + }); + } + }, +); + +// POST /docker/containers/:sessionId/:containerId/stop - Stop container +app.post( + "/docker/containers/:sessionId/:containerId/stop", + async (req, res) => { + const { sessionId, containerId } = req.params; + const userId = (req as any).userId; + + if (!userId) { + return res.status(401).json({ error: "Authentication required" }); + } + + const session = sshSessions[sessionId]; + + if (!session || !session.isConnected) { + return res.status(400).json({ + error: "SSH session not found or not connected", + }); + } + + session.lastActive = Date.now(); + session.activeOperations++; + + try { + await executeDockerCommand(session, `docker stop ${containerId}`); + + session.activeOperations--; + + res.json({ + success: true, + message: "Container stopped successfully", + }); + } catch (error) { + session.activeOperations--; + + const errorMsg = error instanceof Error ? error.message : ""; + if (errorMsg.includes("No such container")) { + return res.status(404).json({ + success: false, + error: "Container not found", + code: "CONTAINER_NOT_FOUND", + }); + } + + dockerLogger.error("Failed to stop container", error, { + operation: "stop_container", + sessionId, + containerId, + userId, + }); + + res.status(500).json({ + success: false, + error: errorMsg || "Failed to stop container", + }); + } + }, +); + +// POST /docker/containers/:sessionId/:containerId/restart - Restart container +app.post( + "/docker/containers/:sessionId/:containerId/restart", + async (req, res) => { + const { sessionId, containerId } = req.params; + const userId = (req as any).userId; + + if (!userId) { + return res.status(401).json({ error: "Authentication required" }); + } + + const session = sshSessions[sessionId]; + + if (!session || !session.isConnected) { + return res.status(400).json({ + error: "SSH session not found or not connected", + }); + } + + session.lastActive = Date.now(); + session.activeOperations++; + + try { + await executeDockerCommand(session, `docker restart ${containerId}`); + + session.activeOperations--; + + res.json({ + success: true, + message: "Container restarted successfully", + }); + } catch (error) { + session.activeOperations--; + + const errorMsg = error instanceof Error ? error.message : ""; + if (errorMsg.includes("No such container")) { + return res.status(404).json({ + success: false, + error: "Container not found", + code: "CONTAINER_NOT_FOUND", + }); + } + + dockerLogger.error("Failed to restart container", error, { + operation: "restart_container", + sessionId, + containerId, + userId, + }); + + res.status(500).json({ + success: false, + error: errorMsg || "Failed to restart container", + }); + } + }, +); + +// POST /docker/containers/:sessionId/:containerId/pause - Pause container +app.post( + "/docker/containers/:sessionId/:containerId/pause", + async (req, res) => { + const { sessionId, containerId } = req.params; + const userId = (req as any).userId; + + if (!userId) { + return res.status(401).json({ error: "Authentication required" }); + } + + const session = sshSessions[sessionId]; + + if (!session || !session.isConnected) { + return res.status(400).json({ + error: "SSH session not found or not connected", + }); + } + + session.lastActive = Date.now(); + session.activeOperations++; + + try { + await executeDockerCommand(session, `docker pause ${containerId}`); + + session.activeOperations--; + + res.json({ + success: true, + message: "Container paused successfully", + }); + } catch (error) { + session.activeOperations--; + + const errorMsg = error instanceof Error ? error.message : ""; + if (errorMsg.includes("No such container")) { + return res.status(404).json({ + success: false, + error: "Container not found", + code: "CONTAINER_NOT_FOUND", + }); + } + + dockerLogger.error("Failed to pause container", error, { + operation: "pause_container", + sessionId, + containerId, + userId, + }); + + res.status(500).json({ + success: false, + error: errorMsg || "Failed to pause container", + }); + } + }, +); + +// POST /docker/containers/:sessionId/:containerId/unpause - Unpause container +app.post( + "/docker/containers/:sessionId/:containerId/unpause", + async (req, res) => { + const { sessionId, containerId } = req.params; + const userId = (req as any).userId; + + if (!userId) { + return res.status(401).json({ error: "Authentication required" }); + } + + const session = sshSessions[sessionId]; + + if (!session || !session.isConnected) { + return res.status(400).json({ + error: "SSH session not found or not connected", + }); + } + + session.lastActive = Date.now(); + session.activeOperations++; + + try { + await executeDockerCommand(session, `docker unpause ${containerId}`); + + session.activeOperations--; + + res.json({ + success: true, + message: "Container unpaused successfully", + }); + } catch (error) { + session.activeOperations--; + + const errorMsg = error instanceof Error ? error.message : ""; + if (errorMsg.includes("No such container")) { + return res.status(404).json({ + success: false, + error: "Container not found", + code: "CONTAINER_NOT_FOUND", + }); + } + + dockerLogger.error("Failed to unpause container", error, { + operation: "unpause_container", + sessionId, + containerId, + userId, + }); + + res.status(500).json({ + success: false, + error: errorMsg || "Failed to unpause container", + }); + } + }, +); + +// DELETE /docker/containers/:sessionId/:containerId/remove - Remove container +app.delete( + "/docker/containers/:sessionId/:containerId/remove", + async (req, res) => { + const { sessionId, containerId } = req.params; + const force = req.query.force === "true"; + const userId = (req as any).userId; + + if (!userId) { + return res.status(401).json({ error: "Authentication required" }); + } + + const session = sshSessions[sessionId]; + + if (!session || !session.isConnected) { + return res.status(400).json({ + error: "SSH session not found or not connected", + }); + } + + session.lastActive = Date.now(); + session.activeOperations++; + + try { + const forceFlag = force ? "-f " : ""; + await executeDockerCommand( + session, + `docker rm ${forceFlag}${containerId}`, + ); + + session.activeOperations--; + + res.json({ + success: true, + message: "Container removed successfully", + }); + } catch (error) { + session.activeOperations--; + + const errorMsg = error instanceof Error ? error.message : ""; + if (errorMsg.includes("No such container")) { + return res.status(404).json({ + success: false, + error: "Container not found", + code: "CONTAINER_NOT_FOUND", + }); + } + + if (errorMsg.includes("cannot remove a running container")) { + return res.status(400).json({ + success: false, + error: + "Cannot remove a running container. Stop it first or use force.", + code: "CONTAINER_RUNNING", + }); + } + + dockerLogger.error("Failed to remove container", error, { + operation: "remove_container", + sessionId, + containerId, + userId, + }); + + res.status(500).json({ + success: false, + error: errorMsg || "Failed to remove container", + }); + } + }, +); + +// GET /docker/containers/:sessionId/:containerId/logs - Get container logs +app.get("/docker/containers/:sessionId/:containerId/logs", async (req, res) => { + const { sessionId, containerId } = req.params; + const tail = req.query.tail ? parseInt(req.query.tail as string) : 100; + const timestamps = req.query.timestamps === "true"; + const since = req.query.since as string; + const until = req.query.until as string; + const userId = (req as any).userId; + + if (!userId) { + return res.status(401).json({ error: "Authentication required" }); + } + + const session = sshSessions[sessionId]; + + if (!session || !session.isConnected) { + return res.status(400).json({ + error: "SSH session not found or not connected", + }); + } + + session.lastActive = Date.now(); + session.activeOperations++; + + try { + let command = `docker logs ${containerId}`; + + if (tail && tail > 0) { + command += ` --tail ${tail}`; + } + + if (timestamps) { + command += " --timestamps"; + } + + if (since) { + command += ` --since ${since}`; + } + + if (until) { + command += ` --until ${until}`; + } + + const logs = await executeDockerCommand(session, command); + + session.activeOperations--; + + res.json({ + success: true, + logs, + }); + } catch (error) { + session.activeOperations--; + + const errorMsg = error instanceof Error ? error.message : ""; + if (errorMsg.includes("No such container")) { + return res.status(404).json({ + success: false, + error: "Container not found", + code: "CONTAINER_NOT_FOUND", + }); + } + + dockerLogger.error("Failed to get container logs", error, { + operation: "get_logs", + sessionId, + containerId, + userId, + }); + + res.status(500).json({ + success: false, + error: errorMsg || "Failed to get container logs", + }); + } +}); + +// GET /docker/containers/:sessionId/:containerId/stats - Get container stats +app.get( + "/docker/containers/:sessionId/:containerId/stats", + async (req, res) => { + const { sessionId, containerId } = req.params; + const userId = (req as any).userId; + + if (!userId) { + return res.status(401).json({ error: "Authentication required" }); + } + + const session = sshSessions[sessionId]; + + if (!session || !session.isConnected) { + return res.status(400).json({ + error: "SSH session not found or not connected", + }); + } + + session.lastActive = Date.now(); + session.activeOperations++; + + try { + const command = `docker stats ${containerId} --no-stream --format '{"cpu":"{{.CPUPerc}}","memory":"{{.MemUsage}}","memoryPercent":"{{.MemPerc}}","netIO":"{{.NetIO}}","blockIO":"{{.BlockIO}}","pids":"{{.PIDs}}"}'`; + + const output = await executeDockerCommand(session, command); + const rawStats = JSON.parse(output.trim()); + + const memoryParts = rawStats.memory.split(" / "); + const memoryUsed = memoryParts[0]?.trim() || "0B"; + const memoryLimit = memoryParts[1]?.trim() || "0B"; + + const netIOParts = rawStats.netIO.split(" / "); + const netInput = netIOParts[0]?.trim() || "0B"; + const netOutput = netIOParts[1]?.trim() || "0B"; + + const blockIOParts = rawStats.blockIO.split(" / "); + const blockRead = blockIOParts[0]?.trim() || "0B"; + const blockWrite = blockIOParts[1]?.trim() || "0B"; + + const stats = { + cpu: rawStats.cpu, + memoryUsed, + memoryLimit, + memoryPercent: rawStats.memoryPercent, + netInput, + netOutput, + blockRead, + blockWrite, + pids: rawStats.pids, + }; + + session.activeOperations--; + + res.json(stats); + } catch (error) { + session.activeOperations--; + + const errorMsg = error instanceof Error ? error.message : ""; + if (errorMsg.includes("No such container")) { + return res.status(404).json({ + success: false, + error: "Container not found", + code: "CONTAINER_NOT_FOUND", + }); + } + + dockerLogger.error("Failed to get container stats", error, { + operation: "get_stats", + sessionId, + containerId, + userId, + }); + + res.status(500).json({ + success: false, + error: errorMsg || "Failed to get container stats", + }); + } + }, +); + +const PORT = 30007; + +app.listen(PORT, async () => { + try { + await authManager.initialize(); + } catch (err) { + dockerLogger.error("Failed to initialize Docker backend", err, { + operation: "startup", + }); + } +}); + +process.on("SIGINT", () => { + Object.keys(sshSessions).forEach((sessionId) => { + cleanupSession(sessionId); + }); + process.exit(0); +}); + +process.on("SIGTERM", () => { + Object.keys(sshSessions).forEach((sessionId) => { + cleanupSession(sessionId); + }); + process.exit(0); +}); diff --git a/src/backend/ssh/file-manager.ts b/src/backend/ssh/file-manager.ts index b6344b68..2769ed8c 100644 --- a/src/backend/ssh/file-manager.ts +++ b/src/backend/ssh/file-manager.ts @@ -10,6 +10,7 @@ import { fileLogger, sshLogger } from "../utils/logger.js"; import { SimpleDBOps } from "../utils/simple-db-ops.js"; import { AuthManager } from "../utils/auth-manager.js"; import type { AuthenticatedRequest } from "../../types/index.js"; +import { createSocks5Connection } from "../utils/socks5-helper.js"; function isExecutableFile(permissions: string, fileName: string): boolean { const hasExecutePermission = @@ -278,6 +279,7 @@ interface PendingTOTPSession { prompts?: Array<{ prompt: string; echo: boolean }>; totpPromptIndex?: number; resolvedPassword?: string; + totpAttempts: number; } const sshSessions: Record = {}; @@ -356,6 +358,12 @@ app.post("/ssh/file_manager/ssh/connect", async (req, res) => { userProvidedPassword, forceKeyboardInteractive, jumpHosts, + useSocks5, + socks5Host, + socks5Port, + socks5Username, + socks5Password, + socks5ProxyChain, } = req.body; const userId = (req as AuthenticatedRequest).userId; @@ -382,6 +390,15 @@ app.post("/ssh/file_manager/ssh/connect", async (req, res) => { if (sshSessions[sessionId]?.isConnected) { cleanupSession(sessionId); } + + // Clean up any stale pending TOTP sessions + if (pendingTOTPSessions[sessionId]) { + try { + pendingTOTPSessions[sessionId].client.end(); + } catch {} + delete pendingTOTPSessions[sessionId]; + } + const client = new SSHClient(); let resolvedCredentials = { password, sshKey, keyPassword, authType }; @@ -545,9 +562,7 @@ app.post("/ssh/file_manager/ssh/connect", async (req, res) => { .json({ error: "Password required for password authentication" }); } - if (!forceKeyboardInteractive) { - config.password = resolvedCredentials.password; - } + config.password = resolvedCredentials.password; } else if (resolvedCredentials.authType === "none") { } else { fileLogger.warn( @@ -713,6 +728,7 @@ app.post("/ssh/file_manager/ssh/connect", async (req, res) => { prompts, totpPromptIndex, resolvedPassword: resolvedCredentials.password, + totpAttempts: 0, }; res.json({ @@ -785,6 +801,7 @@ app.post("/ssh/file_manager/ssh/connect", async (req, res) => { prompts, totpPromptIndex: passwordPromptIndex, resolvedPassword: resolvedCredentials.password, + totpAttempts: 0, }; res.json({ @@ -808,7 +825,47 @@ app.post("/ssh/file_manager/ssh/connect", async (req, res) => { }, ); - if (jumpHosts && jumpHosts.length > 0 && userId) { + if ( + useSocks5 && + (socks5Host || (socks5ProxyChain && (socks5ProxyChain as any).length > 0)) + ) { + try { + const socks5Socket = await createSocks5Connection(ip, port, { + useSocks5, + socks5Host, + socks5Port, + socks5Username, + socks5Password, + socks5ProxyChain: socks5ProxyChain as any, + }); + + if (socks5Socket) { + config.sock = socks5Socket; + client.connect(config); + return; + } else { + fileLogger.error("SOCKS5 socket is null for SFTP", undefined, { + operation: "sftp_socks5_socket_null", + sessionId, + }); + } + } catch (socks5Error) { + fileLogger.error("SOCKS5 connection failed", socks5Error, { + operation: "socks5_connect", + sessionId, + hostId, + proxyHost: socks5Host, + proxyPort: socks5Port || 1080, + }); + return res.status(500).json({ + error: + "SOCKS5 proxy connection failed: " + + (socks5Error instanceof Error + ? socks5Error.message + : "Unknown error"), + }); + } + } else if (jumpHosts && jumpHosts.length > 0 && userId) { try { const jumpClient = await createJumpHostChain(jumpHosts, userId); @@ -891,9 +948,7 @@ app.post("/ssh/file_manager/ssh/connect-totp", async (req, res) => { delete pendingTOTPSessions[sessionId]; try { session.client.end(); - } catch (error) { - sshLogger.debug("Operation failed, continuing", { error }); - } + } catch (error) {} fileLogger.warn("TOTP session timeout before code submission", { operation: "file_totp_verify", sessionId, @@ -1385,7 +1440,7 @@ app.post("/ssh/file_manager/ssh/writeFile", async (req, res) => { let fileBuffer; try { if (typeof content === "string") { - fileBuffer = Buffer.from(content, "utf8"); + fileBuffer = Buffer.from(content, "base64"); } else if (Buffer.isBuffer(content)) { fileBuffer = content; } else { @@ -1461,7 +1516,22 @@ app.post("/ssh/file_manager/ssh/writeFile", async (req, res) => { const tryFallbackMethod = () => { try { - const base64Content = Buffer.from(content, "utf8").toString("base64"); + let contentBuffer: Buffer; + if (typeof content === "string") { + try { + contentBuffer = Buffer.from(content, "base64"); + if (contentBuffer.toString("base64") !== content) { + contentBuffer = Buffer.from(content, "utf8"); + } + } catch { + contentBuffer = Buffer.from(content, "utf8"); + } + } else if (Buffer.isBuffer(content)) { + contentBuffer = content; + } else { + contentBuffer = Buffer.from(content); + } + const base64Content = contentBuffer.toString("base64"); const escapedPath = filePath.replace(/'/g, "'\"'\"'"); const writeCommand = `echo '${base64Content}' | base64 -d > '${escapedPath}' && echo "SUCCESS"`; @@ -1579,7 +1649,7 @@ app.post("/ssh/file_manager/ssh/uploadFile", async (req, res) => { let fileBuffer; try { if (typeof content === "string") { - fileBuffer = Buffer.from(content, "utf8"); + fileBuffer = Buffer.from(content, "base64"); } else if (Buffer.isBuffer(content)) { fileBuffer = content; } else { @@ -1662,7 +1732,22 @@ app.post("/ssh/file_manager/ssh/uploadFile", async (req, res) => { const tryFallbackMethod = () => { try { - const base64Content = Buffer.from(content, "utf8").toString("base64"); + let contentBuffer: Buffer; + if (typeof content === "string") { + try { + contentBuffer = Buffer.from(content, "base64"); + if (contentBuffer.toString("base64") !== content) { + contentBuffer = Buffer.from(content, "utf8"); + } + } catch { + contentBuffer = Buffer.from(content, "utf8"); + } + } else if (Buffer.isBuffer(content)) { + contentBuffer = content; + } else { + contentBuffer = Buffer.from(content); + } + const base64Content = contentBuffer.toString("base64"); const chunkSize = 1000000; const chunks = []; @@ -2940,21 +3025,10 @@ app.post("/ssh/file_manager/ssh/extractArchive", async (req, res) => { let errorOutput = ""; - stream.on("data", (data: Buffer) => { - fileLogger.debug("Extract stdout", { - operation: "extract_archive", - sessionId, - output: data.toString(), - }); - }); + stream.on("data", (data: Buffer) => {}); stream.stderr.on("data", (data: Buffer) => { errorOutput += data.toString(); - fileLogger.debug("Extract stderr", { - operation: "extract_archive", - sessionId, - error: data.toString(), - }); }); stream.on("close", (code: number) => { @@ -3132,21 +3206,10 @@ app.post("/ssh/file_manager/ssh/compressFiles", async (req, res) => { let errorOutput = ""; - stream.on("data", (data: Buffer) => { - fileLogger.debug("Compress stdout", { - operation: "compress_files", - sessionId, - output: data.toString(), - }); - }); + stream.on("data", (data: Buffer) => {}); stream.stderr.on("data", (data: Buffer) => { errorOutput += data.toString(); - fileLogger.debug("Compress stderr", { - operation: "compress_files", - sessionId, - error: data.toString(), - }); }); stream.on("close", (code: number) => { diff --git a/src/backend/ssh/server-stats.ts b/src/backend/ssh/server-stats.ts index b4c958c9..e17f0491 100644 --- a/src/backend/ssh/server-stats.ts +++ b/src/backend/ssh/server-stats.ts @@ -9,7 +9,8 @@ import { eq, and } from "drizzle-orm"; import { statsLogger, sshLogger } from "../utils/logger.js"; import { SimpleDBOps } from "../utils/simple-db-ops.js"; import { AuthManager } from "../utils/auth-manager.js"; -import type { AuthenticatedRequest } from "../../types/index.js"; +import { PermissionManager } from "../utils/permission-manager.js"; +import type { AuthenticatedRequest, ProxyNode } from "../../types/index.js"; import { collectCpuMetrics } from "./widgets/cpu-collector.js"; import { collectMemoryMetrics } from "./widgets/memory-collector.js"; import { collectDiskMetrics } from "./widgets/disk-collector.js"; @@ -18,6 +19,7 @@ import { collectUptimeMetrics } from "./widgets/uptime-collector.js"; import { collectProcessesMetrics } from "./widgets/processes-collector.js"; import { collectSystemMetrics } from "./widgets/system-collector.js"; import { collectLoginStats } from "./widgets/login-stats-collector.js"; +import { createSocks5Connection } from "../utils/socks5-helper.js"; async function resolveJumpHost( hostId: number, @@ -193,6 +195,82 @@ interface PooledConnection { hostKey: string; } +interface MetricsSession { + client: Client; + isConnected: boolean; + lastActive: number; + timeout?: NodeJS.Timeout; + activeOperations: number; + hostId: number; + userId: string; +} + +interface PendingTOTPSession { + client: Client; + finish: (responses: string[]) => void; + config: ConnectConfig; + createdAt: number; + sessionId: string; + hostId: number; + userId: string; + prompts?: Array<{ prompt: string; echo: boolean }>; + totpPromptIndex?: number; + resolvedPassword?: string; + totpAttempts: number; +} + +interface MetricsViewer { + sessionId: string; + userId: string; + hostId: number; + lastHeartbeat: number; +} + +const metricsSessions: Record = {}; +const pendingTOTPSessions: Record = {}; + +function cleanupMetricsSession(sessionId: string) { + const session = metricsSessions[sessionId]; + if (session) { + if (session.activeOperations > 0) { + statsLogger.warn( + `Deferring metrics session cleanup - ${session.activeOperations} active operations`, + { + operation: "cleanup_deferred", + sessionId, + activeOperations: session.activeOperations, + }, + ); + scheduleMetricsSessionCleanup(sessionId); + return; + } + + try { + session.client.end(); + } catch (error) {} + clearTimeout(session.timeout); + delete metricsSessions[sessionId]; + } +} + +function scheduleMetricsSessionCleanup(sessionId: string) { + const session = metricsSessions[sessionId]; + if (session) { + if (session.timeout) clearTimeout(session.timeout); + + session.timeout = setTimeout( + () => { + cleanupMetricsSession(sessionId); + }, + 30 * 60 * 1000, + ); + } +} + +function getSessionKey(hostId: number, userId: string): string { + return `${userId}:${hostId}`; +} + class SSHConnectionPool { private connections = new Map(); private maxConnectionsPerHost = 3; @@ -204,23 +282,52 @@ class SSHConnectionPool { () => { this.cleanup(); }, - 5 * 60 * 1000, + 2 * 60 * 1000, ); } private getHostKey(host: SSHHostWithCredentials): string { - return `${host.ip}:${host.port}:${host.username}`; + const socks5Key = host.useSocks5 + ? `:socks5:${host.socks5Host}:${host.socks5Port}:${JSON.stringify(host.socks5ProxyChain || [])}` + : ""; + return `${host.ip}:${host.port}:${host.username}${socks5Key}`; + } + + private isConnectionHealthy(client: Client): boolean { + try { + const sock = (client as any)._sock; + if (sock && (sock.destroyed || !sock.writable)) { + return false; + } + return true; + } catch (error) { + return false; + } } async getConnection(host: SSHHostWithCredentials): Promise { const hostKey = this.getHostKey(host); - const connections = this.connections.get(hostKey) || []; + let connections = this.connections.get(hostKey) || []; const available = connections.find((conn) => !conn.inUse); if (available) { - available.inUse = true; - available.lastUsed = Date.now(); - return available.client; + if (!this.isConnectionHealthy(available.client)) { + statsLogger.warn("Removing unhealthy connection from pool", { + operation: "remove_dead_connection", + hostKey, + }); + try { + available.client.end(); + } catch (error) { + // Ignore cleanup errors + } + connections = connections.filter((c) => c !== available); + this.connections.set(hostKey, connections); + } else { + available.inUse = true; + available.lastUsed = Date.now(); + return available.client; + } } if (connections.length < this.maxConnectionsPerHost) { @@ -255,6 +362,7 @@ class SSHConnectionPool { host: SSHHostWithCredentials, ): Promise { return new Promise(async (resolve, reject) => { + const config = buildSshConfig(host); const client = new Client(); const timeout = setTimeout(() => { client.end(); @@ -280,20 +388,33 @@ class SSHConnectionPool { prompts: Array<{ prompt: string; echo: boolean }>, finish: (responses: string[]) => void, ) => { - const totpPrompt = prompts.find((p) => + const totpPromptIndex = prompts.findIndex((p) => /verification code|verification_code|token|otp|2fa|authenticator|google.*auth/i.test( p.prompt, ), ); - if (totpPrompt) { - authFailureTracker.recordFailure(host.id, "TOTP", true); - client.end(); - reject( - new Error( - "TOTP authentication required but not supported in Server Stats", - ), - ); + if (totpPromptIndex !== -1) { + const sessionId = `totp-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`; + + pendingTOTPSessions[sessionId] = { + client, + finish, + config, + createdAt: Date.now(), + sessionId, + hostId: host.id, + userId: host.userId!, + prompts: prompts.map((p) => ({ + prompt: p.prompt, + echo: p.echo ?? false, + })), + totpPromptIndex, + resolvedPassword: host.password, + totpAttempts: 0, + }; + + return; } else if (host.password) { const responses = prompts.map((p) => { if (/password/i.test(p.prompt)) { @@ -309,7 +430,54 @@ class SSHConnectionPool { ); try { - const config = buildSshConfig(host); + if ( + host.useSocks5 && + (host.socks5Host || + (host.socks5ProxyChain && host.socks5ProxyChain.length > 0)) + ) { + try { + const socks5Socket = await createSocks5Connection( + host.ip, + host.port, + { + useSocks5: host.useSocks5, + socks5Host: host.socks5Host, + socks5Port: host.socks5Port, + socks5Username: host.socks5Username, + socks5Password: host.socks5Password, + socks5ProxyChain: host.socks5ProxyChain, + }, + ); + + if (socks5Socket) { + config.sock = socks5Socket; + client.connect(config); + return; + } else { + statsLogger.error("SOCKS5 socket is null", undefined, { + operation: "socks5_socket_null", + hostIp: host.ip, + }); + } + } catch (socks5Error) { + clearTimeout(timeout); + statsLogger.error("SOCKS5 connection error", socks5Error, { + operation: "socks5_connection_error", + hostIp: host.ip, + errorMessage: + socks5Error instanceof Error ? socks5Error.message : "Unknown", + }); + reject( + new Error( + "SOCKS5 proxy connection failed: " + + (socks5Error instanceof Error + ? socks5Error.message + : "Unknown error"), + ), + ); + return; + } + } if (host.jumpHosts && host.jumpHosts.length > 0 && host.userId) { const jumpClient = await createJumpHostChain( @@ -364,9 +532,28 @@ class SSHConnectionPool { } } + clearHostConnections(host: SSHHostWithCredentials): void { + const hostKey = this.getHostKey(host); + const connections = this.connections.get(hostKey) || []; + + for (const conn of connections) { + try { + conn.client.end(); + } catch (error) { + statsLogger.error("Error closing connection during cleanup", error, { + operation: "clear_connection_error", + }); + } + } + + this.connections.delete(hostKey); + } + private cleanup(): void { const now = Date.now(); const maxAge = 10 * 60 * 1000; + let totalCleaned = 0; + let totalUnhealthy = 0; for (const [hostKey, connections] of this.connections.entries()) { const activeConnections = connections.filter((conn) => { @@ -374,6 +561,19 @@ class SSHConnectionPool { try { conn.client.end(); } catch (error) {} + totalCleaned++; + return false; + } + if (!this.isConnectionHealthy(conn.client)) { + statsLogger.warn("Removing unhealthy connection during cleanup", { + operation: "cleanup_unhealthy", + hostKey, + inUse: conn.inUse, + }); + try { + conn.client.end(); + } catch (error) {} + totalUnhealthy++; return false; } return true; @@ -387,6 +587,26 @@ class SSHConnectionPool { } } + clearAllConnections(): void { + for (const [hostKey, connections] of this.connections.entries()) { + for (const conn of connections) { + try { + conn.client.end(); + } catch (error) { + statsLogger.error( + "Error closing connection during full cleanup", + error, + { + operation: "clear_all_error", + hostKey, + }, + ); + } + } + } + this.connections.clear(); + } + destroy(): void { clearInterval(this.cleanupInterval); for (const connections of this.connections.values()) { @@ -403,18 +623,34 @@ class SSHConnectionPool { class RequestQueue { private queues = new Map Promise>>(); private processing = new Set(); + private requestTimeout = 60000; async queueRequest(hostId: number, request: () => Promise): Promise { - return new Promise((resolve, reject) => { - const queue = this.queues.get(hostId) || []; - queue.push(async () => { + return new Promise((resolve, reject) => { + const wrappedRequest = async () => { try { - const result = await request(); + const result = await Promise.race([ + request(), + new Promise((_, rej) => + setTimeout( + () => + rej( + new Error( + `Request timeout after ${this.requestTimeout}ms for host ${hostId}`, + ), + ), + this.requestTimeout, + ), + ), + ]); resolve(result); } catch (error) { reject(error); } - }); + }; + + const queue = this.queues.get(hostId) || []; + queue.push(wrappedRequest); this.queues.set(hostId, queue); this.processQueue(hostId); }); @@ -436,7 +672,8 @@ class RequestQueue { } this.processing.delete(hostId); - if (queue.length > 0) { + const currentQueue = this.queues.get(hostId); + if (currentQueue && currentQueue.length > 0) { this.processQueue(hostId); } } @@ -487,7 +724,7 @@ interface AuthFailureRecord { class AuthFailureTracker { private failures = new Map(); private maxRetries = 3; - private backoffBase = 60000; + private backoffBase = 5000; recordFailure( hostId: number, @@ -571,11 +808,75 @@ class AuthFailureTracker { } } +class PollingBackoff { + private failures = new Map(); + private baseDelay = 30000; + private maxDelay = 600000; + private maxRetries = 5; + + recordFailure(hostId: number): void { + const existing = this.failures.get(hostId) || { count: 0, nextRetry: 0 }; + const delay = Math.min( + this.baseDelay * Math.pow(2, existing.count), + this.maxDelay, + ); + this.failures.set(hostId, { + count: existing.count + 1, + nextRetry: Date.now() + delay, + }); + } + + shouldSkip(hostId: number): boolean { + const backoff = this.failures.get(hostId); + if (!backoff) return false; + + if (backoff.count >= this.maxRetries) { + return true; + } + + return Date.now() < backoff.nextRetry; + } + + getBackoffInfo(hostId: number): string | null { + const backoff = this.failures.get(hostId); + if (!backoff) return null; + + if (backoff.count >= this.maxRetries) { + return `Max retries exceeded (${backoff.count} failures) - polling suspended`; + } + + const remainingMs = backoff.nextRetry - Date.now(); + if (remainingMs > 0) { + const remainingSec = Math.ceil(remainingMs / 1000); + return `Retry in ${remainingSec}s (attempt ${backoff.count}/${this.maxRetries})`; + } + + return null; + } + + reset(hostId: number): void { + this.failures.delete(hostId); + } + + cleanup(): void { + const maxAge = 60 * 60 * 1000; + const now = Date.now(); + + for (const [hostId, backoff] of this.failures.entries()) { + if (backoff.count < this.maxRetries && now - backoff.nextRetry > maxAge) { + this.failures.delete(hostId); + } + } + } +} + const connectionPool = new SSHConnectionPool(); const requestQueue = new RequestQueue(); const metricsCache = new MetricsCache(); const authFailureTracker = new AuthFailureTracker(); +const pollingBackoff = new PollingBackoff(); const authManager = AuthManager.getInstance(); +const permissionManager = PermissionManager.getInstance(); type HostStatus = "online" | "offline"; @@ -604,6 +905,13 @@ interface SSHHostWithCredentials { createdAt: string; updatedAt: string; userId: string; + + useSocks5?: boolean; + socks5Host?: string; + socks5Port?: number; + socks5Username?: string; + socks5Password?: string; + socks5ProxyChain?: ProxyNode[]; } type StatusEntry = { @@ -632,6 +940,7 @@ interface HostPollingConfig { statsConfig: StatsConfig; statusTimer?: NodeJS.Timeout; metricsTimer?: NodeJS.Timeout; + viewerUserId?: string; } class PollingManager { @@ -644,6 +953,15 @@ class PollingManager { timestamp: number; } >(); + private activeViewers = new Map>(); + private viewerDetails = new Map(); + private viewerCleanupInterval: NodeJS.Timeout; + + constructor() { + this.viewerCleanupInterval = setInterval(() => { + this.cleanupInactiveViewers(); + }, 60000); + } parseStatsConfig(statsConfigStr?: string | StatsConfig): StatsConfig { if (!statsConfigStr) { @@ -680,8 +998,13 @@ class PollingManager { return result; } - async startPollingForHost(host: SSHHostWithCredentials): Promise { + async startPollingForHost( + host: SSHHostWithCredentials, + options?: { statusOnly?: boolean; viewerUserId?: string }, + ): Promise { const statsConfig = this.parseStatsConfig(host.statsConfig); + const statusOnly = options?.statusOnly ?? false; + const viewerUserId = options?.viewerUserId; const existingConfig = this.pollingConfigs.get(host.id); @@ -706,32 +1029,33 @@ class PollingManager { const config: HostPollingConfig = { host, statsConfig, + viewerUserId, }; if (statsConfig.statusCheckEnabled) { const intervalMs = statsConfig.statusCheckInterval * 1000; - this.pollHostStatus(host); + this.pollHostStatus(host, viewerUserId); config.statusTimer = setInterval(() => { const latestConfig = this.pollingConfigs.get(host.id); if (latestConfig && latestConfig.statsConfig.statusCheckEnabled) { - this.pollHostStatus(latestConfig.host); + this.pollHostStatus(latestConfig.host, latestConfig.viewerUserId); } }, intervalMs); } else { this.statusStore.delete(host.id); } - if (statsConfig.metricsEnabled) { + if (!statusOnly && statsConfig.metricsEnabled) { const intervalMs = statsConfig.metricsInterval * 1000; - this.pollHostMetrics(host); + await this.pollHostMetrics(host, viewerUserId); config.metricsTimer = setInterval(() => { const latestConfig = this.pollingConfigs.get(host.id); if (latestConfig && latestConfig.statsConfig.metricsEnabled) { - this.pollHostMetrics(latestConfig.host); + this.pollHostMetrics(latestConfig.host, latestConfig.viewerUserId); } }, intervalMs); } else { @@ -741,48 +1065,80 @@ class PollingManager { this.pollingConfigs.set(host.id, config); } - private async pollHostStatus(host: SSHHostWithCredentials): Promise { + private async pollHostStatus( + host: SSHHostWithCredentials, + viewerUserId?: string, + ): Promise { + const userId = viewerUserId || host.userId; + const refreshedHost = await fetchHostById(host.id, userId); + if (!refreshedHost) { + return; + } + try { - const isOnline = await tcpPing(host.ip, host.port, 5000); + const isOnline = await tcpPing( + refreshedHost.ip, + refreshedHost.port, + 5000, + ); const statusEntry: StatusEntry = { status: isOnline ? "online" : "offline", lastChecked: new Date().toISOString(), }; - this.statusStore.set(host.id, statusEntry); + this.statusStore.set(refreshedHost.id, statusEntry); } catch (error) { const statusEntry: StatusEntry = { status: "offline", lastChecked: new Date().toISOString(), }; - this.statusStore.set(host.id, statusEntry); + this.statusStore.set(refreshedHost.id, statusEntry); } } - private async pollHostMetrics(host: SSHHostWithCredentials): Promise { - const config = this.pollingConfigs.get(host.id); + private async pollHostMetrics( + host: SSHHostWithCredentials, + viewerUserId?: string, + ): Promise { + const userId = viewerUserId || host.userId; + const refreshedHost = await fetchHostById(host.id, userId); + if (!refreshedHost) { + return; + } + + const config = this.pollingConfigs.get(refreshedHost.id); if (!config || !config.statsConfig.metricsEnabled) { return; } - const currentHost = config.host; + const hasExistingMetrics = this.metricsStore.has(refreshedHost.id); + + if (hasExistingMetrics && pollingBackoff.shouldSkip(host.id)) { + const backoffInfo = pollingBackoff.getBackoffInfo(host.id); + return; + } try { - const metrics = await collectMetrics(currentHost); - this.metricsStore.set(currentHost.id, { + const metrics = await collectMetrics(refreshedHost); + this.metricsStore.set(refreshedHost.id, { data: metrics, timestamp: Date.now(), }); + pollingBackoff.reset(refreshedHost.id); } catch (error) { const errorMessage = error instanceof Error ? error.message : String(error); - const latestConfig = this.pollingConfigs.get(currentHost.id); + pollingBackoff.recordFailure(refreshedHost.id); + + const latestConfig = this.pollingConfigs.get(refreshedHost.id); if (latestConfig && latestConfig.statsConfig.metricsEnabled) { - statsLogger.warn("Failed to collect metrics for host", { + const backoffInfo = pollingBackoff.getBackoffInfo(refreshedHost.id); + statsLogger.error("Failed to collect metrics for host", { operation: "metrics_poll_failed", - hostId: currentHost.id, - hostName: currentHost.name, + hostId: refreshedHost.id, + hostName: refreshedHost.name, error: errorMessage, + backoff: backoffInfo, }); } } @@ -807,6 +1163,14 @@ class PollingManager { } } + stopMetricsOnly(hostId: number): void { + const config = this.pollingConfigs.get(hostId); + if (config?.metricsTimer) { + clearInterval(config.metricsTimer); + config.metricsTimer = undefined; + } + } + getStatus(hostId: number): StatusEntry | undefined { return this.statusStore.get(hostId); } @@ -827,7 +1191,7 @@ class PollingManager { const hosts = await fetchAllHosts(userId); for (const host of hosts) { - await this.startPollingForHost(host); + await this.startPollingForHost(host, { statusOnly: true }); } } @@ -847,11 +1211,91 @@ class PollingManager { } for (const host of hosts) { - await this.startPollingForHost(host); + await this.startPollingForHost(host, { statusOnly: true }); + } + } + + registerViewer(hostId: number, sessionId: string, userId: string): void { + if (!this.activeViewers.has(hostId)) { + this.activeViewers.set(hostId, new Set()); + } + this.activeViewers.get(hostId)!.add(sessionId); + + this.viewerDetails.set(sessionId, { + sessionId, + userId, + hostId, + lastHeartbeat: Date.now(), + }); + + if (this.activeViewers.get(hostId)!.size === 1) { + this.startMetricsForHost(hostId, userId); + } + } + + updateHeartbeat(sessionId: string): boolean { + const viewer = this.viewerDetails.get(sessionId); + if (viewer) { + viewer.lastHeartbeat = Date.now(); + return true; + } + return false; + } + + unregisterViewer(hostId: number, sessionId: string): void { + const viewers = this.activeViewers.get(hostId); + if (viewers) { + viewers.delete(sessionId); + + if (viewers.size === 0) { + this.activeViewers.delete(hostId); + this.stopMetricsForHost(hostId); + } + } + this.viewerDetails.delete(sessionId); + } + + private async startMetricsForHost( + hostId: number, + userId: string, + ): Promise { + try { + const host = await fetchHostById(hostId, userId); + if (host) { + await this.startPollingForHost(host, { viewerUserId: userId }); + } + } catch (error) { + statsLogger.error("Failed to start metrics polling", { + operation: "start_metrics_error", + hostId, + error: error instanceof Error ? error.message : String(error), + }); + } + } + + private stopMetricsForHost(hostId: number): void { + this.stopMetricsOnly(hostId); + } + + private cleanupInactiveViewers(): void { + const now = Date.now(); + const maxInactivity = 120000; + + for (const [sessionId, viewer] of this.viewerDetails.entries()) { + if (now - viewer.lastHeartbeat > maxInactivity) { + statsLogger.warn("Cleaning up inactive viewer", { + operation: "cleanup_inactive_viewer", + sessionId, + hostId: viewer.hostId, + inactiveFor: Math.floor((now - viewer.lastHeartbeat) / 1000), + }); + this.unregisterViewer(viewer.hostId, sessionId); + } } } destroy(): void { + clearInterval(this.viewerCleanupInterval); for (const hostId of this.pollingConfigs.keys()) { this.stopPollingForHost(hostId); } @@ -954,11 +1398,23 @@ async function fetchHostById( return undefined; } + const accessInfo = await permissionManager.canAccessHost( + userId, + id, + "read", + ); + + if (!accessInfo.hasAccess) { + statsLogger.warn(`User ${userId} cannot access host ${id}`, { + operation: "fetch_host_access_denied", + userId, + hostId: id, + }); + return undefined; + } + const hosts = await SimpleDBOps.select( - getDb() - .select() - .from(sshData) - .where(and(eq(sshData.id, id), eq(sshData.userId, userId))), + getDb().select().from(sshData).where(eq(sshData.id, id)), "ssh_data", userId, ); @@ -1007,45 +1463,84 @@ async function resolveHostCredentials( createdAt: host.createdAt, updatedAt: host.updatedAt, userId: host.userId, + useSocks5: !!host.useSocks5, + socks5Host: host.socks5Host || undefined, + socks5Port: host.socks5Port || undefined, + socks5Username: host.socks5Username || undefined, + socks5Password: host.socks5Password || undefined, + socks5ProxyChain: host.socks5ProxyChain + ? JSON.parse(host.socks5ProxyChain as string) + : undefined, }; if (host.credentialId) { try { - const credentials = await SimpleDBOps.select( - getDb() - .select() - .from(sshCredentials) - .where( - and( - eq(sshCredentials.id, host.credentialId as number), - eq(sshCredentials.userId, userId), - ), - ), - "ssh_credentials", - userId, - ); + const ownerId = host.userId; + const isSharedHost = userId !== ownerId; - if (credentials.length > 0) { - const credential = credentials[0]; - baseHost.credentialId = credential.id; - baseHost.username = credential.username; - baseHost.authType = credential.auth_type || credential.authType; + if (isSharedHost) { + const { SharedCredentialManager } = + await import("../utils/shared-credential-manager.js"); + const sharedCredManager = SharedCredentialManager.getInstance(); + const sharedCred = await sharedCredManager.getSharedCredentialForUser( + host.id as number, + userId, + ); - if (credential.password) { - baseHost.password = credential.password; + baseHost.credentialId = host.credentialId; + baseHost.authType = sharedCred.authType; + + if (!host.overrideCredentialUsername) { + baseHost.username = sharedCred.username; } - if (credential.key) { - baseHost.key = credential.key; + + if (sharedCred.password) { + baseHost.password = sharedCred.password; } - if (credential.key_password || credential.keyPassword) { - baseHost.keyPassword = - credential.key_password || credential.keyPassword; + if (sharedCred.key) { + baseHost.key = sharedCred.key; } - if (credential.key_type || credential.keyType) { - baseHost.keyType = credential.key_type || credential.keyType; + if (sharedCred.keyPassword) { + baseHost.keyPassword = sharedCred.keyPassword; + } + if (sharedCred.keyType) { + baseHost.keyType = sharedCred.keyType; } } else { - addLegacyCredentials(baseHost, host); + const credentials = await SimpleDBOps.select( + getDb() + .select() + .from(sshCredentials) + .where(eq(sshCredentials.id, host.credentialId as number)), + "ssh_credentials", + userId, + ); + + if (credentials.length > 0) { + const credential = credentials[0]; + baseHost.credentialId = credential.id; + baseHost.authType = credential.auth_type || credential.authType; + + if (!host.overrideCredentialUsername) { + baseHost.username = credential.username; + } + + if (credential.password) { + baseHost.password = credential.password; + } + if (credential.key) { + baseHost.key = credential.key; + } + if (credential.key_password || credential.keyPassword) { + baseHost.keyPassword = + credential.key_password || credential.keyPassword; + } + if (credential.key_type || credential.keyType) { + baseHost.keyType = credential.key_type || credential.keyType; + } + } else { + addLegacyCredentials(baseHost, host); + } } } catch (error) { statsLogger.warn( @@ -1180,6 +1675,7 @@ function buildSshConfig(host: SSHHostWithCredentials): ConnectConfig { ); throw new Error(`Invalid SSH key format for host ${host.ip}`); } + } else if (host.authType === "none") { } else { throw new Error( `Unsupported authentication type '${host.authType}' for host ${host.ip}`, @@ -1194,6 +1690,7 @@ async function withSshConnection( fn: (client: Client) => Promise, ): Promise { const client = await connectionPool.getConnection(host); + try { const result = await fn(client); return result; @@ -1262,8 +1759,11 @@ async function collectMetrics(host: SSHHostWithCredentials): Promise<{ } return requestQueue.queueRequest(host.id, async () => { + const sessionKey = getSessionKey(host.id, host.userId!); + const existingSession = metricsSessions[sessionKey]; + try { - return await withSshConnection(host, async (client) => { + const collectFn = async (client: Client) => { const cpu = await collectCpuMetrics(client); const memory = await collectMemoryMetrics(client); const disk = await collectDiskMetrics(client); @@ -1280,12 +1780,7 @@ async function collectMetrics(host: SSHHostWithCredentials): Promise<{ }; try { login_stats = await collectLoginStats(client); - } catch (e) { - statsLogger.debug("Failed to collect login stats", { - operation: "login_stats_failed", - error: e instanceof Error ? e.message : String(e), - }); - } + } catch (e) {} const result = { cpu, @@ -1300,7 +1795,20 @@ async function collectMetrics(host: SSHHostWithCredentials): Promise<{ metricsCache.set(host.id, result); return result; - }); + }; + + if (existingSession && existingSession.isConnected) { + existingSession.activeOperations++; + try { + const result = await collectFn(existingSession.client); + existingSession.lastActive = Date.now(); + return result; + } finally { + existingSession.activeOperations--; + } + } else { + return await withSshConnection(host, collectFn); + } } catch (error) { if (error instanceof Error) { if (error.message.includes("TOTP authentication required")) { @@ -1402,6 +1910,20 @@ app.get("/status/:id", validateHostId, async (req, res) => { res.json(statusEntry); }); +app.post("/clear-connections", async (req, res) => { + const userId = (req as AuthenticatedRequest).userId; + + if (!SimpleDBOps.isUserDataUnlocked(userId)) { + return res.status(401).json({ + error: "Session expired - please log in again", + code: "SESSION_EXPIRED", + }); + } + + connectionPool.clearAllConnections(); + res.json({ message: "All SSH connections cleared" }); +}); + app.post("/refresh", async (req, res) => { const userId = (req as AuthenticatedRequest).userId; @@ -1412,6 +1934,8 @@ app.post("/refresh", async (req, res) => { }); } + connectionPool.clearAllConnections(); + await pollingManager.refreshHostPolling(userId); res.json({ message: "Polling refreshed" }); }); @@ -1434,6 +1958,8 @@ app.post("/host-updated", async (req, res) => { try { const host = await fetchHostById(hostId, userId); if (host) { + connectionPool.clearHostConnections(host); + await pollingManager.startPollingForHost(host); res.json({ message: "Host polling started" }); } else { @@ -1514,6 +2040,457 @@ app.get("/metrics/:id", validateHostId, async (req, res) => { }); }); +app.post("/metrics/start/:id", validateHostId, async (req, res) => { + const id = Number(req.params.id); + const userId = (req as AuthenticatedRequest).userId; + + if (!SimpleDBOps.isUserDataUnlocked(userId)) { + return res.status(401).json({ + error: "Session expired - please log in again", + code: "SESSION_EXPIRED", + }); + } + + try { + const host = await fetchHostById(id, userId); + if (!host) { + return res.status(404).json({ error: "Host not found" }); + } + + const sessionKey = getSessionKey(host.id, userId); + + const existingSession = metricsSessions[sessionKey]; + if (existingSession && existingSession.isConnected) { + return res.json({ success: true }); + } + + const config = buildSshConfig(host); + const client = new Client(); + + const connectionPromise = new Promise<{ + success: boolean; + requires_totp?: boolean; + sessionId?: string; + prompt?: string; + viewerSessionId?: string; + }>((resolve, reject) => { + let isResolved = false; + + const timeout = setTimeout(() => { + if (!isResolved) { + isResolved = true; + client.end(); + reject(new Error("Connection timeout")); + } + }, 60000); + + client.on( + "keyboard-interactive", + (name, instructions, instructionsLang, prompts, finish) => { + const totpPromptIndex = prompts.findIndex((p) => + /verification code|verification_code|token|otp|2fa|authenticator|google.*auth/i.test( + p.prompt, + ), + ); + + if (totpPromptIndex !== -1) { + const sessionId = `totp-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`; + + pendingTOTPSessions[sessionId] = { + client, + finish, + config, + createdAt: Date.now(), + sessionId, + hostId: host.id, + userId: host.userId!, + prompts: prompts.map((p) => ({ + prompt: p.prompt, + echo: p.echo ?? false, + })), + totpPromptIndex, + resolvedPassword: host.password, + totpAttempts: 0, + }; + + clearTimeout(timeout); + if (!isResolved) { + isResolved = true; + resolve({ + success: false, + requires_totp: true, + sessionId, + prompt: prompts[totpPromptIndex].prompt, + }); + } + return; + } else { + const responses = prompts.map((p) => { + if (/password/i.test(p.prompt) && host.password) { + return host.password; + } + return ""; + }); + finish(responses); + } + }, + ); + + client.on("ready", () => { + clearTimeout(timeout); + if (!isResolved) { + isResolved = true; + + metricsSessions[sessionKey] = { + client, + isConnected: true, + lastActive: Date.now(), + activeOperations: 0, + hostId: host.id, + userId, + }; + scheduleMetricsSessionCleanup(sessionKey); + + const viewerSessionId = `viewer-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`; + pollingManager.registerViewer(host.id, viewerSessionId, userId); + + resolve({ success: true, viewerSessionId }); + } + }); + + client.on("error", (error) => { + clearTimeout(timeout); + if (!isResolved) { + isResolved = true; + statsLogger.error("SSH connection error in metrics/start", { + operation: "metrics_start_ssh_error", + hostId: host.id, + error: error instanceof Error ? error.message : String(error), + }); + reject(error); + } + }); + + if ( + host.useSocks5 && + (host.socks5Host || + (host.socks5ProxyChain && host.socks5ProxyChain.length > 0)) + ) { + createSocks5Connection(host.ip, host.port, { + useSocks5: host.useSocks5, + socks5Host: host.socks5Host, + socks5Port: host.socks5Port, + socks5Username: host.socks5Username, + socks5Password: host.socks5Password, + socks5ProxyChain: host.socks5ProxyChain, + }) + .then((socks5Socket) => { + if (socks5Socket) { + config.sock = socks5Socket; + } + client.connect(config); + }) + .catch((error) => { + if (!isResolved) { + isResolved = true; + clearTimeout(timeout); + reject(error); + } + }); + } else { + client.connect(config); + } + }); + + const result = await connectionPromise; + res.json(result); + } catch (error) { + statsLogger.error("Failed to start metrics collection", { + operation: "metrics_start_error", + hostId: id, + error: error instanceof Error ? error.message : String(error), + }); + res.status(500).json({ + error: + error instanceof Error + ? error.message + : "Failed to start metrics collection", + }); + } +}); + +app.post("/metrics/stop/:id", validateHostId, async (req, res) => { + const id = Number(req.params.id); + const userId = (req as AuthenticatedRequest).userId; + const { viewerSessionId } = req.body; + + if (!SimpleDBOps.isUserDataUnlocked(userId)) { + return res.status(401).json({ + error: "Session expired - please log in again", + code: "SESSION_EXPIRED", + }); + } + + try { + const sessionKey = getSessionKey(id, userId); + const session = metricsSessions[sessionKey]; + + if (session) { + cleanupMetricsSession(sessionKey); + } + + if (viewerSessionId && typeof viewerSessionId === "string") { + pollingManager.unregisterViewer(id, viewerSessionId); + } else { + pollingManager.stopMetricsOnly(id); + } + + res.json({ success: true }); + } catch (error) { + statsLogger.error("Failed to stop metrics collection", { + operation: "metrics_stop_error", + hostId: id, + error: error instanceof Error ? error.message : String(error), + }); + res.status(500).json({ + error: + error instanceof Error + ? error.message + : "Failed to stop metrics collection", + }); + } +}); + +app.post("/metrics/connect-totp", async (req, res) => { + const { sessionId, totpCode } = req.body; + const userId = (req as AuthenticatedRequest).userId; + + if (!SimpleDBOps.isUserDataUnlocked(userId)) { + return res.status(401).json({ + error: "Session expired - please log in again", + code: "SESSION_EXPIRED", + }); + } + + if (!sessionId || !totpCode) { + return res.status(400).json({ error: "Missing sessionId or totpCode" }); + } + + const session = pendingTOTPSessions[sessionId]; + if (!session) { + return res.status(404).json({ error: "TOTP session not found or expired" }); + } + + if (Date.now() - session.createdAt > 180000) { + delete pendingTOTPSessions[sessionId]; + try { + session.client.end(); + } catch {} + return res.status(408).json({ error: "TOTP session timeout" }); + } + + if (session.userId !== userId) { + return res.status(403).json({ error: "Unauthorized" }); + } + + session.totpAttempts++; + if (session.totpAttempts > 3) { + delete pendingTOTPSessions[sessionId]; + try { + session.client.end(); + } catch {} + return res.status(429).json({ error: "Too many TOTP attempts" }); + } + + try { + const responses = (session.prompts || []).map((p, idx) => { + if (idx === session.totpPromptIndex) { + return totpCode.trim(); + } else if (/password/i.test(p.prompt) && session.resolvedPassword) { + return session.resolvedPassword; + } + return ""; + }); + + const connectionPromise = new Promise((resolve, reject) => { + const timeout = setTimeout(() => { + reject(new Error("TOTP verification timeout")); + }, 30000); + + session.client.once( + "keyboard-interactive", + (name, instructions, instructionsLang, prompts, finish) => { + statsLogger.warn("Second keyboard-interactive received after TOTP", { + operation: "totp_second_keyboard_interactive", + hostId: session.hostId, + sessionId, + prompts: prompts.map((p) => p.prompt), + }); + const secondResponses = prompts.map((p) => { + if (/password/i.test(p.prompt) && session.resolvedPassword) { + return session.resolvedPassword; + } + return ""; + }); + finish(secondResponses); + }, + ); + + session.client.once("ready", () => { + clearTimeout(timeout); + resolve(); + }); + + session.client.once("error", (error) => { + clearTimeout(timeout); + statsLogger.error("SSH client error after TOTP", { + operation: "totp_client_error", + hostId: session.hostId, + sessionId, + error: error instanceof Error ? error.message : String(error), + }); + reject(error); + }); + }); + + session.finish(responses); + + await connectionPromise; + + const sessionKey = getSessionKey(session.hostId, userId); + metricsSessions[sessionKey] = { + client: session.client, + isConnected: true, + lastActive: Date.now(), + activeOperations: 0, + hostId: session.hostId, + userId, + }; + scheduleMetricsSessionCleanup(sessionKey); + + delete pendingTOTPSessions[sessionId]; + + const viewerSessionId = `viewer-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`; + pollingManager.registerViewer(session.hostId, viewerSessionId, userId); + + res.json({ success: true, viewerSessionId }); + } catch (error) { + statsLogger.error("TOTP verification failed", { + operation: "totp_verification_failed", + hostId: session.hostId, + sessionId, + error: error instanceof Error ? error.message : String(error), + }); + + if (session.totpAttempts >= 3) { + delete pendingTOTPSessions[sessionId]; + try { + session.client.end(); + } catch {} + } + + res.status(401).json({ + error: "TOTP verification failed", + attemptsRemaining: Math.max(0, 3 - session.totpAttempts), + }); + } +}); + +app.post("/metrics/heartbeat", async (req, res) => { + const { viewerSessionId } = req.body; + const userId = (req as AuthenticatedRequest).userId; + + if (!SimpleDBOps.isUserDataUnlocked(userId)) { + return res.status(401).json({ + error: "Session expired - please log in again", + code: "SESSION_EXPIRED", + }); + } + + if (!viewerSessionId || typeof viewerSessionId !== "string") { + return res.status(400).json({ error: "Invalid viewerSessionId" }); + } + + try { + const success = pollingManager.updateHeartbeat(viewerSessionId); + if (success) { + res.json({ success: true }); + } else { + res.status(404).json({ error: "Viewer session not found" }); + } + } catch (error) { + statsLogger.error("Failed to update heartbeat", { + operation: "heartbeat_error", + viewerSessionId, + error: error instanceof Error ? error.message : String(error), + }); + res.status(500).json({ error: "Failed to update heartbeat" }); + } +}); + +app.post("/metrics/register-viewer", async (req, res) => { + const { hostId } = req.body; + const userId = (req as AuthenticatedRequest).userId; + + if (!SimpleDBOps.isUserDataUnlocked(userId)) { + return res.status(401).json({ + error: "Session expired - please log in again", + code: "SESSION_EXPIRED", + }); + } + + if (!hostId || typeof hostId !== "number") { + return res.status(400).json({ error: "Invalid hostId" }); + } + + try { + const viewerSessionId = `viewer-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`; + pollingManager.registerViewer(hostId, viewerSessionId, userId); + res.json({ success: true, viewerSessionId }); + } catch (error) { + statsLogger.error("Failed to register viewer", { + operation: "register_viewer_error", + hostId, + userId, + error: error instanceof Error ? error.message : String(error), + }); + res.status(500).json({ error: "Failed to register viewer" }); + } +}); + +app.post("/metrics/unregister-viewer", async (req, res) => { + const { hostId, viewerSessionId } = req.body; + const userId = (req as AuthenticatedRequest).userId; + + if (!SimpleDBOps.isUserDataUnlocked(userId)) { + return res.status(401).json({ + error: "Session expired - please log in again", + code: "SESSION_EXPIRED", + }); + } + + if (!hostId || typeof hostId !== "number") { + return res.status(400).json({ error: "Invalid hostId" }); + } + + if (!viewerSessionId || typeof viewerSessionId !== "string") { + return res.status(400).json({ error: "Invalid viewerSessionId" }); + } + + try { + pollingManager.unregisterViewer(hostId, viewerSessionId); + res.json({ success: true }); + } catch (error) { + statsLogger.error("Failed to unregister viewer", { + operation: "unregister_viewer_error", + hostId, + viewerSessionId, + error: error instanceof Error ? error.message : String(error), + }); + res.status(500).json({ error: "Failed to unregister viewer" }); + } +}); + process.on("SIGINT", () => { pollingManager.destroy(); connectionPool.destroy(); @@ -1539,6 +2516,7 @@ app.listen(PORT, async () => { setInterval( () => { authFailureTracker.cleanup(); + pollingBackoff.cleanup(); }, 10 * 60 * 1000, ); diff --git a/src/backend/ssh/terminal.ts b/src/backend/ssh/terminal.ts index 78c181e7..64223bfe 100644 --- a/src/backend/ssh/terminal.ts +++ b/src/backend/ssh/terminal.ts @@ -14,6 +14,7 @@ import { sshLogger } from "../utils/logger.js"; import { SimpleDBOps } from "../utils/simple-db-ops.js"; import { AuthManager } from "../utils/auth-manager.js"; import { UserCrypto } from "../utils/user-crypto.js"; +import { createSocks5Connection } from "../utils/socks5-helper.js"; interface ConnectToHostData { cols: number; @@ -32,6 +33,12 @@ interface ConnectToHostData { userId?: string; forceKeyboardInteractive?: boolean; jumpHosts?: Array<{ hostId: number }>; + useSocks5?: boolean; + socks5Host?: string; + socks5Port?: number; + socks5Username?: string; + socks5Password?: string; + socks5ProxyChain?: unknown; }; initialPath?: string; executeCommand?: string; @@ -130,10 +137,12 @@ async function createJumpHostChain( const clients: Client[] = []; try { - for (let i = 0; i < jumpHosts.length; i++) { - const jumpHostConfig = await resolveJumpHost(jumpHosts[i].hostId, userId); + const jumpHostConfigs = await Promise.all( + jumpHosts.map((jh) => resolveJumpHost(jh.hostId, userId)), + ); - if (!jumpHostConfig) { + for (let i = 0; i < jumpHostConfigs.length; i++) { + if (!jumpHostConfigs[i]) { sshLogger.error(`Jump host ${i + 1} not found`, undefined, { operation: "jump_host_chain", hostId: jumpHosts[i].hostId, @@ -141,6 +150,10 @@ async function createJumpHostChain( clients.forEach((c) => c.end()); return null; } + } + + for (let i = 0; i < jumpHostConfigs.length; i++) { + const jumpHostConfig = jumpHostConfigs[i]; const jumpClient = new Client(); clients.push(jumpClient); @@ -316,9 +329,10 @@ wss.on("connection", async (ws: WebSocket, req) => { let sshConn: Client | null = null; let sshStream: ClientChannel | null = null; - let pingInterval: NodeJS.Timeout | null = null; let keyboardInteractiveFinish: ((responses: string[]) => void) | null = null; let totpPromptSent = false; + let totpAttempts = 0; + let totpTimeout: NodeJS.Timeout | null = null; let isKeyboardInteractive = false; let keyboardInteractiveResponded = false; let isConnecting = false; @@ -435,9 +449,15 @@ wss.on("connection", async (ws: WebSocket, req) => { case "totp_response": { const totpData = data as TOTPResponseData; if (keyboardInteractiveFinish && totpData?.code) { + if (totpTimeout) { + clearTimeout(totpTimeout); + totpTimeout = null; + } const totpCode = totpData.code; + totpAttempts++; keyboardInteractiveFinish([totpCode]); keyboardInteractiveFinish = null; + totpPromptSent = false; } else { sshLogger.warn("TOTP response received but no callback available", { operation: "totp_response_error", @@ -458,6 +478,10 @@ wss.on("connection", async (ws: WebSocket, req) => { case "password_response": { const passwordData = data as TOTPResponseData; if (keyboardInteractiveFinish && passwordData?.code) { + if (totpTimeout) { + clearTimeout(totpTimeout); + totpTimeout = null; + } const password = passwordData.code; keyboardInteractiveFinish([password]); keyboardInteractiveFinish = null; @@ -597,6 +621,13 @@ wss.on("connection", async (ws: WebSocket, req) => { isConnecting, isConnected, }); + ws.send( + JSON.stringify({ + type: "error", + message: "Connection already in progress", + code: "DUPLICATE_CONNECTION", + }), + ); return; } @@ -617,7 +648,7 @@ wss.on("connection", async (ws: WebSocket, req) => { ); cleanupSSH(connectionTimeout); } - }, 120000); + }, 30000); let resolvedCredentials = { password, key, keyPassword, keyType, authType }; let authMethodNotAvailable = false; @@ -802,8 +833,6 @@ wss.on("connection", async (ws: WebSocket, req) => { ); }); - setupPingInterval(); - if (initialPath && initialPath.trim() !== "") { const cdCommand = `cd "${initialPath.replace(/"/g, '\\"')}" && pwd\n`; stream.write(cdCommand); @@ -987,6 +1016,25 @@ wss.on("connection", async (ws: WebSocket, req) => { finish(responses); }; + + totpTimeout = setTimeout(() => { + if (keyboardInteractiveFinish) { + keyboardInteractiveFinish = null; + totpPromptSent = false; + sshLogger.warn("TOTP prompt timeout", { + operation: "totp_timeout", + hostId: id, + }); + ws.send( + JSON.stringify({ + type: "error", + message: "TOTP verification timeout. Please reconnect.", + }), + ); + cleanupSSH(connectionTimeout); + } + }, 180000); + ws.send( JSON.stringify({ type: "totp_required", @@ -1021,6 +1069,24 @@ wss.on("connection", async (ws: WebSocket, req) => { finish(responses); }; + totpTimeout = setTimeout(() => { + if (keyboardInteractiveFinish) { + keyboardInteractiveFinish = null; + keyboardInteractiveResponded = false; + sshLogger.warn("Password prompt timeout", { + operation: "password_timeout", + hostId: id, + }); + ws.send( + JSON.stringify({ + type: "error", + message: "Password verification timeout. Please reconnect.", + }), + ); + cleanupSSH(connectionTimeout); + } + }, 180000); + ws.send( JSON.stringify({ type: "password_required", @@ -1049,10 +1115,10 @@ wss.on("connection", async (ws: WebSocket, req) => { tryKeyboard: true, keepaliveInterval: 30000, keepaliveCountMax: 3, - readyTimeout: 120000, + readyTimeout: 30000, tcpKeepAlive: true, tcpKeepAliveInitialDelay: 30000, - timeout: 120000, + timeout: 30000, env: { TERM: "xterm-256color", LANG: "en_US.UTF-8", @@ -1128,9 +1194,7 @@ wss.on("connection", async (ws: WebSocket, req) => { return; } - if (!hostConfig.forceKeyboardInteractive) { - connectConfig.password = resolvedCredentials.password; - } + connectConfig.password = resolvedCredentials.password; } else if ( resolvedCredentials.authType === "key" && resolvedCredentials.key @@ -1183,6 +1247,49 @@ wss.on("connection", async (ws: WebSocket, req) => { return; } + if ( + hostConfig.useSocks5 && + (hostConfig.socks5Host || + (hostConfig.socks5ProxyChain && + (hostConfig.socks5ProxyChain as any).length > 0)) + ) { + try { + const socks5Socket = await createSocks5Connection(ip, port, { + useSocks5: hostConfig.useSocks5, + socks5Host: hostConfig.socks5Host, + socks5Port: hostConfig.socks5Port, + socks5Username: hostConfig.socks5Username, + socks5Password: hostConfig.socks5Password, + socks5ProxyChain: hostConfig.socks5ProxyChain as any, + }); + + if (socks5Socket) { + connectConfig.sock = socks5Socket; + sshConn.connect(connectConfig); + return; + } + } catch (socks5Error) { + sshLogger.error("SOCKS5 connection failed", socks5Error, { + operation: "socks5_connect", + hostId: id, + proxyHost: hostConfig.socks5Host, + proxyPort: hostConfig.socks5Port || 1080, + }); + ws.send( + JSON.stringify({ + type: "error", + message: + "SOCKS5 proxy connection failed: " + + (socks5Error instanceof Error + ? socks5Error.message + : "Unknown error"), + }), + ); + cleanupSSH(connectionTimeout); + return; + } + } + if ( hostConfig.jumpHosts && hostConfig.jumpHosts.length > 0 && @@ -1279,9 +1386,9 @@ wss.on("connection", async (ws: WebSocket, req) => { clearTimeout(timeoutId); } - if (pingInterval) { - clearInterval(pingInterval); - pingInterval = null; + if (totpTimeout) { + clearTimeout(totpTimeout); + totpTimeout = null; } if (sshStream) { @@ -1309,35 +1416,21 @@ wss.on("connection", async (ws: WebSocket, req) => { } totpPromptSent = false; + totpAttempts = 0; isKeyboardInteractive = false; keyboardInteractiveResponded = false; keyboardInteractiveFinish = null; isConnecting = false; isConnected = false; - - setTimeout(() => { - isCleaningUp = false; - }, 100); + isCleaningUp = false; } - function setupPingInterval() { - pingInterval = setInterval(() => { - if (sshConn && sshStream) { - try { - sshStream.write("\x00"); - } catch (e: unknown) { - sshLogger.error( - "SSH keepalive failed: " + - (e instanceof Error ? e.message : "Unknown error"), - ); - cleanupSSH(); - } - } else if (!sshConn || !sshStream) { - if (pingInterval) { - clearInterval(pingInterval); - pingInterval = null; - } - } - }, 30000); - } + // Note: PTY-level keepalive (writing \x00 to the stream) was removed. + // It was causing ^@ characters to appear in terminals with echoctl enabled. + // SSH-level keepalive is configured via connectConfig (keepaliveInterval, + // keepaliveCountMax, tcpKeepAlive), which handles connection health monitoring + // without producing visible output on the terminal. + // + // See: https://github.com/Termix-SSH/Support/issues/232 + // See: https://github.com/Termix-SSH/Support/issues/309 }); diff --git a/src/backend/ssh/tunnel.ts b/src/backend/ssh/tunnel.ts index 4365abb8..fbef615b 100644 --- a/src/backend/ssh/tunnel.ts +++ b/src/backend/ssh/tunnel.ts @@ -1,4 +1,4 @@ -import express from "express"; +import express, { type Response } from "express"; import cors from "cors"; import cookieParser from "cookie-parser"; import { Client } from "ssh2"; @@ -13,12 +13,16 @@ import type { TunnelStatus, VerificationData, ErrorType, + AuthenticatedRequest, } from "../../types/index.js"; import { CONNECTION_STATES } from "../../types/index.js"; import { tunnelLogger, sshLogger } from "../utils/logger.js"; import { SystemCrypto } from "../utils/system-crypto.js"; import { SimpleDBOps } from "../utils/simple-db-ops.js"; import { DataCrypto } from "../utils/data-crypto.js"; +import { createSocks5Connection } from "../utils/socks5-helper.js"; +import { AuthManager } from "../utils/auth-manager.js"; +import { PermissionManager } from "../utils/permission-manager.js"; const app = express(); app.use( @@ -63,6 +67,10 @@ app.use( app.use(cookieParser()); app.use(express.json()); +const authManager = AuthManager.getInstance(); +const permissionManager = PermissionManager.getInstance(); +const authenticateJWT = authManager.createAuthMiddleware(); + const activeTunnels = new Map(); const retryCounters = new Map(); const connectionStatus = new Map(); @@ -77,6 +85,7 @@ const tunnelConnecting = new Set(); const tunnelConfigs = new Map(); const activeTunnelProcesses = new Map(); +const pendingTunnelOperations = new Map>(); function broadcastTunnelStatus(tunnelName: string, status: TunnelStatus): void { if ( @@ -154,10 +163,75 @@ function getTunnelMarker(tunnelName: string) { return `TUNNEL_MARKER_${tunnelName.replace(/[^a-zA-Z0-9]/g, "_")}`; } -function cleanupTunnelResources( +function normalizeTunnelName( + hostId: number, + tunnelIndex: number, + displayName: string, + sourcePort: number, + endpointHost: string, + endpointPort: number, +): string { + return `${hostId}::${tunnelIndex}::${displayName}::${sourcePort}::${endpointHost}::${endpointPort}`; +} + +function parseTunnelName(tunnelName: string): { + hostId?: number; + tunnelIndex?: number; + displayName: string; + sourcePort: string; + endpointHost: string; + endpointPort: string; + isLegacyFormat: boolean; +} { + const parts = tunnelName.split("::"); + + if (parts.length === 6) { + return { + hostId: parseInt(parts[0]), + tunnelIndex: parseInt(parts[1]), + displayName: parts[2], + sourcePort: parts[3], + endpointHost: parts[4], + endpointPort: parts[5], + isLegacyFormat: false, + }; + } + + tunnelLogger.warn(`Legacy tunnel name format: ${tunnelName}`); + + const legacyParts = tunnelName.split("_"); + return { + displayName: legacyParts[0] || "unknown", + sourcePort: legacyParts[legacyParts.length - 3] || "0", + endpointHost: legacyParts[legacyParts.length - 2] || "unknown", + endpointPort: legacyParts[legacyParts.length - 1] || "0", + isLegacyFormat: true, + }; +} + +function validateTunnelConfig( + tunnelName: string, + tunnelConfig: TunnelConfig, +): boolean { + const parsed = parseTunnelName(tunnelName); + + if (parsed.isLegacyFormat) { + return true; + } + + return ( + parsed.hostId === tunnelConfig.sourceHostId && + parsed.tunnelIndex === tunnelConfig.tunnelIndex && + String(parsed.sourcePort) === String(tunnelConfig.sourcePort) && + parsed.endpointHost === tunnelConfig.endpointHost && + String(parsed.endpointPort) === String(tunnelConfig.endpointPort) + ); +} + +async function cleanupTunnelResources( tunnelName: string, forceCleanup = false, -): void { +): Promise { if (cleanupInProgress.has(tunnelName)) { return; } @@ -170,13 +244,16 @@ function cleanupTunnelResources( const tunnelConfig = tunnelConfigs.get(tunnelName); if (tunnelConfig) { - killRemoteTunnelByMarker(tunnelConfig, tunnelName, (err) => { - cleanupInProgress.delete(tunnelName); - if (err) { - tunnelLogger.error( - `Failed to kill remote tunnel for '${tunnelName}': ${err.message}`, - ); - } + await new Promise((resolve) => { + killRemoteTunnelByMarker(tunnelConfig, tunnelName, (err) => { + cleanupInProgress.delete(tunnelName); + if (err) { + tunnelLogger.error( + `Failed to kill remote tunnel for '${tunnelName}': ${err.message}`, + ); + } + resolve(); + }); }); } else { cleanupInProgress.delete(tunnelName); @@ -272,11 +349,11 @@ function resetRetryState(tunnelName: string): void { }); } -function handleDisconnect( +async function handleDisconnect( tunnelName: string, tunnelConfig: TunnelConfig | null, shouldRetry = true, -): void { +): Promise { if (tunnelVerifications.has(tunnelName)) { try { const verification = tunnelVerifications.get(tunnelName); @@ -286,7 +363,11 @@ function handleDisconnect( tunnelVerifications.delete(tunnelName); } - cleanupTunnelResources(tunnelName); + while (cleanupInProgress.has(tunnelName)) { + await new Promise((resolve) => setTimeout(resolve, 100)); + } + + await cleanupTunnelResources(tunnelName); if (manualDisconnects.has(tunnelName)) { resetRetryState(tunnelName); @@ -490,43 +571,76 @@ async function connectSSHTunnel( authMethod: tunnelConfig.sourceAuthMethod, }; - if (tunnelConfig.sourceCredentialId && tunnelConfig.sourceUserId) { - try { - const userDataKey = DataCrypto.getUserDataKey(tunnelConfig.sourceUserId); - if (userDataKey) { - const credentials = await SimpleDBOps.select( - getDb() - .select() - .from(sshCredentials) - .where( - and( - eq(sshCredentials.id, tunnelConfig.sourceCredentialId), - eq(sshCredentials.userId, tunnelConfig.sourceUserId), - ), - ), - "ssh_credentials", - tunnelConfig.sourceUserId, - ); + const effectiveUserId = + tunnelConfig.requestingUserId || tunnelConfig.sourceUserId; - if (credentials.length > 0) { - const credential = credentials[0]; - resolvedSourceCredentials = { - password: credential.password as string | undefined, - sshKey: (credential.private_key || - credential.privateKey || - credential.key) as string | undefined, - keyPassword: (credential.key_password || credential.keyPassword) as - | string - | undefined, - keyType: (credential.key_type || credential.keyType) as - | string - | undefined, - authMethod: (credential.auth_type || credential.authType) as string, - }; + if (tunnelConfig.sourceCredentialId && effectiveUserId) { + try { + if ( + tunnelConfig.requestingUserId && + tunnelConfig.requestingUserId !== tunnelConfig.sourceUserId + ) { + const { SharedCredentialManager } = + await import("../utils/shared-credential-manager.js"); + const sharedCredManager = SharedCredentialManager.getInstance(); + + if (tunnelConfig.sourceHostId) { + const sharedCred = await sharedCredManager.getSharedCredentialForUser( + tunnelConfig.sourceHostId, + tunnelConfig.requestingUserId, + ); + + if (sharedCred) { + resolvedSourceCredentials = { + password: sharedCred.password, + sshKey: sharedCred.key, + keyPassword: sharedCred.keyPassword, + keyType: sharedCred.keyType, + authMethod: sharedCred.authType, + }; + } else { + const errorMessage = `Cannot connect tunnel '${tunnelName}': shared credentials not available`; + tunnelLogger.error(errorMessage); + broadcastTunnelStatus(tunnelName, { + connected: false, + status: CONNECTION_STATES.FAILED, + reason: errorMessage, + }); + return; + } + } + } else { + const userDataKey = DataCrypto.getUserDataKey(effectiveUserId); + if (userDataKey) { + const credentials = await SimpleDBOps.select( + getDb() + .select() + .from(sshCredentials) + .where(eq(sshCredentials.id, tunnelConfig.sourceCredentialId)), + "ssh_credentials", + effectiveUserId, + ); + + if (credentials.length > 0) { + const credential = credentials[0]; + resolvedSourceCredentials = { + password: credential.password as string | undefined, + sshKey: (credential.private_key || + credential.privateKey || + credential.key) as string | undefined, + keyPassword: (credential.key_password || + credential.keyPassword) as string | undefined, + keyType: (credential.key_type || credential.keyType) as + | string + | undefined, + authMethod: (credential.auth_type || + credential.authType) as string, + }; + } } } } catch (error) { - tunnelLogger.warn("Failed to resolve source credentials from database", { + tunnelLogger.warn("Failed to resolve source credentials", { operation: "tunnel_connect", tunnelName, credentialId: tunnelConfig.sourceCredentialId, @@ -581,12 +695,7 @@ async function connectSSHTunnel( getDb() .select() .from(sshCredentials) - .where( - and( - eq(sshCredentials.id, tunnelConfig.endpointCredentialId), - eq(sshCredentials.userId, tunnelConfig.endpointUserId), - ), - ), + .where(eq(sshCredentials.id, tunnelConfig.endpointCredentialId)), "ssh_credentials", tunnelConfig.endpointUserId, ); @@ -1016,6 +1125,51 @@ async function connectSSHTunnel( }); } + if ( + tunnelConfig.useSocks5 && + (tunnelConfig.socks5Host || + (tunnelConfig.socks5ProxyChain && + tunnelConfig.socks5ProxyChain.length > 0)) + ) { + try { + const socks5Socket = await createSocks5Connection( + tunnelConfig.sourceIP, + tunnelConfig.sourceSSHPort, + { + useSocks5: tunnelConfig.useSocks5, + socks5Host: tunnelConfig.socks5Host, + socks5Port: tunnelConfig.socks5Port, + socks5Username: tunnelConfig.socks5Username, + socks5Password: tunnelConfig.socks5Password, + socks5ProxyChain: tunnelConfig.socks5ProxyChain, + }, + ); + + if (socks5Socket) { + connOptions.sock = socks5Socket; + conn.connect(connOptions); + return; + } + } catch (socks5Error) { + tunnelLogger.error("SOCKS5 connection failed for tunnel", socks5Error, { + operation: "socks5_connect", + tunnelName, + proxyHost: tunnelConfig.socks5Host, + proxyPort: tunnelConfig.socks5Port || 1080, + }); + broadcastTunnelStatus(tunnelName, { + connected: false, + status: CONNECTION_STATES.FAILED, + reason: + "SOCKS5 proxy connection failed: " + + (socks5Error instanceof Error + ? socks5Error.message + : "Unknown error"), + }); + return; + } + } + conn.connect(connOptions); } @@ -1042,12 +1196,7 @@ async function killRemoteTunnelByMarker( getDb() .select() .from(sshCredentials) - .where( - and( - eq(sshCredentials.id, tunnelConfig.sourceCredentialId), - eq(sshCredentials.userId, tunnelConfig.sourceUserId), - ), - ), + .where(eq(sshCredentials.id, tunnelConfig.sourceCredentialId)), "ssh_credentials", tunnelConfig.sourceUserId, ); @@ -1248,7 +1397,57 @@ async function killRemoteTunnelByMarker( callback(err); }); - conn.connect(connOptions); + if ( + tunnelConfig.useSocks5 && + (tunnelConfig.socks5Host || + (tunnelConfig.socks5ProxyChain && + tunnelConfig.socks5ProxyChain.length > 0)) + ) { + (async () => { + try { + const socks5Socket = await createSocks5Connection( + tunnelConfig.sourceIP, + tunnelConfig.sourceSSHPort, + { + useSocks5: tunnelConfig.useSocks5, + socks5Host: tunnelConfig.socks5Host, + socks5Port: tunnelConfig.socks5Port, + socks5Username: tunnelConfig.socks5Username, + socks5Password: tunnelConfig.socks5Password, + socks5ProxyChain: tunnelConfig.socks5ProxyChain, + }, + ); + + if (socks5Socket) { + connOptions.sock = socks5Socket; + conn.connect(connOptions); + } else { + callback(new Error("Failed to create SOCKS5 connection")); + } + } catch (socks5Error) { + tunnelLogger.error( + "SOCKS5 connection failed for killing tunnel", + socks5Error, + { + operation: "socks5_connect_kill", + tunnelName, + proxyHost: tunnelConfig.socks5Host, + proxyPort: tunnelConfig.socks5Port || 1080, + }, + ); + callback( + new Error( + "SOCKS5 proxy connection failed: " + + (socks5Error instanceof Error + ? socks5Error.message + : "Unknown error"), + ), + ); + } + })(); + } else { + conn.connect(connOptions); + } } app.get("/ssh/tunnel/status", (req, res) => { @@ -1266,103 +1465,291 @@ app.get("/ssh/tunnel/status/:tunnelName", (req, res) => { res.json({ name: tunnelName, status }); }); -app.post("/ssh/tunnel/connect", (req, res) => { - const tunnelConfig: TunnelConfig = req.body; +app.post( + "/ssh/tunnel/connect", + authenticateJWT, + async (req: AuthenticatedRequest, res: Response) => { + const tunnelConfig: TunnelConfig = req.body; + const userId = req.userId; - if (!tunnelConfig || !tunnelConfig.name) { - return res.status(400).json({ error: "Invalid tunnel configuration" }); - } + if (!userId) { + return res.status(401).json({ error: "Authentication required" }); + } - const tunnelName = tunnelConfig.name; + if (!tunnelConfig || !tunnelConfig.name) { + return res.status(400).json({ error: "Invalid tunnel configuration" }); + } - cleanupTunnelResources(tunnelName); + const tunnelName = tunnelConfig.name; - manualDisconnects.delete(tunnelName); - retryCounters.delete(tunnelName); - retryExhaustedTunnels.delete(tunnelName); + try { + if (!validateTunnelConfig(tunnelName, tunnelConfig)) { + tunnelLogger.error(`Tunnel config validation failed`, { + operation: "tunnel_connect", + tunnelName, + configHostId: tunnelConfig.sourceHostId, + configTunnelIndex: tunnelConfig.tunnelIndex, + }); + return res.status(400).json({ + error: "Tunnel configuration does not match tunnel name", + }); + } - tunnelConfigs.set(tunnelName, tunnelConfig); + if (tunnelConfig.sourceHostId) { + const accessInfo = await permissionManager.canAccessHost( + userId, + tunnelConfig.sourceHostId, + "read", + ); - connectSSHTunnel(tunnelConfig, 0).catch((error) => { - tunnelLogger.error( - `Failed to connect tunnel ${tunnelConfig.name}: ${error instanceof Error ? error.message : "Unknown error"}`, - ); - }); + if (!accessInfo.hasAccess) { + tunnelLogger.warn("User attempted tunnel connect without access", { + operation: "tunnel_connect_unauthorized", + userId, + hostId: tunnelConfig.sourceHostId, + tunnelName, + }); + return res.status(403).json({ error: "Access denied to this host" }); + } - res.json({ message: "Connection request received", tunnelName }); -}); + if (accessInfo.isShared && !accessInfo.isOwner) { + tunnelConfig.requestingUserId = userId; + } + } -app.post("/ssh/tunnel/disconnect", (req, res) => { - const { tunnelName } = req.body; + if (pendingTunnelOperations.has(tunnelName)) { + try { + await pendingTunnelOperations.get(tunnelName); + } catch (error) { + tunnelLogger.warn(`Previous tunnel operation failed`, { tunnelName }); + } + } - if (!tunnelName) { - return res.status(400).json({ error: "Tunnel name required" }); - } + const operation = (async () => { + manualDisconnects.delete(tunnelName); + retryCounters.delete(tunnelName); + retryExhaustedTunnels.delete(tunnelName); - manualDisconnects.add(tunnelName); - retryCounters.delete(tunnelName); - retryExhaustedTunnels.delete(tunnelName); + await cleanupTunnelResources(tunnelName); - if (activeRetryTimers.has(tunnelName)) { - clearTimeout(activeRetryTimers.get(tunnelName)!); - activeRetryTimers.delete(tunnelName); - } + if (tunnelConfigs.has(tunnelName)) { + const existingConfig = tunnelConfigs.get(tunnelName); + if ( + existingConfig && + (existingConfig.sourceHostId !== tunnelConfig.sourceHostId || + existingConfig.tunnelIndex !== tunnelConfig.tunnelIndex) + ) { + throw new Error(`Tunnel name collision detected: ${tunnelName}`); + } + } - cleanupTunnelResources(tunnelName, true); + if (!tunnelConfig.endpointIP || !tunnelConfig.endpointUsername) { + try { + const systemCrypto = SystemCrypto.getInstance(); + const internalAuthToken = await systemCrypto.getInternalAuthToken(); - broadcastTunnelStatus(tunnelName, { - connected: false, - status: CONNECTION_STATES.DISCONNECTED, - manualDisconnect: true, - }); + const allHostsResponse = await axios.get( + "http://localhost:30001/ssh/db/host/internal/all", + { + headers: { + "Content-Type": "application/json", + "X-Internal-Auth-Token": internalAuthToken, + }, + }, + ); - const tunnelConfig = tunnelConfigs.get(tunnelName) || null; - handleDisconnect(tunnelName, tunnelConfig, false); + const allHosts: SSHHost[] = allHostsResponse.data || []; + const endpointHost = allHosts.find( + (h) => + h.name === tunnelConfig.endpointHost || + `${h.username}@${h.ip}` === tunnelConfig.endpointHost, + ); - setTimeout(() => { - manualDisconnects.delete(tunnelName); - }, 5000); + if (!endpointHost) { + throw new Error( + `Endpoint host '${tunnelConfig.endpointHost}' not found in database`, + ); + } - res.json({ message: "Disconnect request received", tunnelName }); -}); + tunnelConfig.endpointIP = endpointHost.ip; + tunnelConfig.endpointSSHPort = endpointHost.port; + tunnelConfig.endpointUsername = endpointHost.username; + tunnelConfig.endpointPassword = endpointHost.password; + tunnelConfig.endpointAuthMethod = endpointHost.authType; + tunnelConfig.endpointSSHKey = endpointHost.key; + tunnelConfig.endpointKeyPassword = endpointHost.keyPassword; + tunnelConfig.endpointKeyType = endpointHost.keyType; + tunnelConfig.endpointCredentialId = endpointHost.credentialId; + tunnelConfig.endpointUserId = endpointHost.userId; + } catch (resolveError) { + tunnelLogger.error( + "Failed to resolve endpoint host", + resolveError, + { + operation: "tunnel_connect_resolve_endpoint_failed", + tunnelName, + endpointHost: tunnelConfig.endpointHost, + }, + ); + throw new Error( + `Failed to resolve endpoint host: ${resolveError instanceof Error ? resolveError.message : "Unknown error"}`, + ); + } + } -app.post("/ssh/tunnel/cancel", (req, res) => { - const { tunnelName } = req.body; + tunnelConfigs.set(tunnelName, tunnelConfig); + await connectSSHTunnel(tunnelConfig, 0); + })(); - if (!tunnelName) { - return res.status(400).json({ error: "Tunnel name required" }); - } + pendingTunnelOperations.set(tunnelName, operation); - retryCounters.delete(tunnelName); - retryExhaustedTunnels.delete(tunnelName); + res.json({ message: "Connection request received", tunnelName }); - if (activeRetryTimers.has(tunnelName)) { - clearTimeout(activeRetryTimers.get(tunnelName)!); - activeRetryTimers.delete(tunnelName); - } + operation.finally(() => { + pendingTunnelOperations.delete(tunnelName); + }); + } catch (error) { + tunnelLogger.error("Failed to process tunnel connect", error, { + operation: "tunnel_connect", + tunnelName, + userId, + }); + res.status(500).json({ error: "Failed to connect tunnel" }); + } + }, +); - if (countdownIntervals.has(tunnelName)) { - clearInterval(countdownIntervals.get(tunnelName)!); - countdownIntervals.delete(tunnelName); - } +app.post( + "/ssh/tunnel/disconnect", + authenticateJWT, + async (req: AuthenticatedRequest, res: Response) => { + const { tunnelName } = req.body; + const userId = req.userId; - cleanupTunnelResources(tunnelName, true); + if (!userId) { + return res.status(401).json({ error: "Authentication required" }); + } - broadcastTunnelStatus(tunnelName, { - connected: false, - status: CONNECTION_STATES.DISCONNECTED, - manualDisconnect: true, - }); + if (!tunnelName) { + return res.status(400).json({ error: "Tunnel name required" }); + } - const tunnelConfig = tunnelConfigs.get(tunnelName) || null; - handleDisconnect(tunnelName, tunnelConfig, false); + try { + const config = tunnelConfigs.get(tunnelName); + if (config && config.sourceHostId) { + const accessInfo = await permissionManager.canAccessHost( + userId, + config.sourceHostId, + "read", + ); + if (!accessInfo.hasAccess) { + return res.status(403).json({ error: "Access denied" }); + } + } - setTimeout(() => { - manualDisconnects.delete(tunnelName); - }, 5000); + manualDisconnects.add(tunnelName); + retryCounters.delete(tunnelName); + retryExhaustedTunnels.delete(tunnelName); - res.json({ message: "Cancel request received", tunnelName }); -}); + if (activeRetryTimers.has(tunnelName)) { + clearTimeout(activeRetryTimers.get(tunnelName)!); + activeRetryTimers.delete(tunnelName); + } + + await cleanupTunnelResources(tunnelName, true); + + broadcastTunnelStatus(tunnelName, { + connected: false, + status: CONNECTION_STATES.DISCONNECTED, + manualDisconnect: true, + }); + + const tunnelConfig = tunnelConfigs.get(tunnelName) || null; + handleDisconnect(tunnelName, tunnelConfig, false); + + setTimeout(() => { + manualDisconnects.delete(tunnelName); + }, 5000); + + res.json({ message: "Disconnect request received", tunnelName }); + } catch (error) { + tunnelLogger.error("Failed to disconnect tunnel", error, { + operation: "tunnel_disconnect", + tunnelName, + userId, + }); + res.status(500).json({ error: "Failed to disconnect tunnel" }); + } + }, +); + +app.post( + "/ssh/tunnel/cancel", + authenticateJWT, + async (req: AuthenticatedRequest, res: Response) => { + const { tunnelName } = req.body; + const userId = req.userId; + + if (!userId) { + return res.status(401).json({ error: "Authentication required" }); + } + + if (!tunnelName) { + return res.status(400).json({ error: "Tunnel name required" }); + } + + try { + const config = tunnelConfigs.get(tunnelName); + if (config && config.sourceHostId) { + const accessInfo = await permissionManager.canAccessHost( + userId, + config.sourceHostId, + "read", + ); + if (!accessInfo.hasAccess) { + return res.status(403).json({ error: "Access denied" }); + } + } + + retryCounters.delete(tunnelName); + retryExhaustedTunnels.delete(tunnelName); + + if (activeRetryTimers.has(tunnelName)) { + clearTimeout(activeRetryTimers.get(tunnelName)!); + activeRetryTimers.delete(tunnelName); + } + + if (countdownIntervals.has(tunnelName)) { + clearInterval(countdownIntervals.get(tunnelName)!); + countdownIntervals.delete(tunnelName); + } + + await cleanupTunnelResources(tunnelName, true); + + broadcastTunnelStatus(tunnelName, { + connected: false, + status: CONNECTION_STATES.DISCONNECTED, + manualDisconnect: true, + }); + + const tunnelConfig = tunnelConfigs.get(tunnelName) || null; + handleDisconnect(tunnelName, tunnelConfig, false); + + setTimeout(() => { + manualDisconnects.delete(tunnelName); + }, 5000); + + res.json({ message: "Cancel request received", tunnelName }); + } catch (error) { + tunnelLogger.error("Failed to cancel tunnel retry", error, { + operation: "tunnel_cancel", + tunnelName, + userId, + }); + res.status(500).json({ error: "Failed to cancel tunnel retry" }); + } + }, +); async function initializeAutoStartTunnels(): Promise { try { @@ -1408,12 +1795,19 @@ async function initializeAutoStartTunnels(): Promise { ); if (endpointHost) { + const tunnelIndex = + host.tunnelConnections.indexOf(tunnelConnection); const tunnelConfig: TunnelConfig = { - name: `${host.name || `${host.username}@${host.ip}`}_${ - tunnelConnection.sourcePort - }_${tunnelConnection.endpointHost}_${ - tunnelConnection.endpointPort - }`, + name: normalizeTunnelName( + host.id, + tunnelIndex, + host.name || `${host.username}@${host.ip}`, + tunnelConnection.sourcePort, + tunnelConnection.endpointHost, + tunnelConnection.endpointPort, + ), + sourceHostId: host.id, + tunnelIndex: tunnelIndex, hostName: host.name || `${host.username}@${host.ip}`, sourceIP: host.ip, sourceSSHPort: host.port, @@ -1429,6 +1823,7 @@ async function initializeAutoStartTunnels(): Promise { endpointIP: endpointHost.ip, endpointSSHPort: endpointHost.port, endpointUsername: endpointHost.username, + endpointHost: tunnelConnection.endpointHost, endpointPassword: tunnelConnection.endpointPassword || endpointHost.autostartPassword || @@ -1453,6 +1848,11 @@ async function initializeAutoStartTunnels(): Promise { retryInterval: tunnelConnection.retryInterval * 1000, autoStart: tunnelConnection.autoStart, isPinned: host.pin, + useSocks5: host.useSocks5, + socks5Host: host.socks5Host, + socks5Port: host.socks5Port, + socks5Username: host.socks5Username, + socks5Password: host.socks5Password, }; autoStartTunnels.push(tunnelConfig); diff --git a/src/backend/ssh/widgets/common-utils.ts b/src/backend/ssh/widgets/common-utils.ts index bf8bf6aa..5394ba56 100644 --- a/src/backend/ssh/widgets/common-utils.ts +++ b/src/backend/ssh/widgets/common-utils.ts @@ -3,28 +3,87 @@ import type { Client } from "ssh2"; export function execCommand( client: Client, command: string, + timeoutMs = 30000, ): Promise<{ stdout: string; stderr: string; code: number | null; }> { return new Promise((resolve, reject) => { - client.exec(command, { pty: false }, (err, stream) => { - if (err) return reject(err); + let settled = false; + let stream: any = null; + + const timeout = setTimeout(() => { + if (!settled) { + settled = true; + cleanup(); + reject(new Error(`Command timeout after ${timeoutMs}ms: ${command}`)); + } + }, timeoutMs); + + const cleanup = () => { + clearTimeout(timeout); + if (stream) { + try { + stream.removeAllListeners(); + if (stream.stderr) { + stream.stderr.removeAllListeners(); + } + stream.destroy(); + } catch (error) { + // Ignore cleanup errors + } + } + }; + + client.exec(command, { pty: false }, (err, _stream) => { + if (err) { + if (!settled) { + settled = true; + cleanup(); + reject(err); + } + return; + } + + stream = _stream; let stdout = ""; let stderr = ""; let exitCode: number | null = null; + stream .on("close", (code: number | undefined) => { - exitCode = typeof code === "number" ? code : null; - resolve({ stdout, stderr, code: exitCode }); + if (!settled) { + settled = true; + exitCode = typeof code === "number" ? code : null; + cleanup(); + resolve({ stdout, stderr, code: exitCode }); + } }) .on("data", (data: Buffer) => { stdout += data.toString("utf8"); }) - .stderr.on("data", (data: Buffer) => { - stderr += data.toString("utf8"); + .on("error", (streamErr: Error) => { + if (!settled) { + settled = true; + cleanup(); + reject(streamErr); + } }); + + if (stream.stderr) { + stream.stderr + .on("data", (data: Buffer) => { + stderr += data.toString("utf8"); + }) + .on("error", (stderrErr: Error) => { + if (!settled) { + settled = true; + cleanup(); + reject(stderrErr); + } + }); + } }); }); } diff --git a/src/backend/ssh/widgets/cpu-collector.ts b/src/backend/ssh/widgets/cpu-collector.ts index 359ae6ad..90eb579b 100644 --- a/src/backend/ssh/widgets/cpu-collector.ts +++ b/src/backend/ssh/widgets/cpu-collector.ts @@ -26,12 +26,20 @@ export async function collectCpuMetrics(client: Client): Promise<{ let loadTriplet: [number, number, number] | null = null; try { - const [stat1, loadAvgOut, coresOut] = await Promise.all([ - execCommand(client, "cat /proc/stat"), - execCommand(client, "cat /proc/loadavg"), - execCommand( - client, - "nproc 2>/dev/null || grep -c ^processor /proc/cpuinfo", + const [stat1, loadAvgOut, coresOut] = await Promise.race([ + Promise.all([ + execCommand(client, "cat /proc/stat"), + execCommand(client, "cat /proc/loadavg"), + execCommand( + client, + "nproc 2>/dev/null || grep -c ^processor /proc/cpuinfo", + ), + ]), + new Promise((_, reject) => + setTimeout( + () => reject(new Error("CPU metrics collection timeout")), + 25000, + ), ), ]); diff --git a/src/backend/ssh/widgets/login-stats-collector.ts b/src/backend/ssh/widgets/login-stats-collector.ts index b34f3d80..a3894e74 100644 --- a/src/backend/ssh/widgets/login-stats-collector.ts +++ b/src/backend/ssh/widgets/login-stats-collector.ts @@ -1,5 +1,6 @@ import type { Client } from "ssh2"; import { execCommand } from "./common-utils.js"; +import { statsLogger } from "../../utils/logger.js"; export interface LoginRecord { user: string; @@ -46,10 +47,20 @@ export async function collectLoginStats(client: Client): Promise { const timeStr = parts.slice(timeStart, timeStart + 5).join(" "); if (user && user !== "wtmp" && tty !== "system") { + let parsedTime: string; + try { + const date = new Date(timeStr); + parsedTime = isNaN(date.getTime()) + ? new Date().toISOString() + : date.toISOString(); + } catch (e) { + parsedTime = new Date().toISOString(); + } + recentLogins.push({ user, ip, - time: new Date(timeStr).toISOString(), + time: parsedTime, status: "success", }); if (ip !== "local") { @@ -59,9 +70,7 @@ export async function collectLoginStats(client: Client): Promise { } } } - } catch (e) { - // Ignore errors - } + } catch (e) {} try { const failedOut = await execCommand( @@ -96,12 +105,20 @@ export async function collectLoginStats(client: Client): Promise { } if (user && ip) { + let parsedTime: string; + try { + const date = timeStr ? new Date(timeStr) : new Date(); + parsedTime = isNaN(date.getTime()) + ? new Date().toISOString() + : date.toISOString(); + } catch (e) { + parsedTime = new Date().toISOString(); + } + failedLogins.push({ user, ip, - time: timeStr - ? new Date(timeStr).toISOString() - : new Date().toISOString(), + time: parsedTime, status: "failed", }); if (ip !== "unknown") { @@ -109,9 +126,7 @@ export async function collectLoginStats(client: Client): Promise { } } } - } catch (e) { - // Ignore errors - } + } catch (e) {} return { recentLogins: recentLogins.slice(0, 10), diff --git a/src/backend/ssh/widgets/network-collector.ts b/src/backend/ssh/widgets/network-collector.ts index bd3a3bd9..c24b75e6 100644 --- a/src/backend/ssh/widgets/network-collector.ts +++ b/src/backend/ssh/widgets/network-collector.ts @@ -68,12 +68,7 @@ export async function collectNetworkMetrics(client: Client): Promise<{ txBytes: null, }); } - } catch (e) { - statsLogger.debug("Failed to collect network interface stats", { - operation: "network_stats_failed", - error: e instanceof Error ? e.message : String(e), - }); - } + } catch (e) {} return { interfaces }; } diff --git a/src/backend/ssh/widgets/processes-collector.ts b/src/backend/ssh/widgets/processes-collector.ts index 1ee0f51c..09d62612 100644 --- a/src/backend/ssh/widgets/processes-collector.ts +++ b/src/backend/ssh/widgets/processes-collector.ts @@ -33,11 +33,13 @@ export async function collectProcessesMetrics(client: Client): Promise<{ for (let i = 1; i < Math.min(psLines.length, 11); i++) { const parts = psLines[i].split(/\s+/); if (parts.length >= 11) { + const cpuVal = Number(parts[2]); + const memVal = Number(parts[3]); topProcesses.push({ pid: parts[1], user: parts[0], - cpu: parts[2], - mem: parts[3], + cpu: Number.isFinite(cpuVal) ? cpuVal.toString() : "0", + mem: Number.isFinite(memVal) ? memVal.toString() : "0", command: parts.slice(10).join(" ").substring(0, 50), }); } @@ -46,14 +48,13 @@ export async function collectProcessesMetrics(client: Client): Promise<{ const procCount = await execCommand(client, "ps aux | wc -l"); const runningCount = await execCommand(client, "ps aux | grep -c ' R '"); - totalProcesses = Number(procCount.stdout.trim()) - 1; - runningProcesses = Number(runningCount.stdout.trim()); - } catch (e) { - statsLogger.debug("Failed to collect process stats", { - operation: "process_stats_failed", - error: e instanceof Error ? e.message : String(e), - }); - } + + const totalCount = Number(procCount.stdout.trim()) - 1; + totalProcesses = Number.isFinite(totalCount) ? totalCount : null; + + const runningCount2 = Number(runningCount.stdout.trim()); + runningProcesses = Number.isFinite(runningCount2) ? runningCount2 : null; + } catch (e) {} return { total: totalProcesses, diff --git a/src/backend/ssh/widgets/system-collector.ts b/src/backend/ssh/widgets/system-collector.ts index e62c3ed0..c5007d55 100644 --- a/src/backend/ssh/widgets/system-collector.ts +++ b/src/backend/ssh/widgets/system-collector.ts @@ -23,10 +23,7 @@ export async function collectSystemMetrics(client: Client): Promise<{ kernel = kernelOut.stdout.trim() || null; os = osOut.stdout.trim() || null; } catch (e) { - statsLogger.debug("Failed to collect system info", { - operation: "system_info_failed", - error: e instanceof Error ? e.message : String(e), - }); + // No error log } return { diff --git a/src/backend/ssh/widgets/uptime-collector.ts b/src/backend/ssh/widgets/uptime-collector.ts index 87e8dfcc..3571b8a0 100644 --- a/src/backend/ssh/widgets/uptime-collector.ts +++ b/src/backend/ssh/widgets/uptime-collector.ts @@ -21,12 +21,7 @@ export async function collectUptimeMetrics(client: Client): Promise<{ uptimeFormatted = `${days}d ${hours}h ${minutes}m`; } } - } catch (e) { - statsLogger.debug("Failed to collect uptime", { - operation: "uptime_failed", - error: e instanceof Error ? e.message : String(e), - }); - } + } catch (e) {} return { seconds: uptimeSeconds, diff --git a/src/backend/starter.ts b/src/backend/starter.ts index b74c9b11..10bb8802 100644 --- a/src/backend/starter.ts +++ b/src/backend/starter.ts @@ -102,6 +102,8 @@ import { systemLogger, versionLogger } from "./utils/logger.js"; await import("./ssh/tunnel.js"); await import("./ssh/file-manager.js"); await import("./ssh/server-stats.js"); + await import("./ssh/docker.js"); + await import("./ssh/docker-console.js"); await import("./dashboard.js"); process.on("SIGINT", () => { diff --git a/src/backend/utils/auth-manager.ts b/src/backend/utils/auth-manager.ts index fd706176..10dd5662 100644 --- a/src/backend/utils/auth-manager.ts +++ b/src/backend/utils/auth-manager.ts @@ -154,9 +154,8 @@ class AuthManager { return; } - const { getSqlite, saveMemoryDatabaseToFile } = await import( - "../database/db/index.js" - ); + const { getSqlite, saveMemoryDatabaseToFile } = + await import("../database/db/index.js"); const sqlite = getSqlite(); @@ -169,6 +168,23 @@ class AuthManager { if (migrationResult.migrated) { await saveMemoryDatabaseToFile(); } + + try { + const { CredentialSystemEncryptionMigration } = + await import("./credential-system-encryption-migration.js"); + const credMigration = new CredentialSystemEncryptionMigration(); + const credResult = await credMigration.migrateUserCredentials(userId); + + if (credResult.migrated > 0) { + await saveMemoryDatabaseToFile(); + } + } catch (error) { + databaseLogger.warn("Credential migration failed during login", { + operation: "login_credential_migration_failed", + userId, + error: error instanceof Error ? error.message : "Unknown error", + }); + } } catch (error) { databaseLogger.error("Lazy encryption migration failed", error, { operation: "lazy_encryption_migration_error", @@ -231,9 +247,8 @@ class AuthManager { }); try { - const { saveMemoryDatabaseToFile } = await import( - "../database/db/index.js" - ); + const { saveMemoryDatabaseToFile } = + await import("../database/db/index.js"); await saveMemoryDatabaseToFile(); } catch (saveError) { databaseLogger.error( @@ -334,9 +349,8 @@ class AuthManager { await db.delete(sessions).where(eq(sessions.id, sessionId)); try { - const { saveMemoryDatabaseToFile } = await import( - "../database/db/index.js" - ); + const { saveMemoryDatabaseToFile } = + await import("../database/db/index.js"); await saveMemoryDatabaseToFile(); } catch (saveError) { databaseLogger.error( @@ -387,9 +401,8 @@ class AuthManager { } try { - const { saveMemoryDatabaseToFile } = await import( - "../database/db/index.js" - ); + const { saveMemoryDatabaseToFile } = + await import("../database/db/index.js"); await saveMemoryDatabaseToFile(); } catch (saveError) { databaseLogger.error( @@ -430,9 +443,8 @@ class AuthManager { .where(sql`${sessions.expiresAt} < datetime('now')`); try { - const { saveMemoryDatabaseToFile } = await import( - "../database/db/index.js" - ); + const { saveMemoryDatabaseToFile } = + await import("../database/db/index.js"); await saveMemoryDatabaseToFile(); } catch (saveError) { databaseLogger.error( @@ -568,9 +580,8 @@ class AuthManager { .where(eq(sessions.id, payload.sessionId)) .then(async () => { try { - const { saveMemoryDatabaseToFile } = await import( - "../database/db/index.js" - ); + const { saveMemoryDatabaseToFile } = + await import("../database/db/index.js"); await saveMemoryDatabaseToFile(); const remainingSessions = await db @@ -714,9 +725,8 @@ class AuthManager { await db.delete(sessions).where(eq(sessions.id, sessionId)); try { - const { saveMemoryDatabaseToFile } = await import( - "../database/db/index.js" - ); + const { saveMemoryDatabaseToFile } = + await import("../database/db/index.js"); await saveMemoryDatabaseToFile(); } catch (saveError) { databaseLogger.error( diff --git a/src/backend/utils/credential-system-encryption-migration.ts b/src/backend/utils/credential-system-encryption-migration.ts new file mode 100644 index 00000000..ffabd66a --- /dev/null +++ b/src/backend/utils/credential-system-encryption-migration.ts @@ -0,0 +1,131 @@ +import { db } from "../database/db/index.js"; +import { sshCredentials } from "../database/db/schema.js"; +import { eq, and, or, isNull } from "drizzle-orm"; +import { DataCrypto } from "./data-crypto.js"; +import { SystemCrypto } from "./system-crypto.js"; +import { FieldCrypto } from "./field-crypto.js"; +import { databaseLogger } from "./logger.js"; + +export class CredentialSystemEncryptionMigration { + async migrateUserCredentials(userId: string): Promise<{ + migrated: number; + failed: number; + skipped: number; + }> { + try { + const userDEK = DataCrypto.getUserDataKey(userId); + if (!userDEK) { + throw new Error("User must be logged in to migrate credentials"); + } + + const systemCrypto = SystemCrypto.getInstance(); + const CSKEK = await systemCrypto.getCredentialSharingKey(); + + const credentials = await db + .select() + .from(sshCredentials) + .where( + and( + eq(sshCredentials.userId, userId), + or( + isNull(sshCredentials.systemPassword), + isNull(sshCredentials.systemKey), + isNull(sshCredentials.systemKeyPassword), + ), + ), + ); + + let migrated = 0; + let failed = 0; + const skipped = 0; + + for (const cred of credentials) { + try { + const plainPassword = cred.password + ? FieldCrypto.decryptField( + cred.password, + userDEK, + cred.id.toString(), + "password", + ) + : null; + + const plainKey = cred.key + ? FieldCrypto.decryptField( + cred.key, + userDEK, + cred.id.toString(), + "key", + ) + : null; + + const plainKeyPassword = cred.key_password + ? FieldCrypto.decryptField( + cred.key_password, + userDEK, + cred.id.toString(), + "key_password", + ) + : null; + + const systemPassword = plainPassword + ? FieldCrypto.encryptField( + plainPassword, + CSKEK, + cred.id.toString(), + "password", + ) + : null; + + const systemKey = plainKey + ? FieldCrypto.encryptField( + plainKey, + CSKEK, + cred.id.toString(), + "key", + ) + : null; + + const systemKeyPassword = plainKeyPassword + ? FieldCrypto.encryptField( + plainKeyPassword, + CSKEK, + cred.id.toString(), + "key_password", + ) + : null; + + await db + .update(sshCredentials) + .set({ + systemPassword, + systemKey, + systemKeyPassword, + updatedAt: new Date().toISOString(), + }) + .where(eq(sshCredentials.id, cred.id)); + + migrated++; + } catch (error) { + databaseLogger.error("Failed to migrate credential", error, { + credentialId: cred.id, + userId, + }); + failed++; + } + } + return { migrated, failed, skipped }; + } catch (error) { + databaseLogger.error( + "Credential system encryption migration failed", + error, + { + operation: "credential_migration_failed", + userId, + error: error instanceof Error ? error.message : "Unknown error", + }, + ); + throw error; + } + } +} diff --git a/src/backend/utils/data-crypto.ts b/src/backend/utils/data-crypto.ts index 462d2956..4513b62c 100644 --- a/src/backend/utils/data-crypto.ts +++ b/src/backend/utils/data-crypto.ts @@ -475,6 +475,52 @@ class DataCrypto { return false; } } + + /** + * Encrypt sensitive credential fields with system key for offline sharing + * Returns an object with systemPassword, systemKey, systemKeyPassword fields + */ + static async encryptRecordWithSystemKey>( + tableName: string, + record: T, + systemKey: Buffer, + ): Promise> { + const systemEncrypted: Record = {}; + const recordId = record.id || "temp-" + Date.now(); + + if (tableName !== "ssh_credentials") { + return systemEncrypted as Partial; + } + + if (record.password && typeof record.password === "string") { + systemEncrypted.systemPassword = FieldCrypto.encryptField( + record.password as string, + systemKey, + recordId as string, + "password", + ); + } + + if (record.key && typeof record.key === "string") { + systemEncrypted.systemKey = FieldCrypto.encryptField( + record.key as string, + systemKey, + recordId as string, + "key", + ); + } + + if (record.key_password && typeof record.key_password === "string") { + systemEncrypted.systemKeyPassword = FieldCrypto.encryptField( + record.key_password as string, + systemKey, + recordId as string, + "key_password", + ); + } + + return systemEncrypted as Partial; + } } export { DataCrypto }; diff --git a/src/backend/utils/database-file-encryption.ts b/src/backend/utils/database-file-encryption.ts index f0adc96a..8ace6c46 100644 --- a/src/backend/utils/database-file-encryption.ts +++ b/src/backend/utils/database-file-encryption.ts @@ -327,11 +327,7 @@ class DatabaseFileEncryption { fs.accessSync(envPath, fs.constants.R_OK); envFileReadable = true; } - } catch (error) { - databaseLogger.debug("Operation failed, continuing", { - error: error instanceof Error ? error.message : String(error), - }); - } + } catch (error) {} databaseLogger.error( "Database decryption authentication failed - possible causes: wrong DATABASE_KEY, corrupted files, or interrupted write", diff --git a/src/backend/utils/logger.ts b/src/backend/utils/logger.ts index 41f44982..cb5ff611 100644 --- a/src/backend/utils/logger.ts +++ b/src/backend/utils/logger.ts @@ -36,7 +36,7 @@ const SENSITIVE_FIELDS = [ const TRUNCATE_FIELDS = ["data", "content", "body", "response", "request"]; -class Logger { +export class Logger { private serviceName: string; private serviceIcon: string; private serviceColor: string; diff --git a/src/backend/utils/permission-manager.ts b/src/backend/utils/permission-manager.ts new file mode 100644 index 00000000..fdaafb2b --- /dev/null +++ b/src/backend/utils/permission-manager.ts @@ -0,0 +1,436 @@ +import type { Request, Response, NextFunction } from "express"; +import { db } from "../database/db/index.js"; +import { + hostAccess, + roles, + userRoles, + sshData, + users, +} from "../database/db/schema.js"; +import { eq, and, or, isNull, gte, sql } from "drizzle-orm"; +import { databaseLogger } from "./logger.js"; + +interface AuthenticatedRequest extends Request { + userId?: string; + dataKey?: Buffer; +} + +interface HostAccessInfo { + hasAccess: boolean; + isOwner: boolean; + isShared: boolean; + permissionLevel?: "view"; + expiresAt?: string | null; +} + +interface PermissionCheckResult { + allowed: boolean; + reason?: string; +} + +class PermissionManager { + private static instance: PermissionManager; + private permissionCache: Map< + string, + { permissions: string[]; timestamp: number } + >; + private readonly CACHE_TTL = 5 * 60 * 1000; + + private constructor() { + this.permissionCache = new Map(); + + setInterval(() => { + this.cleanupExpiredAccess().catch((error) => { + databaseLogger.error( + "Failed to run periodic host access cleanup", + error, + { + operation: "host_access_cleanup_periodic", + }, + ); + }); + }, 60 * 1000); + + setInterval(() => { + this.clearPermissionCache(); + }, this.CACHE_TTL); + } + + static getInstance(): PermissionManager { + if (!this.instance) { + this.instance = new PermissionManager(); + } + return this.instance; + } + + /** + * Clean up expired host access entries + */ + private async cleanupExpiredAccess(): Promise { + try { + const now = new Date().toISOString(); + const result = await db + .delete(hostAccess) + .where( + and( + sql`${hostAccess.expiresAt} IS NOT NULL`, + sql`${hostAccess.expiresAt} <= ${now}`, + ), + ) + .returning({ id: hostAccess.id }); + } catch (error) { + databaseLogger.error("Failed to cleanup expired host access", error, { + operation: "host_access_cleanup_failed", + }); + } + } + + /** + * Clear permission cache + */ + private clearPermissionCache(): void { + this.permissionCache.clear(); + } + + /** + * Invalidate permission cache for a specific user + */ + invalidateUserPermissionCache(userId: string): void { + this.permissionCache.delete(userId); + } + + /** + * Get user permissions from roles + */ + async getUserPermissions(userId: string): Promise { + const cached = this.permissionCache.get(userId); + if (cached && Date.now() - cached.timestamp < this.CACHE_TTL) { + return cached.permissions; + } + + try { + const userRoleRecords = await db + .select({ + permissions: roles.permissions, + }) + .from(userRoles) + .innerJoin(roles, eq(userRoles.roleId, roles.id)) + .where(eq(userRoles.userId, userId)); + + const allPermissions = new Set(); + for (const record of userRoleRecords) { + try { + const permissions = JSON.parse(record.permissions) as string[]; + for (const perm of permissions) { + allPermissions.add(perm); + } + } catch (parseError) { + databaseLogger.warn("Failed to parse role permissions", { + operation: "get_user_permissions", + userId, + error: parseError, + }); + } + } + + const permissionsArray = Array.from(allPermissions); + + this.permissionCache.set(userId, { + permissions: permissionsArray, + timestamp: Date.now(), + }); + + return permissionsArray; + } catch (error) { + databaseLogger.error("Failed to get user permissions", error, { + operation: "get_user_permissions", + userId, + }); + return []; + } + } + + /** + * Check if user has a specific permission + * Supports wildcards: "hosts.*", "*" + */ + async hasPermission(userId: string, permission: string): Promise { + const userPermissions = await this.getUserPermissions(userId); + + if (userPermissions.includes("*")) { + return true; + } + + if (userPermissions.includes(permission)) { + return true; + } + + const parts = permission.split("."); + for (let i = parts.length; i > 0; i--) { + const wildcardPermission = parts.slice(0, i).join(".") + ".*"; + if (userPermissions.includes(wildcardPermission)) { + return true; + } + } + + return false; + } + + /** + * Check if user can access a specific host + */ + async canAccessHost( + userId: string, + hostId: number, + action: "read" | "write" | "execute" | "delete" | "share" = "read", + ): Promise { + try { + const host = await db + .select() + .from(sshData) + .where(and(eq(sshData.id, hostId), eq(sshData.userId, userId))) + .limit(1); + + if (host.length > 0) { + return { + hasAccess: true, + isOwner: true, + isShared: false, + }; + } + + const userRoleIds = await db + .select({ roleId: userRoles.roleId }) + .from(userRoles) + .where(eq(userRoles.userId, userId)); + const roleIds = userRoleIds.map((r) => r.roleId); + + const now = new Date().toISOString(); + const sharedAccess = await db + .select() + .from(hostAccess) + .where( + and( + eq(hostAccess.hostId, hostId), + or( + eq(hostAccess.userId, userId), + roleIds.length > 0 + ? sql`${hostAccess.roleId} IN (${sql.join( + roleIds.map((id) => sql`${id}`), + sql`, `, + )})` + : sql`false`, + ), + or(isNull(hostAccess.expiresAt), gte(hostAccess.expiresAt, now)), + ), + ) + .limit(1); + + if (sharedAccess.length > 0) { + const access = sharedAccess[0]; + + if (action === "write" || action === "delete") { + return { + hasAccess: false, + isOwner: false, + isShared: true, + permissionLevel: access.permissionLevel as "view", + expiresAt: access.expiresAt, + }; + } + + try { + await db + .update(hostAccess) + .set({ + lastAccessedAt: now, + }) + .where(eq(hostAccess.id, access.id)); + } catch (error) { + databaseLogger.warn("Failed to update host access timestamp", { + operation: "update_host_access_timestamp", + error, + }); + } + + return { + hasAccess: true, + isOwner: false, + isShared: true, + permissionLevel: access.permissionLevel as "view", + expiresAt: access.expiresAt, + }; + } + + return { + hasAccess: false, + isOwner: false, + isShared: false, + }; + } catch (error) { + databaseLogger.error("Failed to check host access", error, { + operation: "can_access_host", + userId, + hostId, + action, + }); + return { + hasAccess: false, + isOwner: false, + isShared: false, + }; + } + } + + /** + * Check if user is admin (backward compatibility) + */ + async isAdmin(userId: string): Promise { + try { + const user = await db + .select({ isAdmin: users.is_admin }) + .from(users) + .where(eq(users.id, userId)) + .limit(1); + + if (user.length > 0 && user[0].isAdmin) { + return true; + } + + const adminRoles = await db + .select({ roleName: roles.name }) + .from(userRoles) + .innerJoin(roles, eq(userRoles.roleId, roles.id)) + .where( + and( + eq(userRoles.userId, userId), + or(eq(roles.name, "admin"), eq(roles.name, "super_admin")), + ), + ); + + return adminRoles.length > 0; + } catch (error) { + databaseLogger.error("Failed to check admin status", error, { + operation: "is_admin", + userId, + }); + return false; + } + } + + /** + * Middleware: Require specific permission + */ + requirePermission(permission: string) { + return async ( + req: AuthenticatedRequest, + res: Response, + next: NextFunction, + ) => { + const userId = req.userId; + + if (!userId) { + return res.status(401).json({ error: "Not authenticated" }); + } + + const hasPermission = await this.hasPermission(userId, permission); + + if (!hasPermission) { + databaseLogger.warn("Permission denied", { + operation: "permission_check", + userId, + permission, + path: req.path, + }); + + return res.status(403).json({ + error: "Insufficient permissions", + required: permission, + }); + } + + next(); + }; + } + + /** + * Middleware: Require host access + */ + requireHostAccess( + hostIdParam: string = "id", + action: "read" | "write" | "execute" | "delete" | "share" = "read", + ) { + return async ( + req: AuthenticatedRequest, + res: Response, + next: NextFunction, + ) => { + const userId = req.userId; + + if (!userId) { + return res.status(401).json({ error: "Not authenticated" }); + } + + const hostId = parseInt(req.params[hostIdParam], 10); + + if (isNaN(hostId)) { + return res.status(400).json({ error: "Invalid host ID" }); + } + + const accessInfo = await this.canAccessHost(userId, hostId, action); + + if (!accessInfo.hasAccess) { + databaseLogger.warn("Host access denied", { + operation: "host_access_check", + userId, + hostId, + action, + }); + + return res.status(403).json({ + error: "Access denied to host", + hostId, + action, + }); + } + + (req as any).hostAccessInfo = accessInfo; + + next(); + }; + } + + /** + * Middleware: Require admin role (backward compatible) + */ + requireAdmin() { + return async ( + req: AuthenticatedRequest, + res: Response, + next: NextFunction, + ) => { + const userId = req.userId; + + if (!userId) { + return res.status(401).json({ error: "Not authenticated" }); + } + + const isAdmin = await this.isAdmin(userId); + + if (!isAdmin) { + databaseLogger.warn("Admin access denied", { + operation: "admin_check", + userId, + path: req.path, + }); + + return res.status(403).json({ error: "Admin access required" }); + } + + next(); + }; + } +} + +export { PermissionManager }; +export type { AuthenticatedRequest, HostAccessInfo, PermissionCheckResult }; diff --git a/src/backend/utils/shared-credential-manager.ts b/src/backend/utils/shared-credential-manager.ts new file mode 100644 index 00000000..8fc0114a --- /dev/null +++ b/src/backend/utils/shared-credential-manager.ts @@ -0,0 +1,700 @@ +import { db } from "../database/db/index.js"; +import { + sharedCredentials, + sshCredentials, + hostAccess, + users, + userRoles, + sshData, +} from "../database/db/schema.js"; +import { eq, and } from "drizzle-orm"; +import { DataCrypto } from "./data-crypto.js"; +import { FieldCrypto } from "./field-crypto.js"; +import { databaseLogger } from "./logger.js"; + +interface CredentialData { + username: string; + authType: string; + password?: string; + key?: string; + keyPassword?: string; + keyType?: string; +} + +/** + * Manages shared credentials for RBAC host sharing. + * Creates per-user encrypted credential copies to enable credential sharing + * without requiring the credential owner to be online. + */ +class SharedCredentialManager { + private static instance: SharedCredentialManager; + + private constructor() {} + + static getInstance(): SharedCredentialManager { + if (!this.instance) { + this.instance = new SharedCredentialManager(); + } + return this.instance; + } + + /** + * Create shared credential for a specific user + * Called when sharing a host with a user + */ + async createSharedCredentialForUser( + hostAccessId: number, + originalCredentialId: number, + targetUserId: string, + ownerId: string, + ): Promise { + try { + const ownerDEK = DataCrypto.getUserDataKey(ownerId); + + if (ownerDEK) { + const targetDEK = DataCrypto.getUserDataKey(targetUserId); + if (!targetDEK) { + await this.createPendingSharedCredential( + hostAccessId, + originalCredentialId, + targetUserId, + ); + return; + } + + const credentialData = await this.getDecryptedCredential( + originalCredentialId, + ownerId, + ownerDEK, + ); + + const encryptedForTarget = this.encryptCredentialForUser( + credentialData, + targetUserId, + targetDEK, + hostAccessId, + ); + + await db.insert(sharedCredentials).values({ + hostAccessId, + originalCredentialId, + targetUserId, + ...encryptedForTarget, + needsReEncryption: false, + }); + } else { + const targetDEK = DataCrypto.getUserDataKey(targetUserId); + if (!targetDEK) { + await this.createPendingSharedCredential( + hostAccessId, + originalCredentialId, + targetUserId, + ); + return; + } + + const credentialData = + await this.getDecryptedCredentialViaSystemKey(originalCredentialId); + + const encryptedForTarget = this.encryptCredentialForUser( + credentialData, + targetUserId, + targetDEK, + hostAccessId, + ); + + await db.insert(sharedCredentials).values({ + hostAccessId, + originalCredentialId, + targetUserId, + ...encryptedForTarget, + needsReEncryption: false, + }); + } + } catch (error) { + databaseLogger.error("Failed to create shared credential", error, { + operation: "create_shared_credential", + hostAccessId, + targetUserId, + }); + throw error; + } + } + + /** + * Create shared credentials for all users in a role + * Called when sharing a host with a role + */ + async createSharedCredentialsForRole( + hostAccessId: number, + originalCredentialId: number, + roleId: number, + ownerId: string, + ): Promise { + try { + const roleUsers = await db + .select({ userId: userRoles.userId }) + .from(userRoles) + .where(eq(userRoles.roleId, roleId)); + + for (const { userId } of roleUsers) { + try { + await this.createSharedCredentialForUser( + hostAccessId, + originalCredentialId, + userId, + ownerId, + ); + } catch (error) { + databaseLogger.error( + "Failed to create shared credential for role member", + error, + { + operation: "create_shared_credentials_role", + hostAccessId, + roleId, + userId, + }, + ); + } + } + } catch (error) { + databaseLogger.error( + "Failed to create shared credentials for role", + error, + { + operation: "create_shared_credentials_role", + hostAccessId, + roleId, + }, + ); + throw error; + } + } + + /** + * Get credential data for a shared user + * Called when a shared user connects to a host + */ + async getSharedCredentialForUser( + hostId: number, + userId: string, + ): Promise { + try { + const userDEK = DataCrypto.getUserDataKey(userId); + if (!userDEK) { + throw new Error(`User ${userId} data not unlocked`); + } + + const sharedCred = await db + .select() + .from(sharedCredentials) + .innerJoin( + hostAccess, + eq(sharedCredentials.hostAccessId, hostAccess.id), + ) + .where( + and( + eq(hostAccess.hostId, hostId), + eq(sharedCredentials.targetUserId, userId), + ), + ) + .limit(1); + + if (sharedCred.length === 0) { + return null; + } + + const cred = sharedCred[0].shared_credentials; + + if (cred.needsReEncryption) { + databaseLogger.warn( + "Shared credential needs re-encryption but cannot be accessed yet", + { + operation: "get_shared_credential_pending", + hostId, + userId, + }, + ); + return null; + } + + return this.decryptSharedCredential(cred, userDEK); + } catch (error) { + databaseLogger.error("Failed to get shared credential", error, { + operation: "get_shared_credential", + hostId, + userId, + }); + throw error; + } + } + + /** + * Update all shared credentials when original credential is updated + * Called when credential owner updates credential + */ + async updateSharedCredentialsForOriginal( + credentialId: number, + ownerId: string, + ): Promise { + try { + const sharedCreds = await db + .select() + .from(sharedCredentials) + .where(eq(sharedCredentials.originalCredentialId, credentialId)); + + const ownerDEK = DataCrypto.getUserDataKey(ownerId); + let credentialData: CredentialData; + + if (ownerDEK) { + credentialData = await this.getDecryptedCredential( + credentialId, + ownerId, + ownerDEK, + ); + } else { + try { + credentialData = + await this.getDecryptedCredentialViaSystemKey(credentialId); + } catch (error) { + databaseLogger.warn( + "Cannot update shared credentials: owner offline and credential not migrated", + { + operation: "update_shared_credentials_failed", + credentialId, + ownerId, + error: error instanceof Error ? error.message : "Unknown error", + }, + ); + await db + .update(sharedCredentials) + .set({ needsReEncryption: true }) + .where(eq(sharedCredentials.originalCredentialId, credentialId)); + return; + } + } + + for (const sharedCred of sharedCreds) { + const targetDEK = DataCrypto.getUserDataKey(sharedCred.targetUserId); + + if (!targetDEK) { + await db + .update(sharedCredentials) + .set({ needsReEncryption: true }) + .where(eq(sharedCredentials.id, sharedCred.id)); + continue; + } + + const encryptedForTarget = this.encryptCredentialForUser( + credentialData, + sharedCred.targetUserId, + targetDEK, + sharedCred.hostAccessId, + ); + + await db + .update(sharedCredentials) + .set({ + ...encryptedForTarget, + needsReEncryption: false, + updatedAt: new Date().toISOString(), + }) + .where(eq(sharedCredentials.id, sharedCred.id)); + } + } catch (error) { + databaseLogger.error("Failed to update shared credentials", error, { + operation: "update_shared_credentials", + credentialId, + }); + } + } + + /** + * Delete shared credentials when original credential is deleted + * Called from credential deletion route + */ + async deleteSharedCredentialsForOriginal( + credentialId: number, + ): Promise { + try { + const result = await db + .delete(sharedCredentials) + .where(eq(sharedCredentials.originalCredentialId, credentialId)) + .returning({ id: sharedCredentials.id }); + } catch (error) { + databaseLogger.error("Failed to delete shared credentials", error, { + operation: "delete_shared_credentials", + credentialId, + }); + } + } + + /** + * Re-encrypt pending shared credentials for a user when they log in + * Called during user login + */ + async reEncryptPendingCredentialsForUser(userId: string): Promise { + try { + const userDEK = DataCrypto.getUserDataKey(userId); + if (!userDEK) { + return; + } + + const pendingCreds = await db + .select() + .from(sharedCredentials) + .where( + and( + eq(sharedCredentials.targetUserId, userId), + eq(sharedCredentials.needsReEncryption, true), + ), + ); + + for (const cred of pendingCreds) { + await this.reEncryptSharedCredential(cred.id, userId); + } + } catch (error) { + databaseLogger.error("Failed to re-encrypt pending credentials", error, { + operation: "reencrypt_pending_credentials", + userId, + }); + } + } + + private async getDecryptedCredential( + credentialId: number, + ownerId: string, + ownerDEK: Buffer, + ): Promise { + const creds = await db + .select() + .from(sshCredentials) + .where( + and( + eq(sshCredentials.id, credentialId), + eq(sshCredentials.userId, ownerId), + ), + ) + .limit(1); + + if (creds.length === 0) { + throw new Error(`Credential ${credentialId} not found`); + } + + const cred = creds[0]; + + return { + username: cred.username, + authType: cred.authType, + password: cred.password + ? this.decryptField(cred.password, ownerDEK, credentialId, "password") + : undefined, + key: cred.key + ? this.decryptField(cred.key, ownerDEK, credentialId, "key") + : undefined, + keyPassword: cred.key_password + ? this.decryptField( + cred.key_password, + ownerDEK, + credentialId, + "key_password", + ) + : undefined, + keyType: cred.keyType, + }; + } + + /** + * Decrypt credential using system key (for offline sharing when owner is offline) + */ + private async getDecryptedCredentialViaSystemKey( + credentialId: number, + ): Promise { + const creds = await db + .select() + .from(sshCredentials) + .where(eq(sshCredentials.id, credentialId)) + .limit(1); + + if (creds.length === 0) { + throw new Error(`Credential ${credentialId} not found`); + } + + const cred = creds[0]; + + if (!cred.systemPassword && !cred.systemKey && !cred.systemKeyPassword) { + throw new Error( + "Credential not yet migrated for offline sharing. " + + "Please ask credential owner to log in to enable sharing.", + ); + } + + const { SystemCrypto } = await import("./system-crypto.js"); + const systemCrypto = SystemCrypto.getInstance(); + const CSKEK = await systemCrypto.getCredentialSharingKey(); + + return { + username: cred.username, + authType: cred.authType, + password: cred.systemPassword + ? this.decryptField( + cred.systemPassword, + CSKEK, + credentialId, + "password", + ) + : undefined, + key: cred.systemKey + ? this.decryptField(cred.systemKey, CSKEK, credentialId, "key") + : undefined, + keyPassword: cred.systemKeyPassword + ? this.decryptField( + cred.systemKeyPassword, + CSKEK, + credentialId, + "key_password", + ) + : undefined, + keyType: cred.keyType, + }; + } + + private encryptCredentialForUser( + credentialData: CredentialData, + targetUserId: string, + targetDEK: Buffer, + hostAccessId: number, + ): { + encryptedUsername: string; + encryptedAuthType: string; + encryptedPassword: string | null; + encryptedKey: string | null; + encryptedKeyPassword: string | null; + encryptedKeyType: string | null; + } { + const recordId = `shared-${hostAccessId}-${targetUserId}`; + + return { + encryptedUsername: FieldCrypto.encryptField( + credentialData.username, + targetDEK, + recordId, + "username", + ), + encryptedAuthType: credentialData.authType, + encryptedPassword: credentialData.password + ? FieldCrypto.encryptField( + credentialData.password, + targetDEK, + recordId, + "password", + ) + : null, + encryptedKey: credentialData.key + ? FieldCrypto.encryptField( + credentialData.key, + targetDEK, + recordId, + "key", + ) + : null, + encryptedKeyPassword: credentialData.keyPassword + ? FieldCrypto.encryptField( + credentialData.keyPassword, + targetDEK, + recordId, + "key_password", + ) + : null, + encryptedKeyType: credentialData.keyType || null, + }; + } + + private decryptSharedCredential( + sharedCred: typeof sharedCredentials.$inferSelect, + userDEK: Buffer, + ): CredentialData { + const recordId = `shared-${sharedCred.hostAccessId}-${sharedCred.targetUserId}`; + + return { + username: FieldCrypto.decryptField( + sharedCred.encryptedUsername, + userDEK, + recordId, + "username", + ), + authType: sharedCred.encryptedAuthType, + password: sharedCred.encryptedPassword + ? FieldCrypto.decryptField( + sharedCred.encryptedPassword, + userDEK, + recordId, + "password", + ) + : undefined, + key: sharedCred.encryptedKey + ? FieldCrypto.decryptField( + sharedCred.encryptedKey, + userDEK, + recordId, + "key", + ) + : undefined, + keyPassword: sharedCred.encryptedKeyPassword + ? FieldCrypto.decryptField( + sharedCred.encryptedKeyPassword, + userDEK, + recordId, + "key_password", + ) + : undefined, + keyType: sharedCred.encryptedKeyType || undefined, + }; + } + + private decryptField( + encryptedValue: string, + dek: Buffer, + recordId: number | string, + fieldName: string, + ): string { + try { + return FieldCrypto.decryptField( + encryptedValue, + dek, + recordId.toString(), + fieldName, + ); + } catch (error) { + databaseLogger.warn("Field decryption failed, returning as-is", { + operation: "decrypt_field", + fieldName, + recordId, + }); + return encryptedValue; + } + } + + private async createPendingSharedCredential( + hostAccessId: number, + originalCredentialId: number, + targetUserId: string, + ): Promise { + await db.insert(sharedCredentials).values({ + hostAccessId, + originalCredentialId, + targetUserId, + encryptedUsername: "", + encryptedAuthType: "", + needsReEncryption: true, + }); + + databaseLogger.info("Created pending shared credential", { + operation: "create_pending_shared_credential", + hostAccessId, + targetUserId, + }); + } + + private async reEncryptSharedCredential( + sharedCredId: number, + userId: string, + ): Promise { + try { + const sharedCred = await db + .select() + .from(sharedCredentials) + .where(eq(sharedCredentials.id, sharedCredId)) + .limit(1); + + if (sharedCred.length === 0) { + databaseLogger.warn("Re-encrypt: shared credential not found", { + operation: "reencrypt_not_found", + sharedCredId, + }); + return; + } + + const cred = sharedCred[0]; + + const access = await db + .select() + .from(hostAccess) + .innerJoin(sshData, eq(hostAccess.hostId, sshData.id)) + .where(eq(hostAccess.id, cred.hostAccessId)) + .limit(1); + + if (access.length === 0) { + databaseLogger.warn("Re-encrypt: host access not found", { + operation: "reencrypt_access_not_found", + sharedCredId, + }); + return; + } + + const ownerId = access[0].ssh_data.userId; + + const userDEK = DataCrypto.getUserDataKey(userId); + if (!userDEK) { + databaseLogger.warn("Re-encrypt: user DEK not available", { + operation: "reencrypt_user_offline", + sharedCredId, + userId, + }); + return; + } + + const ownerDEK = DataCrypto.getUserDataKey(ownerId); + let credentialData: CredentialData; + + if (ownerDEK) { + credentialData = await this.getDecryptedCredential( + cred.originalCredentialId, + ownerId, + ownerDEK, + ); + } else { + try { + credentialData = await this.getDecryptedCredentialViaSystemKey( + cred.originalCredentialId, + ); + } catch (error) { + databaseLogger.warn( + "Re-encrypt: system key decryption failed, credential may not be migrated yet", + { + operation: "reencrypt_system_key_failed", + sharedCredId, + error: error instanceof Error ? error.message : "Unknown error", + }, + ); + return; + } + } + + const encryptedForTarget = this.encryptCredentialForUser( + credentialData, + userId, + userDEK, + cred.hostAccessId, + ); + + await db + .update(sharedCredentials) + .set({ + ...encryptedForTarget, + needsReEncryption: false, + updatedAt: new Date().toISOString(), + }) + .where(eq(sharedCredentials.id, sharedCredId)); + } catch (error) { + databaseLogger.error("Failed to re-encrypt shared credential", error, { + operation: "reencrypt_shared_credential", + sharedCredId, + userId, + }); + } + } +} + +export { SharedCredentialManager }; diff --git a/src/backend/utils/simple-db-ops.ts b/src/backend/utils/simple-db-ops.ts index 6fbd7a63..12fbee1b 100644 --- a/src/backend/utils/simple-db-ops.ts +++ b/src/backend/utils/simple-db-ops.ts @@ -2,7 +2,12 @@ import { getDb, DatabaseSaveTrigger } from "../database/db/index.js"; import { DataCrypto } from "./data-crypto.js"; import type { SQLiteTable } from "drizzle-orm/sqlite-core"; -type TableName = "users" | "ssh_data" | "ssh_credentials" | "recent_activity"; +type TableName = + | "users" + | "ssh_data" + | "ssh_credentials" + | "recent_activity" + | "socks5_proxy_presets"; class SimpleDBOps { static async insert>( @@ -23,6 +28,20 @@ class SimpleDBOps { userDataKey, ); + if (tableName === "ssh_credentials") { + const { SystemCrypto } = await import("./system-crypto.js"); + const systemCrypto = SystemCrypto.getInstance(); + const systemKey = await systemCrypto.getCredentialSharingKey(); + + const systemEncrypted = await DataCrypto.encryptRecordWithSystemKey( + tableName, + dataWithTempId, + systemKey, + ); + + Object.assign(encryptedData, systemEncrypted); + } + if (!data.id) { delete encryptedData.id; } @@ -105,6 +124,20 @@ class SimpleDBOps { userDataKey, ); + if (tableName === "ssh_credentials") { + const { SystemCrypto } = await import("./system-crypto.js"); + const systemCrypto = SystemCrypto.getInstance(); + const systemKey = await systemCrypto.getCredentialSharingKey(); + + const systemEncrypted = await DataCrypto.encryptRecordWithSystemKey( + tableName, + data, + systemKey, + ); + + Object.assign(encryptedData, systemEncrypted); + } + const result = await getDb() .update(table) .set(encryptedData) diff --git a/src/backend/utils/socks5-helper.ts b/src/backend/utils/socks5-helper.ts new file mode 100644 index 00000000..c02f375e --- /dev/null +++ b/src/backend/utils/socks5-helper.ts @@ -0,0 +1,131 @@ +import { SocksClient } from "socks"; +import type { SocksClientOptions } from "socks"; +import net from "net"; +import { sshLogger } from "./logger.js"; +import type { ProxyNode } from "../../types/index.js"; + +export interface SOCKS5Config { + useSocks5?: boolean; + socks5Host?: string; + socks5Port?: number; + socks5Username?: string; + socks5Password?: string; + socks5ProxyChain?: ProxyNode[]; +} + +/** + * Creates a SOCKS5 connection through a single proxy or a chain of proxies + * @param targetHost - Target SSH server hostname/IP + * @param targetPort - Target SSH server port + * @param socks5Config - SOCKS5 proxy configuration + * @returns Promise with connected socket or null if SOCKS5 is not enabled + */ +export async function createSocks5Connection( + targetHost: string, + targetPort: number, + socks5Config: SOCKS5Config, +): Promise { + if (!socks5Config.useSocks5) { + return null; + } + + if ( + socks5Config.socks5ProxyChain && + socks5Config.socks5ProxyChain.length > 0 + ) { + return createProxyChainConnection( + targetHost, + targetPort, + socks5Config.socks5ProxyChain, + ); + } + + if (socks5Config.socks5Host) { + return createSingleProxyConnection(targetHost, targetPort, socks5Config); + } + + return null; +} + +/** + * Creates a connection through a single SOCKS proxy + */ +async function createSingleProxyConnection( + targetHost: string, + targetPort: number, + socks5Config: SOCKS5Config, +): Promise { + const socksOptions: SocksClientOptions = { + proxy: { + host: socks5Config.socks5Host!, + port: socks5Config.socks5Port || 1080, + type: 5, + userId: socks5Config.socks5Username, + password: socks5Config.socks5Password, + }, + command: "connect", + destination: { + host: targetHost, + port: targetPort, + }, + }; + + try { + const info = await SocksClient.createConnection(socksOptions); + + return info.socket; + } catch (error) { + sshLogger.error("SOCKS5 connection failed", error, { + operation: "socks5_connect_failed", + proxyHost: socks5Config.socks5Host, + proxyPort: socks5Config.socks5Port || 1080, + targetHost, + targetPort, + errorMessage: error instanceof Error ? error.message : "Unknown error", + }); + throw error; + } +} + +/** + * Creates a connection through a chain of SOCKS proxies + * Each proxy in the chain connects through the previous one + */ +async function createProxyChainConnection( + targetHost: string, + targetPort: number, + proxyChain: ProxyNode[], +): Promise { + if (proxyChain.length === 0) { + throw new Error("Proxy chain is empty"); + } + + const chainPath = proxyChain.map((p) => `${p.host}:${p.port}`).join(" → "); + try { + const info = await SocksClient.createConnectionChain({ + proxies: proxyChain.map((p) => ({ + host: p.host, + port: p.port, + type: p.type, + userId: p.username, + password: p.password, + timeout: 10000, + })), + command: "connect", + destination: { + host: targetHost, + port: targetPort, + }, + }); + return info.socket; + } catch (error) { + sshLogger.error("SOCKS proxy chain connection failed", error, { + operation: "socks5_chain_connect_failed", + chainLength: proxyChain.length, + targetHost, + targetPort, + errorMessage: error instanceof Error ? error.message : "Unknown error", + }); + throw error; + } +} diff --git a/src/backend/utils/system-crypto.ts b/src/backend/utils/system-crypto.ts index fdff0263..34f60cee 100644 --- a/src/backend/utils/system-crypto.ts +++ b/src/backend/utils/system-crypto.ts @@ -8,6 +8,7 @@ class SystemCrypto { private jwtSecret: string | null = null; private databaseKey: Buffer | null = null; private internalAuthToken: string | null = null; + private credentialSharingKey: Buffer | null = null; private constructor() {} @@ -158,6 +159,48 @@ class SystemCrypto { return this.internalAuthToken!; } + async initializeCredentialSharingKey(): Promise { + try { + const dataDir = process.env.DATA_DIR || "./db/data"; + const envPath = path.join(dataDir, ".env"); + + const envKey = process.env.CREDENTIAL_SHARING_KEY; + if (envKey && envKey.length >= 64) { + this.credentialSharingKey = Buffer.from(envKey, "hex"); + return; + } + + try { + const envContent = await fs.readFile(envPath, "utf8"); + const csKeyMatch = envContent.match(/^CREDENTIAL_SHARING_KEY=(.+)$/m); + if (csKeyMatch && csKeyMatch[1] && csKeyMatch[1].length >= 64) { + this.credentialSharingKey = Buffer.from(csKeyMatch[1], "hex"); + process.env.CREDENTIAL_SHARING_KEY = csKeyMatch[1]; + return; + } + } catch (fileError) {} + + await this.generateAndGuideCredentialSharingKey(); + } catch (error) { + databaseLogger.error( + "Failed to initialize credential sharing key", + error, + { + operation: "cred_sharing_key_init_failed", + dataDir: process.env.DATA_DIR || "./db/data", + }, + ); + throw new Error("Credential sharing key initialization failed"); + } + } + + async getCredentialSharingKey(): Promise { + if (!this.credentialSharingKey) { + await this.initializeCredentialSharingKey(); + } + return this.credentialSharingKey!; + } + private async generateAndGuideUser(): Promise { const newSecret = crypto.randomBytes(32).toString("hex"); const instanceId = crypto.randomBytes(8).toString("hex"); @@ -210,6 +253,26 @@ class SystemCrypto { ); } + private async generateAndGuideCredentialSharingKey(): Promise { + const newKey = crypto.randomBytes(32); + const newKeyHex = newKey.toString("hex"); + const instanceId = crypto.randomBytes(8).toString("hex"); + + this.credentialSharingKey = newKey; + + await this.updateEnvFile("CREDENTIAL_SHARING_KEY", newKeyHex); + + databaseLogger.success( + "Credential sharing key auto-generated and saved to .env", + { + operation: "cred_sharing_key_auto_generated", + instanceId, + envVarName: "CREDENTIAL_SHARING_KEY", + note: "Used for offline credential sharing - no restart required", + }, + ); + } + async validateJWTSecret(): Promise { try { const secret = await this.getJWTSecret(); diff --git a/src/components/ui/alert-dialog.tsx b/src/components/ui/alert-dialog.tsx new file mode 100644 index 00000000..1c376739 --- /dev/null +++ b/src/components/ui/alert-dialog.tsx @@ -0,0 +1,155 @@ +import * as React from "react"; +import * as AlertDialogPrimitive from "@radix-ui/react-alert-dialog"; + +import { cn } from "@/lib/utils"; +import { buttonVariants } from "@/components/ui/button"; + +function AlertDialog({ + ...props +}: React.ComponentProps) { + return ; +} + +function AlertDialogTrigger({ + ...props +}: React.ComponentProps) { + return ( + + ); +} + +function AlertDialogPortal({ + ...props +}: React.ComponentProps) { + return ( + + ); +} + +function AlertDialogOverlay({ + className, + ...props +}: React.ComponentProps) { + return ( + + ); +} + +function AlertDialogContent({ + className, + ...props +}: React.ComponentProps) { + return ( + + + + + ); +} + +function AlertDialogHeader({ + className, + ...props +}: React.ComponentProps<"div">) { + return ( +
    + ); +} + +function AlertDialogFooter({ + className, + ...props +}: React.ComponentProps<"div">) { + return ( +
    + ); +} + +function AlertDialogTitle({ + className, + ...props +}: React.ComponentProps) { + return ( + + ); +} + +function AlertDialogDescription({ + className, + ...props +}: React.ComponentProps) { + return ( + + ); +} + +function AlertDialogAction({ + className, + ...props +}: React.ComponentProps) { + return ( + + ); +} + +function AlertDialogCancel({ + className, + ...props +}: React.ComponentProps) { + return ( + + ); +} + +export { + AlertDialog, + AlertDialogPortal, + AlertDialogOverlay, + AlertDialogTrigger, + AlertDialogContent, + AlertDialogHeader, + AlertDialogFooter, + AlertDialogTitle, + AlertDialogDescription, + AlertDialogAction, + AlertDialogCancel, +}; diff --git a/src/components/ui/badge.tsx b/src/components/ui/badge.tsx index b99be47d..dbc4719e 100644 --- a/src/components/ui/badge.tsx +++ b/src/components/ui/badge.tsx @@ -15,7 +15,7 @@ const badgeVariants = cva( secondary: "border-transparent bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90", destructive: - "border-transparent bg-destructive text-white [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60", + "border-transparent bg-destructive text-foreground [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60", outline: "text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground", }, diff --git a/src/components/ui/button.tsx b/src/components/ui/button.tsx index fbdf6b8d..849574a3 100644 --- a/src/components/ui/button.tsx +++ b/src/components/ui/button.tsx @@ -13,7 +13,7 @@ const buttonVariants = cva( default: "bg-primary text-primary-foreground shadow-xs hover:bg-primary/90", destructive: - "bg-destructive text-white shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60", + "bg-destructive text-foreground shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60", outline: "border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50", secondary: diff --git a/src/components/ui/card.tsx b/src/components/ui/card.tsx index 113d66c7..5b8522b8 100644 --- a/src/components/ui/card.tsx +++ b/src/components/ui/card.tsx @@ -7,7 +7,7 @@ function Card({ className, ...props }: React.ComponentProps<"div">) {
    ) { type={type} data-slot="input" className={cn( - "file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input flex h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] duration-200 outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm", + "file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground bg-elevated dark:bg-input/30 border-input flex h-9 w-full min-w-0 rounded-md border px-3 py-1 text-base shadow-xs transition-[color,box-shadow] duration-200 outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm", "focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]", "aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive", className, diff --git a/src/components/ui/resizable.tsx b/src/components/ui/resizable.tsx index 7909c556..2835db13 100644 --- a/src/components/ui/resizable.tsx +++ b/src/components/ui/resizable.tsx @@ -37,13 +37,13 @@ function ResizableHandle({ div]:rotate-90 bg-dark-border-hover hover:bg-dark-active active:bg-dark-pressed transition-colors duration-150", + "relative flex w-1 items-center justify-center after:absolute after:inset-y-0 after:left-1/2 after:w-1 after:-translate-x-1/2 focus-visible:ring-1 focus-visible:ring-offset-1 focus-visible:outline-hidden data-[panel-group-direction=vertical]:h-1 data-[panel-group-direction=vertical]:w-full data-[panel-group-direction=vertical]:after:left-0 data-[panel-group-direction=vertical]:after:h-1 data-[panel-group-direction=vertical]:after:w-full data-[panel-group-direction=vertical]:after:translate-x-0 data-[panel-group-direction=vertical]:after:-translate-y-1/2 [&[data-panel-group-direction=vertical]>div]:rotate-90 bg-edge-hover hover:bg-interact active:bg-pressed transition-colors duration-150", className, )} {...props} > {withHandle && ( -
    +
    )} diff --git a/src/components/ui/select.tsx b/src/components/ui/select.tsx index 0c883e37..dadd3525 100644 --- a/src/components/ui/select.tsx +++ b/src/components/ui/select.tsx @@ -59,7 +59,7 @@ function SelectContent({ ) { data-slot="sidebar-content" data-sidebar="content" className={cn( - "flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden", + "flex min-h-0 flex-1 flex-col gap-2 overflow-auto thin-scrollbar group-data-[collapsible=icon]:overflow-hidden", className, )} {...props} diff --git a/src/components/ui/slider.tsx b/src/components/ui/slider.tsx index 74e41490..231c5a81 100644 --- a/src/components/ui/slider.tsx +++ b/src/components/ui/slider.tsx @@ -51,7 +51,7 @@ function Slider({ ))} diff --git a/src/components/ui/sonner.tsx b/src/components/ui/sonner.tsx index 04e0013c..264f0503 100644 --- a/src/components/ui/sonner.tsx +++ b/src/components/ui/sonner.tsx @@ -1,4 +1,4 @@ -import { useTheme } from "next-themes"; +import { useTheme } from "@/components/theme-provider"; import { Toaster as Sonner, type ToasterProps, toast } from "sonner"; import { useRef } from "react"; diff --git a/src/components/ui/table.tsx b/src/components/ui/table.tsx index 2ad27ce8..a198ece0 100644 --- a/src/components/ui/table.tsx +++ b/src/components/ui/table.tsx @@ -6,7 +6,7 @@ function Table({ className, ...props }: React.ComponentProps<"table">) { return (
    ( return (

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≫8eHWVQE#$2<;NesbD{2ZCG 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