{ "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" } } } } } } } } } } }