2262 lines
72 KiB
JSON
2262 lines
72 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" }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|