Files
Termix/openapi.json
Karmaa 5cd9de9ac5 v1.6.0 (#221)
* Add documentation in Chinese language (#160)

* Update file naming and structure for mobile support

* Add conditional desktop/mobile rendering

* Mobile terminal

* Fix overwritten i18n (#161)

* Add comprehensive Chinese internationalization support

- Implemented i18n framework with react-i18next for multi-language support
- Added Chinese (zh) and English (en) translation files with comprehensive coverage
- Localized Admin interface, authentication flows, and error messages
- Translated FileManager operations and UI elements
- Updated HomepageAuth component with localized authentication messages
- Localized LeftSidebar navigation and host management
- Added language switcher component (shown after login only)
- Configured default language as English with Chinese as secondary option
- Localized TOTPSetup two-factor authentication interface
- Updated Docker build to include translation files
- Achieved 95%+ UI localization coverage across core components

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

* Extend Chinese localization coverage to Host Manager components

- Added comprehensive translations for HostManagerHostViewer component
- Localized all host management UI text including import/export features
- Translated error messages and confirmation dialogs for host operations
- Added translations for HostManagerHostEditor validation messages
- Localized connection details, organization settings, and form labels
- Fixed syntax error in FileManagerOperations component
- Achieved near-complete localization of SSH host management interface
- Updated placeholders and tooltips for better user guidance

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

* Complete comprehensive Chinese localization for Termix

- Added full localization support for Tunnel components (connected/disconnected states, retry messages)
- Localized all tunnel status messages and connection errors
- Added translations for port forwarding UI elements
- Verified Server, TopNavbar, and Tab components already have complete i18n support
- Achieved 99%+ localization coverage across entire application
- All core UI components now fully support Chinese and English languages

This completes the comprehensive internationalization effort for the Termix SSH management platform.

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

* Localize additional Host Manager components and authentication settings

- Added translations for all authentication options (Password, Key, SSH Private Key)
- Localized form labels in HostManagerHostEditor (Pin Connection, Enable Terminal/Tunnel/FileManager)
- Translated Upload/Update Key button states
- Localized Host Viewer and Add/Edit Host tab labels
- Added Chinese translations for all host management settings
- Fixed duplicate translation keys in JSON files

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

* Extend localization coverage to UI components and common strings

- Added comprehensive common translations (online/offline, success/error, etc.)
- Localized status indicator component with all status states
- Updated FileManagerLeftSidebar toast messages for rename/delete operations
- Added translations for UI elements (close, toggle sidebar, etc.)
- Expanded placeholder translations for form inputs
- Added Chinese translations for all new common strings
- Improved consistency across component status messages

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

* Complete Chinese localization for remaining UI components

- Add comprehensive Chinese translations for Host Manager component
  - Translate all form labels, buttons, and descriptions
  - Add translations for SSH configuration warnings and instructions
  - Localize tunnel connection settings and port forwarding options

- Localize SSH Tools panel
  - Translate key recording functionality
  - Add translations for settings and configuration options

- Translate homepage welcome messages and navigation elements
  - Add Chinese translations for login success messages
  - Localize "Updates & Releases" section title
  - Translate sidebar "Host Manager" button

- Fix translation key display issues
  - Remove duplicate translation keys in both language files
  - Ensure all components properly reference translation keys
  - Fix hosts.tunnelConnections key mapping

This completes the full Chinese localization of the Termix application,
achieving near 100% UI translation coverage while maintaining English
as the default language.

* Complete final Chinese localization for Host Manager tunnel configuration

- Add Chinese translations for authentication UI elements
  - Translate "Authentication", "Password", and "Key" tab labels
  - Localize SSH private key and key password fields
  - Add translations for key type selector

- Localize tunnel connection configuration descriptions
  - Translate retry attempts and retry interval descriptions
  - Add dynamic tunnel forwarding description with port parameters
  - Localize endpoint SSH configuration labels

- Fix missing translation keys
  - Add "upload" translation for file upload button
  - Ensure all FormLabel and FormDescription elements use translation keys

This completes the comprehensive Chinese localization of the entire
Termix application, achieving 100% UI translation coverage.

* Fix PR feedback: Improve Profile section translations and UX

- Fixed password reset translations in Profile section
- Moved language selector from TopNavbar to Profile page
- Added profile.selectPreferredLanguage translation key
- Improved user experience for language preferences

* Apply critical OIDC and notification system fixes while preserving i18n

- Merge OIDC authentication fixes from 3877e90:
  * Enhanced JWKS discovery mechanism with multiple backup URLs
  * Better support for non-standard OIDC providers (Authentik, etc.)
  * Improved error handling for "Failed to get user information"
- Migrate to unified Sonner toast notification system:
  * Replace custom success/error state management
  * Remove redundant alert state variables
  * Consistent user feedback across all components
- Improve code quality and function naming conventions
- PRESERVE all existing i18n functionality and Chinese translations

🤖 Generated with Claude Code

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

* Fix OIDC errors for "Failed to get user information"

* Fix OIDC errors for "Failed to get user information"

* Fix spelling error

* Migrate everything to alert system, update user.ts for OIDC updates.

* Fix OIDC errors for "Failed to get user information"

* Fix OIDC errors for "Failed to get user information"

* Fix spelling error

* Migrate everything to alert system, update user.ts for OIDC updates.

* Update env

* Fix users.ts and schema for override

* Convert web app to Electron desktop application

- Add Electron main process with developer tools support
- Create preload script for secure context bridge
- Configure electron-builder for packaging
- Update Vite config for Electron compatibility (base: './')
- Add environment variable support for API host configuration
- Fix i18n to use relative paths for Electron file protocol
- Restore multi-port backend architecture (8081-8085)
- Add enhanced backend startup script with port checking
- Update package.json with Electron dependencies and build scripts

🤖 Generated with [Claude Code](https://claude.ai/code)

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

* Complete Electron desktop application implementation

- Add backend auto-start functionality in main process
- Fix authentication token storage for Electron environment
- Implement localStorage-based token management in Electron
- Add proper Electron environment detection via preload script
- Fix WebSocket connections for terminal functionality
- Resolve font file loading issues in packaged application
- Update API endpoints to work with backend auto-start
- Streamline build scripts with unified electron:package command
- Fix better-sqlite3 native module compatibility issues
- Ensure all services start automatically in production mode

🤖 Generated with [Claude Code](https://claude.ai/code)

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

* Remove releases folder from git and force Desktop UI.

* Improve mobile support with half-baked custom keyboard

* Fix API routing

* Upgrade mobile keyboard with more keys.

* Add cross-platform support and clean up obsolete files

- Add electron-packager scripts for Windows, macOS, and Linux
- Include universal architecture support for macOS
- Add electron:package:all for building all platforms
- Remove obsolete start-backend.sh script (replaced by Electron auto-start)
- Improve ignore patterns to exclude repo-images folder
- Add platform-specific icon configurations

🤖 Generated with [Claude Code](https://claude.ai/code)

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

* Fix build system by removing electron-builder dependency

- Remove electron-builder and @electron/rebuild packages to resolve build errors
- Clean up package.json scripts that depend on electron-builder
- Fix merge conflict markers in AdminSettings.tsx and PasswordReset.tsx
- All build commands now work correctly:
  - npm run build (frontend + backend)
  - npm run build:frontend
  - npm run build:backend
  - npm run electron:package (using electron-packager)

The build system is now stable and functional without signing requirements.

🤖 Generated with [Claude Code](https://claude.ai/code)

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

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: ZacharyZcR <zacharyzcr1984@gmail.com>
Co-authored-by: LukeGus <bugattiguy527@gmail.com>

* Mobile UI improvement

* Electron dev (#185)

* Add comprehensive Chinese internationalization support

- Implemented i18n framework with react-i18next for multi-language support
- Added Chinese (zh) and English (en) translation files with comprehensive coverage
- Localized Admin interface, authentication flows, and error messages
- Translated FileManager operations and UI elements
- Updated HomepageAuth component with localized authentication messages
- Localized LeftSidebar navigation and host management
- Added language switcher component (shown after login only)
- Configured default language as English with Chinese as secondary option
- Localized TOTPSetup two-factor authentication interface
- Updated Docker build to include translation files
- Achieved 95%+ UI localization coverage across core components

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

* Extend Chinese localization coverage to Host Manager components

- Added comprehensive translations for HostManagerHostViewer component
- Localized all host management UI text including import/export features
- Translated error messages and confirmation dialogs for host operations
- Added translations for HostManagerHostEditor validation messages
- Localized connection details, organization settings, and form labels
- Fixed syntax error in FileManagerOperations component
- Achieved near-complete localization of SSH host management interface
- Updated placeholders and tooltips for better user guidance

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

* Complete comprehensive Chinese localization for Termix

- Added full localization support for Tunnel components (connected/disconnected states, retry messages)
- Localized all tunnel status messages and connection errors
- Added translations for port forwarding UI elements
- Verified Server, TopNavbar, and Tab components already have complete i18n support
- Achieved 99%+ localization coverage across entire application
- All core UI components now fully support Chinese and English languages

This completes the comprehensive internationalization effort for the Termix SSH management platform.

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

* Localize additional Host Manager components and authentication settings

- Added translations for all authentication options (Password, Key, SSH Private Key)
- Localized form labels in HostManagerHostEditor (Pin Connection, Enable Terminal/Tunnel/FileManager)
- Translated Upload/Update Key button states
- Localized Host Viewer and Add/Edit Host tab labels
- Added Chinese translations for all host management settings
- Fixed duplicate translation keys in JSON files

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

* Extend localization coverage to UI components and common strings

- Added comprehensive common translations (online/offline, success/error, etc.)
- Localized status indicator component with all status states
- Updated FileManagerLeftSidebar toast messages for rename/delete operations
- Added translations for UI elements (close, toggle sidebar, etc.)
- Expanded placeholder translations for form inputs
- Added Chinese translations for all new common strings
- Improved consistency across component status messages

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

* Complete Chinese localization for remaining UI components

- Add comprehensive Chinese translations for Host Manager component
  - Translate all form labels, buttons, and descriptions
  - Add translations for SSH configuration warnings and instructions
  - Localize tunnel connection settings and port forwarding options

- Localize SSH Tools panel
  - Translate key recording functionality
  - Add translations for settings and configuration options

- Translate homepage welcome messages and navigation elements
  - Add Chinese translations for login success messages
  - Localize "Updates & Releases" section title
  - Translate sidebar "Host Manager" button

- Fix translation key display issues
  - Remove duplicate translation keys in both language files
  - Ensure all components properly reference translation keys
  - Fix hosts.tunnelConnections key mapping

This completes the full Chinese localization of the Termix application,
achieving near 100% UI translation coverage while maintaining English
as the default language.

* Complete final Chinese localization for Host Manager tunnel configuration

- Add Chinese translations for authentication UI elements
  - Translate "Authentication", "Password", and "Key" tab labels
  - Localize SSH private key and key password fields
  - Add translations for key type selector

- Localize tunnel connection configuration descriptions
  - Translate retry attempts and retry interval descriptions
  - Add dynamic tunnel forwarding description with port parameters
  - Localize endpoint SSH configuration labels

- Fix missing translation keys
  - Add "upload" translation for file upload button
  - Ensure all FormLabel and FormDescription elements use translation keys

This completes the comprehensive Chinese localization of the entire
Termix application, achieving 100% UI translation coverage.

* Fix PR feedback: Improve Profile section translations and UX

- Fixed password reset translations in Profile section
- Moved language selector from TopNavbar to Profile page
- Added profile.selectPreferredLanguage translation key
- Improved user experience for language preferences

* Apply critical OIDC and notification system fixes while preserving i18n

- Merge OIDC authentication fixes from 3877e90:
  * Enhanced JWKS discovery mechanism with multiple backup URLs
  * Better support for non-standard OIDC providers (Authentik, etc.)
  * Improved error handling for "Failed to get user information"
- Migrate to unified Sonner toast notification system:
  * Replace custom success/error state management
  * Remove redundant alert state variables
  * Consistent user feedback across all components
- Improve code quality and function naming conventions
- PRESERVE all existing i18n functionality and Chinese translations

🤖 Generated with Claude Code

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

* Fix OIDC errors for "Failed to get user information"

* Fix OIDC errors for "Failed to get user information"

* Fix spelling error

* Migrate everything to alert system, update user.ts for OIDC updates.

* Fix OIDC errors for "Failed to get user information"

* Fix OIDC errors for "Failed to get user information"

* Fix spelling error

* Migrate everything to alert system, update user.ts for OIDC updates.

* Update env

* Fix users.ts and schema for override

* Convert web app to Electron desktop application

- Add Electron main process with developer tools support
- Create preload script for secure context bridge
- Configure electron-builder for packaging
- Update Vite config for Electron compatibility (base: './')
- Add environment variable support for API host configuration
- Fix i18n to use relative paths for Electron file protocol
- Restore multi-port backend architecture (8081-8085)
- Add enhanced backend startup script with port checking
- Update package.json with Electron dependencies and build scripts

🤖 Generated with [Claude Code](https://claude.ai/code)

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

* Complete Electron desktop application implementation

- Add backend auto-start functionality in main process
- Fix authentication token storage for Electron environment
- Implement localStorage-based token management in Electron
- Add proper Electron environment detection via preload script
- Fix WebSocket connections for terminal functionality
- Resolve font file loading issues in packaged application
- Update API endpoints to work with backend auto-start
- Streamline build scripts with unified electron:package command
- Fix better-sqlite3 native module compatibility issues
- Ensure all services start automatically in production mode

🤖 Generated with [Claude Code](https://claude.ai/code)

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

* Remove releases folder from git and force Desktop UI.

* Improve mobile support with half-baked custom keyboard

* Fix API routing

* Upgrade mobile keyboard with more keys.

* Add cross-platform support and clean up obsolete files

- Add electron-packager scripts for Windows, macOS, and Linux
- Include universal architecture support for macOS
- Add electron:package:all for building all platforms
- Remove obsolete start-backend.sh script (replaced by Electron auto-start)
- Improve ignore patterns to exclude repo-images folder
- Add platform-specific icon configurations

🤖 Generated with [Claude Code](https://claude.ai/code)

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

* Fix build system by removing electron-builder dependency

- Remove electron-builder and @electron/rebuild packages to resolve build errors
- Clean up package.json scripts that depend on electron-builder
- Fix merge conflict markers in AdminSettings.tsx and PasswordReset.tsx
- All build commands now work correctly:
  - npm run build (frontend + backend)
  - npm run build:frontend
  - npm run build:backend
  - npm run electron:package (using electron-packager)

The build system is now stable and functional without signing requirements.

🤖 Generated with [Claude Code](https://claude.ai/code)

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

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: ZacharyZcR <zacharyzcr1984@gmail.com>
Co-authored-by: LukeGus <bugattiguy527@gmail.com>
Co-authored-by: Karmaa <88517757+LukeGus@users.noreply.github.com>

* Add navigation and hardcoded hosts

* Update mobile sidebar to use API, add auth and tab system to mobile.

* Update sidebar state

* Mobile support (#190)

* Add vibration to keyboard

* Fix keyboard keys

* Fix keyboard keys

* Fix keyboard keys

* Rename files, improve keyboard usability

* Improve keyboard view and fix various issues with it

* Add mobile chinese translation

* Disable OS keyboard from appearing

* Fix fit addon not resizing with "more" on keyboard

* Disable OS keyboard on terminal load

* Merge Luke and Zac

* feat: add export  option for ssh hosts (#173) (#187)

* Update issue templates

* feat: add export JSON option for SSH hosts (#173)

---------

Co-authored-by: Karmaa <88517757+LukeGus@users.noreply.github.com>
Co-authored-by: LukeGus <bugattiguy527@gmail.com>

* feat(profile): display version number from .env in profile menu (#182)

* feat(profile): display version number from .env in profile menu

* Update version checking process

---------

Co-authored-by: LukeGus <bugattiguy527@gmail.com>

* Add pretier

* feat(auth): Add password visibility toggle to auth forms (#166)

* added hide and unhide password button

* Undo admin settings changes

---------

Co-authored-by: LukeGus <bugattiguy527@gmail.com>

* Re-added password input

* Remove encrpytion, improve logging and merge interfaces.

* Improve logging (backend and frontend) and added dedicde OIDC clear

* feat: Added option to paste private key (#203)

* Improve logging frontend/backend, fix host form being reversed.

* Improve logging more, fix credentials sync issues, migrate more to be toasts

* Improve logging more, fix credentials sync issues, migrate more to be toasts

* More error to toast migration

* Remove more inline styles and run npm updates

* Update homepage appearing over everything and terminal incorrect bg

* Improved server stat generation and UI by caching and supporting more platforms

* Update mobile app with the same stat changes and remove rate limiting

* Put user profle in its own tab, add code rabbit support

* Improve code rabbit yaml

* Update chinese translation and fix z indexs causing delay to hide

* Bump vite from 7.1.3 to 7.1.5 (#204)

Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 7.1.3 to 7.1.5.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v7.1.5/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-version: 7.1.5
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Update read me

* Update electron builder and fix mobile terminal background

* Update logo, move translations, update electron building.

* Remove backend from electon, switching to server manager

* Add electron server configurator

* Fix backend builder on Dockerfile

* Fix langauge file for Dockerfile

* Fix architecture issues in Dockerfile

* Fix architecture issues in Dockerfile

* Fix architecture issues in Dockerfile

* Fix backend building for docker image

* Add electron builder

* Fix node starting in entrypoint and remove release from electron build

* Remove double packaing in electron build

* Fix folder nesting for electron gbuilder

* Fix native module docker build (better-sql and bcrypt)

* Fix api routes and missing translations and improve reconnection for terminals

* Update read me for new installation method

* Update CONTRIBUTING.md with color scheme

* Fix terrminal not closing afer 3 tries

* Fix electronm api routing, fikx ssh not connecting, and OIDC redirect errors

* Fix more electron API issues (ssh/oidc), make server manager force API check, and login saving.

* Add electron API routes

* Fix more electron APi routes and issues

* Hide admin settings on electron and fix server manager URl verification

* Hide admin settings on electron and fix server manager URl verification

* Fix admin setting visiblity on electron

* Add links to docs in respective places

* Migrate all getCookies to use main-axios.

* Migrate all isElectron to use main-axios.

* Clean up backend files

* Clean up frontend files and read me translations

* Run prettier

* Fix terminal in web, and update translations and prep for release.

* Update API to work on devs and remove random letter

* Run prettier

* Update read me for release

* Update read me for release

* Fixed delete issue (ready for release)

* Ensure retention days for artifact upload are set

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: starry <115192496+sky22333@users.noreply.github.com>
Co-authored-by: ZacharyZcR <PayasoNorahC@protonmail.com>
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: ZacharyZcR <zacharyzcr1984@gmail.com>
Co-authored-by: Shivam Kumar <155747305+maishivamhoo123@users.noreply.github.com>
Co-authored-by: Abhilash Gandhamalla <150357125+AbhilashG12@users.noreply.github.com>
Co-authored-by: jedi04 <78037206+jedi04@users.noreply.github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-12 14:42:00 -05:00

2306 lines
68 KiB
JSON

{
"openapi": "3.0.3",
"info": {
"title": "Termix API",
"version": "1.0.0",
"description": "Comprehensive API for Termix SSH management, file operations, tunneling, and server monitoring. This API provides endpoints for managing SSH hosts, file operations, tunnel connections, server monitoring, user management, and system alerts.",
"contact": {
"name": "Termix Development Team"
}
},
"servers": [
{
"url": "http://localhost:8081",
"description": "Main database and authentication server"
},
{
"url": "http://localhost:8083",
"description": "SSH tunnel management server"
},
{
"url": "http://localhost:8084",
"description": "SSH file manager server"
},
{
"url": "http://localhost:8085",
"description": "Server statistics and monitoring server"
}
],
"security": [
{
"bearerAuth": []
}
],
"tags": [
{
"name": "System",
"description": "System health, version, and release information endpoints"
},
{
"name": "SSH Hosts",
"description": "SSH host management, creation, updates, and deletion"
},
{
"name": "File Manager",
"description": "File manager operations including recent, pinned, and shortcuts"
},
{
"name": "SSH File Operations",
"description": "SSH file operations like reading, writing, creating, and deleting files"
},
{
"name": "Tunnel Management",
"description": "SSH tunnel connection, disconnection, and status management"
},
{
"name": "Server Statistics",
"description": "Server status monitoring and metrics collection"
},
{
"name": "User Management",
"description": "User account management and administration"
},
{
"name": "Authentication",
"description": "User authentication, login, and password management"
},
{
"name": "TOTP",
"description": "Two-factor authentication using TOTP (Time-based One-Time Password)"
},
{
"name": "Alerts",
"description": "System alerts and notifications management"
}
],
"components": {
"securitySchemes": {
"bearerAuth": {
"type": "http",
"scheme": "bearer",
"bearerFormat": "JWT"
}
},
"schemas": {
"SSHHost": {
"type": "object",
"properties": {
"id": { "type": "integer" },
"name": { "type": "string" },
"ip": { "type": "string" },
"port": { "type": "integer" },
"username": { "type": "string" },
"folder": { "type": "string" },
"tags": { "type": "array", "items": { "type": "string" } },
"pin": { "type": "boolean" },
"authType": { "type": "string", "enum": ["password", "key"] },
"password": { "type": "string" },
"key": { "type": "string" },
"keyPassword": { "type": "string" },
"keyType": { "type": "string" },
"enableTerminal": { "type": "boolean" },
"enableTunnel": { "type": "boolean" },
"enableFileManager": { "type": "boolean" },
"defaultPath": { "type": "string" },
"tunnelConnections": {
"type": "array",
"items": { "type": "object" }
},
"createdAt": { "type": "string", "format": "date-time" },
"updatedAt": { "type": "string", "format": "date-time" }
},
"required": ["id", "ip", "port", "username", "authType"]
},
"SSHHostData": {
"type": "object",
"properties": {
"name": { "type": "string" },
"ip": { "type": "string" },
"port": { "type": "integer" },
"username": { "type": "string" },
"folder": { "type": "string" },
"tags": { "type": "array", "items": { "type": "string" } },
"pin": { "type": "boolean" },
"authType": { "type": "string", "enum": ["password", "key"] },
"password": { "type": "string" },
"key": { "type": "string" },
"keyPassword": { "type": "string" },
"keyType": { "type": "string" },
"enableTerminal": { "type": "boolean" },
"enableTunnel": { "type": "boolean" },
"enableFileManager": { "type": "boolean" },
"defaultPath": { "type": "string" },
"tunnelConnections": {
"type": "array",
"items": { "type": "object" }
}
},
"required": ["ip", "port", "username", "authType"]
},
"TunnelConfig": {
"type": "object",
"properties": {
"name": { "type": "string" },
"hostName": { "type": "string" },
"sourceIP": { "type": "string" },
"sourceSSHPort": { "type": "integer" },
"sourceUsername": { "type": "string" },
"sourcePassword": { "type": "string" },
"sourceAuthMethod": { "type": "string" },
"sourceSSHKey": { "type": "string" },
"sourceKeyPassword": { "type": "string" },
"sourceKeyType": { "type": "string" },
"endpointIP": { "type": "string" },
"endpointSSHPort": { "type": "integer" },
"endpointUsername": { "type": "string" },
"endpointPassword": { "type": "string" },
"endpointAuthMethod": { "type": "string" },
"endpointSSHKey": { "type": "string" },
"endpointKeyPassword": { "type": "string" },
"endpointKeyType": { "type": "string" },
"sourcePort": { "type": "integer" },
"endpointPort": { "type": "integer" },
"maxRetries": { "type": "integer" },
"retryInterval": { "type": "integer" },
"autoStart": { "type": "boolean" },
"isPinned": { "type": "boolean" }
},
"required": [
"name",
"hostName",
"sourceIP",
"sourceSSHPort",
"sourceUsername",
"endpointIP",
"endpointSSHPort",
"endpointUsername",
"sourcePort",
"endpointPort"
]
},
"TunnelStatus": {
"type": "object",
"properties": {
"status": { "type": "string" },
"reason": { "type": "string" },
"errorType": { "type": "string" },
"retryCount": { "type": "integer" },
"maxRetries": { "type": "integer" },
"nextRetryIn": { "type": "integer" },
"retryExhausted": { "type": "boolean" }
}
},
"ServerStatus": {
"type": "object",
"properties": {
"status": { "type": "string", "enum": ["online", "offline"] },
"lastChecked": { "type": "string", "format": "date-time" }
}
},
"ServerMetrics": {
"type": "object",
"properties": {
"cpu": {
"type": "object",
"properties": {
"percent": { "type": "number" },
"cores": { "type": "number" },
"load": {
"type": "array",
"items": { "type": "number" },
"minItems": 3,
"maxItems": 3
}
}
},
"memory": {
"type": "object",
"properties": {
"percent": { "type": "number" },
"usedGiB": { "type": "number" },
"totalGiB": { "type": "number" }
}
},
"disk": {
"type": "object",
"properties": {
"percent": { "type": "number" },
"usedHuman": { "type": "string" },
"totalHuman": { "type": "string" }
}
},
"lastChecked": { "type": "string", "format": "date-time" }
}
},
"FileManagerFile": {
"type": "object",
"properties": {
"name": { "type": "string" },
"path": { "type": "string" },
"type": { "type": "string", "enum": ["file", "directory"] },
"isSSH": { "type": "boolean" },
"sshSessionId": { "type": "string" }
},
"required": ["name", "path"]
},
"UserInfo": {
"type": "object",
"properties": {
"id": { "type": "string" },
"username": { "type": "string" },
"is_admin": { "type": "boolean" }
},
"required": ["id", "username", "is_admin"]
},
"AuthResponse": {
"type": "object",
"properties": {
"token": { "type": "string" }
},
"required": ["token"]
},
"Error": {
"type": "object",
"properties": {
"error": { "type": "string" },
"details": { "type": "string" }
}
}
},
"parameters": {
"hostId": {
"name": "hostId",
"in": "query",
"description": "The ID of the SSH host",
"required": true,
"schema": {
"type": "integer"
}
},
"sessionId": {
"name": "sessionId",
"in": "query",
"description": "The SSH session identifier",
"required": true,
"schema": {
"type": "string"
}
},
"path": {
"name": "path",
"in": "query",
"description": "The file or directory path",
"required": true,
"schema": {
"type": "string"
}
},
"tunnelName": {
"name": "tunnelName",
"in": "path",
"description": "The name of the tunnel",
"required": true,
"schema": {
"type": "string"
}
},
"userId": {
"name": "userId",
"in": "path",
"description": "The user identifier",
"required": true,
"schema": {
"type": "string"
}
},
"hostIdPath": {
"name": "id",
"in": "path",
"description": "The SSH host identifier",
"required": true,
"schema": {
"type": "integer"
}
},
"serverIdPath": {
"name": "id",
"in": "path",
"description": "The server identifier",
"required": true,
"schema": {
"type": "integer"
}
}
},
"responses": {
"BadRequest": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": { "$ref": "#/components/schemas/Error" }
}
}
},
"Unauthorized": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": { "$ref": "#/components/schemas/Error" }
}
}
},
"NotFound": {
"description": "Not Found",
"content": {
"application/json": {
"schema": { "$ref": "#/components/schemas/Error" }
}
}
},
"InternalServerError": {
"description": "Internal Server Error",
"content": {
"application/json": {
"schema": { "$ref": "#/components/schemas/Error" }
}
}
}
}
},
"paths": {
"/health": {
"get": {
"summary": "Health check endpoint",
"description": "Simple health check to verify the API server is running and responsive. **Server: localhost:8081**",
"operationId": "getHealth",
"tags": ["System"],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"status": { "type": "string", "example": "ok" }
}
}
}
}
}
}
}
},
"/version": {
"get": {
"summary": "Get version information and check for updates",
"description": "Get version information and check for updates. **Server: localhost:8081**",
"operationId": "getVersion",
"tags": ["System"],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": ["up_to_date", "requires_update"]
},
"version": { "type": "string" },
"latest_release": {
"type": "object",
"properties": {
"tag_name": { "type": "string" },
"name": { "type": "string" },
"published_at": { "type": "string" },
"html_url": { "type": "string" }
}
},
"cached": { "type": "boolean" },
"cache_age": { "type": "number" }
}
}
}
}
},
"401": {
"description": "Version information not available",
"content": {
"text/plain": {
"schema": { "type": "string" }
}
}
}
}
}
},
"/releases/rss": {
"get": {
"summary": "Get releases in RSS format",
"description": "Get releases in RSS format. **Server: localhost:8081**",
"operationId": "getReleasesRSS",
"tags": ["System"],
"parameters": [
{
"name": "page",
"in": "query",
"schema": { "type": "integer", "default": 1 }
},
{
"name": "per_page",
"in": "query",
"schema": { "type": "integer", "default": 20, "maximum": 100 }
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"feed": {
"type": "object",
"properties": {
"title": { "type": "string" },
"description": { "type": "string" },
"link": { "type": "string" },
"updated": { "type": "string" }
}
},
"items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": { "type": "integer" },
"title": { "type": "string" },
"description": { "type": "string" },
"link": { "type": "string" },
"pubDate": { "type": "string" },
"version": { "type": "string" },
"isPrerelease": { "type": "boolean" },
"isDraft": { "type": "boolean" },
"assets": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": { "type": "string" },
"size": { "type": "number" },
"download_count": { "type": "number" },
"download_url": { "type": "string" }
}
}
}
}
}
},
"total_count": { "type": "integer" },
"cached": { "type": "boolean" },
"cache_age": { "type": "number" }
}
}
}
}
}
}
}
},
"/ssh/db/host": {
"get": {
"summary": "Get all SSH hosts",
"description": "Retrieve a list of all configured SSH hosts in the system. This endpoint requires authentication and returns host information including connection details, authentication methods, and enabled features. **Server: localhost:8081**",
"operationId": "getSSHHosts",
"tags": ["SSH Hosts"],
"security": [{ "bearerAuth": [] }],
"responses": {
"200": {
"description": "Successfully retrieved SSH hosts",
"content": {
"application/json": {
"schema": {
"type": "array",
"items": { "$ref": "#/components/schemas/SSHHost" }
}
}
}
},
"401": { "$ref": "#/components/responses/Unauthorized" }
}
},
"post": {
"summary": "Create a new SSH host",
"description": "Create a new SSH host configuration. **Server: localhost:8081**",
"operationId": "createSSHHost",
"tags": ["SSH Hosts"],
"security": [{ "bearerAuth": [] }],
"requestBody": {
"required": true,
"content": {
"multipart/form-data": {
"schema": {
"type": "object",
"properties": {
"key": {
"type": "string",
"format": "binary",
"description": "SSH private key file (optional)"
},
"data": {
"type": "string",
"description": "JSON string containing host data"
}
}
}
},
"application/json": {
"schema": { "$ref": "#/components/schemas/SSHHostData" }
}
}
},
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": { "$ref": "#/components/schemas/SSHHost" }
}
}
},
"400": { "$ref": "#/components/responses/BadRequest" },
"401": { "$ref": "#/components/responses/Unauthorized" }
}
}
},
"/ssh/db/host/{id}": {
"get": {
"summary": "Get SSH host by ID",
"description": "Get SSH host by ID. **Server: localhost:8081**",
"operationId": "getSSHHostById",
"tags": ["SSH Hosts"],
"security": [{ "bearerAuth": [] }],
"parameters": [
{
"$ref": "#/components/parameters/hostIdPath"
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": { "$ref": "#/components/schemas/SSHHost" }
}
}
},
"404": { "$ref": "#/components/responses/NotFound" },
"401": { "$ref": "#/components/responses/Unauthorized" }
}
},
"put": {
"summary": "Update SSH host",
"description": "Update SSH host configuration. **Server: localhost:8081**",
"operationId": "updateSSHHost",
"tags": ["SSH Hosts"],
"security": [{ "bearerAuth": [] }],
"parameters": [
{
"$ref": "#/components/parameters/hostIdPath"
}
],
"requestBody": {
"required": true,
"content": {
"multipart/form-data": {
"schema": {
"type": "object",
"properties": {
"key": {
"type": "string",
"format": "binary",
"description": "SSH private key file (optional)"
},
"data": {
"type": "string",
"description": "JSON string containing host data"
}
}
}
},
"application/json": {
"schema": { "$ref": "#/components/schemas/SSHHostData" }
}
}
},
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": { "$ref": "#/components/schemas/SSHHost" }
}
}
},
"400": { "$ref": "#/components/responses/BadRequest" },
"401": { "$ref": "#/components/responses/Unauthorized" },
"404": { "$ref": "#/components/responses/NotFound" }
}
},
"delete": {
"summary": "Delete SSH host",
"description": "Delete SSH host configuration. **Server: localhost:8081**",
"operationId": "deleteSSHHost",
"tags": ["SSH Hosts"],
"security": [{ "bearerAuth": [] }],
"parameters": [
{
"$ref": "#/components/parameters/hostIdPath"
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"message": { "type": "string" }
}
}
}
}
},
"401": { "$ref": "#/components/responses/Unauthorized" },
"404": { "$ref": "#/components/responses/NotFound" }
}
}
},
"/ssh/db/folders": {
"get": {
"summary": "Get all SSH host folders",
"description": "Get all SSH host folders. **Server: localhost:8081**",
"operationId": "getSSHFolders",
"tags": ["SSH Hosts"],
"security": [{ "bearerAuth": [] }],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "array",
"items": { "type": "string" }
}
}
}
},
"401": { "$ref": "#/components/responses/Unauthorized" }
}
}
},
"/ssh/bulk-import": {
"post": {
"summary": "Bulk import SSH hosts",
"description": "Bulk import SSH hosts. **Server: localhost:8081**",
"operationId": "bulkImportSSHHosts",
"tags": ["SSH Hosts"],
"security": [{ "bearerAuth": [] }],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"hosts": {
"type": "array",
"items": { "$ref": "#/components/schemas/SSHHostData" }
}
},
"required": ["hosts"]
}
}
}
},
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"message": { "type": "string" },
"success": { "type": "integer" },
"failed": { "type": "integer" },
"errors": {
"type": "array",
"items": { "type": "string" }
}
}
}
}
}
},
"400": { "$ref": "#/components/responses/BadRequest" },
"401": { "$ref": "#/components/responses/Unauthorized" }
}
}
},
"/ssh/file_manager/recent": {
"get": {
"summary": "Get recent files for a host",
"description": "Get recent files for a host. **Server: localhost:8081**",
"operationId": "getFileManagerRecent",
"tags": ["File Manager"],
"security": [{ "bearerAuth": [] }],
"parameters": [
{
"$ref": "#/components/parameters/hostId"
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "array",
"items": { "$ref": "#/components/schemas/FileManagerFile" }
}
}
}
},
"401": { "$ref": "#/components/responses/Unauthorized" }
}
},
"post": {
"summary": "Add file to recent list",
"description": "Add file to recent list. **Server: localhost:8081**",
"operationId": "addFileManagerRecent",
"tags": ["File Manager"],
"security": [{ "bearerAuth": [] }],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"name": { "type": "string" },
"path": { "type": "string" },
"isSSH": { "type": "boolean" },
"sshSessionId": { "type": "string" },
"hostId": { "type": "integer" }
},
"required": ["name", "path", "isSSH", "hostId"]
}
}
}
},
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"message": { "type": "string" }
}
}
}
}
},
"400": { "$ref": "#/components/responses/BadRequest" },
"401": { "$ref": "#/components/responses/Unauthorized" }
}
},
"delete": {
"summary": "Remove file from recent list",
"description": "Remove file from recent list. **Server: localhost:8081**",
"operationId": "removeFileManagerRecent",
"tags": ["File Manager"],
"security": [{ "bearerAuth": [] }],
"parameters": [
{
"name": "name",
"in": "query",
"description": "File name",
"required": true,
"schema": { "type": "string" }
},
{
"name": "path",
"in": "query",
"description": "File path",
"required": true,
"schema": { "type": "string" }
},
{
"name": "isSSH",
"in": "query",
"description": "Whether this is an SSH file",
"required": true,
"schema": { "type": "boolean" }
},
{
"name": "sshSessionId",
"in": "query",
"description": "SSH session ID",
"required": false,
"schema": { "type": "string" }
},
{
"name": "hostId",
"in": "query",
"description": "Host ID",
"required": true,
"schema": { "type": "integer" }
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"message": { "type": "string" }
}
}
}
}
},
"400": { "$ref": "#/components/responses/BadRequest" },
"401": { "$ref": "#/components/responses/Unauthorized" }
}
}
},
"/ssh/file_manager/pinned": {
"get": {
"summary": "Get pinned files for a host",
"description": "Get pinned files for a host. **Server: localhost:8081**",
"operationId": "getFileManagerPinned",
"tags": ["File Manager"],
"security": [{ "bearerAuth": [] }],
"parameters": [
{
"$ref": "#/components/parameters/hostId"
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "array",
"items": { "$ref": "#/components/schemas/FileManagerFile" }
}
}
}
},
"401": { "$ref": "#/components/responses/Unauthorized" }
}
},
"post": {
"summary": "Add file to pinned list",
"description": "Add file to pinned list. **Server: localhost:8081**",
"operationId": "addFileManagerPinned",
"tags": ["File Manager"],
"security": [{ "bearerAuth": [] }],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"name": { "type": "string" },
"path": { "type": "string" },
"isSSH": { "type": "boolean" },
"sshSessionId": { "type": "string" },
"hostId": { "type": "integer" }
},
"required": ["name", "path", "isSSH", "hostId"]
}
}
}
},
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"message": { "type": "string" }
}
}
}
}
},
"400": { "$ref": "#/components/responses/BadRequest" },
"401": { "$ref": "#/components/responses/Unauthorized" }
}
},
"delete": {
"summary": "Remove file from pinned list",
"description": "Remove file from pinned list. **Server: localhost:8081**",
"operationId": "removeFileManagerPinned",
"tags": ["File Manager"],
"security": [{ "bearerAuth": [] }],
"parameters": [
{
"name": "name",
"in": "query",
"description": "File name",
"required": true,
"schema": { "type": "string" }
},
{
"name": "path",
"in": "query",
"description": "File path",
"required": true,
"schema": { "type": "string" }
},
{
"name": "isSSH",
"in": "query",
"description": "Whether this is an SSH file",
"required": true,
"schema": { "type": "boolean" }
},
{
"name": "sshSessionId",
"in": "query",
"description": "SSH session ID",
"required": false,
"schema": { "type": "string" }
},
{
"name": "hostId",
"in": "query",
"description": "Host ID",
"required": true,
"schema": { "type": "integer" }
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"message": { "type": "string" }
}
}
}
}
},
"400": { "$ref": "#/components/responses/BadRequest" },
"401": { "$ref": "#/components/responses/Unauthorized" }
}
}
},
"/ssh/file_manager/shortcuts": {
"get": {
"summary": "Get file shortcuts for a host",
"description": "Get file shortcuts for a host. **Server: localhost:8081**",
"operationId": "getFileManagerShortcuts",
"tags": ["File Manager"],
"security": [{ "bearerAuth": [] }],
"parameters": [
{
"$ref": "#/components/parameters/hostId"
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": { "type": "string" },
"path": { "type": "string" }
},
"required": ["name", "path"]
}
}
}
}
},
"401": { "$ref": "#/components/responses/Unauthorized" }
}
},
"post": {
"summary": "Add file shortcut",
"description": "Add file shortcut. **Server: localhost:8081**",
"operationId": "addFileManagerShortcut",
"tags": ["File Manager"],
"security": [{ "bearerAuth": [] }],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"name": { "type": "string" },
"path": { "type": "string" },
"isSSH": { "type": "boolean" },
"sshSessionId": { "type": "string" },
"hostId": { "type": "integer" }
},
"required": ["name", "path", "isSSH", "hostId"]
}
}
}
},
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"message": { "type": "string" }
}
}
}
}
},
"400": { "$ref": "#/components/responses/BadRequest" },
"401": { "$ref": "#/components/responses/Unauthorized" }
}
},
"delete": {
"summary": "Remove file shortcut",
"description": "Remove file shortcut. **Server: localhost:8081**",
"operationId": "removeFileManagerShortcut",
"tags": ["File Manager"],
"security": [{ "bearerAuth": [] }],
"parameters": [
{
"name": "name",
"in": "query",
"description": "File name",
"required": true,
"schema": { "type": "string" }
},
{
"name": "path",
"in": "query",
"description": "File path",
"required": true,
"schema": { "type": "string" }
},
{
"name": "isSSH",
"in": "query",
"description": "Whether this is an SSH file",
"required": true,
"schema": { "type": "boolean" }
},
{
"name": "sshSessionId",
"in": "query",
"description": "SSH session ID",
"required": false,
"schema": { "type": "string" }
},
{
"name": "hostId",
"in": "query",
"description": "Host ID",
"required": true,
"schema": { "type": "integer" }
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"message": { "type": "string" }
}
}
}
}
},
"400": { "$ref": "#/components/responses/BadRequest" },
"401": { "$ref": "#/components/responses/Unauthorized" }
}
}
},
"/ssh/file_manager/ssh/connect": {
"post": {
"summary": "Connect to SSH server",
"description": "Connect to SSH server. **Server: localhost:8084**",
"operationId": "connectSSH",
"tags": ["SSH File Operations"],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"sessionId": { "type": "string" },
"ip": { "type": "string" },
"port": { "type": "integer" },
"username": { "type": "string" },
"password": { "type": "string" },
"sshKey": { "type": "string" },
"keyPassword": { "type": "string" }
},
"required": ["sessionId", "ip", "username", "port"]
}
}
}
},
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"message": { "type": "string" }
}
}
}
}
},
"400": { "$ref": "#/components/responses/BadRequest" }
}
}
},
"/ssh/file_manager/ssh/disconnect": {
"post": {
"summary": "Disconnect from SSH server",
"description": "Disconnect from SSH server. **Server: localhost:8084**",
"operationId": "disconnectSSH",
"tags": ["SSH File Operations"],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"sessionId": { "type": "string" }
},
"required": ["sessionId"]
}
}
}
},
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"message": { "type": "string" }
}
}
}
}
}
}
}
},
"/ssh/file_manager/ssh/status": {
"get": {
"summary": "Get SSH connection status",
"description": "Get SSH connection status. **Server: localhost:8084**",
"operationId": "getSSHStatus",
"tags": ["SSH File Operations"],
"parameters": [
{
"$ref": "#/components/parameters/sessionId"
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"connected": { "type": "boolean" }
}
}
}
}
}
}
}
},
"/ssh/file_manager/ssh/listFiles": {
"get": {
"summary": "List files in SSH directory",
"description": "List files in SSH directory. **Server: localhost:8084**",
"operationId": "listSSHFiles",
"tags": ["SSH File Operations"],
"parameters": [
{
"$ref": "#/components/parameters/sessionId"
},
{
"$ref": "#/components/parameters/path"
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": { "type": "string" },
"path": { "type": "string" },
"type": {
"type": "string",
"enum": ["file", "directory"]
},
"size": { "type": "number" },
"modified": { "type": "string" },
"permissions": { "type": "string" }
}
}
}
}
}
}
}
}
},
"/ssh/file_manager/ssh/readFile": {
"get": {
"summary": "Read SSH file content",
"description": "Read SSH file content. **Server: localhost:8084**",
"operationId": "readSSHFile",
"tags": ["SSH File Operations"],
"parameters": [
{
"$ref": "#/components/parameters/sessionId"
},
{
"$ref": "#/components/parameters/path"
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"content": { "type": "string" },
"path": { "type": "string" }
}
}
}
}
}
}
}
},
"/ssh/file_manager/ssh/writeFile": {
"post": {
"summary": "Write content to SSH file",
"description": "Write content to SSH file. **Server: localhost:8084**",
"operationId": "writeSSHFile",
"tags": ["SSH File Operations"],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"sessionId": { "type": "string" },
"path": { "type": "string" },
"content": { "type": "string" }
},
"required": ["sessionId", "path", "content"]
}
}
}
},
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"message": { "type": "string" }
}
}
}
}
}
}
}
},
"/ssh/file_manager/ssh/createFile": {
"post": {
"summary": "Create new SSH file",
"description": "Create new SSH file. **Server: localhost:8084**",
"operationId": "createSSHFile",
"tags": ["SSH File Operations"],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"sessionId": { "type": "string" },
"path": { "type": "string" },
"fileName": { "type": "string" },
"content": { "type": "string" }
},
"required": ["sessionId", "path", "fileName"]
}
}
}
},
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"message": { "type": "string" }
}
}
}
}
}
}
}
},
"/ssh/file_manager/ssh/createFolder": {
"post": {
"summary": "Create new SSH folder",
"description": "Create new SSH folder. **Server: localhost:8084**",
"operationId": "createSSHFolder",
"tags": ["SSH File Operations"],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"sessionId": { "type": "string" },
"path": { "type": "string" },
"folderName": { "type": "string" }
},
"required": ["sessionId", "path", "folderName"]
}
}
}
},
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"message": { "type": "string" }
}
}
}
}
}
}
}
},
"/ssh/file_manager/ssh/deleteItem": {
"delete": {
"summary": "Delete SSH file or folder",
"description": "Delete SSH file or folder. **Server: localhost:8084**",
"operationId": "deleteSSHItem",
"tags": ["SSH File Operations"],
"parameters": [
{
"name": "sessionId",
"in": "query",
"description": "SSH session ID",
"required": true,
"schema": { "type": "string" }
},
{
"name": "path",
"in": "query",
"description": "File or directory path",
"required": true,
"schema": { "type": "string" }
},
{
"name": "isDirectory",
"in": "query",
"description": "Whether the item is a directory",
"required": true,
"schema": { "type": "boolean" }
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"message": { "type": "string" }
}
}
}
}
}
}
}
},
"/ssh/file_manager/ssh/renameItem": {
"put": {
"summary": "Rename SSH file or folder",
"description": "Rename SSH file or folder. **Server: localhost:8084**",
"operationId": "renameSSHItem",
"tags": ["SSH File Operations"],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"sessionId": { "type": "string" },
"oldPath": { "type": "string" },
"newName": { "type": "string" }
},
"required": ["sessionId", "oldPath", "newName"]
}
}
}
},
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"message": { "type": "string" }
}
}
}
}
}
}
}
},
"/ssh/tunnel/status": {
"get": {
"summary": "Get all tunnel statuses",
"description": "Get all tunnel statuses. **Server: localhost:8083**",
"operationId": "getTunnelStatuses",
"tags": ["Tunnel Management"],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"additionalProperties": {
"$ref": "#/components/schemas/TunnelStatus"
}
}
}
}
}
}
}
},
"/ssh/tunnel/status/{tunnelName}": {
"get": {
"summary": "Get tunnel status by name",
"description": "Get tunnel status by name. **Server: localhost:8083**",
"operationId": "getTunnelStatusByName",
"tags": ["Tunnel Management"],
"parameters": [
{
"$ref": "#/components/parameters/tunnelName"
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": { "$ref": "#/components/schemas/TunnelStatus" }
}
}
}
}
}
},
"/ssh/tunnel/connect": {
"post": {
"summary": "Connect to tunnel",
"description": "Connect to tunnel. **Server: localhost:8083**",
"operationId": "connectTunnel",
"tags": ["Tunnel Management"],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": { "$ref": "#/components/schemas/TunnelConfig" }
}
}
},
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"message": { "type": "string" }
}
}
}
}
}
}
}
},
"/ssh/tunnel/disconnect": {
"post": {
"summary": "Disconnect tunnel",
"description": "Disconnect tunnel. **Server: localhost:8083**",
"operationId": "disconnectTunnel",
"tags": ["Tunnel Management"],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"tunnelName": { "type": "string" }
},
"required": ["tunnelName"]
}
}
}
},
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"message": { "type": "string" }
}
}
}
}
}
}
}
},
"/ssh/tunnel/cancel": {
"post": {
"summary": "Cancel tunnel connection",
"description": "Cancel tunnel connection. **Server: localhost:8083**",
"operationId": "cancelTunnel",
"tags": ["Tunnel Management"],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"tunnelName": { "type": "string" }
},
"required": ["tunnelName"]
}
}
}
},
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"message": { "type": "string" }
}
}
}
}
}
}
}
},
"/status": {
"get": {
"summary": "Get all server statuses",
"description": "Get all server statuses. **Server: localhost:8085**",
"operationId": "getAllServerStatuses",
"tags": ["Server Statistics"],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"additionalProperties": {
"$ref": "#/components/schemas/ServerStatus"
}
}
}
}
}
}
}
},
"/status/{id}": {
"get": {
"summary": "Get server status by ID",
"description": "Get server status by ID. **Server: localhost:8085**",
"operationId": "getServerStatusById",
"tags": ["Server Statistics"],
"parameters": [
{
"$ref": "#/components/parameters/serverIdPath"
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": { "$ref": "#/components/schemas/ServerStatus" }
}
}
}
}
}
},
"/metrics/{id}": {
"get": {
"summary": "Get server metrics by ID",
"description": "Get server metrics by ID. **Server: localhost:8085**",
"operationId": "getServerMetricsById",
"tags": ["Server Statistics"],
"parameters": [
{
"$ref": "#/components/parameters/serverIdPath"
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": { "$ref": "#/components/schemas/ServerMetrics" }
}
}
}
}
}
},
"/refresh": {
"post": {
"summary": "Refresh server statistics",
"description": "Refresh server statistics. **Server: localhost:8085**",
"operationId": "refreshServerStats",
"tags": ["Server Statistics"],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"message": { "type": "string" }
}
}
}
}
}
}
}
},
"/users/create": {
"post": {
"summary": "Create new user account",
"description": "Create new user account. **Server: localhost:8081**",
"operationId": "createUser",
"tags": ["User Management"],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"username": { "type": "string" },
"password": { "type": "string" }
},
"required": ["username", "password"]
}
}
}
},
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"message": { "type": "string" }
}
}
}
}
},
"400": { "$ref": "#/components/responses/BadRequest" }
}
}
},
"/users/login": {
"post": {
"summary": "User login",
"description": "User login. **Server: localhost:8081**",
"operationId": "loginUser",
"tags": ["Authentication"],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"username": { "type": "string" },
"password": { "type": "string" }
},
"required": ["username", "password"]
}
}
}
},
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": { "$ref": "#/components/schemas/AuthResponse" }
}
}
},
"400": { "$ref": "#/components/responses/BadRequest" },
"401": { "$ref": "#/components/responses/Unauthorized" }
}
}
},
"/users/me": {
"get": {
"summary": "Get current user info",
"description": "Get current user info. **Server: localhost:8081**",
"operationId": "getUserInfo",
"tags": ["User Management"],
"security": [{ "bearerAuth": [] }],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": { "$ref": "#/components/schemas/UserInfo" }
}
}
},
"401": { "$ref": "#/components/responses/Unauthorized" }
}
}
},
"/users/count": {
"get": {
"summary": "Get total user count",
"description": "Get total user count. **Server: localhost:8081**",
"operationId": "getUserCount",
"tags": ["User Management"],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"count": { "type": "integer" }
}
}
}
}
}
}
}
},
"/users/registration-allowed": {
"get": {
"summary": "Check if user registration is allowed",
"description": "Check if user registration is allowed. **Server: localhost:8081**",
"operationId": "getRegistrationAllowed",
"tags": ["User Management"],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"allowed": { "type": "boolean" }
}
}
}
}
}
}
},
"patch": {
"summary": "Update registration allowed status",
"description": "Update registration allowed status. **Server: localhost:8081**",
"operationId": "updateRegistrationAllowed",
"tags": ["User Management"],
"security": [{ "bearerAuth": [] }],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"allowed": { "type": "boolean" }
},
"required": ["allowed"]
}
}
}
},
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"message": { "type": "string" }
}
}
}
}
},
"401": { "$ref": "#/components/responses/Unauthorized" }
}
}
},
"/users/initiate-reset": {
"post": {
"summary": "Initiate password reset",
"description": "Initiate password reset. **Server: localhost:8081**",
"operationId": "initiatePasswordReset",
"tags": ["Authentication"],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"username": { "type": "string" }
},
"required": ["username"]
}
}
}
},
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"message": { "type": "string" }
}
}
}
}
}
}
}
},
"/users/verify-reset-code": {
"post": {
"summary": "Verify password reset code",
"description": "Verify password reset code. **Server: localhost:8081**",
"operationId": "verifyPasswordResetCode",
"tags": ["Authentication"],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"username": { "type": "string" },
"resetCode": { "type": "string" }
},
"required": ["username", "resetCode"]
}
}
}
},
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"tempToken": { "type": "string" }
}
}
}
}
}
}
}
},
"/users/complete-reset": {
"post": {
"summary": "Complete password reset",
"description": "Complete password reset. **Server: localhost:8081**",
"operationId": "completePasswordReset",
"tags": ["Authentication"],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"username": { "type": "string" },
"tempToken": { "type": "string" },
"newPassword": { "type": "string" }
},
"required": ["username", "tempToken", "newPassword"]
}
}
}
},
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"message": { "type": "string" }
}
}
}
}
}
}
}
},
"/users/totp/setup": {
"post": {
"summary": "Setup TOTP authentication",
"description": "Setup TOTP authentication. **Server: localhost:8081**",
"operationId": "setupTOTP",
"tags": ["TOTP"],
"security": [{ "bearerAuth": [] }],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"secret": { "type": "string" },
"qr_code": { "type": "string" }
}
}
}
}
},
"401": { "$ref": "#/components/responses/Unauthorized" }
}
}
},
"/users/totp/enable": {
"post": {
"summary": "Enable TOTP authentication",
"description": "Enable TOTP authentication. **Server: localhost:8081**",
"operationId": "enableTOTP",
"tags": ["TOTP"],
"security": [{ "bearerAuth": [] }],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"totp_code": { "type": "string" }
},
"required": ["totp_code"]
}
}
}
},
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"message": { "type": "string" },
"backup_codes": {
"type": "array",
"items": { "type": "string" }
}
}
}
}
}
},
"401": { "$ref": "#/components/responses/Unauthorized" }
}
}
},
"/users/totp/verify-login": {
"post": {
"summary": "Verify TOTP during login",
"description": "Verify TOTP during login. **Server: localhost:8081**",
"operationId": "verifyTOTPLogin",
"tags": ["TOTP"],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"temp_token": { "type": "string" },
"totp_code": { "type": "string" }
},
"required": ["temp_token", "totp_code"]
}
}
}
},
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": { "$ref": "#/components/schemas/AuthResponse" }
}
}
}
}
}
},
"/alerts": {
"get": {
"summary": "Get all system alerts",
"description": "Get all system alerts. **Server: localhost:8081**",
"operationId": "getAllAlerts",
"tags": ["Alerts"],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": { "type": "string" },
"title": { "type": "string" },
"message": { "type": "string" },
"expiresAt": { "type": "string" },
"priority": {
"type": "string",
"enum": ["low", "medium", "high", "critical"]
},
"type": {
"type": "string",
"enum": ["info", "warning", "error", "success"]
},
"actionUrl": { "type": "string" },
"actionText": { "type": "string" }
}
}
}
}
}
}
}
}
},
"/alerts/user/{userId}": {
"get": {
"summary": "Get alerts for specific user",
"description": "Get alerts for specific user. **Server: localhost:8081**",
"operationId": "getUserAlerts",
"tags": ["Alerts"],
"parameters": [
{
"$ref": "#/components/parameters/userId"
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"alerts": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": { "type": "string" },
"title": { "type": "string" },
"message": { "type": "string" },
"expiresAt": { "type": "string" },
"priority": {
"type": "string",
"enum": ["low", "medium", "high", "critical"]
},
"type": {
"type": "string",
"enum": ["info", "warning", "error", "success"]
},
"actionUrl": { "type": "string" },
"actionText": { "type": "string" }
}
}
}
}
}
}
}
}
}
}
},
"/alerts/dismiss": {
"post": {
"summary": "Dismiss an alert",
"description": "Dismiss an alert. **Server: localhost:8081**",
"operationId": "dismissAlert",
"tags": ["Alerts"],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"userId": { "type": "string" },
"alertId": { "type": "string" }
},
"required": ["userId", "alertId"]
}
}
}
},
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"message": { "type": "string" }
}
}
}
}
}
}
}
}
}
}