From b2c5a8c3580b4016d8634309301fd3677e081d17 Mon Sep 17 00:00:00 2001 From: Przemyslaw Ozgo Date: Mon, 19 Jan 2026 20:54:48 +0100 Subject: [PATCH 1/2] feat: Vault integration and fixes --- API.md | 542 ++++++ README.md | 967 +--------- cmd/web-cli/main.go | 19 +- docs/CONFIGURATION.md | 312 ++++ docs/DEPLOYMENT.md | 339 ++++ docs/DEVELOPMENT.md | 375 ++++ docs/SECURITY.md | 418 +++++ docs/docs.go | 1581 ++++++++++++++--- docs/images/admin-servers.png | Bin 106720 -> 49550 bytes docs/images/admin-ssh-keys.png | Bin 94428 -> 51849 bytes docs/images/admin-vault-integration.png | Bin 0 -> 49191 bytes docs/images/command-history.png | Bin 37124 -> 68044 bytes docs/images/dashboard.png | Bin 123082 -> 58856 bytes docs/images/interactive-terminal-dropdown.png | Bin 0 -> 42316 bytes docs/images/interactive-terminal.png | Bin 81954 -> 35399 bytes docs/images/local-commands.png | Bin 74780 -> 40662 bytes docs/images/remote-commands.png | Bin 85683 -> 48235 bytes docs/images/remote-script.png | Bin 90300 -> 53099 bytes docs/images/saved-commands.png | Bin 72976 -> 27361 bytes docs/swagger.json | 1581 ++++++++++++++--- docs/swagger.yaml | 1059 +++++++++-- frontend/src/components/AddKeyDialog.jsx | 30 +- frontend/src/components/AddServerDialog.jsx | 30 +- frontend/src/components/AdminPanel.jsx | 96 +- frontend/src/components/EditKeyDialog.jsx | 16 + frontend/src/components/EditServerDialog.jsx | 16 + frontend/src/components/EnvVariableList.jsx | 78 +- frontend/src/components/Header.jsx | 6 +- frontend/src/components/LocalScripts.jsx | 113 +- frontend/src/components/RemoteCommands.jsx | 154 +- frontend/src/components/RemoteScripts.jsx | 332 +++- frontend/src/components/ScriptList.jsx | 78 +- frontend/src/components/ServerList.jsx | 45 +- frontend/src/components/Terminal.jsx | 106 +- frontend/src/components/TerminalPane.jsx | 13 +- frontend/src/components/VaultSettings.jsx | 581 ++++++ frontend/src/components/shared/GroupInput.jsx | 198 +++ .../src/components/shared/GroupSelector.jsx | 140 ++ frontend/src/components/shared/SourceChip.jsx | 35 + .../src/components/shared/StorageSelector.jsx | 165 ++ frontend/src/components/shared/VaultIcon.jsx | 142 ++ go.mod | 16 + go.sum | 33 + internal/audit/audit.go | 302 ++++ internal/config/config.go | 91 + internal/database/database_test.go | 5 +- internal/database/migrations.go | 31 + internal/middleware/auth.go | 22 + internal/models/bash_script.go | 16 +- internal/models/env_variable.go | 16 +- internal/models/saved_command.go | 34 +- internal/models/server.go | 4 + internal/models/ssh_key.go | 6 +- internal/models/vault_config.go | 60 + internal/repository/bash_script_repository.go | 101 +- .../repository/env_variable_repository.go | 92 +- internal/repository/server_repository.go | 83 +- internal/repository/ssh_key_repository.go | 88 +- .../repository/vault_config_repository.go | 192 ++ internal/server/handlers.go | 577 +++++- internal/server/handlers_terminal.go | 48 +- internal/server/handlers_vault.go | 815 +++++++++ internal/server/server.go | 44 +- internal/server/vault_helpers.go | 340 ++++ internal/validation/validators.go | 219 +++ internal/validation/validators_test.go | 552 +++--- internal/vault/client.go | 856 +++++++++ manage.sh | 136 +- package-lock.json | 1221 +++++++++++++ package.json | 5 + 70 files changed, 13372 insertions(+), 2200 deletions(-) create mode 100644 docs/CONFIGURATION.md create mode 100644 docs/DEPLOYMENT.md create mode 100644 docs/DEVELOPMENT.md create mode 100644 docs/SECURITY.md create mode 100644 docs/images/admin-vault-integration.png create mode 100644 docs/images/interactive-terminal-dropdown.png create mode 100644 frontend/src/components/VaultSettings.jsx create mode 100644 frontend/src/components/shared/GroupInput.jsx create mode 100644 frontend/src/components/shared/GroupSelector.jsx create mode 100644 frontend/src/components/shared/SourceChip.jsx create mode 100644 frontend/src/components/shared/StorageSelector.jsx create mode 100644 frontend/src/components/shared/VaultIcon.jsx create mode 100644 internal/audit/audit.go create mode 100644 internal/models/vault_config.go create mode 100644 internal/repository/vault_config_repository.go create mode 100644 internal/server/handlers_vault.go create mode 100644 internal/server/vault_helpers.go create mode 100644 internal/vault/client.go create mode 100644 package-lock.json create mode 100644 package.json diff --git a/API.md b/API.md index 9dbda36..bf36722 100644 --- a/API.md +++ b/API.md @@ -17,6 +17,7 @@ Complete API reference for the Web CLI application. All endpoints return JSON re - [Environment Variables Management](#environment-variables-management) - [Bash Scripts Management](#bash-scripts-management) - [Script Presets Management](#script-presets-management) +- [Vault Integration](#vault-integration) - [Interactive Terminal](#interactive-terminal-websocket) - [Error Responses](#error-responses) - [Security Considerations](#security-considerations) @@ -76,6 +77,19 @@ Default port is `7777`, configurable via `-port` flag or `PORT` environment vari | `/script-presets/{id}` | GET | Get single script preset | | `/script-presets/{id}` | PUT | Update script preset | | `/script-presets/{id}` | DELETE | Delete script preset | +| `/vault/config` | GET | Get Vault configuration | +| `/vault/config` | POST | Create/update Vault configuration | +| `/vault/config` | DELETE | Delete Vault configuration | +| `/vault/status` | GET | Get Vault connection status | +| `/vault/test` | POST | Test Vault connection | +| `/vault/ssh-keys` | GET | List SSH keys from Vault | +| `/vault/ssh-keys` | POST | Create SSH key in Vault | +| `/vault/servers` | GET | List servers from Vault | +| `/vault/servers` | POST | Create server in Vault | +| `/vault/env-variables` | GET | List environment variables from Vault | +| `/vault/env-variables` | POST | Create environment variable in Vault | +| `/vault/bash-scripts` | GET | List bash scripts from Vault | +| `/vault/bash-scripts` | POST | Create bash script in Vault | ## Authentication @@ -2022,6 +2036,534 @@ curl -X DELETE http://localhost:7777/api/script-presets/1 --- +## Vault Integration + +HashiCorp Vault integration allows you to store and retrieve secrets (SSH keys, servers, environment variables, and bash scripts) from an external Vault server. This provides centralized secrets management with additional security features. + +### Get Vault Configuration + +Retrieve the current Vault configuration (token is never returned). + +**Endpoint**: `GET /vault/config` + +**Response**: `200 OK` + +```json +{ + "id": 1, + "address": "https://vault.example.com:8200", + "namespace": "admin", + "mount_path": "secret", + "enabled": true, + "has_token": true, + "created_at": "2025-01-15T10:00:00Z", + "updated_at": "2025-01-15T10:00:00Z" +} +``` + +**Fields**: +- `address` (string): Vault server URL +- `namespace` (string): Optional Vault namespace +- `mount_path` (string): KV secrets engine mount path (default: "secret") +- `enabled` (boolean): Whether Vault integration is active +- `has_token` (boolean): Indicates if a token is configured (token value never exposed) + +**Example**: + +```bash +curl http://localhost:7777/api/vault/config +``` + +--- + +### Create/Update Vault Configuration + +Configure or update the Vault connection settings. + +**Endpoint**: `POST /vault/config` + +**Request Headers**: +- `Content-Type: application/json` + +**Request Body**: + +```json +{ + "address": "https://vault.example.com:8200", + "token": "hvs.your-vault-token", + "namespace": "admin", + "mount_path": "secret", + "enabled": true +} +``` + +**Fields**: +- `address` (string, required): Vault server URL +- `token` (string, required for new config): Vault authentication token (encrypted with AES-256-GCM before storage) +- `namespace` (string, optional): Vault namespace for enterprise deployments +- `mount_path` (string, optional): KV secrets engine mount path (default: "secret") +- `enabled` (boolean, optional): Enable/disable Vault integration + +**Response**: `200 OK` + +```json +{ + "id": 1, + "address": "https://vault.example.com:8200", + "namespace": "admin", + "mount_path": "secret", + "enabled": true, + "has_token": true, + "created_at": "2025-01-15T10:00:00Z", + "updated_at": "2025-01-15T10:00:00Z" +} +``` + +**Error Responses**: +- `400 Bad Request`: Missing required fields (address or token) + +**Example**: + +```bash +curl -X POST http://localhost:7777/api/vault/config \ + -H "Content-Type: application/json" \ + -d '{ + "address": "https://vault.example.com:8200", + "token": "hvs.your-vault-token", + "mount_path": "secret", + "enabled": true + }' +``` + +--- + +### Delete Vault Configuration + +Remove the Vault configuration. + +**Endpoint**: `DELETE /vault/config` + +**Response**: `204 No Content` + +**Example**: + +```bash +curl -X DELETE http://localhost:7777/api/vault/config +``` + +--- + +### Get Vault Status + +Check the current Vault connection status. + +**Endpoint**: `GET /vault/status` + +**Response**: `200 OK` + +```json +{ + "configured": true, + "enabled": true, + "connected": true, + "address": "https://vault.example.com:8200", + "vault_sealed": false +} +``` + +**Fields**: +- `configured` (boolean): Whether Vault settings exist +- `enabled` (boolean): Whether Vault integration is enabled +- `connected` (boolean): Whether connection test passed +- `address` (string): Vault server URL +- `error` (string, optional): Error message if connection failed +- `vault_sealed` (boolean, optional): Whether Vault is sealed + +**Example**: + +```bash +curl http://localhost:7777/api/vault/status +``` + +--- + +### Test Vault Connection + +Test the connection to Vault and initialize the secrets structure. + +**Endpoint**: `POST /vault/test` + +**Response**: `200 OK` + +```json +{ + "configured": true, + "enabled": true, + "connected": true, + "address": "https://vault.example.com:8200", + "vault_sealed": false +} +``` + +**Note**: On successful connection, this endpoint automatically initializes the Vault secrets structure (`webcli/ssh-keys`, `webcli/servers`, `webcli/env-variables`, `webcli/bash-scripts`). + +**Example**: + +```bash +curl -X POST http://localhost:7777/api/vault/test +``` + +--- + +### List SSH Keys from Vault + +Retrieve all SSH keys stored in Vault. + +**Endpoint**: `GET /vault/ssh-keys` + +**Response**: `200 OK` + +```json +[ + { + "name": "production-key", + "private_key": "-----BEGIN OPENSSH PRIVATE KEY-----\n...\n-----END OPENSSH PRIVATE KEY-----", + "group": "production", + "created_at": "2025-01-15T10:00:00Z" + } +] +``` + +**Error Responses**: +- `400 Bad Request`: Vault not configured or disabled + +**Example**: + +```bash +curl http://localhost:7777/api/vault/ssh-keys +``` + +--- + +### Create SSH Key in Vault + +Store a new SSH key in Vault. + +**Endpoint**: `POST /vault/ssh-keys` + +**Request Headers**: +- `Content-Type: application/json` + +**Request Body**: + +```json +{ + "name": "production-key", + "private_key": "-----BEGIN OPENSSH PRIVATE KEY-----\n...\n-----END OPENSSH PRIVATE KEY-----", + "group": "production" +} +``` + +**Fields**: +- `name` (string, required): Key identifier +- `private_key` (string, required): PEM-encoded SSH private key +- `group` (string, optional): Group for organization (default: "default") + +**Response**: `201 Created` + +```json +{ + "name": "production-key", + "group": "production", + "created_at": "2025-01-15T10:00:00Z", + "source": "vault" +} +``` + +**Error Responses**: +- `400 Bad Request`: Missing required fields or Vault not configured + +**Example**: + +```bash +curl -X POST http://localhost:7777/api/vault/ssh-keys \ + -H "Content-Type: application/json" \ + -d '{ + "name": "production-key", + "private_key": "-----BEGIN OPENSSH PRIVATE KEY-----\n...\n-----END OPENSSH PRIVATE KEY-----", + "group": "production" + }' +``` + +--- + +### List Servers from Vault + +Retrieve all server configurations stored in Vault. + +**Endpoint**: `GET /vault/servers` + +**Response**: `200 OK` + +```json +[ + { + "name": "prod-web-01", + "ip_address": "10.0.0.50", + "port": 22, + "username": "deploy", + "group": "production" + } +] +``` + +**Error Responses**: +- `400 Bad Request`: Vault not configured or disabled + +**Example**: + +```bash +curl http://localhost:7777/api/vault/servers +``` + +--- + +### Create Server in Vault + +Store a new server configuration in Vault. + +**Endpoint**: `POST /vault/servers` + +**Request Headers**: +- `Content-Type: application/json` + +**Request Body**: + +```json +{ + "name": "prod-web-01", + "ip_address": "10.0.0.50", + "port": 22, + "username": "deploy", + "group": "production" +} +``` + +**Fields**: +- `name` (string, optional): Server name/alias (at least one of name or ip_address required) +- `ip_address` (string, optional): Server IP address or hostname +- `port` (integer, optional): SSH port (default: 22) +- `username` (string, optional): SSH username (default: "root") +- `group` (string, optional): Group for organization (default: "default") + +**Response**: `201 Created` + +```json +{ + "name": "prod-web-01", + "ip_address": "10.0.0.50", + "port": 22, + "username": "deploy", + "group": "production", + "source": "vault" +} +``` + +**Error Responses**: +- `400 Bad Request`: Missing required fields or Vault not configured + +**Example**: + +```bash +curl -X POST http://localhost:7777/api/vault/servers \ + -H "Content-Type: application/json" \ + -d '{ + "name": "prod-web-01", + "ip_address": "10.0.0.50", + "port": 22, + "username": "deploy", + "group": "production" + }' +``` + +--- + +### List Environment Variables from Vault + +Retrieve all environment variables stored in Vault. + +**Endpoint**: `GET /vault/env-variables` + +**Response**: `200 OK` + +```json +[ + { + "name": "API_SECRET", + "value": "super-secret-value", + "description": "External API authentication secret", + "group": "production" + } +] +``` + +**Note**: Unlike local environment variables, Vault env variables are returned with full values (not masked). + +**Error Responses**: +- `400 Bad Request`: Vault not configured or disabled + +**Example**: + +```bash +curl http://localhost:7777/api/vault/env-variables +``` + +--- + +### Create Environment Variable in Vault + +Store a new environment variable in Vault. + +**Endpoint**: `POST /vault/env-variables` + +**Request Headers**: +- `Content-Type: application/json` + +**Request Body**: + +```json +{ + "name": "API_SECRET", + "value": "super-secret-value", + "description": "External API authentication secret", + "group": "production" +} +``` + +**Fields**: +- `name` (string, required): Variable name +- `value` (string, required): Variable value +- `description` (string, optional): Description +- `group` (string, optional): Group for organization (default: "default") + +**Response**: `201 Created` + +```json +{ + "name": "API_SECRET", + "description": "External API authentication secret", + "group": "production", + "source": "vault" +} +``` + +**Error Responses**: +- `400 Bad Request`: Missing required fields or Vault not configured + +**Example**: + +```bash +curl -X POST http://localhost:7777/api/vault/env-variables \ + -H "Content-Type: application/json" \ + -d '{ + "name": "API_SECRET", + "value": "super-secret-value", + "description": "External API authentication secret", + "group": "production" + }' +``` + +--- + +### List Bash Scripts from Vault + +Retrieve all bash scripts stored in Vault. + +**Endpoint**: `GET /vault/bash-scripts` + +**Response**: `200 OK` + +```json +[ + { + "name": "deploy-script", + "description": "Production deployment script", + "content": "#!/bin/bash\necho \"Deploying...\"", + "filename": "deploy.sh", + "group": "production" + } +] +``` + +**Error Responses**: +- `400 Bad Request`: Vault not configured or disabled + +**Example**: + +```bash +curl http://localhost:7777/api/vault/bash-scripts +``` + +--- + +### Create Bash Script in Vault + +Store a new bash script in Vault. + +**Endpoint**: `POST /vault/bash-scripts` + +**Request Headers**: +- `Content-Type: application/json` + +**Request Body**: + +```json +{ + "name": "deploy-script", + "description": "Production deployment script", + "content": "#!/bin/bash\nset -e\necho \"Deploying...\"\ncd /opt/app\ngit pull\nsystemctl restart app", + "filename": "deploy.sh", + "group": "production" +} +``` + +**Fields**: +- `name` (string, required): Script name +- `content` (string, required): Bash script content +- `description` (string, optional): Description +- `filename` (string, optional): Original filename +- `group` (string, optional): Group for organization (default: "default") + +**Response**: `201 Created` + +```json +{ + "name": "deploy-script", + "description": "Production deployment script", + "filename": "deploy.sh", + "group": "production", + "source": "vault" +} +``` + +**Error Responses**: +- `400 Bad Request`: Missing required fields or Vault not configured + +**Example**: + +```bash +curl -X POST http://localhost:7777/api/vault/bash-scripts \ + -H "Content-Type: application/json" \ + -d '{ + "name": "deploy-script", + "description": "Production deployment script", + "content": "#!/bin/bash\necho \"Deploying...\"", + "group": "production" + }' +``` + +--- + ## Error Responses All API endpoints use standard HTTP status codes and return JSON error responses. diff --git a/README.md b/README.md index 67b2708..a91402a 100644 --- a/README.md +++ b/README.md @@ -9,699 +9,23 @@ A powerful web-based interface for executing commands on local and remote Linux servers. Built with Go and React with Material-UI for a professional, modern user experience. ![Dashboard](docs/images/dashboard.png) -*Main dashboard with feature cards for easy navigation* - -## 📋 Table of Contents - -- [Features](#-features) -- [Tech Stack](#-tech-stack) -- [Screenshots](#-screenshots) -- [Prerequisites](#-prerequisites) -- [Installation](#-installation) -- [Quick Start](#-quick-start) -- [Usage](#-usage) -- [API Documentation](#-api-documentation) -- [Configuration](#-configuration) -- [Security](#-security) -- [Deployment](#-deployment) -- [Development](#-development) -- [Contributing](#-contributing) -- [License](#-license) - -## ✨ Features - -### Core Functionality -- **Web-Based Interface**: Professional Material-UI dashboard accessible from any browser -- **Theme Support**: Dark and light mode toggle with preferences saved locally -- **Multi-Platform**: Compiled binaries for Linux x64, macOS Intel, and macOS Apple Silicon - -### Interactive Terminal -- **Full Browser-Based Terminal**: Real-time terminal emulator powered by xterm.js with WebSocket backend -- **Multiple Shell Support**: Choose between Bash, Zsh, or Sh shells -- **SSH Key Integration**: Select SSH keys from the dropdown - automatically injected into terminal sessions -- **Server Name Resolution**: Servers from Admin Panel automatically available as SSH hostname aliases -- **Dynamic Resize**: Terminal automatically resizes with proper 256-color support -- **Fullscreen Mode**: Toggle fullscreen for distraction-free terminal access - -### Command Execution -- **Local Commands**: Execute bash commands on your local server with real-time output -- **Remote Commands**: Connect and execute commands on remote servers via SSH -- **User Selection**: Run commands as different users (current, root, or custom) -- **Sudo Support**: Secure password dialog for root command execution - -### Server & SSH Management -- **Admin Panel**: Full management interface with tabbed sections -- **SSH Key Management**: CRUD operations for SSH private keys -- **Server Management**: Manage remote servers with hostname, IP, port, and username -- **Hostname Validation**: Automatic validation according to hostname conventions - -### Command Templates & History -- **Command Templates**: Save frequently-used commands for quick re-execution -- **Command Type Management**: Visual indicators (Local/Remote) with type switching -- **Smart Navigation**: Execute button routes to appropriate page based on command type -- **Command History**: Complete execution history with output, exit codes, and timing - -### Environment Variables -- **Secure Storage**: Store sensitive environment variables with AES-256-GCM encryption -- **Masked Display**: Values masked by default in API responses -- **Script Injection**: Inject stored env vars into script executions - -### Bash Scripts -- **Script Library**: Store and manage reusable bash scripts -- **Local & Remote Execution**: Execute scripts on local or remote servers -- **Script Presets**: Save execution configurations (server, SSH key, user, env vars) -- **Environment Integration**: Inject stored environment variables into scripts - -### Developer Tools -- **YAML Validator**: Validate, format, and auto-fix YAML documents with Monaco Editor -- **JSON Validator**: Validate, format, and auto-fix JSON data with Monaco Editor -- **Auto-Fix**: Automatic repair of common issues (tabs, indentation, trailing commas, etc.) -- **Diff View**: Side-by-side comparison showing exactly what was changed by auto-fix -- **Syntax Highlighting**: Full VS Code-style editing experience - -### Security -- **Authentication**: HTTP Basic Auth and Bearer token support (configurable) -- **TLS/HTTPS Support**: Native TLS support with optional HTTPS enforcement -- **Security Headers**: X-Frame-Options, X-Content-Type-Options, X-XSS-Protection, Referrer-Policy -- **SSH Host Key Verification**: Proper host key checking against known_hosts with TOFU support -- **Input Validation**: Comprehensive validation for all user inputs -- **Encrypted Database**: SQLite with AES-256-GCM encryption for sensitive data -- **bcrypt Password Hashing**: Secure password hashing with cost factor 12 -- **HTTP Timeouts**: Protection against slowloris and DoS attacks -- **CORS Policy**: Restrictive CORS with configurable origins -- **Secure Password Handling**: SSH passwords never stored in command history -- **Automatic Encryption**: All SSH keys, scripts, and env variables encrypted at rest -- **Entropy Verification**: System entropy check before cryptographic key generation (Linux) -- **Database Migrations**: Automatic schema versioning and migration system - -## 🛠 Tech Stack - -### Backend -- **[Go 1.21+](https://golang.org/)**: High-performance backend server -- **[Gorilla Mux](https://github.com/gorilla/mux)**: HTTP router for API endpoints -- **[Gorilla WebSocket](https://github.com/gorilla/websocket)**: WebSocket support for interactive terminal -- **[creack/pty](https://github.com/creack/pty)**: PTY (pseudo-terminal) handling for terminal emulation -- **[Viper](https://github.com/spf13/viper)**: Configuration management with env, file, and flag support -- **[Swaggo/swag](https://github.com/swaggo/swag)**: Swagger API documentation generator -- **[SQLite](https://www.sqlite.org/)**: Embedded database with migration support -- **[golang.org/x/crypto/ssh](https://pkg.go.dev/golang.org/x/crypto/ssh)**: SSH client with host key verification -- **[golang.org/x/crypto/bcrypt](https://pkg.go.dev/golang.org/x/crypto/bcrypt)**: Secure password hashing -- **AES-256-GCM**: Military-grade encryption for sensitive data -- **Authentication Middleware**: HTTP Basic Auth and Bearer token support -- **Security Middleware**: HTTPS enforcement and security headers -- **Input Validation**: Comprehensive validation for security - -### Frontend -- **[React 18](https://react.dev/)**: Modern UI library -- **[React Router v6](https://reactrouter.com/)**: Client-side routing -- **[Material-UI (MUI) v5](https://mui.com/)**: Professional component library -- **[xterm.js](https://xtermjs.org/)**: Terminal emulator for the browser -- **[Monaco Editor](https://microsoft.github.io/monaco-editor/)**: VS Code editor for YAML/JSON tools -- **[Vite](https://vitejs.dev/)**: Fast build tool and dev server -- **[Emotion](https://emotion.sh/)**: CSS-in-JS styling -- **[Swagger UI](https://swagger.io/tools/swagger-ui/)**: Interactive API documentation -- **[js-yaml](https://github.com/nodeca/js-yaml)**: YAML parsing and formatting -- **[jsonrepair](https://github.com/josdejong/jsonrepair)**: JSON auto-fix and repair - -## 📸 Screenshots - -### Dashboard -![Dashboard](docs/images/dashboard.png) -*Main dashboard with feature cards for easy navigation* - -### Local Command Execution -![Local Commands](docs/images/local-commands.png) -*Execute commands on your local server with real-time output* - -### Remote Command Execution -![Remote Commands](docs/images/remote-commands.png) -*Connect to remote servers via SSH and execute commands* - -### Remote Script Execution -![Remote Commands](docs/images/remote-script.png) -*Connect to remote servers via SSH and execute script* - -### Interactive Terminal -![Interactive Terminal](docs/images/interactive-terminal.png) -*Full browser-based terminal with SSH key integration and server aliases* - -### Admin Panel - SSH Keys -![SSH Keys Management](docs/images/admin-ssh-keys.png) -*Manage SSH private keys for server authentication* - -### Admin Panel - Servers -![Server Management](docs/images/admin-servers.png) -*Configure and manage remote servers* - -### Saved Commands -![Saved Commands](docs/images/saved-commands.png) -*Save and reuse frequently-used command templates with type indicators* - -### Command History -![Command History](docs/images/command-history.png) -*View complete execution history with output and timing* - -## 📦 Prerequisites - -- **Go**: Version 1.21 or higher ([Download](https://golang.org/dl/)) -- **Node.js**: Version 18 or higher ([Download](https://nodejs.org/)) -- **npm**: Version 8 or higher (comes with Node.js) - -## 🚀 Installation - -### Clone the Repository - -```bash -git clone https://github.com/pozgo/web-cli.git -cd web-cli -``` - -### Install Dependencies - -#### Backend -```bash -go mod download -``` - -#### Frontend -```bash -cd frontend -npm install -cd .. -``` - -## ⚡ Quick Start - -### Build and Run - -```bash -# Build the application -./build.sh - -# Run the server -./web-cli -``` - -Access the application at `http://localhost:7777` - -### Using Management Script - -```bash -# Start the server -./manage.sh start - -# Stop the server -./manage.sh stop - -# Check status -./manage.sh status -``` - -## 📖 Usage - -### Interactive Terminal - -1. Navigate to **Interactive Terminal** from the dashboard -2. Select your preferred shell (Bash, Zsh, or Sh) -3. Optionally select an SSH key from the dropdown -4. Use the terminal like a native terminal - full PTY support -5. SSH to servers using aliases: `ssh myserver` (servers from Admin Panel) -6. Toggle fullscreen with the fullscreen button - -**SSH Server Aliases:** -When you add servers in the Admin Panel, they become available as SSH aliases in the terminal: -```bash -# If you added a server named "prod" with IP 10.0.0.5 and user "deploy" -ssh prod # Automatically connects to deploy@10.0.0.5 -``` - -### Local Command Execution - -1. Navigate to **Local Commands** from the dashboard -2. Enter your bash command -3. Select the user to run as (current, root, or custom) -4. Click **Execute Command** -5. View real-time output - -### Remote Command Execution - -1. First, add SSH keys and servers in the **Admin Panel** -2. Navigate to **Remote Execution** -3. Select a server from the dropdown -4. Choose an SSH key (optional, password fallback available) -5. Enter your command and click **Execute** - -### Saved Command Templates - -1. Execute any command and check "Save command as template" -2. Access saved commands from the **Saved Commands** page -3. Edit command type (Local/Remote) and details -4. Execute saved commands with one click - -## 📚 API Documentation - -Web CLI provides a comprehensive RESTful API for programmatic access to all features. Perfect for automation, CI/CD pipelines, and integration with other tools. - -### 🚀 Quick Start - -**Base URL**: `http://localhost:7777/api` - -**Example Request**: -```bash -curl http://localhost:7777/api/health -# Response: {"status":"ok"} -``` - -### 📋 API Endpoints Overview - -| Category | Endpoints | Description | -|----------|-----------|-------------| -| **Health** | 1 endpoint | Server health check | -| **Terminal** | 1 WebSocket | Interactive terminal sessions | -| **SSH Keys** | 5 endpoints | Manage SSH private keys | -| **Servers** | 5 endpoints | Manage remote servers | -| **Local Users** | 5 endpoints | Manage local user accounts | -| **System Info** | 1 endpoint | Get current system user | -| **Commands** | 1 endpoint | Execute local/remote commands | -| **Saved Commands** | 5 endpoints | Manage command templates | -| **History** | 2 endpoints | View execution history | -| **Environment Variables** | 5 endpoints | Manage encrypted env variables | -| **Bash Scripts** | 6 endpoints | Manage and execute scripts | -| **Script Presets** | 5 endpoints | Manage execution presets | - -**Total: 43 endpoints (42 REST + 1 WebSocket)** - -### 📘 Swagger UI - -Interactive API documentation is available at `/swagger/` when the server is running. - -Access: `http://localhost:7777/swagger/` - -### 📖 Complete Documentation - -For detailed API documentation including: -- ✅ All 41 endpoints with full descriptions -- ✅ Request/response examples with cURL commands -- ✅ Field descriptions and validation rules -- ✅ Error response formats and status codes -- ✅ Security considerations and best practices -- ✅ Authentication guidance for production -- ✅ Quick reference table for all endpoints - -**👉 See [API.md](API.md) for complete API reference** - -### 💡 Common Use Cases - -**Note:** If authentication is enabled, add `-u username:password` or `-H "Authorization: Bearer token"` to all requests. - -**Execute a local command**: -```bash -curl -u admin:password -X POST http://localhost:7777/api/commands/execute \ - -H "Content-Type: application/json" \ - -d '{"command": "df -h", "user": "root"}' -``` - -**Execute a remote command via SSH**: -```bash -curl -u admin:password -X POST http://localhost:7777/api/commands/execute \ - -H "Content-Type: application/json" \ - -d '{ - "command": "uptime", - "is_remote": true, - "server_id": 1, - "ssh_key_id": 2 - }' -``` - -**List command history**: -```bash -curl -u admin:password "http://localhost:7777/api/history?limit=10&server=local" -``` - -**Using Bearer Token**: -```bash -curl -H "Authorization: Bearer your-api-token" \ - -X POST http://localhost:7777/api/commands/execute \ - -H "Content-Type: application/json" \ - -d '{"command": "uptime", "user": "current"}' -``` - -## ⚙️ Configuration - -### Command-Line Flags - -```bash -./web-cli [options] - -Options: - -port int Port to listen on (default: 7777) - -host string Host to bind to (default: 0.0.0.0) - -frontend string Path to frontend build files (default: ./frontend/dist) - -db string Path to database file (default: ./data/web-cli.db) - -encryption-key string Path to encryption key file (default: ./.encryption_key) - -tls-cert string Path to TLS certificate file (enables HTTPS) - -tls-key string Path to TLS private key file - -require-https Require HTTPS when auth is enabled (reject HTTP requests) -``` - -### Environment Variables - -All configuration options can be set via environment variables: - -```bash -# Standard environment variables -PORT=8080 HOST=localhost ./web-cli - -# WEBCLI-prefixed variables (recommended) -WEBCLI_PORT=8080 -WEBCLI_HOST=localhost -WEBCLI_DATABASE_PATH=/var/lib/web-cli/web-cli.db -WEBCLI_ENCRYPTION_KEY_PATH=/etc/web-cli/encryption.key -WEBCLI_TLS_CERT_PATH=/etc/ssl/certs/web-cli.crt -WEBCLI_TLS_KEY_PATH=/etc/ssl/private/web-cli.key -WEBCLI_REQUIRE_HTTPS=true -``` - -### Configuration File - -Web CLI supports configuration files in YAML, JSON, or TOML format. Configuration files are searched in the following locations (first found is used): - -1. `./config.yaml` (current directory) -2. `./config/config.yaml` (config subdirectory) -3. `/etc/web-cli/config.yaml` (system config) -4. `~/.config/web-cli/config.yaml` (user config) - -**Example config.yaml:** - -```yaml -port: 7777 -host: "0.0.0.0" -frontend_path: "./assets/frontend" -database_path: "./data/web-cli.db" -encryption_key_path: "./.encryption_key" -tls_cert_path: "/etc/ssl/certs/web-cli.crt" -tls_key_path: "/etc/ssl/private/web-cli.key" -require_https: true -``` - -### Configuration Priority - -1. Command-line flags (highest priority) -2. Environment variables -3. Configuration file -4. Default values (lowest priority) - -## 🔒 Security - -### Authentication (Production Ready) - -**Important: Authentication is disabled by default for development convenience.** - -For production deployments, enable authentication: - -```bash -# Enable authentication -export AUTH_ENABLED=true - -# Option 1: HTTP Basic Authentication -export AUTH_USERNAME="admin" -export AUTH_PASSWORD="your-secure-password" - -# Option 2: API Token (Bearer) -export AUTH_API_TOKEN="your-api-token-here" -``` - -**Features:** -- HTTP Basic Authentication support -- Bearer token (API token) support -- Constant-time credential comparison (prevents timing attacks) -- Supports both methods simultaneously (token takes precedence) - -**Usage Examples:** - -```bash -# Basic Auth -curl -u admin:password http://localhost:7777/api/health - -# Bearer Token -curl -H "Authorization: Bearer your-token" http://localhost:7777/api/health -``` - -### TLS/HTTPS Support - -**Native TLS support for encrypted connections:** - -```bash -# Enable TLS with certificate and key -./web-cli -tls-cert /path/to/cert.pem -tls-key /path/to/key.pem - -# Or via environment variables -WEBCLI_TLS_CERT_PATH=/path/to/cert.pem \ -WEBCLI_TLS_KEY_PATH=/path/to/key.pem \ -./web-cli - -# Enforce HTTPS when authentication is enabled -./web-cli -tls-cert cert.pem -tls-key key.pem -require-https -``` - -**Features:** -- Native Go TLS implementation (no reverse proxy required) -- Automatic HTTPS when certificate and key are provided -- Optional HTTPS enforcement (rejects HTTP requests) -- Works with any TLS certificate (self-signed, Let's Encrypt, etc.) - -**Generate self-signed certificate for testing:** - -```bash -openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem \ - -days 365 -nodes -subj "/CN=localhost" -``` - -### SSH Host Key Verification - -**Proper host key verification for secure SSH connections:** - -- Verifies SSH host keys against `~/.ssh/known_hosts` -- Supports "trust on first use" mode for development -- Detects man-in-the-middle attacks (host key mismatch) -- Automatically saves new trusted host keys -- Thread-safe implementation - -**Configuration:** -- **Strict Mode** (production): Rejects unknown hosts -- **Trust-on-First-Use** (development): Automatically trusts new hosts - -### Input Validation - -**All user inputs are validated before processing:** - -- IP addresses (IPv4/IPv6) -- Hostnames (RFC 1123 compliant) -- Port numbers (1-65535) -- SSH private keys (format validation) -- Unix usernames (alphanumeric, dash, underscore) -- Command names (no null bytes or newlines) - -### HTTP Security - -**Server configured with proper timeouts:** - -```go -ReadTimeout: 15 * time.Second // Prevents slowloris attacks -WriteTimeout: 15 * time.Second // Prevents slow writes -IdleTimeout: 60 * time.Second // Prevents idle connections -``` - -**CORS Policy:** - -- Default: localhost only -- Production: Configure via `CORS_ALLOWED_ORIGINS` environment variable - -```bash -# Single origin -export CORS_ALLOWED_ORIGINS="https://web-cli.example.com" -# Multiple origins (comma-separated) -export CORS_ALLOWED_ORIGINS="https://web-cli.example.com,https://admin.example.com" -``` - -### Database Encryption - -All sensitive data is encrypted using **AES-256-GCM**: -- SSH private keys encrypted at rest -- Command history (commands and output) encrypted -- Encryption key auto-generated on first run -- Key stored in `.encryption_key` with 600 permissions +## Features -### Encryption Key Management +- **Interactive Terminal** - Full browser-based terminal with xterm.js, multi-tab support, SSH key integration +- **Command Execution** - Execute commands locally or remotely via SSH with real-time output +- **Server Management** - Manage SSH keys, servers, and connection settings +- **Script Library** - Store and execute bash scripts with environment variable injection +- **Command Templates** - Save frequently-used commands for quick re-execution +- **Developer Tools** - YAML/JSON validators with Monaco Editor (VS Code engine) +- **HashiCorp Vault** - Optional integration for external secrets management +- **Security** - AES-256 encryption, TLS support, authentication, audit logging -**Important:** -- Backup your `.encryption_key` file - data cannot be recovered without it -- For production, use environment variable instead of file +## Quick Start -**Generate a new encryption key:** - -```bash -# macOS/Linux -openssl rand -base64 32 +### Docker Compose (Recommended) -# Or using dd and base64 -dd if=/dev/urandom bs=32 count=1 2>/dev/null | base64 - -# Output example: 7xK9mP2vQ8nL4wR6tY5uE3sA1zD0cF8bG7hJ9kM6nP4= -``` - -**Use the generated key:** - -```bash -# Option 1: Environment variable (recommended for production) -export ENCRYPTION_KEY="7xK9mP2vQ8nL4wR6tY5uE3sA1zD0cF8bG7hJ9kM6nP4=" -./web-cli - -# Option 2: Save to file (auto-generated on first run if not exists) -echo "7xK9mP2vQ8nL4wR6tY5uE3sA1zD0cF8bG7hJ9kM6nP4=" > .encryption_key -chmod 600 .encryption_key -./web-cli -``` - -### Password Security - -- Sudo passwords only used for command execution -- SSH passwords used for authentication fallback -- **Passwords are never stored** in command history -- Passwords cleared from memory after use - -### Database Migrations - -- Automatic schema versioning -- Migrations run on startup -- Safe to restart - migrations only run once -- Current schema version: **14** - -## 🌐 Deployment - -### Linux Server - -```bash -# Build for Linux -./build.sh all - -# Copy to server -scp bin/web-cli-linux-x64 user@server:/opt/web-cli/web-cli - -# Run on server -ssh user@server -cd /opt/web-cli -./web-cli -``` - -### systemd Service - -Create `/etc/systemd/system/web-cli.service`: - -```ini -[Unit] -Description=Web CLI Service -After=network.target - -[Service] -Type=simple -User=www-data -WorkingDirectory=/opt/web-cli -ExecStart=/opt/web-cli/web-cli -Restart=on-failure - -# Security Configuration (REQUIRED for production) -Environment=AUTH_ENABLED=true -Environment=AUTH_USERNAME=admin -Environment=AUTH_PASSWORD=your-secure-password-here -Environment=CORS_ALLOWED_ORIGINS=https://web-cli.yourdomain.com -Environment=ENCRYPTION_KEY=your-encryption-key-here - -[Install] -WantedBy=multi-user.target -``` - -Enable and start: - -```bash -sudo systemctl enable web-cli -sudo systemctl start web-cli -sudo systemctl status web-cli -``` - -### Production Deployment Checklist - -Before deploying to production, ensure: - -**Security Configuration:** -- ✅ **Authentication enabled**: Set `AUTH_ENABLED=true` -- ✅ **Strong credentials**: Configure `AUTH_USERNAME` and `AUTH_PASSWORD` (or `AUTH_API_TOKEN`) -- ✅ **SSH host key verification**: Enabled by default (uses `~/.ssh/known_hosts`) -- ✅ **CORS restricted**: Set `CORS_ALLOWED_ORIGINS` to your domain(s) -- ✅ **HTTP timeouts**: Configured automatically (prevents DoS attacks) -- ✅ **Input validation**: All inputs validated automatically - -**Additional Requirements:** -- [ ] **HTTPS enabled**: Use native TLS (`-tls-cert`, `-tls-key`) or reverse proxy -- [ ] **Encryption key backup**: Backup `.encryption_key` - data cannot be recovered without it -- [ ] **Security scan**: Run `gosec ./...` or similar security scanner -- [ ] **Monitor logs**: Check for authentication failures and errors -- [ ] **Firewall configured**: Restrict access to authorized IPs if possible - -**Production Environment Variables:** - -```bash -# Authentication (REQUIRED for production) -AUTH_ENABLED=true -AUTH_USERNAME=admin -AUTH_PASSWORD=$(openssl rand -base64 32) # Or your secure password -# OR use API token -AUTH_API_TOKEN=$(openssl rand -base64 32) - -# CORS Policy (REQUIRED for production) -CORS_ALLOWED_ORIGINS=https://web-cli.yourdomain.com - -# Encryption (REQUIRED) -ENCRYPTION_KEY=$(openssl rand -base64 32) - -# TLS/HTTPS (RECOMMENDED for production) -WEBCLI_TLS_CERT_PATH=/etc/ssl/certs/web-cli.crt -WEBCLI_TLS_KEY_PATH=/etc/ssl/private/web-cli.key -WEBCLI_REQUIRE_HTTPS=true - -# Server Config (Optional) -WEBCLI_PORT=7777 -WEBCLI_HOST=0.0.0.0 -``` - -**Testing Authentication:** - -```bash -# Should fail (no auth) -curl http://localhost:7777/api/health - -# Should succeed with Basic Auth -curl -u admin:password http://localhost:7777/api/health - -# Should succeed with Bearer token -curl -H "Authorization: Bearer your-token" http://localhost:7777/api/health -``` - -### Docker - -Web CLI is available as a Docker image for easy deployment. - -**Image Details:** -- **Registry:** Docker Hub ([`polinux/web-cli`](https://hub.docker.com/r/polinux/web-cli)) -- **Base Image:** Debian Bookworm (slim) - provides full bash support for script execution -- **Platforms:** `linux/amd64`, `linux/arm64` -- **Size:** ~100MB compressed -- **Tags:** `latest`, `dev`, `main`, version tags (e.g., `v0.2.3`) - -**Quick Start - Standalone Docker Compose:** - -Create a `docker-compose.yml` file anywhere on your system: +Create a `docker-compose.yml`: ```yaml services: @@ -722,246 +46,141 @@ volumes: web-cli-data: ``` -Then run: +Run: ```bash -# Start the container docker compose up -d +``` + +Access at: **http://localhost:7777** -# View logs -docker compose logs -f +### Docker Run -# Access at http://localhost:7777 +```bash +docker run -d \ + --name web-cli \ + -p 7777:7777 \ + -v web-cli-data:/data \ + -e AUTH_ENABLED=true \ + -e AUTH_USERNAME=admin \ + -e AUTH_PASSWORD=your-password \ + polinux/web-cli:latest ``` -**Quick Start with Repository:** +### From Source ```bash -# Clone the repository +# Clone and build git clone https://github.com/pozgo/web-cli.git cd web-cli +./build.sh -# Start with default settings -docker compose up -d - -# View logs -docker compose logs -f +# Run +./web-cli ``` -**Access:** `http://localhost:7777` +## Screenshots -**Build Locally:** +| Interactive Terminal | Remote Commands | +|:---:|:---:| +| ![Terminal](docs/images/interactive-terminal.png) | ![Remote](docs/images/remote-commands.png) | -```bash -# Build the image -docker compose build +| Admin Panel | Vault Integration | +|:---:|:---:| +| ![Admin](docs/images/admin-ssh-keys.png) | ![Vault](docs/images/admin-vault-integration.png) | -# Or build directly -docker build -t web-cli . -``` +## Documentation -**Run with Custom Configuration:** +| Document | Description | +|----------|-------------| +| **[API.md](API.md)** | Complete REST API reference (55 endpoints) | +| **[docs/CONFIGURATION.md](docs/CONFIGURATION.md)** | Configuration options, env vars, config files | +| **[docs/SECURITY.md](docs/SECURITY.md)** | Security features, authentication, TLS, audit logging | +| **[docs/DEPLOYMENT.md](docs/DEPLOYMENT.md)** | Docker, systemd, production deployment guides | +| **[docs/DEVELOPMENT.md](docs/DEVELOPMENT.md)** | Development setup, project structure, contributing | -```bash -# Copy example environment file -cp .env.example .env +## API -# Edit .env with your settings -nano .env +Swagger UI available at `/swagger/` when the server is running. -# Start with custom configuration -docker compose up -d +```bash +# Health check +curl http://localhost:7777/api/health + +# Execute command (with auth) +curl -u admin:password -X POST http://localhost:7777/api/commands/execute \ + -H "Content-Type: application/json" \ + -d '{"command": "uptime", "user": "current"}' ``` -**Production Deployment:** +See [API.md](API.md) for complete documentation. -```bash -# Create .env with production settings -cat > .env << 'EOF' -AUTH_ENABLED=true -AUTH_USERNAME=admin -AUTH_PASSWORD=$(openssl rand -base64 24) -WEBCLI_PORT=7777 -EOF +## Configuration -# Start the container -docker compose up -d +### Essential Environment Variables -# Check credentials -cat .env | grep AUTH_ -``` - -**Docker Run (without Compose):** +| Variable | Default | Description | +|----------|---------|-------------| +| `AUTH_ENABLED` | `false` | Enable authentication | +| `AUTH_USERNAME` | - | Basic auth username | +| `AUTH_PASSWORD` | - | Basic auth password | +| `WEBCLI_PORT` | `7777` | Server port | +| `WEBCLI_TLS_CERT_PATH` | - | TLS certificate (enables HTTPS) | +| `WEBCLI_TLS_KEY_PATH` | - | TLS private key | -```bash -docker run -d \ - --name web-cli \ - -p 7777:7777 \ - -v web-cli-data:/data \ - -e AUTH_ENABLED=true \ - -e AUTH_USERNAME=admin \ - -e AUTH_PASSWORD=your-secure-password \ - polinux/web-cli:latest -``` +See [docs/CONFIGURATION.md](docs/CONFIGURATION.md) for all options. -**With TLS/HTTPS:** +## Production Deployment ```bash +# Generate secure credentials +AUTH_PASSWORD=$(openssl rand -base64 24) +ENCRYPTION_KEY=$(openssl rand -base64 32) + +# Run with TLS and authentication docker run -d \ --name web-cli \ -p 7777:7777 \ -v web-cli-data:/data \ -v ./certs:/certs:ro \ - -e WEBCLI_TLS_CERT_PATH=/certs/cert.pem \ - -e WEBCLI_TLS_KEY_PATH=/certs/key.pem \ -e AUTH_ENABLED=true \ -e AUTH_USERNAME=admin \ - -e AUTH_PASSWORD=your-secure-password \ + -e AUTH_PASSWORD="$AUTH_PASSWORD" \ + -e ENCRYPTION_KEY="$ENCRYPTION_KEY" \ + -e WEBCLI_TLS_CERT_PATH=/certs/cert.pem \ + -e WEBCLI_TLS_KEY_PATH=/certs/key.pem \ + -e CORS_ALLOWED_ORIGINS=https://web-cli.yourdomain.com \ polinux/web-cli:latest ``` -**Docker Environment Variables:** - -| Variable | Default | Description | -|----------|---------|-------------| -| `WEBCLI_PORT` | `7777` | Port to listen on | -| `WEBCLI_HOST` | `0.0.0.0` | Host to bind to | -| `WEBCLI_DATABASE_PATH` | `/data/web-cli.db` | Database file path | -| `WEBCLI_ENCRYPTION_KEY_PATH` | `/data/.encryption_key` | Encryption key file path | -| `ENCRYPTION_KEY` | (auto-generated) | Base64 encryption key | -| `AUTH_ENABLED` | `false` | Enable authentication | -| `AUTH_USERNAME` | `admin` | Basic auth username | -| `AUTH_PASSWORD` | (none) | Basic auth password | -| `AUTH_API_TOKEN` | (none) | Bearer token | -| `WEBCLI_TLS_CERT_PATH` | (none) | TLS certificate path | -| `WEBCLI_TLS_KEY_PATH` | (none) | TLS private key path | -| `WEBCLI_REQUIRE_HTTPS` | `false` | Require HTTPS | -| `CORS_ALLOWED_ORIGINS` | (localhost) | Allowed CORS origins | - -**Volumes:** - -| Path | Description | -|------|-------------| -| `/data` | Persistent data (database, encryption key) | -| `/config` | Configuration files (optional) | -| `/certs` | TLS certificates (optional) | - -## 💻 Development - -### Backend Development - -```bash -# Run with hot reload (use air or similar) -go run cmd/web-cli/main.go - -# Run tests -go test ./... - -# Run tests with coverage -go test -cover ./... - -# Format code -go fmt ./... - -# Lint code -go vet ./... -``` - -### Frontend Development - -```bash -cd frontend - -# Start dev server with hot reload -npm run dev - -# Run tests -npm test - -# Lint code -npm run lint - -# Build for production -npm run build -``` - -### Development Workflow - -1. Start backend: - ```bash - go run cmd/web-cli/main.go - ``` +See [docs/DEPLOYMENT.md](docs/DEPLOYMENT.md) for systemd service, production checklist, and more. -2. Start frontend (new terminal): - ```bash - cd frontend && npm run dev - ``` +## Tech Stack -3. Open `http://localhost:3000` for hot-reload development +**Backend:** Go 1.21+, Gorilla Mux, SQLite, AES-256-GCM encryption -### Project Structure +**Frontend:** React 18, Material-UI v5, xterm.js, Monaco Editor, Vite -``` -web-cli/ -├── cmd/web-cli/ # Application entry point -├── internal/ # Private application code -│ ├── config/ # Configuration management -│ ├── database/ # Database, migrations, encryption -│ ├── executor/ # Command execution (local & remote) -│ │ └── hostkeys.go # SSH host key verification -│ ├── middleware/ # HTTP middleware (authentication) -│ ├── models/ # Data models -│ ├── repository/ # Data access layer -│ ├── server/ # HTTP server and handlers -│ ├── terminal/ # Interactive terminal (PTY + WebSocket) -│ └── validation/ # Input validation functions -├── frontend/ # React application -│ ├── src/ -│ │ ├── components/ # React components -│ │ │ └── Terminal.jsx # xterm.js terminal component -│ │ ├── theme/ # MUI theme configuration -│ │ └── App.jsx # Main app with routing -│ └── vite.config.js # Vite configuration -├── build.sh # Build script (all platforms) -├── manage.sh # Server management script -├── API.md # Complete API documentation -└── go.mod # Go dependencies -``` - -## 🤝 Contributing - -Contributions are welcome! Please follow these steps: +## Contributing 1. Fork the repository 2. Create a feature branch (`git checkout -b feature/amazing-feature`) -3. Commit your changes (`git commit -m 'Add some amazing feature'`) +3. Commit your changes (`git commit -m 'Add amazing feature'`) 4. Push to the branch (`git push origin feature/amazing-feature`) 5. Open a Pull Request -### Development Guidelines - -- Follow Go best practices and conventions -- Write tests for new features -- Update documentation as needed -- Ensure all tests pass before submitting PR -- Keep commits atomic and well-described - -## 📝 License +See [docs/DEVELOPMENT.md](docs/DEVELOPMENT.md) for development setup. -This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details. +## License -## 🆘 Support +MIT License - see [LICENSE](LICENSE) for details. -For issues and questions: -- 📫 Open an issue on [GitHub Issues](https://github.com/pozgo/web-cli/issues) -- 📖 Check the [API Documentation](API.md) -- 🔒 Review [Security Improvements](SECURITY_IMPROVEMENTS.md) for security features +## Support -## 🙏 Acknowledgments +- [GitHub Issues](https://github.com/pozgo/web-cli/issues) +- [API Documentation](API.md) +- [Security Guide](docs/SECURITY.md) -- Built with [Go](https://golang.org/) - Fast, reliable, and efficient -- UI powered by [React](https://react.dev/) and [Material-UI](https://mui.com/) -- Build tool: [Vite](https://vitejs.dev/) - Next generation frontend tooling -- SSH implementation: [golang.org/x/crypto/ssh](https://pkg.go.dev/golang.org/x/crypto/ssh) +--- **Made with ❤️ by [Pozgo](https://github.com/pozgo)** diff --git a/cmd/web-cli/main.go b/cmd/web-cli/main.go index a4a9784..c9d4f94 100644 --- a/cmd/web-cli/main.go +++ b/cmd/web-cli/main.go @@ -4,6 +4,7 @@ import ( "log" "github.com/pozgo/web-cli/assets" + "github.com/pozgo/web-cli/internal/audit" "github.com/pozgo/web-cli/internal/config" "github.com/pozgo/web-cli/internal/database" "github.com/pozgo/web-cli/internal/server" @@ -93,11 +94,27 @@ func main() { log.Printf("Database schema version: %d", version) } + // Initialize audit logging + if cfg.AuditLogPath != "" { + auditLogger, err := audit.Initialize(cfg.AuditLogPath) + if err != nil { + log.Printf("Warning: Failed to initialize audit logging: %v", err) + } else { + log.Printf("Audit logging enabled: %s", cfg.AuditLogPath) + defer auditLogger.Close() + } + } else { + log.Println("Audit logging is disabled (set AUDIT_LOG_PATH to enable)") + } + // Set embedded frontend server.EmbeddedFrontend = assets.FrontendFS // Create and start server - srv := server.New(cfg, db) + srv, err := server.New(cfg, db) + if err != nil { + log.Fatalf("Failed to initialize server: %v", err) + } log.Fatal(srv.Start()) } diff --git a/docs/CONFIGURATION.md b/docs/CONFIGURATION.md new file mode 100644 index 0000000..ffe0eff --- /dev/null +++ b/docs/CONFIGURATION.md @@ -0,0 +1,312 @@ +# Configuration Guide + +Web CLI supports multiple configuration methods with the following priority order: + +1. **Command-line flags** (highest priority) +2. **Environment variables** +3. **Configuration file** +4. **Default values** (lowest priority) + +## Table of Contents + +- [Command-Line Flags](#command-line-flags) +- [Environment Variables](#environment-variables) +- [Configuration File](#configuration-file) +- [Timeout Configuration](#timeout-configuration) +- [Audit Logging](#audit-logging) +- [TLS/HTTPS Configuration](#tlshttps-configuration) +- [CORS Configuration](#cors-configuration) + +--- + +## Command-Line Flags + +```bash +./web-cli [options] + +Options: + -port int Port to listen on (default: 7777) + -host string Host to bind to (default: 0.0.0.0) + -frontend string Path to frontend build files (default: ./frontend/dist) + -db string Path to database file (default: ./data/web-cli.db) + -encryption-key string Path to encryption key file (default: ./.encryption_key) + -tls-cert string Path to TLS certificate file (enables HTTPS) + -tls-key string Path to TLS private key file + -require-https Require HTTPS when auth is enabled (reject HTTP requests) +``` + +--- + +## Environment Variables + +All configuration options can be set via environment variables. Both standard and `WEBCLI_`-prefixed variables are supported (prefixed is recommended). + +### Server Configuration + +| Variable | WEBCLI Prefix | Default | Description | +|----------|---------------|---------|-------------| +| `PORT` | `WEBCLI_PORT` | `7777` | Port to listen on | +| `HOST` | `WEBCLI_HOST` | `0.0.0.0` | Host to bind to | +| `FRONTEND_PATH` | `WEBCLI_FRONTEND_PATH` | `./frontend/dist` | Frontend build files | +| `DATABASE_PATH` | `WEBCLI_DATABASE_PATH` | `./data/web-cli.db` | SQLite database path | +| `ENCRYPTION_KEY_PATH` | `WEBCLI_ENCRYPTION_KEY_PATH` | `./.encryption_key` | Encryption key file | + +### Authentication + +| Variable | Default | Description | +|----------|---------|-------------| +| `AUTH_ENABLED` | `false` | Enable authentication | +| `AUTH_USERNAME` | (none) | Basic auth username | +| `AUTH_PASSWORD` | (none) | Basic auth password | +| `AUTH_API_TOKEN` | (none) | Bearer token for API access | + +### TLS/HTTPS + +| Variable | WEBCLI Prefix | Default | Description | +|----------|---------------|---------|-------------| +| `TLS_CERT_PATH` | `WEBCLI_TLS_CERT_PATH` | (none) | TLS certificate file | +| `TLS_KEY_PATH` | `WEBCLI_TLS_KEY_PATH` | (none) | TLS private key file | +| `REQUIRE_HTTPS` | `WEBCLI_REQUIRE_HTTPS` | `false` | Reject HTTP when auth enabled | + +### Example Usage + +```bash +# Standard environment variables +PORT=8080 HOST=localhost ./web-cli + +# WEBCLI-prefixed variables (recommended) +WEBCLI_PORT=8080 \ +WEBCLI_HOST=localhost \ +WEBCLI_DATABASE_PATH=/var/lib/web-cli/web-cli.db \ +./web-cli + +# Production example with authentication +AUTH_ENABLED=true \ +AUTH_USERNAME=admin \ +AUTH_PASSWORD="secure-password" \ +WEBCLI_TLS_CERT_PATH=/etc/ssl/certs/web-cli.crt \ +WEBCLI_TLS_KEY_PATH=/etc/ssl/private/web-cli.key \ +./web-cli +``` + +--- + +## Configuration File + +Web CLI supports configuration files in YAML, JSON, or TOML format. + +### Search Locations + +Configuration files are searched in the following order (first found is used): + +1. `./config.yaml` (current directory) +2. `./config/config.yaml` (config subdirectory) +3. `/etc/web-cli/config.yaml` (system config) +4. `~/.config/web-cli/config.yaml` (user config) + +### Example config.yaml + +```yaml +# Server Configuration +port: 7777 +host: "0.0.0.0" +frontend_path: "./assets/frontend" +database_path: "./data/web-cli.db" +encryption_key_path: "./.encryption_key" + +# TLS/HTTPS Configuration +tls_cert_path: "/etc/ssl/certs/web-cli.crt" +tls_key_path: "/etc/ssl/private/web-cli.key" +require_https: true + +# Timeout Configuration (in seconds) +read_timeout: 30 +write_timeout: 600 +idle_timeout: 60 +vault_timeout: 30 +command_timeout: 300 +ssh_connect_timeout: 30 + +# Audit Logging (optional) +audit_log_path: "/var/log/web-cli/audit.log" +``` + +### Example config.json + +```json +{ + "port": 7777, + "host": "0.0.0.0", + "database_path": "./data/web-cli.db", + "encryption_key_path": "./.encryption_key", + "read_timeout": 30, + "write_timeout": 600, + "command_timeout": 300 +} +``` + +--- + +## Timeout Configuration + +All timeout values are configurable via environment variables (values in seconds): + +| Timeout | Default | Environment Variable | Description | +|---------|---------|---------------------|-------------| +| Read Timeout | 30s | `READ_TIMEOUT` or `WEBCLI_READ_TIMEOUT` | Time to read request headers | +| Write Timeout | 600s (10m) | `WRITE_TIMEOUT` or `WEBCLI_WRITE_TIMEOUT` | Time to write response (high for streaming) | +| Idle Timeout | 60s | `IDLE_TIMEOUT` or `WEBCLI_IDLE_TIMEOUT` | Keep-alive connection timeout | +| Vault Timeout | 30s | `VAULT_TIMEOUT` or `WEBCLI_VAULT_TIMEOUT` | HashiCorp Vault operations | +| Command Timeout | 300s (5m) | `COMMAND_TIMEOUT` or `WEBCLI_COMMAND_TIMEOUT` | Command execution timeout | +| SSH Connect Timeout | 30s | `SSH_CONNECT_TIMEOUT` or `WEBCLI_SSH_CONNECT_TIMEOUT` | SSH connection establishment | + +### Example + +```bash +# Increase command timeout to 10 minutes +export COMMAND_TIMEOUT=600 + +# Increase Vault timeout for slow connections +export VAULT_TIMEOUT=60 + +./web-cli +``` + +--- + +## Audit Logging + +Enable comprehensive audit logging for security compliance and monitoring. + +### Enable Audit Logging + +```bash +# Via environment variable +export AUDIT_LOG_PATH=/var/log/web-cli/audit.log +./web-cli + +# Or via WEBCLI prefix +export WEBCLI_AUDIT_LOG_PATH=/var/log/web-cli/audit.log +./web-cli +``` + +### Logged Events + +- Command executions (local and remote) +- Script executions +- Terminal sessions (start/end) +- Authentication attempts + +### Log Format + +JSON Lines (JSONL) - one JSON object per line: + +```json +{ + "timestamp": "2025-01-19T10:30:00Z", + "event_type": "command_execution", + "outcome": "success", + "actor": "admin", + "source_ip": "192.168.1.100", + "target": "local", + "command": "df -h", + "user": "root", + "exit_code": 0, + "duration_ms": 150 +} +``` + +### Log Rotation + +Use logrotate to manage log file size: + +```bash +# /etc/logrotate.d/web-cli +/var/log/web-cli/audit.log { + daily + rotate 30 + compress + delaycompress + missingok + notifempty + create 640 www-data www-data +} +``` + +--- + +## TLS/HTTPS Configuration + +### Enable TLS + +```bash +# Using command-line flags +./web-cli -tls-cert /path/to/cert.pem -tls-key /path/to/key.pem + +# Using environment variables +WEBCLI_TLS_CERT_PATH=/path/to/cert.pem \ +WEBCLI_TLS_KEY_PATH=/path/to/key.pem \ +./web-cli + +# Enforce HTTPS (reject HTTP requests) +./web-cli -tls-cert cert.pem -tls-key key.pem -require-https +``` + +### Generate Self-Signed Certificate (Testing) + +```bash +openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem \ + -days 365 -nodes -subj "/CN=localhost" +``` + +### Features + +- Native Go TLS implementation (no reverse proxy required) +- Automatic HTTPS when certificate and key are provided +- Optional HTTPS enforcement (rejects HTTP requests) +- Works with any TLS certificate (self-signed, Let's Encrypt, etc.) + +--- + +## CORS Configuration + +Configure Cross-Origin Resource Sharing for frontend access. + +### Default Behavior + +By default, only localhost origins are allowed: +- `http://localhost:7777` +- `http://127.0.0.1:7777` + +### Custom Origins + +```bash +# Single origin +export CORS_ALLOWED_ORIGINS="https://web-cli.example.com" + +# Multiple origins (comma-separated) +export CORS_ALLOWED_ORIGINS="https://web-cli.example.com,https://admin.example.com" + +./web-cli +``` + +--- + +## Complete Production Example + +```bash +# /etc/systemd/system/web-cli.service environment +AUTH_ENABLED=true +AUTH_USERNAME=admin +AUTH_PASSWORD=your-secure-password +ENCRYPTION_KEY=your-base64-encryption-key +CORS_ALLOWED_ORIGINS=https://web-cli.yourdomain.com +WEBCLI_TLS_CERT_PATH=/etc/ssl/certs/web-cli.crt +WEBCLI_TLS_KEY_PATH=/etc/ssl/private/web-cli.key +WEBCLI_REQUIRE_HTTPS=true +WEBCLI_AUDIT_LOG_PATH=/var/log/web-cli/audit.log +WEBCLI_DATABASE_PATH=/var/lib/web-cli/web-cli.db +``` + +For more information on security configuration, see [SECURITY.md](SECURITY.md). +For deployment instructions, see [DEPLOYMENT.md](DEPLOYMENT.md). diff --git a/docs/DEPLOYMENT.md b/docs/DEPLOYMENT.md new file mode 100644 index 0000000..82aaf4b --- /dev/null +++ b/docs/DEPLOYMENT.md @@ -0,0 +1,339 @@ +# Deployment Guide + +This document covers various deployment options for Web CLI. + +## Table of Contents + +- [Docker (Recommended)](#docker-recommended) +- [Docker Compose](#docker-compose) +- [Linux Server (Binary)](#linux-server-binary) +- [systemd Service](#systemd-service) +- [Production Checklist](#production-checklist) + +--- + +## Docker (Recommended) + +Web CLI is available as a Docker image for easy deployment. + +### Image Details + +| Property | Value | +|----------|-------| +| Registry | Docker Hub ([`polinux/web-cli`](https://hub.docker.com/r/polinux/web-cli)) | +| Base Image | Debian Bookworm (slim) | +| Platforms | `linux/amd64`, `linux/arm64` | +| Size | ~100MB compressed | +| Tags | `latest`, `dev`, `main`, version tags (e.g., `v0.2.3`) | + +### Quick Start + +```bash +docker run -d \ + --name web-cli \ + -p 7777:7777 \ + -v web-cli-data:/data \ + -e AUTH_ENABLED=true \ + -e AUTH_USERNAME=admin \ + -e AUTH_PASSWORD=your-secure-password \ + polinux/web-cli:latest +``` + +Access at: `http://localhost:7777` + +### With TLS/HTTPS + +```bash +docker run -d \ + --name web-cli \ + -p 7777:7777 \ + -v web-cli-data:/data \ + -v ./certs:/certs:ro \ + -e WEBCLI_TLS_CERT_PATH=/certs/cert.pem \ + -e WEBCLI_TLS_KEY_PATH=/certs/key.pem \ + -e AUTH_ENABLED=true \ + -e AUTH_USERNAME=admin \ + -e AUTH_PASSWORD=your-secure-password \ + polinux/web-cli:latest +``` + +### Docker Volumes + +| Path | Description | +|------|-------------| +| `/data` | Persistent data (database, encryption key) | +| `/config` | Configuration files (optional) | +| `/certs` | TLS certificates (optional) | + +### Docker Environment Variables + +| Variable | Default | Description | +|----------|---------|-------------| +| `WEBCLI_PORT` | `7777` | Port to listen on | +| `WEBCLI_HOST` | `0.0.0.0` | Host to bind to | +| `WEBCLI_DATABASE_PATH` | `/data/web-cli.db` | Database file path | +| `WEBCLI_ENCRYPTION_KEY_PATH` | `/data/.encryption_key` | Encryption key path | +| `ENCRYPTION_KEY` | (auto-generated) | Base64 encryption key | +| `AUTH_ENABLED` | `false` | Enable authentication | +| `AUTH_USERNAME` | `admin` | Basic auth username | +| `AUTH_PASSWORD` | (none) | Basic auth password | +| `AUTH_API_TOKEN` | (none) | Bearer token | +| `WEBCLI_TLS_CERT_PATH` | (none) | TLS certificate path | +| `WEBCLI_TLS_KEY_PATH` | (none) | TLS private key path | +| `WEBCLI_REQUIRE_HTTPS` | `false` | Require HTTPS | +| `CORS_ALLOWED_ORIGINS` | (localhost) | Allowed CORS origins | +| `WEBCLI_AUDIT_LOG_PATH` | (none) | Audit log file path | + +--- + +## Docker Compose + +### Standalone docker-compose.yml + +Create a `docker-compose.yml` file anywhere on your system: + +```yaml +services: + web-cli: + image: polinux/web-cli:latest + container_name: web-cli + restart: unless-stopped + ports: + - "7777:7777" + volumes: + - web-cli-data:/data + environment: + - AUTH_ENABLED=true + - AUTH_USERNAME=admin + - AUTH_PASSWORD=changeme123 + +volumes: + web-cli-data: +``` + +### Run + +```bash +# Start the container +docker compose up -d + +# View logs +docker compose logs -f + +# Stop +docker compose down +``` + +### Production docker-compose.yml + +```yaml +services: + web-cli: + image: polinux/web-cli:latest + container_name: web-cli + restart: unless-stopped + ports: + - "7777:7777" + volumes: + - web-cli-data:/data + - ./certs:/certs:ro + environment: + # Authentication + - AUTH_ENABLED=true + - AUTH_USERNAME=admin + - AUTH_PASSWORD=${WEB_CLI_PASSWORD} + + # TLS/HTTPS + - WEBCLI_TLS_CERT_PATH=/certs/cert.pem + - WEBCLI_TLS_KEY_PATH=/certs/key.pem + - WEBCLI_REQUIRE_HTTPS=true + + # CORS + - CORS_ALLOWED_ORIGINS=https://web-cli.yourdomain.com + + # Audit Logging + - WEBCLI_AUDIT_LOG_PATH=/data/audit.log + +volumes: + web-cli-data: +``` + +### With .env File + +Create `.env` file: + +```bash +WEB_CLI_PASSWORD=your-secure-password-here +ENCRYPTION_KEY=your-base64-encryption-key +``` + +--- + +## Linux Server (Binary) + +### Build and Deploy + +```bash +# Build for Linux +./build.sh all + +# Copy to server +scp bin/web-cli-linux-x64 user@server:/opt/web-cli/web-cli + +# Run on server +ssh user@server +cd /opt/web-cli +./web-cli +``` + +### Directory Structure + +``` +/opt/web-cli/ +├── web-cli # Binary +├── data/ +│ └── web-cli.db # Database +├── .encryption_key # Encryption key +└── config.yaml # Configuration (optional) +``` + +### Permissions + +```bash +# Create web-cli user +sudo useradd -r -s /bin/false web-cli + +# Set ownership +sudo chown -R web-cli:web-cli /opt/web-cli + +# Secure encryption key +chmod 600 /opt/web-cli/.encryption_key +``` + +--- + +## systemd Service + +Create `/etc/systemd/system/web-cli.service`: + +```ini +[Unit] +Description=Web CLI Service +After=network.target + +[Service] +Type=simple +User=www-data +WorkingDirectory=/opt/web-cli +ExecStart=/opt/web-cli/web-cli +Restart=on-failure +RestartSec=5 + +# Security Configuration (REQUIRED for production) +Environment=AUTH_ENABLED=true +Environment=AUTH_USERNAME=admin +Environment=AUTH_PASSWORD=your-secure-password-here +Environment=CORS_ALLOWED_ORIGINS=https://web-cli.yourdomain.com +Environment=ENCRYPTION_KEY=your-encryption-key-here + +# Audit Logging (recommended) +Environment=AUDIT_LOG_PATH=/var/log/web-cli/audit.log + +# TLS/HTTPS (recommended) +# Environment=WEBCLI_TLS_CERT_PATH=/etc/ssl/certs/web-cli.crt +# Environment=WEBCLI_TLS_KEY_PATH=/etc/ssl/private/web-cli.key +# Environment=WEBCLI_REQUIRE_HTTPS=true + +# Custom timeouts (optional, values in seconds) +# Environment=COMMAND_TIMEOUT=600 +# Environment=VAULT_TIMEOUT=60 + +[Install] +WantedBy=multi-user.target +``` + +### Enable and Start + +```bash +# Create log directory +sudo mkdir -p /var/log/web-cli +sudo chown www-data:www-data /var/log/web-cli + +# Enable and start service +sudo systemctl daemon-reload +sudo systemctl enable web-cli +sudo systemctl start web-cli + +# Check status +sudo systemctl status web-cli + +# View logs +sudo journalctl -u web-cli -f +``` + +--- + +## Production Checklist + +### Before Deployment + +- [ ] Generate strong password: `openssl rand -base64 32` +- [ ] Generate encryption key: `openssl rand -base64 32` +- [ ] Obtain TLS certificate (Let's Encrypt or similar) +- [ ] Configure firewall rules + +### Environment Variables + +```bash +# Required +AUTH_ENABLED=true +AUTH_USERNAME=admin +AUTH_PASSWORD=$(openssl rand -base64 32) +ENCRYPTION_KEY=$(openssl rand -base64 32) +CORS_ALLOWED_ORIGINS=https://web-cli.yourdomain.com + +# Recommended +WEBCLI_TLS_CERT_PATH=/etc/ssl/certs/web-cli.crt +WEBCLI_TLS_KEY_PATH=/etc/ssl/private/web-cli.key +WEBCLI_REQUIRE_HTTPS=true +WEBCLI_AUDIT_LOG_PATH=/var/log/web-cli/audit.log +``` + +### Post-Deployment + +- [ ] Verify authentication is working +- [ ] Test HTTPS certificate +- [ ] Configure log rotation +- [ ] Set up monitoring/alerting +- [ ] Backup encryption key securely +- [ ] Document admin credentials securely + +### Backup Strategy + +Critical files to backup: + +| File | Importance | Description | +|------|------------|-------------| +| `.encryption_key` | **Critical** | Cannot recover data without it | +| `web-cli.db` | Important | All configuration and history | +| `config.yaml` | Optional | Configuration file | + +### Log Rotation + +```bash +# /etc/logrotate.d/web-cli +/var/log/web-cli/audit.log { + daily + rotate 30 + compress + delaycompress + missingok + notifempty + create 640 www-data www-data +} +``` + +--- + +For more configuration options, see [CONFIGURATION.md](CONFIGURATION.md). +For security information, see [SECURITY.md](SECURITY.md). diff --git a/docs/DEVELOPMENT.md b/docs/DEVELOPMENT.md new file mode 100644 index 0000000..0eb8906 --- /dev/null +++ b/docs/DEVELOPMENT.md @@ -0,0 +1,375 @@ +# Development Guide + +This document covers the development setup and workflow for Web CLI. + +## Table of Contents + +- [Prerequisites](#prerequisites) +- [Quick Setup](#quick-setup) +- [Development Workflow](#development-workflow) +- [Project Structure](#project-structure) +- [Backend Development](#backend-development) +- [Frontend Development](#frontend-development) +- [Testing](#testing) +- [Building](#building) +- [Contributing](#contributing) + +--- + +## Prerequisites + +- **Go**: Version 1.21 or higher ([Download](https://golang.org/dl/)) +- **Node.js**: Version 18 or higher ([Download](https://nodejs.org/)) +- **npm**: Version 8 or higher (comes with Node.js) + +--- + +## Quick Setup + +```bash +# Clone the repository +git clone https://github.com/pozgo/web-cli.git +cd web-cli + +# Install Go dependencies +go mod download + +# Install frontend dependencies +cd frontend +npm install +cd .. + +# Build and run +./build.sh +./web-cli +``` + +Access at: `http://localhost:7777` + +--- + +## Development Workflow + +### Recommended: Two Terminal Setup + +**Terminal 1 - Backend:** + +```bash +go run cmd/web-cli/main.go +``` + +**Terminal 2 - Frontend (with hot reload):** + +```bash +cd frontend && npm run dev +``` + +Access frontend dev server at: `http://localhost:3000` +(API calls are proxied to the Go backend on port 7777) + +### Using Management Script + +```bash +# Start the server +./manage.sh start + +# Stop the server +./manage.sh stop + +# Check status +./manage.sh status + +# Restart +./manage.sh restart +``` + +--- + +## Project Structure + +``` +web-cli/ +├── cmd/web-cli/ # Application entry point +│ └── main.go # Main function +├── internal/ # Private application code +│ ├── audit/ # Audit logging +│ ├── config/ # Configuration management +│ ├── database/ # Database, migrations, encryption +│ ├── executor/ # Command execution (local & remote) +│ │ └── hostkeys.go # SSH host key verification +│ ├── middleware/ # HTTP middleware (auth, security) +│ ├── models/ # Data models +│ ├── repository/ # Data access layer +│ ├── server/ # HTTP server and handlers +│ ├── terminal/ # Interactive terminal (PTY + WebSocket) +│ ├── validation/ # Input validation +│ └── vault/ # HashiCorp Vault client +├── frontend/ # React application +│ ├── src/ +│ │ ├── components/ # React components +│ │ │ ├── Terminal.jsx # xterm.js terminal +│ │ │ ├── AdminPanel.jsx # Admin interface +│ │ │ ├── Dashboard.jsx # Main dashboard +│ │ │ └── ... +│ │ ├── theme/ # MUI theme configuration +│ │ └── App.jsx # Main app with routing +│ ├── public/ # Static assets +│ ├── package.json # npm dependencies +│ └── vite.config.js # Vite configuration +├── docs/ # Documentation +│ ├── images/ # Screenshots +│ ├── CONFIGURATION.md # Configuration guide +│ ├── SECURITY.md # Security guide +│ ├── DEPLOYMENT.md # Deployment guide +│ └── DEVELOPMENT.md # This file +├── assets/ # Embedded frontend (production) +├── build.sh # Build script (all platforms) +├── manage.sh # Server management script +├── API.md # Complete API documentation +├── Dockerfile # Docker build file +├── docker-compose.yml # Docker Compose configuration +└── go.mod # Go dependencies +``` + +--- + +## Backend Development + +### Running + +```bash +# Run with go run +go run cmd/web-cli/main.go + +# Run with custom options +go run cmd/web-cli/main.go -port 8080 -host localhost + +# Run with air (hot reload) +air +``` + +### Testing + +```bash +# Run all tests +go test ./... + +# Run tests with coverage +go test -cover ./... + +# Run tests for a specific package +go test ./internal/validation/... + +# Verbose output +go test -v ./... +``` + +### Linting + +```bash +# Format code +go fmt ./... + +# Run vet +go vet ./... + +# Run golangci-lint (if installed) +golangci-lint run +``` + +### Generate Swagger Docs + +```bash +# Install swag CLI +go install github.com/swaggo/swag/cmd/swag@latest + +# Generate documentation +swag init -g cmd/web-cli/main.go -o docs/ +``` + +--- + +## Frontend Development + +### Running + +```bash +cd frontend + +# Start dev server with hot reload +npm run dev + +# Build for production +npm run build + +# Preview production build +npm run preview +``` + +### Testing + +```bash +cd frontend + +# Run tests +npm test + +# Run tests with coverage +npm test -- --coverage +``` + +### Linting + +```bash +cd frontend + +# Run ESLint +npm run lint + +# Fix auto-fixable issues +npm run lint -- --fix +``` + +### Dependencies + +Key frontend dependencies: + +| Package | Purpose | +|---------|---------| +| `react` | UI library | +| `react-router-dom` | Client-side routing | +| `@mui/material` | Material-UI components | +| `@emotion/react` | CSS-in-JS styling | +| `xterm` | Terminal emulator | +| `@monaco-editor/react` | Code editor for YAML/JSON tools | +| `js-yaml` | YAML parsing | + +--- + +## Testing + +### Backend Tests + +```bash +# All tests +go test ./... + +# With coverage report +go test -coverprofile=coverage.out ./... +go tool cover -html=coverage.out + +# Specific package +go test ./internal/validation/ + +# With race detection +go test -race ./... +``` + +### Frontend Tests + +```bash +cd frontend +npm test +``` + +### Integration Testing + +```bash +# Build and run +./build.sh +./web-cli & + +# Test API endpoints +curl http://localhost:7777/api/health + +# Test with authentication +curl -u admin:password http://localhost:7777/api/health +``` + +--- + +## Building + +### Development Build + +```bash +# Quick build for current platform +go build -o web-cli cmd/web-cli/main.go +``` + +### Production Build (All Platforms) + +```bash +# Build for all platforms +./build.sh all + +# Outputs: +# bin/web-cli-linux-x64 +# bin/web-cli-darwin-x64 +# bin/web-cli-darwin-arm64 +``` + +### Docker Build + +```bash +# Build Docker image +docker build -t web-cli . + +# Or using docker compose +docker compose build +``` + +### Build Script Options + +```bash +./build.sh # Build for current platform +./build.sh all # Build for all platforms +./build.sh linux # Build for Linux only +./build.sh darwin # Build for macOS only +``` + +--- + +## Contributing + +### Getting Started + +1. Fork the repository +2. Create a feature branch: `git checkout -b feature/amazing-feature` +3. Make your changes +4. Write/update tests +5. Commit: `git commit -m 'Add some amazing feature'` +6. Push: `git push origin feature/amazing-feature` +7. Open a Pull Request + +### Code Style + +- **Go**: Follow standard Go formatting (`go fmt`) +- **JavaScript/React**: Follow ESLint rules +- Write tests for new features +- Update documentation as needed + +### Commit Messages + +Use clear, descriptive commit messages: + +``` +feat: Add new feature X +fix: Fix bug in component Y +docs: Update README +refactor: Restructure module Z +test: Add tests for feature X +``` + +### Pull Request Guidelines + +- Ensure all tests pass +- Update documentation if needed +- Keep PRs focused (one feature/fix per PR) +- Provide clear description of changes + +--- + +For configuration options, see [CONFIGURATION.md](CONFIGURATION.md). +For security information, see [SECURITY.md](SECURITY.md). +For deployment instructions, see [DEPLOYMENT.md](DEPLOYMENT.md). diff --git a/docs/SECURITY.md b/docs/SECURITY.md new file mode 100644 index 0000000..785dcad --- /dev/null +++ b/docs/SECURITY.md @@ -0,0 +1,418 @@ +# Security Guide + +This document describes Web CLI's security features and best practices for secure deployment. + +## Table of Contents + +- [Authentication](#authentication) +- [TLS/HTTPS](#tlshttps) +- [SSH Host Key Verification](#ssh-host-key-verification) +- [Input Validation](#input-validation) +- [Database Encryption](#database-encryption) +- [Encryption Key Management](#encryption-key-management) +- [Password Security](#password-security) +- [SSRF Protection](#ssrf-protection) +- [Path Traversal Protection](#path-traversal-protection) +- [HTTP Security](#http-security) +- [Audit Logging](#audit-logging) +- [Error Information Leakage Prevention](#error-information-leakage-prevention) +- [Security Headers](#security-headers) +- [Production Security Checklist](#production-security-checklist) + +--- + +## Authentication + +**Important: Authentication is disabled by default for development convenience.** + +### Enable Authentication + +```bash +# Enable authentication +export AUTH_ENABLED=true + +# Option 1: HTTP Basic Authentication +export AUTH_USERNAME="admin" +export AUTH_PASSWORD="your-secure-password" + +# Option 2: API Token (Bearer) +export AUTH_API_TOKEN="your-api-token-here" +``` + +### Features + +- HTTP Basic Authentication support +- Bearer token (API token) support +- Constant-time credential comparison (prevents timing attacks) +- Supports both methods simultaneously (token takes precedence) +- **Startup validation**: Server fails fast if auth is enabled but credentials are missing + +### Usage Examples + +```bash +# Basic Auth +curl -u admin:password http://localhost:7777/api/health + +# Bearer Token +curl -H "Authorization: Bearer your-token" http://localhost:7777/api/health +``` + +### Testing Authentication + +```bash +# Should fail (401 Unauthorized) +curl http://localhost:7777/api/health + +# Should succeed with Basic Auth +curl -u admin:password http://localhost:7777/api/health + +# Should succeed with Bearer token +curl -H "Authorization: Bearer your-token" http://localhost:7777/api/health +``` + +--- + +## TLS/HTTPS + +Native TLS support for encrypted connections without requiring a reverse proxy. + +### Enable TLS + +```bash +# Using command-line flags +./web-cli -tls-cert /path/to/cert.pem -tls-key /path/to/key.pem + +# Using environment variables +WEBCLI_TLS_CERT_PATH=/path/to/cert.pem \ +WEBCLI_TLS_KEY_PATH=/path/to/key.pem \ +./web-cli + +# Enforce HTTPS when authentication is enabled +./web-cli -tls-cert cert.pem -tls-key key.pem -require-https +``` + +### Generate Self-Signed Certificate (Testing) + +```bash +openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem \ + -days 365 -nodes -subj "/CN=localhost" +``` + +### Features + +- Native Go TLS implementation +- Automatic HTTPS when certificate and key are provided +- Optional HTTPS enforcement (rejects HTTP requests) +- Works with any TLS certificate (self-signed, Let's Encrypt, etc.) + +--- + +## SSH Host Key Verification + +Proper host key verification for secure SSH connections. + +### Features + +- Verifies SSH host keys against `~/.ssh/known_hosts` +- Supports "trust on first use" (TOFU) mode for development +- Detects man-in-the-middle attacks (host key mismatch) +- Automatically saves new trusted host keys +- Thread-safe implementation + +### Configuration + +- **Strict Mode** (production): Rejects unknown hosts +- **Trust-on-First-Use** (development): Automatically trusts new hosts + +--- + +## Input Validation + +All user inputs are validated before processing to prevent injection attacks. + +### Validated Inputs + +| Input Type | Validation | +|------------|------------| +| IP addresses | IPv4/IPv6 format validation | +| Hostnames | RFC 1123 compliant | +| Port numbers | 1-65535 range | +| SSH private keys | PEM format validation | +| Unix usernames | Alphanumeric, dash, underscore | +| Command names | No null bytes or newlines | +| Vault addresses | SSRF protection | +| Vault secret paths | Path traversal protection | +| Vault secret names | Alphanumeric, dash, underscore, dot | +| Environment variable names | Unix standards | +| Script content | Size limits, no null bytes | + +--- + +## Database Encryption + +All sensitive data is encrypted using **AES-256-GCM** (military-grade encryption). + +### Encrypted Data + +- SSH private keys +- Command history (commands and output) +- Environment variable values +- Vault tokens + +### Key Generation + +Encryption key is auto-generated on first run and stored with 600 permissions. + +--- + +## Encryption Key Management + +### Generate a New Encryption Key + +```bash +# macOS/Linux +openssl rand -base64 32 + +# Or using dd and base64 +dd if=/dev/urandom bs=32 count=1 2>/dev/null | base64 + +# Output example: 7xK9mP2vQ8nL4wR6tY5uE3sA1zD0cF8bG7hJ9kM6nP4= +``` + +### Use the Generated Key + +```bash +# Option 1: Environment variable (recommended for production) +export ENCRYPTION_KEY="7xK9mP2vQ8nL4wR6tY5uE3sA1zD0cF8bG7hJ9kM6nP4=" +./web-cli + +# Option 2: Save to file (auto-generated on first run) +echo "7xK9mP2vQ8nL4wR6tY5uE3sA1zD0cF8bG7hJ9kM6nP4=" > .encryption_key +chmod 600 .encryption_key +./web-cli +``` + +### Important + +- **Backup your `.encryption_key` file** - data cannot be recovered without it +- For production, use environment variable instead of file +- System entropy is verified before key generation (Linux) + +--- + +## Password Security + +- Sudo passwords only used for command execution +- SSH passwords used for authentication fallback +- **Passwords are never stored** in command history +- Passwords cleared from memory after use +- bcrypt password hashing with cost factor 12 + +--- + +## SSRF Protection + +When using HashiCorp Vault integration, the application includes SSRF (Server-Side Request Forgery) protection. + +### Allowed Addresses + +- Public IP addresses +- Private IPs (10.x.x.x, 172.16.x.x, 192.168.x.x) for self-hosted Vault +- Localhost (127.0.0.1) for local development +- Valid hostnames + +### Blocked Addresses (Attack Vectors) + +- Link-local addresses (169.254.x.x) - used by cloud metadata services +- Unspecified addresses (0.0.0.0) +- Cloud metadata hostnames: + - `metadata.google.internal` + - `metadata.goog` + - `metadata` + - `instance-data` + +This allows you to use self-hosted Vault on private networks while preventing attacks against cloud metadata endpoints. + +--- + +## Path Traversal Protection + +All Vault secret paths are validated to prevent path traversal attacks. + +### Blocked Patterns + +- Path traversal sequences (`..`) +- Absolute paths starting with `/` +- Backslashes (`\`) +- URL-encoded characters (`%`) +- Consecutive slashes (`//`) + +### Allowed Characters + +Only alphanumeric, dash, underscore, dot, and forward slash are allowed. + +--- + +## HTTP Security + +### Configurable Timeouts + +Protection against slowloris and DoS attacks with customizable values: + +| Timeout | Default | Environment Variable | Description | +|---------|---------|---------------------|-------------| +| Read Timeout | 30s | `READ_TIMEOUT` | Time to read request headers | +| Write Timeout | 600s | `WRITE_TIMEOUT` | Time to write response | +| Idle Timeout | 60s | `IDLE_TIMEOUT` | Keep-alive connection timeout | +| Command Timeout | 300s | `COMMAND_TIMEOUT` | Command execution timeout | +| SSH Connect Timeout | 30s | `SSH_CONNECT_TIMEOUT` | SSH connection establishment | +| Vault Timeout | 30s | `VAULT_TIMEOUT` | HashiCorp Vault operations | + +### CORS Policy + +- Default: localhost only +- Production: Configure via `CORS_ALLOWED_ORIGINS` + +```bash +# Single origin +export CORS_ALLOWED_ORIGINS="https://web-cli.example.com" + +# Multiple origins (comma-separated) +export CORS_ALLOWED_ORIGINS="https://web-cli.example.com,https://admin.example.com" +``` + +--- + +## Audit Logging + +Comprehensive audit logging for security compliance and monitoring. + +### Enable Audit Logging + +```bash +export AUDIT_LOG_PATH=/var/log/web-cli/audit.log +./web-cli +``` + +### Logged Events + +- Command executions (local and remote) +- Script executions +- Terminal sessions (start/end) +- Authentication attempts + +### Log Format + +JSON Lines (JSONL) - one JSON object per line: + +```json +{ + "timestamp": "2025-01-19T10:30:00Z", + "event_type": "command_execution", + "outcome": "success", + "actor": "admin", + "source_ip": "192.168.1.100", + "target": "local", + "command": "df -h", + "user": "root", + "exit_code": 0, + "duration_ms": 150 +} +``` + +### Log Rotation + +```bash +# /etc/logrotate.d/web-cli +/var/log/web-cli/audit.log { + daily + rotate 30 + compress + delaycompress + missingok + notifempty + create 640 www-data www-data +} +``` + +--- + +## Error Information Leakage Prevention + +API error responses are sanitized to prevent information leakage: + +- Internal error details (IP addresses, paths, stack traces) are not exposed +- Validation errors are returned with safe, descriptive messages +- Generic "operation failed" messages for unexpected errors +- Sensitive configuration details are never included in responses + +--- + +## Security Headers + +The following security headers are set on all responses: + +| Header | Value | Purpose | +|--------|-------|---------| +| `X-Frame-Options` | `DENY` | Prevent clickjacking | +| `X-Content-Type-Options` | `nosniff` | Prevent MIME sniffing | +| `X-XSS-Protection` | `1; mode=block` | Enable XSS filter | +| `Referrer-Policy` | `strict-origin-when-cross-origin` | Control referrer information | + +--- + +## Production Security Checklist + +### Automatic (Built-in) + +- ✅ Authentication validated at startup (fails fast if misconfigured) +- ✅ SSH host key verification enabled +- ✅ Input validation for all user inputs +- ✅ SSRF protection for Vault addresses +- ✅ Path traversal protection for Vault paths +- ✅ Error sanitization (no internal details leaked) +- ✅ Security headers on all responses + +### Required Configuration + +- [ ] **Enable authentication**: Set `AUTH_ENABLED=true` with credentials +- [ ] **Strong credentials**: Use secure `AUTH_USERNAME` and `AUTH_PASSWORD` +- [ ] **CORS restricted**: Set `CORS_ALLOWED_ORIGINS` to your domain(s) +- [ ] **Encryption key backup**: Backup `.encryption_key` file + +### Recommended + +- [ ] **HTTPS enabled**: Use native TLS or reverse proxy +- [ ] **Audit logging enabled**: Set `AUDIT_LOG_PATH` +- [ ] **Log rotation configured**: Use logrotate for audit logs +- [ ] **Security scan**: Run `gosec ./...` or similar +- [ ] **Monitor logs**: Check for authentication failures +- [ ] **Firewall configured**: Restrict access to authorized IPs + +### Production Environment Variables + +```bash +# Authentication (REQUIRED) +AUTH_ENABLED=true +AUTH_USERNAME=admin +AUTH_PASSWORD=$(openssl rand -base64 32) + +# CORS Policy (REQUIRED) +CORS_ALLOWED_ORIGINS=https://web-cli.yourdomain.com + +# Encryption (REQUIRED) +ENCRYPTION_KEY=$(openssl rand -base64 32) + +# TLS/HTTPS (RECOMMENDED) +WEBCLI_TLS_CERT_PATH=/etc/ssl/certs/web-cli.crt +WEBCLI_TLS_KEY_PATH=/etc/ssl/private/web-cli.key +WEBCLI_REQUIRE_HTTPS=true + +# Audit Logging (RECOMMENDED) +WEBCLI_AUDIT_LOG_PATH=/var/log/web-cli/audit.log +``` + +--- + +For more configuration options, see [CONFIGURATION.md](CONFIGURATION.md). +For deployment instructions, see [DEPLOYMENT.md](DEPLOYMENT.md). diff --git a/docs/docs.go b/docs/docs.go index 294f798..ee2df02 100644 --- a/docs/docs.go +++ b/docs/docs.go @@ -42,20 +42,28 @@ const docTemplate = `{ "Bash Scripts" ], "summary": "List all bash scripts", + "parameters": [ + { + "type": "string", + "description": "Filter by group name", + "name": "group", + "in": "query" + } + ], "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { - "$ref": "#/definitions/models.BashScriptResponse" + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.BashScriptResponse" } } }, "500": { "description": "Internal Server Error", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } } } @@ -84,7 +92,7 @@ const docTemplate = `{ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/models.BashScriptCreate" + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.BashScriptCreate" } } ], @@ -92,19 +100,19 @@ const docTemplate = `{ "201": { "description": "Created", "schema": { - "$ref": "#/definitions/models.BashScriptResponse" + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.BashScriptResponse" } }, "400": { "description": "Bad Request", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } } } @@ -135,7 +143,64 @@ const docTemplate = `{ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/models.ScriptExecution" + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.ScriptExecution" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.ScriptResult" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/internal_server.ErrorResponse" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/internal_server.ErrorResponse" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/internal_server.ErrorResponse" + } + } + } + } + }, + "/bash-scripts/execute/stream": { + "post": { + "security": [ + { + "BasicAuth": [] + } + ], + "description": "Execute a stored bash script locally or remotely with real-time output streaming via SSE", + "consumes": [ + "application/json" + ], + "produces": [ + "text/event-stream" + ], + "tags": [ + "Bash Scripts" + ], + "summary": "Execute a bash script with streaming output", + "parameters": [ + { + "description": "Script execution request", + "name": "execution", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.ScriptExecution" } } ], @@ -143,25 +208,62 @@ const docTemplate = `{ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/models.ScriptResult" + "$ref": "#/definitions/internal_server.StreamMessage" } }, "400": { "description": "Bad Request", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } }, "404": { "description": "Not Found", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/internal_server.ErrorResponse" + } + } + } + } + }, + "/bash-scripts/groups": { + "get": { + "security": [ + { + "BasicAuth": [] + } + ], + "description": "Get a list of all distinct group names for bash scripts", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Bash Scripts" + ], + "summary": "List all bash script groups", + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "array", + "items": { + "type": "string" + } } }, "500": { "description": "Internal Server Error", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } } } @@ -205,19 +307,19 @@ const docTemplate = `{ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/models.BashScriptResponse" + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.BashScriptResponse" } }, "400": { "description": "Bad Request", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } }, "404": { "description": "Not Found", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } } } @@ -253,7 +355,7 @@ const docTemplate = `{ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/models.BashScriptUpdate" + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.BashScriptUpdate" } } ], @@ -261,19 +363,19 @@ const docTemplate = `{ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/models.BashScriptResponse" + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.BashScriptResponse" } }, "400": { "description": "Bad Request", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } } } @@ -311,13 +413,13 @@ const docTemplate = `{ "400": { "description": "Bad Request", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } } } @@ -356,26 +458,26 @@ const docTemplate = `{ "schema": { "type": "array", "items": { - "$ref": "#/definitions/models.ScriptPresetResponse" + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.ScriptPresetResponse" } } }, "400": { "description": "Bad Request", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } }, "404": { "description": "Not Found", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } } } @@ -406,7 +508,7 @@ const docTemplate = `{ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/models.CommandExecution" + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.CommandExecution" } } ], @@ -414,25 +516,25 @@ const docTemplate = `{ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/models.CommandResult" + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.CommandResult" } }, "400": { "description": "Bad Request", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } }, "404": { "description": "Not Found", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } } } @@ -462,6 +564,12 @@ const docTemplate = `{ "description": "Show actual values instead of masked values", "name": "show_values", "in": "query" + }, + { + "type": "string", + "description": "Filter by group name", + "name": "group", + "in": "query" } ], "responses": { @@ -470,14 +578,14 @@ const docTemplate = `{ "schema": { "type": "array", "items": { - "$ref": "#/definitions/models.EnvVariableResponse" + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.EnvVariableResponse" } } }, "500": { "description": "Internal Server Error", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } } } @@ -506,7 +614,7 @@ const docTemplate = `{ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/models.EnvVariableCreate" + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.EnvVariableCreate" } } ], @@ -514,19 +622,56 @@ const docTemplate = `{ "201": { "description": "Created", "schema": { - "$ref": "#/definitions/models.EnvVariableResponse" + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.EnvVariableResponse" } }, "400": { "description": "Bad Request", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/internal_server.ErrorResponse" + } + } + } + } + }, + "/env-variables/groups": { + "get": { + "security": [ + { + "BasicAuth": [] + } + ], + "description": "Get a list of all distinct group names for environment variables", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Environment Variables" + ], + "summary": "List all environment variable groups", + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "array", + "items": { + "type": "string" + } } }, "500": { "description": "Internal Server Error", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } } } @@ -569,19 +714,19 @@ const docTemplate = `{ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/models.EnvVariableResponse" + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.EnvVariableResponse" } }, "400": { "description": "Bad Request", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } }, "404": { "description": "Not Found", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } } } @@ -617,7 +762,7 @@ const docTemplate = `{ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/models.EnvVariableUpdate" + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.EnvVariableUpdate" } } ], @@ -625,19 +770,19 @@ const docTemplate = `{ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/models.EnvVariableResponse" + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.EnvVariableResponse" } }, "400": { "description": "Bad Request", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } } } @@ -675,13 +820,13 @@ const docTemplate = `{ "400": { "description": "Bad Request", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } } } @@ -726,14 +871,14 @@ const docTemplate = `{ "schema": { "type": "array", "items": { - "$ref": "#/definitions/models.CommandHistory" + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.CommandHistory" } } }, "500": { "description": "Internal Server Error", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } } } @@ -770,19 +915,19 @@ const docTemplate = `{ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/models.CommandHistory" + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.CommandHistory" } }, "400": { "description": "Bad Request", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } }, "404": { "description": "Not Found", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } } } @@ -806,20 +951,28 @@ const docTemplate = `{ "SSH Keys" ], "summary": "List all SSH keys", + "parameters": [ + { + "type": "string", + "description": "Filter by group name", + "name": "group", + "in": "query" + } + ], "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { - "$ref": "#/definitions/models.SSHKey" + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.SSHKey" } } }, "500": { "description": "Internal Server Error", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } } } @@ -848,7 +1001,7 @@ const docTemplate = `{ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/models.SSHKeyCreate" + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.SSHKeyCreate" } } ], @@ -856,19 +1009,56 @@ const docTemplate = `{ "201": { "description": "Created", "schema": { - "$ref": "#/definitions/models.SSHKey" + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.SSHKey" } }, "400": { "description": "Bad Request", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" + } + } + } + } + }, + "/keys/groups": { + "get": { + "security": [ + { + "BasicAuth": [] + } + ], + "description": "Get a list of all distinct group names for SSH keys", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "SSH Keys" + ], + "summary": "List all SSH key groups", + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/internal_server.ErrorResponse" } } } @@ -905,19 +1095,19 @@ const docTemplate = `{ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/models.SSHKey" + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.SSHKey" } }, "400": { "description": "Bad Request", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } }, "404": { "description": "Not Found", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } } } @@ -953,7 +1143,7 @@ const docTemplate = `{ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/models.SSHKeyUpdate" + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.SSHKeyUpdate" } } ], @@ -961,19 +1151,19 @@ const docTemplate = `{ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/models.SSHKey" + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.SSHKey" } }, "400": { "description": "Bad Request", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } } } @@ -1011,13 +1201,13 @@ const docTemplate = `{ "400": { "description": "Bad Request", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } } } @@ -1047,14 +1237,14 @@ const docTemplate = `{ "schema": { "type": "array", "items": { - "$ref": "#/definitions/models.LocalUser" + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.LocalUser" } } }, "500": { "description": "Internal Server Error", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } } } @@ -1083,7 +1273,7 @@ const docTemplate = `{ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/models.LocalUserCreate" + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.LocalUserCreate" } } ], @@ -1091,19 +1281,19 @@ const docTemplate = `{ "201": { "description": "Created", "schema": { - "$ref": "#/definitions/models.LocalUser" + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.LocalUser" } }, "400": { "description": "Bad Request", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } } } @@ -1140,19 +1330,19 @@ const docTemplate = `{ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/models.LocalUser" + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.LocalUser" } }, "400": { "description": "Bad Request", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } }, "404": { "description": "Not Found", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } } } @@ -1188,7 +1378,7 @@ const docTemplate = `{ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/models.LocalUserUpdate" + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.LocalUserUpdate" } } ], @@ -1196,19 +1386,19 @@ const docTemplate = `{ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/models.LocalUser" + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.LocalUser" } }, "400": { "description": "Bad Request", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } } } @@ -1246,13 +1436,13 @@ const docTemplate = `{ "400": { "description": "Bad Request", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } } } @@ -1282,14 +1472,14 @@ const docTemplate = `{ "schema": { "type": "array", "items": { - "$ref": "#/definitions/models.SavedCommand" + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.SavedCommand" } } }, "500": { "description": "Internal Server Error", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } } } @@ -1318,7 +1508,7 @@ const docTemplate = `{ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/models.SavedCommandCreate" + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.SavedCommandCreate" } } ], @@ -1326,19 +1516,19 @@ const docTemplate = `{ "201": { "description": "Created", "schema": { - "$ref": "#/definitions/models.SavedCommand" + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.SavedCommand" } }, "400": { "description": "Bad Request", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } } } @@ -1375,19 +1565,19 @@ const docTemplate = `{ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/models.SavedCommand" + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.SavedCommand" } }, "400": { "description": "Bad Request", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } }, "404": { "description": "Not Found", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } } } @@ -1423,7 +1613,7 @@ const docTemplate = `{ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/models.SavedCommandUpdate" + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.SavedCommandUpdate" } } ], @@ -1431,19 +1621,19 @@ const docTemplate = `{ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/models.SavedCommand" + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.SavedCommand" } }, "400": { "description": "Bad Request", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } } } @@ -1481,13 +1671,13 @@ const docTemplate = `{ "400": { "description": "Bad Request", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } } } @@ -1517,14 +1707,14 @@ const docTemplate = `{ "schema": { "type": "array", "items": { - "$ref": "#/definitions/models.ScriptPresetResponse" + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.ScriptPresetResponse" } } }, "500": { "description": "Internal Server Error", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } } } @@ -1553,7 +1743,7 @@ const docTemplate = `{ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/models.ScriptPresetCreate" + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.ScriptPresetCreate" } } ], @@ -1561,19 +1751,19 @@ const docTemplate = `{ "201": { "description": "Created", "schema": { - "$ref": "#/definitions/models.ScriptPresetResponse" + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.ScriptPresetResponse" } }, "400": { "description": "Bad Request", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } } } @@ -1610,19 +1800,19 @@ const docTemplate = `{ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/models.ScriptPresetResponse" + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.ScriptPresetResponse" } }, "400": { "description": "Bad Request", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } }, "404": { "description": "Not Found", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } } } @@ -1658,7 +1848,7 @@ const docTemplate = `{ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/models.ScriptPresetUpdate" + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.ScriptPresetUpdate" } } ], @@ -1666,19 +1856,19 @@ const docTemplate = `{ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/models.ScriptPresetResponse" + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.ScriptPresetResponse" } }, "400": { "description": "Bad Request", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } } } @@ -1716,13 +1906,13 @@ const docTemplate = `{ "400": { "description": "Bad Request", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } } } @@ -1746,20 +1936,28 @@ const docTemplate = `{ "Servers" ], "summary": "List all servers", + "parameters": [ + { + "type": "string", + "description": "Filter by group name", + "name": "group", + "in": "query" + } + ], "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { - "$ref": "#/definitions/models.Server" + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.Server" } } }, "500": { "description": "Internal Server Error", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } } } @@ -1788,7 +1986,7 @@ const docTemplate = `{ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/models.ServerCreate" + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.ServerCreate" } } ], @@ -1796,19 +1994,56 @@ const docTemplate = `{ "201": { "description": "Created", "schema": { - "$ref": "#/definitions/models.Server" + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.Server" } }, "400": { "description": "Bad Request", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/internal_server.ErrorResponse" + } + } + } + } + }, + "/servers/groups": { + "get": { + "security": [ + { + "BasicAuth": [] + } + ], + "description": "Get a list of all distinct group names for servers", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Servers" + ], + "summary": "List all server groups", + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "array", + "items": { + "type": "string" + } } }, "500": { "description": "Internal Server Error", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } } } @@ -1845,19 +2080,19 @@ const docTemplate = `{ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/models.Server" + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.Server" } }, "400": { "description": "Bad Request", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } }, "404": { "description": "Not Found", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } } } @@ -1893,7 +2128,7 @@ const docTemplate = `{ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/models.ServerUpdate" + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.ServerUpdate" } } ], @@ -1901,19 +2136,19 @@ const docTemplate = `{ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/models.Server" + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.Server" } }, "400": { "description": "Bad Request", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } } } @@ -1951,13 +2186,13 @@ const docTemplate = `{ "400": { "description": "Bad Request", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } } } @@ -1985,13 +2220,13 @@ const docTemplate = `{ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/server.CurrentUserResponse" + "$ref": "#/definitions/internal_server.CurrentUserResponse" } }, "500": { "description": "Internal Server Error", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } } } @@ -2021,81 +2256,714 @@ const docTemplate = `{ "schema": { "type": "array", "items": { - "$ref": "#/definitions/server.ShellInfo" + "$ref": "#/definitions/internal_server.ShellInfo" } } } } } - } - }, - "definitions": { - "models.BashScriptCreate": { - "type": "object", - "required": [ - "content", - "name" - ], - "properties": { - "content": { - "type": "string" - }, - "description": { - "type": "string" - }, - "filename": { - "type": "string" - }, - "name": { - "type": "string" - } - } - }, - "models.BashScriptResponse": { - "type": "object", - "properties": { - "content": { - "description": "Only included when specifically requested", - "type": "string" - }, - "created_at": { - "type": "string" - }, - "description": { - "type": "string" - }, - "filename": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "name": { - "type": "string" - }, - "updated_at": { - "type": "string" - } - } }, - "models.BashScriptUpdate": { - "type": "object", - "properties": { - "content": { - "type": "string" - }, - "description": { - "type": "string" - }, - "filename": { - "type": "string" + "/vault/bash-scripts": { + "get": { + "security": [ + { + "BasicAuth": [] + } + ], + "description": "Retrieve all bash scripts stored in Vault", + "produces": [ + "application/json" + ], + "tags": [ + "Vault" + ], + "summary": "List bash scripts from Vault", + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_vault.BashScript" + } + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/internal_server.ErrorResponse" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/internal_server.ErrorResponse" + } + } + } + }, + "post": { + "security": [ + { + "BasicAuth": [] + } + ], + "description": "Create a new bash script in HashiCorp Vault storage", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Vault" + ], + "summary": "Store bash script in Vault", + "parameters": [ + { + "description": "Bash script data", + "name": "script", + "in": "body", + "required": true, + "schema": { + "type": "object" + } + } + ], + "responses": { + "201": { + "description": "Created script info with source field", + "schema": { + "type": "object", + "additionalProperties": true + } + }, + "400": { + "description": "Invalid request or Vault not configured", + "schema": { + "type": "string" + } + }, + "500": { + "description": "Failed to store script", + "schema": { + "type": "string" + } + } + } + } + }, + "/vault/config": { + "get": { + "security": [ + { + "BasicAuth": [] + } + ], + "description": "Retrieve the current Vault configuration (token is never returned)", + "produces": [ + "application/json" + ], + "tags": [ + "Vault" + ], + "summary": "Get Vault configuration", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.VaultConfigResponse" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/internal_server.ErrorResponse" + } + } + } + }, + "post": { + "security": [ + { + "BasicAuth": [] + } + ], + "description": "Configure or update the Vault connection settings", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Vault" + ], + "summary": "Create or update Vault configuration", + "parameters": [ + { + "description": "Vault configuration", + "name": "config", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.VaultConfigCreate" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.VaultConfigResponse" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/internal_server.ErrorResponse" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/internal_server.ErrorResponse" + } + } + } + }, + "delete": { + "security": [ + { + "BasicAuth": [] + } + ], + "description": "Remove the Vault configuration", + "tags": [ + "Vault" + ], + "summary": "Delete Vault configuration", + "responses": { + "204": { + "description": "No Content" + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/internal_server.ErrorResponse" + } + } + } + } + }, + "/vault/env-variables": { + "get": { + "security": [ + { + "BasicAuth": [] + } + ], + "description": "Retrieve all environment variables stored in Vault", + "produces": [ + "application/json" + ], + "tags": [ + "Vault" + ], + "summary": "List environment variables from Vault", + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_vault.EnvVariable" + } + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/internal_server.ErrorResponse" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/internal_server.ErrorResponse" + } + } + } + }, + "post": { + "security": [ + { + "BasicAuth": [] + } + ], + "description": "Store a new environment variable in Vault", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Vault" + ], + "summary": "Create environment variable in Vault", + "parameters": [ + { + "description": "Environment Variable", + "name": "envVar", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "description": { + "type": "string" + }, + "group": { + "type": "string" + }, + "name": { + "type": "string" + }, + "value": { + "type": "string" + } + } + } + } + ], + "responses": { + "201": { + "description": "Created", + "schema": { + "type": "object", + "properties": { + "description": { + "type": "string" + }, + "group": { + "type": "string" + }, + "name": { + "type": "string" + }, + "source": { + "type": "string" + } + } + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/internal_server.ErrorResponse" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/internal_server.ErrorResponse" + } + } + } + } + }, + "/vault/servers": { + "get": { + "security": [ + { + "BasicAuth": [] + } + ], + "description": "Retrieve all server configurations stored in Vault", + "produces": [ + "application/json" + ], + "tags": [ + "Vault" + ], + "summary": "List servers from Vault", + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_vault.Server" + } + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/internal_server.ErrorResponse" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/internal_server.ErrorResponse" + } + } + } + }, + "post": { + "security": [ + { + "BasicAuth": [] + } + ], + "description": "Store a new server configuration in Vault", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Vault" + ], + "summary": "Create server in Vault", + "parameters": [ + { + "description": "Server", + "name": "server", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "group": { + "type": "string" + }, + "ip_address": { + "type": "string" + }, + "name": { + "type": "string" + }, + "port": { + "type": "integer" + }, + "username": { + "type": "string" + } + } + } + } + ], + "responses": { + "201": { + "description": "Created", + "schema": { + "type": "object", + "properties": { + "group": { + "type": "string" + }, + "ip_address": { + "type": "string" + }, + "name": { + "type": "string" + }, + "port": { + "type": "integer" + }, + "source": { + "type": "string" + }, + "username": { + "type": "string" + } + } + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/internal_server.ErrorResponse" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/internal_server.ErrorResponse" + } + } + } + } + }, + "/vault/ssh-keys": { + "get": { + "security": [ + { + "BasicAuth": [] + } + ], + "description": "Retrieve all SSH keys stored in Vault", + "produces": [ + "application/json" + ], + "tags": [ + "Vault" + ], + "summary": "List SSH keys from Vault", + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_vault.SSHKey" + } + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/internal_server.ErrorResponse" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/internal_server.ErrorResponse" + } + } + } + }, + "post": { + "security": [ + { + "BasicAuth": [] + } + ], + "description": "Store a new SSH key in Vault", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Vault" + ], + "summary": "Create SSH key in Vault", + "parameters": [ + { + "description": "SSH Key", + "name": "key", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "group": { + "type": "string" + }, + "name": { + "type": "string" + }, + "private_key": { + "type": "string" + } + } + } + } + ], + "responses": { + "201": { + "description": "Created", + "schema": { + "type": "object", + "properties": { + "created_at": { + "type": "string" + }, + "group": { + "type": "string" + }, + "name": { + "type": "string" + }, + "source": { + "type": "string" + } + } + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/internal_server.ErrorResponse" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/internal_server.ErrorResponse" + } + } + } + } + }, + "/vault/status": { + "get": { + "security": [ + { + "BasicAuth": [] + } + ], + "description": "Check the current Vault connection status", + "produces": [ + "application/json" + ], + "tags": [ + "Vault" + ], + "summary": "Get Vault connection status", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.VaultStatus" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/internal_server.ErrorResponse" + } + } + } + } + }, + "/vault/test": { + "post": { + "security": [ + { + "BasicAuth": [] + } + ], + "description": "Test the connection to Vault and initialize the secrets structure", + "produces": [ + "application/json" + ], + "tags": [ + "Vault" + ], + "summary": "Test Vault connection", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.VaultStatus" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/internal_server.ErrorResponse" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/internal_server.ErrorResponse" + } + } + } + } + } + }, + "definitions": { + "github_com_pozgo_web-cli_internal_models.BashScriptCreate": { + "type": "object", + "required": [ + "content", + "name" + ], + "properties": { + "content": { + "type": "string" + }, + "description": { + "type": "string" + }, + "filename": { + "type": "string" + }, + "group": { + "description": "Optional, defaults to \"default\"", + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "github_com_pozgo_web-cli_internal_models.BashScriptResponse": { + "type": "object", + "properties": { + "content": { + "description": "Only included when specifically requested", + "type": "string" + }, + "created_at": { + "type": "string" + }, + "description": { + "type": "string" + }, + "filename": { + "type": "string" + }, + "group": { + "description": "Group/category for organization", + "type": "string" + }, + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "source": { + "description": "\"sqlite\" or \"vault\"", + "type": "string" + }, + "updated_at": { + "type": "string" + } + } + }, + "github_com_pozgo_web-cli_internal_models.BashScriptUpdate": { + "type": "object", + "properties": { + "content": { + "type": "string" + }, + "description": { + "type": "string" + }, + "filename": { + "type": "string" + }, + "group": { + "type": "string" }, "name": { "type": "string" } } }, - "models.CommandExecution": { + "github_com_pozgo_web-cli_internal_models.CommandExecution": { "type": "object", "required": [ "command" @@ -2113,14 +2981,30 @@ const docTemplate = `{ "description": "Optional: save as template with this name", "type": "string" }, + "server_group": { + "description": "Server group for remote execution (Vault)", + "type": "string" + }, "server_id": { - "description": "Server ID for remote execution", + "description": "Server ID for remote execution (SQLite)", "type": "integer" }, + "server_name": { + "description": "Server name for remote execution (Vault)", + "type": "string" + }, + "ssh_key_group": { + "description": "SSH key group for remote execution (Vault)", + "type": "string" + }, "ssh_key_id": { - "description": "SSH key ID for remote execution", + "description": "SSH key ID for remote execution (SQLite)", "type": "integer" }, + "ssh_key_name": { + "description": "SSH key name for remote execution (Vault)", + "type": "string" + }, "ssh_password": { "description": "SSH password (for remote, if key auth fails)", "type": "string" @@ -2135,7 +3019,7 @@ const docTemplate = `{ } } }, - "models.CommandHistory": { + "github_com_pozgo_web-cli_internal_models.CommandHistory": { "type": "object", "properties": { "command": { @@ -2168,7 +3052,7 @@ const docTemplate = `{ } } }, - "models.CommandResult": { + "github_com_pozgo_web-cli_internal_models.CommandResult": { "type": "object", "properties": { "command": { @@ -2192,7 +3076,7 @@ const docTemplate = `{ } } }, - "models.EnvVariableCreate": { + "github_com_pozgo_web-cli_internal_models.EnvVariableCreate": { "type": "object", "required": [ "name", @@ -2202,6 +3086,10 @@ const docTemplate = `{ "description": { "type": "string" }, + "group": { + "description": "Optional, defaults to \"default\"", + "type": "string" + }, "name": { "type": "string" }, @@ -2210,7 +3098,7 @@ const docTemplate = `{ } } }, - "models.EnvVariableResponse": { + "github_com_pozgo_web-cli_internal_models.EnvVariableResponse": { "type": "object", "properties": { "created_at": { @@ -2219,12 +3107,20 @@ const docTemplate = `{ "description": { "type": "string" }, + "group": { + "description": "Group/category for organization", + "type": "string" + }, "id": { "type": "integer" }, "name": { "type": "string" }, + "source": { + "description": "\"sqlite\" or \"vault\"", + "type": "string" + }, "updated_at": { "type": "string" }, @@ -2234,12 +3130,15 @@ const docTemplate = `{ } } }, - "models.EnvVariableUpdate": { + "github_com_pozgo_web-cli_internal_models.EnvVariableUpdate": { "type": "object", "properties": { "description": { "type": "string" }, + "group": { + "type": "string" + }, "name": { "type": "string" }, @@ -2248,7 +3147,7 @@ const docTemplate = `{ } } }, - "models.LocalUser": { + "github_com_pozgo_web-cli_internal_models.LocalUser": { "type": "object", "properties": { "created_at": { @@ -2266,7 +3165,7 @@ const docTemplate = `{ } } }, - "models.LocalUserCreate": { + "github_com_pozgo_web-cli_internal_models.LocalUserCreate": { "type": "object", "required": [ "name" @@ -2278,7 +3177,7 @@ const docTemplate = `{ } } }, - "models.LocalUserUpdate": { + "github_com_pozgo_web-cli_internal_models.LocalUserUpdate": { "type": "object", "properties": { "name": { @@ -2287,12 +3186,16 @@ const docTemplate = `{ } } }, - "models.SSHKey": { + "github_com_pozgo_web-cli_internal_models.SSHKey": { "type": "object", "properties": { "created_at": { "type": "string" }, + "group": { + "description": "Group/category for organization", + "type": "string" + }, "id": { "type": "integer" }, @@ -2303,18 +3206,26 @@ const docTemplate = `{ "description": "Decrypted value", "type": "string" }, + "source": { + "description": "\"sqlite\" or \"vault\"", + "type": "string" + }, "updated_at": { "type": "string" } } }, - "models.SSHKeyCreate": { + "github_com_pozgo_web-cli_internal_models.SSHKeyCreate": { "type": "object", "required": [ "name", "private_key" ], "properties": { + "group": { + "description": "Optional, defaults to \"default\"", + "type": "string" + }, "name": { "type": "string" }, @@ -2323,9 +3234,12 @@ const docTemplate = `{ } } }, - "models.SSHKeyUpdate": { + "github_com_pozgo_web-cli_internal_models.SSHKeyUpdate": { "type": "object", "properties": { + "group": { + "type": "string" + }, "name": { "type": "string" }, @@ -2334,7 +3248,7 @@ const docTemplate = `{ } } }, - "models.SavedCommand": { + "github_com_pozgo_web-cli_internal_models.SavedCommand": { "type": "object", "properties": { "command": { @@ -2376,7 +3290,7 @@ const docTemplate = `{ } } }, - "models.SavedCommandCreate": { + "github_com_pozgo_web-cli_internal_models.SavedCommandCreate": { "type": "object", "required": [ "command", @@ -2410,7 +3324,7 @@ const docTemplate = `{ } } }, - "models.SavedCommandUpdate": { + "github_com_pozgo_web-cli_internal_models.SavedCommandUpdate": { "type": "object", "properties": { "command": { @@ -2436,19 +3350,30 @@ const docTemplate = `{ } } }, - "models.ScriptExecution": { + "github_com_pozgo_web-cli_internal_models.ScriptExecution": { "type": "object", - "required": [ - "script_id" - ], "properties": { + "env_var_groups": { + "description": "Groups of env vars to include (Vault, paired with EnvVarNames)", + "type": "array", + "items": { + "type": "string" + } + }, "env_var_ids": { - "description": "Specific env var IDs to include", + "description": "Specific env var IDs to include (SQLite)", "type": "array", "items": { "type": "integer" } }, + "env_var_names": { + "description": "Names of env vars to include (Vault)", + "type": "array", + "items": { + "type": "string" + } + }, "include_env_vars": { "description": "Deprecated: use EnvVarIDs instead", "type": "boolean" @@ -2457,18 +3382,42 @@ const docTemplate = `{ "description": "True if remote execution", "type": "boolean" }, + "script_group": { + "description": "Script group for execution (Vault)", + "type": "string" + }, "script_id": { - "description": "ID of the script to execute", + "description": "ID of the script to execute (SQLite)", "type": "integer" }, + "script_name": { + "description": "Name of the script to execute (Vault)", + "type": "string" + }, + "server_group": { + "description": "Server group for remote execution (Vault)", + "type": "string" + }, "server_id": { - "description": "Server ID for remote execution", + "description": "Server ID for remote execution (SQLite)", "type": "integer" }, + "server_name": { + "description": "Server name for remote execution (Vault)", + "type": "string" + }, + "ssh_key_group": { + "description": "SSH key group for remote execution (Vault)", + "type": "string" + }, "ssh_key_id": { - "description": "SSH key ID for remote execution", + "description": "SSH key ID for remote execution (SQLite)", "type": "integer" }, + "ssh_key_name": { + "description": "SSH key name for remote execution (Vault)", + "type": "string" + }, "ssh_password": { "description": "SSH password (for remote, if key auth fails)", "type": "string" @@ -2483,7 +3432,7 @@ const docTemplate = `{ } } }, - "models.ScriptPresetCreate": { + "github_com_pozgo_web-cli_internal_models.ScriptPresetCreate": { "type": "object", "required": [ "name", @@ -2519,7 +3468,7 @@ const docTemplate = `{ } } }, - "models.ScriptPresetResponse": { + "github_com_pozgo_web-cli_internal_models.ScriptPresetResponse": { "type": "object", "properties": { "created_at": { @@ -2560,7 +3509,7 @@ const docTemplate = `{ } } }, - "models.ScriptPresetUpdate": { + "github_com_pozgo_web-cli_internal_models.ScriptPresetUpdate": { "type": "object", "properties": { "description": { @@ -2592,7 +3541,7 @@ const docTemplate = `{ } } }, - "models.ScriptResult": { + "github_com_pozgo_web-cli_internal_models.ScriptResult": { "type": "object", "properties": { "env_vars_injected": { @@ -2624,12 +3573,16 @@ const docTemplate = `{ } } }, - "models.Server": { + "github_com_pozgo_web-cli_internal_models.Server": { "type": "object", "properties": { "created_at": { "type": "string" }, + "group": { + "description": "Group/category for organization", + "type": "string" + }, "id": { "type": "integer" }, @@ -2645,6 +3598,10 @@ const docTemplate = `{ "description": "SSH port (default: 22)", "type": "integer" }, + "source": { + "description": "\"sqlite\" or \"vault\"", + "type": "string" + }, "updated_at": { "type": "string" }, @@ -2654,9 +3611,13 @@ const docTemplate = `{ } } }, - "models.ServerCreate": { + "github_com_pozgo_web-cli_internal_models.ServerCreate": { "type": "object", "properties": { + "group": { + "description": "Optional, defaults to \"default\"", + "type": "string" + }, "ip_address": { "type": "string" }, @@ -2673,9 +3634,162 @@ const docTemplate = `{ } } }, - "models.ServerUpdate": { + "github_com_pozgo_web-cli_internal_models.ServerUpdate": { + "type": "object", + "properties": { + "group": { + "type": "string" + }, + "ip_address": { + "type": "string" + }, + "name": { + "type": "string" + }, + "port": { + "type": "integer" + }, + "username": { + "type": "string" + } + } + }, + "github_com_pozgo_web-cli_internal_models.VaultConfigCreate": { + "type": "object", + "properties": { + "address": { + "type": "string" + }, + "enabled": { + "type": "boolean" + }, + "mount_path": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "token": { + "type": "string" + } + } + }, + "github_com_pozgo_web-cli_internal_models.VaultConfigResponse": { + "type": "object", + "properties": { + "address": { + "type": "string" + }, + "created_at": { + "type": "string" + }, + "enabled": { + "type": "boolean" + }, + "has_token": { + "description": "Indicates if a token is configured", + "type": "boolean" + }, + "id": { + "type": "integer" + }, + "mount_path": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "updated_at": { + "type": "string" + } + } + }, + "github_com_pozgo_web-cli_internal_models.VaultStatus": { + "type": "object", + "properties": { + "address": { + "type": "string" + }, + "configured": { + "description": "Whether Vault is configured", + "type": "boolean" + }, + "connected": { + "description": "Whether connection test passed", + "type": "boolean" + }, + "enabled": { + "description": "Whether Vault is enabled", + "type": "boolean" + }, + "error": { + "type": "string" + }, + "vault_sealed": { + "type": "boolean" + } + } + }, + "github_com_pozgo_web-cli_internal_vault.BashScript": { + "type": "object", + "properties": { + "content": { + "type": "string" + }, + "description": { + "type": "string" + }, + "filename": { + "type": "string" + }, + "group": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "github_com_pozgo_web-cli_internal_vault.EnvVariable": { + "type": "object", + "properties": { + "description": { + "type": "string" + }, + "group": { + "type": "string" + }, + "name": { + "type": "string" + }, + "value": { + "type": "string" + } + } + }, + "github_com_pozgo_web-cli_internal_vault.SSHKey": { + "type": "object", + "properties": { + "created_at": { + "type": "string" + }, + "group": { + "type": "string" + }, + "name": { + "type": "string" + }, + "private_key": { + "type": "string" + } + } + }, + "github_com_pozgo_web-cli_internal_vault.Server": { "type": "object", "properties": { + "group": { + "type": "string" + }, "ip_address": { "type": "string" }, @@ -2690,7 +3804,7 @@ const docTemplate = `{ } } }, - "server.CurrentUserResponse": { + "internal_server.CurrentUserResponse": { "description": "Current system user information", "type": "object", "properties": { @@ -2716,7 +3830,7 @@ const docTemplate = `{ } } }, - "server.ErrorResponse": { + "internal_server.ErrorResponse": { "description": "Error response returned by the API", "type": "object", "properties": { @@ -2726,7 +3840,7 @@ const docTemplate = `{ } } }, - "server.ShellInfo": { + "internal_server.ShellInfo": { "description": "Information about an available shell", "type": "object", "properties": { @@ -2739,6 +3853,27 @@ const docTemplate = `{ "example": "/bin/bash" } } + }, + "internal_server.StreamMessage": { + "type": "object", + "properties": { + "data": { + "description": "output chunk or error message", + "type": "string" + }, + "result": { + "description": "final result", + "allOf": [ + { + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.ScriptResult" + } + ] + }, + "type": { + "description": "\"output\", \"result\", \"error\"", + "type": "string" + } + } } }, "securityDefinitions": { diff --git a/docs/images/admin-servers.png b/docs/images/admin-servers.png index b97f36416da5b1b06d08fc3e1f5e72390f6eb840..63a6bb5dfe18eda2e9a42329b5d5c0efd9611126 100644 GIT binary patch literal 49550 zcmd3O^+VJD_b=)jeG4KMARu6Zf`CZ3inM^lXc*m%)PM~v1O!C7I|odoOy-~0Iw?)}{B4{o}6yE?!V{3 z!#-BKfQ;-Knf&XQ8lH(8)8vV_4vB5M^IKIJwezoQq^#fGdPx5A+!N^+;n&EYzSekl zjfPxR_?}nk8(EM>+n6Ewme5VP5;a_ysHG$ z?Qf4>%=f?kZ5x34sDGvS24&+goZ_g%g}}ItN~wc;;{50Kf6~sqB)bScqF`a5r4>JD>cFGI`OR zI+u5Q_qu#t_&TGW%I?)mxqrG8ptrkxI0_vl;?IsNxAM!ZhoYbAlz8qgWGO@qrmT;m zW>=jFIIs1s-Q!~xUW>06lfAd9Q&aD*Z{7R5=7Dj8j>(~?VLd`F=6&W}g=)(xQRT`< z^|RX))PXTqrb;dQt}=;O8MS}A=X-WkzV&&k+O_d;L@!K|;Q9Tbd>u0dHFb)FFV-@} z*L`R1<$9?4rpLkRKomP(?zuhqVE1fljPMcdu*&SRIKU)BW0Nl9{S|(x=O|NAQGrtxDk2*#)I07Gob8U` zo>daJUFl6?LEv_w2)y~U=}3`*_aO!izC#b3*^Bd$YvJAUy#EOG`DpU=bC;(;<1;(u z@6k!U=f22RJayxvD_^f0{`cWf@Zuh9PDSE0)4VI%@Bz)~4E)S~J#^>zI7P_Wq~rS| zQ(-*za6N&~`UYy{-u7%GF*{ppbD~Dwr$Fd%K7eJ$4jXlzoMJU_gfmXSK0bQ;1GU5| ze*=O@U?74m0t*3`+0aVdX{OfnVOPs+&q;xcSPy0@F(U}4D}LuL*r4;55|<|(8_}Y> z3~L(cuP-Y-Gye4tX=hb=$q$`b!uW!D@z{sQ^3mee2rL;3H05D~g#6Iyy2@;1L$v6f zIM2t5Aq8;j#SP0827a4cJoq3PiNj&_5vJW1I%w3m`R+|i6A#qSdJK$rGXN= z&tY@Uu}HEIubd<3T=0pgy?=3=zK+9kNJ#XOCJi?P+Ow0xY@z*tO(of`rBTb!E6cd~ zGlP)p^4IfnYlB%J>h>SVhJL-xW0D$h@nA)k#W!;b`ODGsBt$VaYEskW%AVkTcg z0=Ls#Ezb80cCcFO$?{Z^!#_dLF}a~mA&TAibSdUY4wB}&)L9O`+@vKaODSQ*tBv<& z;7WI#X-ilrlW2wga;EaqL3Nss%`H>G(| zo$Pca1;Mv7VT;P!s)6IN&Wo*UeTp$$G~9-`!pfQF5l?(`@s2IjkC^If=p{V161@%` z#S$ZgRVpBNl%k);U7Yb;3@J8kvw?9)Jn@!1+bFH|*sf^1Bjl8-g))>RoGhwH;@@?l zhbFJL(HK2ARw{9526tE`SuC$8^iM~`p`N2%xi6JZ36Bzs)&wLx6HKds*--GMNjU`S2d4H zhw0(M!3JM%ODxSHncMaZeyrGZ%AFCcuEz_ItBaT$^3OHig0teW**i+%l90WoTMCWx zxTp9bKfzW*bK_l0RS&A|7k}2L>!jJUa zybrc#i6BvoRXV10R$vvt<&ce3LaLmM#cf-HXh7~`5P4@cUSj^hm+f$Ubd;UnwDpQ_ z`E`~g0efBW>P0FBv%e9!Awwqdu7$vR*K#lNR6W6m@te3#D|_6b%7tjQd+TX_i5(`q zdMRWn-TbASEY-&g%aq2WzqlM~epvSRQYQ3rXg`#Xe>hrNOTJaA zDf(E>eWIkp5Cd4?W4OE7^pcGVh%0?5j$T_dMKz6|%MEP;Igpjs zLlz6a12O;RX`zzww`g)9EJb>i4q?pV8V!i;`s3lQbbq;7c_X9Lr6&rclG9`m_0-bE zl1v#>JruQITl0KvC`vBJ1VylZfdD0LPmvypd=N1kbAJOi7FAC?Q_cEeo0dbDT=uJA zgUXfNeGBI^S>!J|7_FSrpfAJgkLmMn7_UBCPtsYp(2~1KU3tFbpF}9a;kbz@hc>ZY zm!mdY-r%XyvTW%F!RD+NKBt-_<>F! zIZUYj`HpYjlCa3;4-3Y30_{Gza@NJU9!)imHYY1Rl2v_{I*HLcNamxIUZMP)-?A4g zZhp&Epi9Wfz0b5ZwD{4+KSMT5Ag*igA0s@mS9IGm36m)9?QYJok}#mYrF}89jSMsy zDp3_t@WY=A{1^I?M75Awr+Z61DeR{<0|_h;EJ$fC%iVd{LNB?WC!qgOjDA`yrUlPY zO3;MptQ2%}#`HMyOKhUa|VO3gT`L;`J zxq|mnXQMf@+@Y?%eOmZ=C{oS?HgLJ?W+1nnP|R}=1zrLUTZ)xDv3t9Ue%r_=XviV< zaAREi9Ssul zEh*^m#rbN4k7VS~rX1{soRQ%=IZ%&##}V-T9>Jrq-p5$?{U5we;6#&FqS-HSi0L`A znRiCgKR0{U{PN|?v!l)6p3+3gx0(8w?QO@F>n)=xaBN3hru*iEIo{)@2{$?)GDOs? zuq$qRd?AccaO;~a%yHad^B+ik_QeP`4)T9odliwNCf0V!6 zlIXsj4ZU>Wztt{m<=G-CrDiK;g8RTGQg9^53>yhI9+e_`$IKhQOw$xAMKy*5m3-Lm zt5WhvOH1qZFnO;0weE)F9acIhbi4KolHCjRY;v=)I`0N>R_eIG+1eNDdV#xd4upz5 zcTLFWKyvlU;7zvUagY>e+9iS61Ffh14%+ zuR2ge>pTb62SAlH?@iQMSNOfXH=L)Am2{k`qojTM1H_PDt!xY0OjupN#_6Z<^Ar94 z!=ce6X(K$n&lW4V`1%;!&{l&PN>^n zjflt*$laN5Z0Y==u(d33UJ3Vq;3N2sUVx@sx7@~D@^~>!GIU9&v-lmTI=q&>v7Lz+ zC!JCYaX8NNYoD4%aR4aJYcvCn0Tcm!V*A~>su>&iof>>j1?(p>GqX!_M}M<&(XeZ@ zGnc+w8w5>F>-<@uf>`o-P&y_q-(-zshhXM@e%RF_@OPWngEzhnsdSqEh14v3z8Iy- zuV3@dno6rkf7}H}_Fa>%>!!|%%v{|Ut@W}|TL3{YzdlihADP8^L#164tQ^i!fyES+ zIw$1SOPt0$IoS(&Z#;JR!xh<=Jn6}G0LvxizIf;}HJ^|kJ1OpfWIbolTeVD_@>>qY^vx|+>$zbS=!c@@ zS$tUKh=UT}lub*9+oQ{mLKHtWOZ{@hg*uxJK_%fz&3VByRau�{(iHQNTRwLRKLb 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 z zT-35Z|3-oUN@W~BvE$uyyL&zlPfx;@Vp3reR1]y;1;CZTvMG0<8iM00Qhp1E5 zwnk~%pZX_>%wd%x4z_pvE1bOYRh~?w0P{+AnRHNzZ|w*&OKEL~*^dtFlN}QFh?&QS zcpvZusxZ~Mge#>% z%Z$#U&1tq?@=1yg-!fbvgyKXwBz`QZFmKa(c#|X2Ga~cUw#4}9_Fck~U30YCM(b}3 z_j3eG0MR9jRtVizw2gu!HZBdg6m2!@2Ew+}dWH0I4A`rai1$`>QX}vduH}F@^Ye|V zt*!mKmJmK?(R}Ffmic@3XKCx?x0=EU^_zpb0ahVxe+~8BKoJTEYZDByB_1bRSxeGR zNpbEnai?br$nIkv_}vF%qMmYwhhU`-s`*-!XUdWMXmsX@)v5!F!~5IJC3>Ak>s>6j!DJyDTN%YoS3>!2%(nO z28upwzr%5xtxb3tQyVzt#<$njdtHoe_tt-mZ(?Knw<#*{65H+4E|6%40=9}xpxXRO z7|Mk$*S&UhnFEZFtN;gh-^sO`UVn|sPOD^NwPXO=cG_N^Bf2t;d3qhFnu>sG!Ef<9 zxN%#nOJW$-+Y|!mqXvZnO)?3k2w8H+ZM}R+E-+1@ifalP1%w4FA7n0{EIOG&jp4()>(5}XKKFeou zjH(vZ1`Xb6imq>e4KcLx9&-Ti`=6lh{?9Juze^DQ_f!6R#n{;X4MzFD3+BHI=Ksxt z>8?TAgVDKG0LE JxcB6*{{gRnA>#l5 literal 106720 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�%dpdw(} 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 literal 94428 zcmeFZcUV(h(=HAOf*?f&QCd(e2nwk57Mh^arH2v_kRFiU5}Fi61XQFqk=}bJ0xC%F z9Rkt`y#*2iXY;)8^L@|vGhWy4{CUoK%>`_;c3FGYteIK&+_PS*sVGoWGEou{5m7&R zEcc9vh%Azbh?IrmEbz_T`k*rr5wVGttgPA-Sy^^9NBb96w&p}coRM}Bjfy1dbU(oD zbo>JWnM>18DDOVaPl?xiVqBaTIB4f)I4reRT+3kSpJKzB24)v^S&8Vmc@BH#Gw0Go zYRy@%RbiL21e^>HzzS3Ob3EqzPj<<_=$9@ z8dZahg)YWn%Tw%|TXytbJpM3rF#$S2Gxv21b^LB~K}$9jD=kvMH%V%6?zu_3Spp_R zR+ROT_cuMKgO8=F4*8>{oEae-ApuX-+b)4GD9j5Q+RQpy$sX4DK~cHdpGq`woVfd8 zSIw3JBOjf=^fB#A`h7)7JUH62E4_#&$ZknDAn3Z%Sj3IMRMIGS8V1fQ@*jnRF0|cW z$Jm4P$6&-UZ|PRc$^w#fJbE~VfuWa%YejxgtAI8nC-WUg(l`{aePG7%SWOhH5(Y(+#091#OQOu!Ej z(V6!_MC8EVi@=Xu3d!HCWRWRn{yrvUIXzKYL-xrN;ID?Mqq#ZE$KDKkGq}2=_N$s?xMh6KyStq&%t_Q;;`(1_hyur_U-MpP z|LYWI8;R?>%4+Pg_KxQ4f;@aYeAgu@+1c5}9nD^dK9iIG_vOI-}jL-cQSRfa&We?hq0gD z*W|gqi?hV_>!%O;uYdpQr@6b;e?JN4^zYXKUXb^+h4(%WAMbzN8@N>b^jlFiD|d5S zJvl2oKs>-RB=7SHJP`lug5R3{`;q^+RQDg3@;?yx=cWH>`u|?4V_)WsVV3ls}VZ}ct(WSi+_l$ee31n(K5J@-c^bKpZ8(+Kioi^}!-`qZH( zpNhuY5&xC|H9H>ZuIhPl`uLH6`gwrQ*M}P$oNte| zo2+qh{q^lNZY&%n3gv5K*!=ty#Cee9#M$##jE4&hOBJJe^b8FROFOr> zxAU^HT02!;8fK`Es!_FW-PYFDO`-1Lgw@B8eKQw|UuoFKqM;|)h6?+QABm!D*hmGo zVgw#rUP;?Iq_dd=chL^X^F7!&Uf-B_d5lAzj29SGzjy99+*urd!@#}zBaC?;bg~6{ z($2rN+pju)ur+JfpP^jgv9s`^y}vU?_~qv?Rk}fl&1TxQh0gfbhm;Zc!(%k^*e0|Q^X170+r5=RZ9P3JpMz%5Mcg#?ALa+Up9*!P z7>Cq;wE6T`zvDGHa;n;?C2WjU&^9KFO`=8*=)JBohqu5RQI-cbnj5W=9FvZLjiZ*_ zIt68cRE#yUP$XhfB}sf)UK@wy1RwrX1&ku9oQjdhEX|AM5@DOME-S@w(RE|WPRw=H zfq|lodp@m=bg?7WG^Z@0b13_oqoC@Sa?@l{mp1Q^I=79fZ!27jDaNBhWNkBa9!ou` z84oUUnZDfm^#}?1VYJwlh=yGb6Gd#)V^&9sO<$YlLRBRXzbGe(kJej%6rd*DhnjHT z9FDrZA^nVt$e9es3Y+1Aa>H8J>ao^D5nmzigo?V2_jHE{8^;NI>^C9JJflW+o>&?cX>ozw^ z?Q>j?R!h6%WQH&WEwfVB=y9$eK* z7tlPTC-hAR3LmtsezDZ(S<`!#n(5>AHLp8D&uzUNGy!bxm* zF#({XuTP&ot=SfbOji2qlKr%nyfTD)Ir}5_>7%T!A_V_)_irH=Aailh;o#QhU|KiY z&;5dwEhlTJg+Zir* z1>l!vWY@km^)M$6H^6c0xEXk=;r3<1>Lsc!MO@MZolkGLBd4t)KtlGjH$ytR?ebvL zP0w=Lz}_*7Taf6W)?@@Wn;Di*Btj!yLhBFbGtktWTe*Sua|X2D<>swd>k7ARoC|r9 zCvtHX5k7U14vND8k%4Js*mkVrUzB z{9;gCWmvOWFFz-TYm%!&fuK9_i=pCNg)gT^8!)_b(1Ej>QL88q-%^U1zI;dLyb#$> zprihCJk*g4MGgC7Hax;%vJrVT->oI(_8ArSUJuf5TfZu%jZ_F@nqR=J@!xlxdn{C# zk@187*~kf}gEnU#2y|S-5a9EUO=2u>;G5qW@`>kzk5z^T7|U(J@cV`*F@LbH`Bbmk ze+3Q06p21NI8BFrteu9Zx0R^@;I0t<~OMCV%AkEdP3Tj$%>{#p=7#Lum zu!@8uE5G$SDXSZuLMZ3?yWR^~57mdV;#%847F`Lk+jHKoS34=RjD$2?B5V2Oc<$bH zHowb1rhSuj%6&F04{WTO_D0JWlJ-{Mq8{x?f8e%q+I#$idM;87N93Ndq@hD#0|;@D zYQ^tZbx6K_=sUuzG5XeWXQvFjCZx4w$43+%R(QBOWsYUU)!Dy z2g9;S<^T_-BkEeZ5BRW}(YmgrR88o$5}qDk;xh(@vzzxnuJYw%-s#qH>ZJ~C=H-nCiRmHbnF;C~zsYTI99?o47 ziqHx$Z03lHI+MZdFvf6uBK=y4OgG?aM*$03B1tkjd#L{X!);a9Qf~<}q(Rzy20GO^ z{-2%O>35H|OD(!<==4+{4YXQ=-&6s?15CK4;hsA>zw&+4gjIjWXk!5R8sK|jLJ)=2 zqA|cbPukS@IH%#KL9E=<7e)i6J zNTk59R&ZXhLyoXj=%C=lX#`c;4D*aPz-#XyH8rAM0l`#^JU6#(*9-Ijo!;#cz#k~; z6nvJror7&K9Hd|2k{goUwYIT|XO&O;z;NB><4fl+Me@YRlVe;3puYV9hu$N3?-`i| zZOiP&D+I@r!U(-p8 zVi?J^t~sYsZV8XlMDzV&9@H2~b<1iP=OqhQ)Ulh{uI9Z{j(zZ*EdA-vjZCXo>)1W? zJ&5%$#Qvz(I2XT8*n8(|u!AZO503(x(k55v`|EXe$d!!g z+t-^@Q&W$km6lpxwO%_vb^Q;Euu*zWPELnz<4{H4yP^KJ{tmVT=PIxW^Rp*gL8Fn0 zAwR{eueZ#}^icodO!jxc^5|oiI4DZWL2@gxG z=y{{~bi+w?YpkxytVpcTh^$`2^{&dIA%DuiUU`a}Nn67MLiiE87zx>^$X$g_Ek8e5 zg<7KO;^N-@0-xdaNt>mQ8i^+(wE1SOS>GC%R@TSDxT9AOx?I);ic8+*VElhBB`0dlRU{_m>bN<#s#m*trW9U6c%62Uz{ZDLH^Sl?s;x4<@h z?Y3tsk;l55k@I2+F0^tLGGDDCRw!>%7NL(16*b(&B!`(P|E{HKih-!A>?Y)8aj5;cxj~ zdwt8_w%h{VFrs_5UUI2ch}3UEN(a*H_Ttxsxu7H`NF6?7Mppu>_-uT5CcNRf$Kg-p z*_>H%o5RwfTGdF_@xw>YeDmOUZsZGBcdu1!ud0jrI7fSd-RDT-52rEt1q&)glcJ2j zx*+>+(YgAmVJ8N{#l!idNaq+YyS2I(h3->(E+;=|S0`pzrC-0j>DN5*B~6*~sf%Wk z#6{Bn;DF7FiLlQ!g=&(xYl{w^C!g4TH!cm78m*C761E!2kE zrCiYK&`DYi)y*oCR-qW+B7atTCvetl%~P#Jb}!uGY-+_@)r}J_-NIft@wDJHh(NUF zr+W?v)U>11a4s2UAtZCr{_0=Jq+`6qC>%k~;CqQb2Nf;+BXi>QA?c$fbtysLznYlZ z&C?!(8MVnzsv;Y>4yWT+D4^mEi{slDrAI^WP=ToY+Zwc?P#e<>o}!1r739P_o|Uh$ zsTYvnrBn1kq{#(jI4zOaO}~yScKV0k%cHTgS!W#wM@@Ok8Xzyn$VMT8u2`AjOnm&w zMYGRgFuBdonFv@~ruekH1a3{=E5F{Uootq=GjFKRLx6vPoWrAibuKAP+TCXiZ_wb* z#kmn_5DH1HCUGnOOdRljMbRc{MG-V|lsW}S=bC;A)~C8h$Hd)cF+H+<9E=T^tb;69 z3{$LrSH*`>-({Znx9RMl^~WaKpdJs1Cee{%u@8(fHI+(>xfx##(^{BQGIjCu)r<`UWP~tM<=JQ-k@-UfQxM4+}BANzd)BHpEuw4T1xc&7~-j3=k2k{?@t zNnBFVD@!J@;wm*7QnB8YpBdT9M4fk$)tc!rVZBbXLFOhO|9ki8qWi8lDI&N7dVe&m z29HZ`hRZxh!Hlwt-cS2^&19^3_j_>DX~&)`AL>%1<+w}X?-{tuWuZRc6ER+(voW=< zbuvNOb?vA~d`*8|%-c85g$FABB;+my)9(Q}-9sQ2k1>o`A7UM3n8F{%3vNV48?rtR zb6?AGyv!t$2SVipM3%Q39gs8MH~Ew}QreioRVvnl2NSYdL`*k{lNC=Ev z*0#4*VoOD1=AjJixmI6RySk?=ch2B6+hof_H^?{wn%9hE1NJE8ttvCKVZ|i&;F8Mp zojwG{-W?V6Hu0CWMDEA$->Tb{(^463;VvUKjjI|;p-DNY6{z|ruUSJlrqgm5G}u;1MCqAfH?V&yCe&tn>S3ho3=xKUVKrySZ) zcTPqnY(k4u;X0-RRn=Q8Fg+jgc9WIQUAK>Ox=alF!f#*5;~zYkol#8k9L3*PvE4B9g!0HqXYgSZRBl6Io}C_rK8U8Is7B<;It#nup+Ghb`A(ch@XvC3h72n-5gTTrwEm zGVb0vzuGMbR-B>WKM=QJ%+jI^?S94#wN}TITcCI>-sXkY#ik;Imb&VdDqrE-I{z}U@|JhYa z^|X05O*R=?95>*@2aP3}#fwzaS@<95;00yQI589CqI4Xef6hYwqlu=B6p-DD|V=cEy6g5npXypL0HjB#n@JbvmgjO{6xr2na26B&G zez0&TfE-7EncQT1SUSWAw)l>8ICsAQ8l^+X)!e0;0|0*WrCv)tNe!Ch`^14CowOUK z{l_~uj=f69DhrEVSMj)W8d~tL@ftYk;s!#dKVf^;XDem^ zHMr+GV^cQd;Pq~P)&HwRmT9D8>8CEmcKTy^G$?aI-7-V$#cjjT9+*ccfrz2!34n(s zlKzCfC*%KIcAwKOB8OgXJ5GsEya*5z5&(9rO9YJXzq()tSYTTy@w-1H za47!Mg;P2GM+*Ou!r%7b{}EmA^S5>Lom~w2%8S^d0?W#u3xE{%r%q9LBJu=>6x#bi~Hi@=<cR)mO12Ja%-8*%H}K=R z#4fk~U@WQBl*~m^YDlj;_F-nb%-qqDH^8c?Y+f78)zOY*VDF9>;_VFj5&u%RZW)EhCr-mTf!>=Uefr}K#%7<6`(iNYeANc*PL;pm#r8EH}&(-8yOUlpW{^RY{&I2WKh zenCNJaZ7387ro*n;WdwJxNcwGCYbi}lk#=EJaLxwvReM+xl6aI*0e%((q1xLKTThE zYJBwu^uu)x>2q?-SEsNBR1e}a_Kk{;*4NXE<(^Ez zA71E(tjDhihhMqhbe5LQHkub&@zA2HN(U*9g*>ag}G&_KA)g_D1 z&&_q3f5KywS0v^JQ_xXX%B(%>IfBYkPrG=_Gb(ww=l>PcxAhCyx{1kd-|*M(NGoA=wn^X`lJ(Xtj?o! zx!zxOkTOZoE)IHgD~At4n^Nn#26>+3^AMQU!xqXu`=b^WE@*9JD}51iyNw$LNiDag z{($yy<*?EqT{Ms@ivUswcw zE8HjHfz(h9(*^vg6$(QPIxCC=cE~bZd^_ZjNQ5b_D_*FZY>IW#$Ey;EYEkP`^=MRF zfuA`2UEJlhT$zPr{Hn!kbrhn0DYszUsas-^t?mkSM0r7ju$p_JO=Lkf7<*lc_Keb? zGdSx;FjfNsiL+){AQaq9WD;>iZd@wLgcYdgNsfpCv;n@c0~LRn@<@glu4#>)IzTJF zm1x?R74YIyA{)Ih>*Z+*;c;xFnHT9bGL&9&d=x0rOA8wB^Onj}FIWkeSI8X*lzBo{ zVa-*WDy2D-_HGZb9o2nTDRo=Im@UG=$5m9ZT08it?w?(IYJC1ffCuD;U>eLb zUD9P5&GYp%M+Yy5p@xiM zJSSal4W^=?sE=w@xOmjjkFW(5TYAq@hZz|RnQxa4NB&+;idi zqVPxB>PrvDw&Xb+wQ!idVQ6Kdm|IQXg%wp7mvVG+8|)xsvo?2JmR91U@GB+ns}xZe zx0DwP(J4LJ0*UjVHw6vGWTi_AU$0eCAy?|ObRfej(hciWgAaxT1`(Q<^pw$o8^oRc zt@9i34KGi0TwCnXJg?7_2}Z8?>x!}1nzkCDBSun$7{QhLI@Fi$@R-_bf{lK&Gfto# z0EQohF})KE3~C5GV*&0)V)2#`Kl7@BBB(-PG>@TU>I-)x#SMnHr;MLFI_gqPF!XSt z8?lRf(p2(!i85u56nyjXXLPwaWTssHdZu+w=c=OoQYyl5bS{6aqhW2NxEV>kqQe*~ zABFZjWv1K*AIT4k9i>Yv;s=+^$+jpv(v%l-BT$t~2>z#|-Tf|Voy(eQ0DZPVvJ^Vh zSHCbkLkRXxfs=eJwM=HTAt$+XTgBNgjqe?c$omJrTI_kxNSVxYE>bfo=c(Nv)68iS z3KO);zEfvV{5+7`u&2)xlF|EpIZhsh&5%62P>e7-&@$)a|D~;b^HLvKZbCj zv~hqrdTZ}yO&vhXyUz{j7CwrQoivp+Q?;e@Ohez64ZAyh$i0b41K@!zLhQnn0Kjds zzC!ihKI#i_J`A zF;}q~6q*dv()rQIYm1h}A7PL8w&&Y<=63tDjTk(!MUZr1QKsvshCAC8Wt&8Tb58S$ z&u8iAk==Bzrys~+bJdS)(=Homk}mX_PJx2G&xdi*qHZG+H*@`+_LP-5el+7~3R}Dg zS>Amry6cswJO%sI$V|_#iT0GMeS@i5S61TvEhN6&o8Xrj5(@jKwK)ON&Tz3wmI&odH;HSyDvYEADT|j|BRo7K3E}{ zYrKF*G3nkv$`Cr5(3%jhpfMqvt7yBX31`QV<{0oE%e$TK*^MjrpLi449 z=u7ap>zunSfn>p44Uh~gfX=8$A|398?yo{P^fFbGVSwL!YI~V2dj<6QlWxpHXT&wx zzPlzBr2I|7ECZDa^QUB2An>{^s4hY|$T75Jzor4E%qoAkV(4bxUq6HV%cP<1Ua?;u zvAcRW*|&d}5Qp(Gu*z52H_jm=CadC*fBQIZYvbg2<27b^D(i032UW@C%iO*+!L3ZJ z=y*2H%$mylu*WpRZF}R}o+l(ZEvskD0*eY8usPYEoGRkhsi8QCxjH1bFd-k|Xz=?O zr`)EP!@T-1$0DY{E>7vu97OFp-xj6q12DZ4-CIYOdeidD%J_S)N=&Py8NhAsv3GTM z3k{;vT^hc=I(O-!m{t$!nXfqF=-^w8;oid0;m&KrU}V+fjyXc?b*Uc!TjQbpWIgQ{ zBDaN(*w-I~9j2vz!4>T_!-eYB^YlvJYwJ{#qO|iN<}<-thlj^n?R&;x$Rd^HjVk-{ z^73Q5Qk_9&9$sF1L1d`~i>Nbav7$s(aaNY_eO9=Jnwqf>uF}WmG|0C-IS4W*riVw0U_pk-JV0mC;1%tm-`#2)MKgn!%t>4BG7=KTHshuxbw-W>wM__({ z_Bn7)d}7to)YJuh3>8+>%MBpRFUTqmN*N&$^%C2y955ZvgQPY_7BFH0AoW}2G>eq-!@6S<2nla+#=UovrJT9$AgQ4=cBN&BXnAUq>u8g)HZ)FmfZ zAHKWPD~F$RW%+EFy8 z&T_Oc!8zM=I)l*i5(w%jKDCJ4%lA}!wOOLdbQ`>@^$i=7X(I(p0mfj4dV%7nyD!_x zshP}xu*?Ar`yq6~X{*ipLT0Y$>0;fm3w)#DCAJ&QcfY-+35yXf=>>+Gt}FAGx)XuXK(S*iaz5*rk2dF z(`6X2uF!?U;eAss)Bt&yTF6@5N}5p>s0J89;KorkyiEL9;W3~Z#UL566OYo>($aFi z-%n`OmdGB#c(jNPODqDp`blM;%bE+6Z(1=yP@WaL2yug0crLv&D|Ec@{rh*IHsork zO$zS=XXsL9YHDLxNQ1{t1~V&4miJO-*zbnZOb)P{933pA1Y~f!v|CC#l|#~Sn9-jg z$*UItz>(r1xio>5;3)^NCKDKCOdV{O=?{-+4FOJ&j}f6Du<|+WaE}DA`l(%XNgF04 zno~$q{?ueNbx8k?4E*&-fbK07G9gjOTrdBJK0de(lzd%yLF50sfc{#SJF5bi=(@+` zlE5GO7;ynO;VqvN-S5`(uSceM0rhNd-DvqjLJ5>p0_IzQ^=R=bHsGH)z(0F4so_gk z?PVn7NnjBFy5|4KNWN;F+^Olc`9mMsIe_@%s>uTTpTvxz2T+#(sKWmhsz5ebI=(B~ zPjYy8I8^Iqj|LF34BE~uLNlmFDg`hkD=RCjfTu7la&wJU1Qey(S)g{wfS#R^fx)GB zYV;m~i6JFON=Zqn1O^sZ*B*EMAX}1exgobM&&aKBI7l%EKm=|Fb#-;$ygH4UXnpJ* zz?-Y-nq@vG%ZWN+u?hi8aOfzp9SLfMmuW|B(SWZO*X?7+GXur9=KkDRHX^>G?IqY|z0 z2ey0!V3{ZaDznLUlZ|@`$%alU#e#AU)6u_>H_nj~*?O!nei-?4M(2~z)tP4eh2#27 z%o!x;2=S$cw+b95$$NmG#sr|kGuj-pSx%2R2H}k;+GE5)_t|w?Nicp1=L4$9&yZ$1&P0v*7o zF^xVs+aCWOu1$}g8($Z%B?o)6ZF{ty9$cK>kjCJ=rhVKz9R5N79cLg zR4Gm!U!n<@(@yDd)>ymu&6)*?XgDGzvjs_Fku325&zd5Iz9MEfB@r+(nqePgSzc+cD+@R5dwC?MKeUDZaagXiA%pI(Odg!5 zu@1wme=o_c_rg>Fb#ielY?Gl@pmD0`zh*&gkO`B(`8)MV7|3CCkN}nw2^@MhIQZ*Y# zq}PIr{ji>!Jl|k#QES^GyyYx4b7mpOVt1= z-kXgt>U--q8_7Xcho|+H)NJCy#VU4o`KJ&(4V$}Up@qhqPHzEjypud zFm`$^n6z}sa`Vxit%tS)1CLyvw^+EY^;t1C9hOdDz9%1_KERr9-EL?>}1U|6D^2c;E?W#bhB;W=azup zR%%!4ZtNGhg{h1rWeCH;DUMBl%++dG<&fG5RBV#{oKhoREw@p=hTO=7W>^IVin*;j zhhi}s8%?dJ*`>^6g!L)1W|G!q7UF$EbiYdo|3dUvm zx7_?X8oqfu&#u&(G@oUB&#jd7(Bd5cYVe!| zp2Y`&UgY#1!U5T*Y8Oat@(0&0(%PMS&B2Ut#ju?iHM(J8!`xRFVIp3Ovu zC#h_FICs*O3GQt>-lEO&cBr$xo%XmCe|85wQKLP-@3Xj|C02o-W%p)F&}{)J6lT8z zC2oX+reHlGj?7@MYUZm3@b$;n)pnxV2NaNrK6YdF8WiGdshM`Vhf28sWm29j?E_Wl z*^%C9gMnm##+R3(3a#~?iJ7c->R(&*-188le`}`g5juoj3}=Mz;llwNzou7Eq;oQg zl+WjC)j;Ov=1#V%b`F=>Gi`a{u`b})xzDkbIR0na%7tUvGa2%n&^q^CJSU%a|ARdp z;;eURk==*}BbU2@z~Xx|_Y?Q({!M1*yJSBo?=Yz3X!?UQWb9cL(41cfENzr?4T3Rm z8mv#O0iR!EwT$P*;CgL#kLcfW&rOzEgfn}rM%#SLue+rjHz&`5jyo-W4_ncy%CSkw z=+PtIS{*G_9@hP|;sfM1N)Lg`LfhWYj|82U)G7;5NTb1~{^L4)uKu+Hh5m-X;bCzk z2x%}Z%MtDZ%F0eY&B{U9EGIXy$80+-JB0|SsD&Z$o_nnKpT82L4Q$O`w+NFOe!Q@R zU&S!P_gemPfA$wQ*?M)nHzTEX8#enVK&PK0Abts0;!dXZmfSr2x+uHr)Tp|17*XF% zZr^?CXDI&V|D`~4GYgq%g^0u@Z{^%0+0iBTgPND4JmmAYR@SG^AzZR4=gGW5Vi zMa{HA=f<$|tBm*spK%4G(XQ4wH7B#xhs)xy#c*%CXq9!R+NXJo84VID&k;*U_N0DA zSg_~V^IDhuzNo4!ihZZW_-VbpaOM@8$!#xb%MA4{4AaWw658H1SvXu1H!ON8@X`t$ zx?D&jQ)jmEVE7g7r7Mz%U3a@!Z95}@z~Gfi|CQb}h1wEQ1b>PAE$-dDo7AG7h@AO6 z{E|T#ZP=TkVrMqdf|ZSx+ny{wbxXjoiF%#Ry8GG{{gfY+Gw*yj_mCj>VappGyyYIBy4c5u?U`fQcdB6a+T`J2fnh0W;BnBJWtf zFn9=qqeRknhjtB@4<8STdIH=xoK9uwGziQJH~07;HSk?^HXxkz2u}x}Kb}7QU^uYV z)0v0f(>s3MP$}{^2rRI+(^EhLA~z3BI`-KWG*=u(9j9~HuJmn?-{jm5aKI?_J$}5_8jdtP zz$2B%HmYUE*P41+UwdR?>`FwWS?88%C2aOw1YFmrhXB%kz_hOUU3yJb$d!*p6f4(q z_nih~o3&j8vjT9PS>4~dN;c&=WVC+Bq+il3)iq+O_E_k+DkQ4gKc!|)a^&Trb?u9M z88$=o8{$hbN!QkFOKp)FhhlkR(^Ik-%1aDvD?V2&;UHgYFybViRgpubJbynGQazT5 zU9Hp+IUnY)y-behR2s6hi252berDf0xjxNkK2yyg4VKnPegsjdU@}1~AQXnfRJi4a zER9(;%3ldQ(@STsd%Y3r69!9$iPj+8AsgYWVhi%;a@lsOUd|dEavq^FCUWV21UP?z8ZaQZcKxtdM|~vZk8xVq zYiu=@h$s+tUz+$jJ>zMfcAJbgTmN~wwAJeX=9AT?l#0AG$pKPx9v-&wsDZ>OcfHn&>fArvo7uR{bs;g$MIZngFwc=hnWux3dy8r8Y9{ISOl0V2tE8t-v*i5k8@fs|@Sc=B3(GAIcHUu%7x)8Lz>j>vcCN&)T(kLDu(Du1x!j*wYnlryp}mXWk45Y)rp^YTa0pH* z?Z-KytpML&N^6IsaL;Jx*_uMTx5j3HO-}IkVQ(#E1jDx^06WWHz|27LK<-?Am{t{s zq1@MUlo^IXiIiga8YgXXX7jdh0_oP~WBQLavCsnbotb?An5&hV;I&^v(Ac;Cp2V<3 z0?RyHr{~1w87aloPP`I|W`z}11F>49wXb|x%2qOSX%V8X#;CV5Q07yA;+hy7;IeQd zKkdPls7%^hLpnaYJ(5u|YKp_ipqkosX-~XAod>qLyK0u3Zy$||Y-JKy)vwtZd~97F z7q4@1+(xt*(UY0WkU1H$SV~?wQWl(4d~G&^{Mz;>W4sq+u>2cVFJ{QY#<@tI3MB5{ zBVnt`A(V`)dNb5#{9p-ysaEe80SPUt5C&)LT6u%~8Jkxn@*lXAG_$D!5s=$; zVAl3-RTuFv6$!_=5avKEKnkcS(n24aF4ym8J|M^TVoP6iIyR>JYj#qBx(h**4cwV7 zN&-G_9elj+EdopEYV`p~H?NLvVTKF8zb=Od16}SRe7T;)lB^e^kj}9??;F>^PEonN z?I`qSd;{8Emb_WEkRCVG3T5S}X=t(%xQBuF?bl3kS)_stec;O}I&iCLec_({ajd!L zphSk3@=PTg(Q?4P!%3N;4aUhGz81ZV!-==hA~!dXxT(nlzVw~9`0BMoht z6lYDxEvHQd5}L#?=gchEqJ#s=<`+NwWUC0zau~%+_ z-#I4_3Xd!K`pyTRJvcPs=w*ApsZL*qS5N(<&v+4ww69b~p4f|Cs(Xb&T}1<`&DN0- zT$1hVzhC%O{aUX76XoFWs|Zxz7Q+}9yXGNDRP3fQP(FXd+N`Ll*}-_E@AzoHch=@x zvHZ2@=;&JZXMQ>ILfi%eA^K1a-EnUB1iH5ftsUG}A?$@ELPs??JbtB~{IJA%{N8+1w9yMJd3E7kL9l0r~Rr?O<%9Gxe0sc#orHvyyF5aq}xDnYR@R^bI&m?YI}AWi2ILB7ctiXfVr+ ztnD~~{ydlMd7-eoG(yM%5=pXDN@)gq8*qaav&0pZlQRk%ctOZIs&Y{`Cpwp1)8zA0 zX3q12k9EniC=D6-FEcXMI$nlkAP#2_B+b!UX>Xd%MFwceP?XJ>4b;Yp2sfYhPuj!} z1&UTy*>q(2Un{AlxP&l+84DUs@KEumB z<_NA0*rEMx;p42!&U+<$f!x^D{kCn)I0;kla=bqa*}LB13Z4zEo)*dg_11DX7zA#o zafb}tq=xH32tcask$$e2eQKZ-QTeUZZu`dKK`#QgT(OTT1i_Wd;nK<1`_G(c3LP5J zm3%KgVKUDvA!Q=VW#{uWLWm9?1{TUDeB!RsG&BkOqU8~|glAZHOXyZj3t>2KBUfnO zfSl1uEJP?UbgWD~@IV9x2Cg4(wa{SNF|s?(63+LWc@T($^7Ng4&xZ6dA9s%$Ty_3< zWrfct6lxKSI0*FFzym0g#Rp$ZNW(86==_WcOkVhR(An(6CI>wYI#bhE!{YFV)`JCHVXN@pL@i@{d5P)3PSsFFRo(9DLV9Ajj?k%}}*or!H%(jW~ zMFt;j5FcZtCQdNEC;H$2iH`yB-Y;X4-_uvEBB$`)#LcyVOTgA0nT`t!T}`Nu^9xrU zwSNov{(__!FnE&ZF?~c5SzHh4F!$-X-%5bl-+Vq^6%-7djePp9* zEm~sl%{ z;-0 z`&1;Z$zONlvVg7M6@Skz)E!Yucqh&O#=|WwEsOj~U{RzLgv7#fF{`k!JGFF1vqr|( ztcY9F$u^l*@`P5zReloZT+x8>xm2FsHyE?MgUJdQ*Dbfgs)|IOsg`TNSVqw2keHQO|$1*!k* zwQi))UOM?u=6jC7#PWmPNtqrwac;kq(tq_*O2VTbS+y9y1F7Yy;qWPfN#7oIzoU1s zR#(D04k&sxP?Ma18;*HMIITiVDtZ@4$eM@>{;Ay&;HimV3h!Hl{4)jmkLNi9WiZvv z&bEJQpKAbAZ5?XbMfdxx{cB^Ir6S;j;N_7&wYS0ng`PnENVxW!kpGpy=rI9Kpy@CE zQ+ovNG)d+YCL&8f=BJ$k7zO~{E5r0p?d%vJ?d^2JH?iEEGlUkYe^~hJC-u~Cr^R(V(k?l};D^%Raq{nD;0NR3!-(-h zmP58CkM1rZbf^rf-P>G!wzPFXLHI>qz=%6dUw5SZT|Immdnn9E%nBQA6iI4Sosm6s zmde0<5xDk=z;Kz90lCIpgHJz=Clr!?A7g^i}acjSbY223$QDYJq-?T?|nF1R`bjkm%;7gWQqdj#7kBYs^90t*Ed*N z8Dc+IDhE_qd|rzkU?66BL~j4i^{eLW85xNQ&HOH6{@53HTefF%mk%H|>^Ak<{eIWK z$QSIFfSDGn*41lDfBEtlu}|OU^0jBCXs({H!Mf?BOGLZO3`PQ&Jz`( zym^|;11ewyJ$IMBbp!j$&5@`g>q%x$DaSlgLv_F=yo}piSz4U=pf%j-wy^z~s<=*r zgKQUo%ye-F;+YoN34x|s*(js4tu&p>vXQ*?yYH!4MF+Z)By5u5`+Ck%Z&h-^Ondps zK;~!^sE^T?Xy~$;X$tI;<<1oC)^=;6EWXeaef2o>l?!_4dj{0`e-e~hKYp$EqINxA zV&i7L--V4jui`NxCRC`mcX&zAu}KL%SgYFR67w3cP^XnaG5X=-IY5=q{&qWWt*SY?R zr7v#{rIj(rLn_x$g3n+X)xwlzeHhH(5oZsVgHN0?~IBnYubgjk)&h^5(N>E3`&k7IY|;E zM*+#1CN~VCWF$)#1j!&dgGvyPCWGYMK$D@#;hy##XU3U%zx(g5`{P@^7Tq5EoZh=? zSMAzWPgU_1tC~y@oQzhzsOgIyAWjMCYBR3ooH-Zg^IY;wsjzh$EbpWFZqey(R~FBC z*^)5U_a;qV_=Vj*L2a6&Dn;ZZ>B;NF$$+*FonlLp)kaI4vML3 z5OVA9=9^VmE3zkXqhmR=x@e-r?Y;`FJ3>2Ml++xT9Y5j4SfrlL$zHIA`{nTr>1fx+ zyC6OBDoXA9c3a(+*wMU-uz?AdR=FkjK;-ZUfT2XFT=XXMT4MuwWg9Q(3s=gzr9X_8 zUGn;f`lu?uzcW~cil+r<+p$Q;*wY>f`|mEaR~xs1wCxvF{ZC^JTKq&eIou2Z`1RH~ zhhd`?DtqPS%a>nHg`&!yc_tglTin;Y{`k&0fNMVAs4N9ynQrJcAk*N(wYTe!SP!(D ztRvQGc+BOxwcO54KEJG^MXI_L-&&D9D?sG=7VuRa=Bt$#Xcxa72eOdd8RZ5eXvUf{ zotX-Pik+!Wi5_*T$;Y}XXSY=~M`j6qzwh+!Ba2YFpQa3>mak=6o`{>_MDE9rgWq39 zWnYF<@^hG!AaWMFB;n3LRqZd#4#kBwMVE+1x2xQOjLoCj3DNm6%7-uFtj$~2-EGXv z`{aH5MUc-r2Sn#n6q>B4AI>s0jn&_tR{a$+QlBlcnWpDnyqEgz*>2_LNho#&trFY5Ly2Z;`A|qRp3Lsk$vMKsV%Kr<7Us>u%d7hl zLLAgW9ii7BTwLkqKNWK`PSHvieF4-SDfz7>_+ThgIWz^$u~YQ_YY)}N7?I@zJ7 z)Tr7wWmM;+=slln@7u`t(|$ zlGp=ZUF^C(VCOnhd-MAkFINPaMc4~HHQO<|?|-pI$=B#pACb(%+2}pP(4P-%4QbuU z4Z<4Mm=7_sPg|9>R3!J$t;{*I`jyc$17(9v);__2ysu=xk0TF2ULyrs91^}~n>7aG z$t9dPDM-gQ$GPH=nf%_6J|p1!IuS3PqUB#u1A+SQTMynHujOU9XPM|dG7k>JAzuDq ztes_9kX!#1#}sg6B=cJ4>b7fcJ?b2F!{!fu@5Pn%$$XZi2q7!ka#-ks&u_O67r**W zk{gn8dirUfbG+X~>T`twgdpO%svGBrmMF1Pt9J<%e8U&nY8wCw+z}sVs?s{v7s%Ck z?Yr(bT&I*FCdv(S$Q#5*q0)P`qc6HyOKTCpj&qW6IFxbuU`+?7_94iC115T;uZ~uV zDDc~!Z4oaQzshAl`prn&!bsEM3;?paxkcVO4oTSxKAQ37B-ANvan{z5D6xK6>@wGi zew6P2iwHxv?m4dY5&{J+Y=c6g+~!MV7|#fRNZhS2GdBZQxFrK7`ky%5E~m7|(LAy< zG?Q*;WjeISD}A%q1R5`lhi|rO(*l~w$XU|SwO!+^rrxpMXT_9tb!bcl z6S@V>9WZF(zO2qQx7wjq*z7nM+_moQ#x+rAyY$0CVKq=)wt+C; z?mM3b!pi)^BRLE=|C1ggU8-9mfK}kV6eFuoP~fPJZ~zbk7-={T+C@4stA{g9%2$xy zO6wt_{Z9@)tNA;1?8*tK^67=StlC+|dTz0|Ot)v6n3nC4(gEvwN1Kyl7T z)mse3c>$=(`|=_ER#SQDUfsdLg}$jDk&9REbM7-@-wvX|6ESa(gZ(H{l;7ESQ+9O3ac&-pC3pn)}i%T@a#lC)-> z1D?L$q?nf>bTLKcD7slW#5aNO=2#>cMR8Lp;O!yzUMgY#ut%21+I>z2itNDGlIV2t_pucBe; z)Jpq4ZGo$e0Uk%xtX)PWY@X@qX_ba4Wp`wQihOu$W>hGDdf<{mR~e>HP|3MlgN zmhv=dK}t+l%W*sB;4{m#_#k~S76nvc0!>|zYcPQ@y9y`U1+YP5Ww|rF*7G4bEY{ql z?7DG5p|&vPdc!-)XxaP?tU3Kwm9`C=)oXSR-g>u%T&)0_G6+*>op?xQI0{$SwDMl8Ud`h43X@rl9ZV3viLn6%Z!zgRiTkPzo|tcHl6n;?$?D^eIU6kCp1KdPSGq{pfCb>?~1m?34uH>gQq zeO2J@u#`la%dYqAnW5VOhg~*1;3ak!vuru6D)rbiKH%wmJ!eM}IR>QSBwZT>m$aNs zZ$EW0C62qdszeKsMynZcp+9VobD2Avz4Egc&iIarZVg(YnzbpZyO-B6H$|_7iT`2A z)65E}1&=}UW`piIR57FzM6VKeJbTW8BL&DKxWjGB{Twyo_DziUFImEh0d5Zl{bd>Z9RF6A`W(7P531{nT*e3SKSjf0d?|Z zy*}+;GRn#zw|gq7WonbyPswoY7zLCJEkNCcPm2pUa`A_yDMJ}zD1rLex1P>K+yCa$ zqO-%uenZk8v`<*XQL^a$mqkJH#5faIWZ$#X#cyTG-7T+#?X8Cq9(`$HPO0(EP-geG zj2e)IPUNuvpj3n6l_uM=TWC-BcIS4r10#GlTd)`dieS#^%M2%PQl5D6<-@sOVYk0W zva=kr&11>%9w$%s`|of-xAf-UBad&iUE{UZ=dVkqsB47Zk%bd}+uv?^Xvgp5Y&y&x z?5Acr+h{pU$i_6bx2ll71Seyc)6))|XEicRz+%%QS+zqC>S|)2GDQ+|ElJ~m1K;Na z8Y>XQOqGB~x+wK%270i%g|{1dTgaQ_(PA>$5yau?V!mGKo!2(ICAC2D%lbW4It;fS z6h0!B>{*s`V@U3Wc`i>Fp!U<*)T1A>?BF>_#Z zi1eM~o-XrTuq+EU`zL;`otOP(=I|%sv{7>9KKrOru2?uLi z6)N?;@2p^COQ!F&zWlOy73fRq*+Iny#iW4NPeJ}6(q4MTv(`)wm0^>m=O(u`lNAkT zp2u0T=CjE}O=b--uSiEtXQcaWw2AN}hkPwIsu5!^&3XCCr!D-PopjWsl1p-|O-ksK z9@vqRWOJmu^<(60JT{TI^Vs%&(9wd4 zAFvzPcuJJcts~_ct>mnZY?8;}+WwTHaK6j*l`7b`31v$8T-m zWcS*Dx-PB3;R9V@duv)q=#k%NCx}Mi*C<$BHcywevI;LD(oL}V%i}}gg*aFEh@mW$&E<*nRlziAKVgoyffhKpwd9gRor7x z`vm$NoBXkTf_ci==MNe*)$Y6PWbinAuz{8aTxY{&)oM;{kl z2>R z_8%&BxsT~gF7DamV1^Vi^-y38XxPb`91UR>X7mH2!c)yJ(I*U1{H#1 zlGXVbs@r+sm6~-=VyH;WdzMtEFqX8R?j5#m|}woo zV402YHbHRl3h6Npfu*Vh`QlRu6%nOwrJf}tN43-Qr05_^)xjngnnJrFGM*{jvfYnDaV6a(PYXf;0|&U=rBE$Djw)9SN7155#~LO zkEsrqh+KRW8eP(zBTu}ah`w~re!a^q?_-5XxdFAA>wpD4 zSt8Q#wmbW2T9MKzZeNQ)3txdTuchs}V0nH+#K2ZcebeNxlun`NswOH57imuUc(Gzj zjJ{N|{tC@m8)4hcbA2dg&{Q!#OYi0^bHMreyOXt<*(>^D&$W}vPDxq2{M@=(J`%21 zQ!g=nHR`Fdp98*uRgpJURK4^gt%C5>SlN$ns_8&Egc6LNry>5wArG%XmsTREKDUQt z*eM97lz%G)nn_U|P>XuG;@y=sqLA*jvI+bmO9L^_Gl+RP&+Y(Gq-hs<-kYS-LvMk} z5DXJo3>SHnNJ5jMhefWz-)Rn{4+x?e`B@o4Xr1)2x;`qGQ@IVRok)hXLsItAIq}Hv zDBYQLE9dG?4q;Bfm2{W!*p~+5^WQxV6P9!ab>(!t8YXPF6XfI;I9ZD2R|x*pWwCB* z4k@+^L)xyNDT^}Qo}LZ8Rl1~%)xS?57xwcI_hY5@CxS$59cC3mF?$lo<~)pL=y+eG zgq%DhS!G2ZdUg@m9J z!8D_=IECW-&|z9pU@Hbh2k0!dF*?|T3v2F@Sre^(27K&WRK0hRAZv=%Nx(%oyy7wU9dDfjNnumdZlZQS+OXS2Rx9(jvm#K_(W>9}Y z!rBZ}aM-W=ZCQBsr0-nf6V_coJ5B%KY$DtDKvx+Rf_9(`|_lf!aeoV+uYj{c;8+g}-c_%v_Eb^ds%9n^1Pz4}gh} zxgLX9bdMFAFDNWg0HPDUZT&zyA~8&wYzpvD*R9@beG7N2%fo%T67`+sY1q5vGzZ0Y z-aX-ja)H7kmM9|Yy=@fwcRgCp41|!w8vD%Fryb1JD_2WQ;$KfvDA+0US+PWBU5AuW zNB2U(^?08quq3uE(U+)CficsWidf=p=Lio6O zIYDnv>Kes#?<-?Nk;bS1PUxYoqupDA8QCelg-vrs23bR5Jd- zH3UDzhTm2XUB;8=H0i-D#RL%}Yy$W5I$u?Z@t1^M;9C?i`gk~pIgyuTcy%#cbiUWJ zArx-YS|(s#NfnvrydS+469rxZM~N4@Pa2+P9DhP%4XmH07?}`TN%P*S6Rh?5Zjrc5 zIL_T7z({>va%s88$bL1IZM0l)8#r>@o+d-aJ`c9Rf&m#e{JOyi*1za#30&MA;W6y( z^L^5-ECYlx6ybNkd2)0#GZo^7ua7QEk3VHrBdw=0=kfIoW6JRLz)qkU)0ca8lNo#q zAub+*udcA8GXyUMY=={?@}l=qhJg$K6KPAK(*nmfw{<>*HeIe zjx&HotckC1tz!1Z)bF2c*#bwj0E?RS| zmI`KlS|r!V_SfkHEEgp+ro)4_O7Cwe#~zC1z$xpW>)|>!lS|kmG%{t=Xs5EP^yUBR zo%r2PVJv|q;?p@|y|#dH?OidSa}SPVx??jiE0tDP(rN5E{eRv=4(uD1uRg*mV_6yA z;73HM+*-X`W;G)kkGA)41QKpu!~8_GmCjj|0{$!YevJ6q6FSgWrJDRDIhvMEbnAxQ zhCD(upSc+{kyK^7z3yes-1jgxC0MUNSCeKJ)E2ESznA@4vgA^NNRhk3KgKfg40sy( zm$Rhm3dM#a(ZF`@_Uz;4Y2OWhUv%0c?b!~-zmW;}XKMfn9T&OeA{J4HtAu-(%u#3n z{BdbnwfXz&F?xGt6DxeO=hM(JPNM=Omo8n{Y+wJE zXY_BQB&k8lH0aNpe)$BwWH2VEyQ0F?d-tnm|6?2n!oWfQVk>%_?jJM%k1s3p3JVY; z@y<^PfAN<7aXaeTg$ls%7U8>ma{pk_e+IKE4v_2&R$lfm4EZrEiT@?V&!zhRh!k9v zR}b0~4lJQSPrN)J82KKkS9t(`KEd}ds{l%aQv?+2Y63b#S_7p#MW;TEOlSctZ=gB3 zeyWTH0orcfw4E>bIfK70v@DNHUL`YEkjpo)FQ_3 z2J~SYIqKc1pmDPI6!R4I6yNciyU1L$e19ah9WsO8MC&Df;MWBMg&tko#+<=#q;;LT zd3tpbFb*p$ZNB}@t)Nu~6m*|KiC=$!lHL6!h$Z6oLxt=AHV;x#opMuY+@rn{yAqUY z)h@eP&FSYdaecZf?B7O@!~BGR>y>`%j-4I)CAjCmh|nerSFLD+T`47@@m=S}aSoY# zWO*FhT!Wqa*`5YpPUevFNHs*`&iQJsk*6=}m)w-wMf1(Hsy-G86Odfbo6FC1xXZ&Y0m8k)OF?w6k zd{t7BkL~YU+B|(qCEx#6v{L)$X#cvH0CxPowP<4;6aRfX{rSzxyw_TSH31i5^92N2JNek|6>PYaln7S8Oys6=)aV-?hfrHqJMV|y#} zz5Z4^zh?2Ily~mW5&n7;5>Vm)^AmBH``rNrI=L0iKQq4|XAbK2+v;ix&Y?-iHw0cz z+DJfPTF;;;`Je{$P44Hs;kAY_ZhZsrqj-dFZw-6 z?+{c^r_C_ff+cz#;r9`Sfso+d*ZQg*CtARqv{`(z|4HJ?9MlrqE8{EH$gQxtZGm`7 zGW(>;9)C0WpYunp&|zRx{%=p5z!3cWvlhV51u8L#a>O-A&3J}{F~ndqpVcuOk-qWz zp~*zQ7>xXfEkD#2mM5UdP;ALUi44~9zVY0J$Sa$%d{7l?8j9_ZG~j*e^=JH_5C3yI z5}lrQ61YX~pNEdiaZpIfxYfQ!FNdB6YjOMm_J$Fd3#mn{Ev#r=G`gg4F&dzk$s zLIzC!nu@bJEaq!_evfeY!R|S;A(@jHN>>dFaf*lwZIPk)VMt3|r(q-b`{nbKd012} zzo(z)Rrr}Cr$_&)T0Ot07C*q&v?tgHG58mSkpwEQ{3zfS0{(*NI{2r$r&2{3pz@gR%T9FdRjWp2PDr}X63=K(c5 zha~XO`p*u6(q8>{=62tGHJ$=R6amW|O$h z233SN;|#sl-cQ{xDU)nPv>{AB zfA1$Gzb%)6FS65GdA8M%M`>T1b-R|W`U+^9s|2LtCO!lTLCz8} zp;&VqI%RaC2mMm*)9fF}OdcCKWrL49v|JpnogzwAQ8nOz=DzYZ)9$Qc&L(HskwW(gcbXPLSqCSo zY|PZ$AWqj2WNC)J$dQEwmCgAc+-3;~P(-;9K{6R8y{l{feqoQdPau1!O2=@9G9yZO zt9HGL6d6L;iNeY$wTqEWQX+UG)Exw00tk&4Ko4d2OCqSv`AUjI-&v$xa>wC@H&Baj zE!i@ig`y>F+1r1WX?sw5!ca6F-t>kT7GVA@h3Z5 z@W$u{HkTfHzZtpAW95Ar+_Wr|*l}fIV2#r_cij=R(rBJ7Exl1`VhHhLpr#S`^YQvj zITIZe435O^<#w3$J^D5xay%CVsRvpB=K+uyxCBMp9T`s|O*1{2PYKs#465=Q_&jPF zV=f<>83cBPN8WQBHBuO;Ic{z^1Ztlfz8(YmRHtt>9nJVO0@a}5RCn*`kawndEu1f0 zu-8m|%E@vmuJxU%O}TR1+I=TZNXKy)!AXI|qah%RLN3_9*qE9zH9+!hyhxjACPe_h zcGAwbZ_&>;8Ln9Id^(lfcRHM?lRgsPt;4B6OPpc+=)2{tLgp2J6)AoaB)n1leCP9i zq9HfEf9r#pm-qi;r%31lUVHnV&oerCJ+no8)m1h>&a(#|=rTJ*t&ClIY(e+0DIQal z35sI^vEd~0Z(aayO0#f9^%R?#NI!g_tEk3t{*y|!7En*UJrxvy3}q0=|4_*1Hny^r zpiMa;>p-4$n}zMvDsg%%cU8}4cI4%xZG|!(sSAzhPV2Q1E$rxB>DC$V?X;-vmoeWc zBhA9CHrJXzi1fkMBkLib_?yiuXxQbaXxGt0PCB)v9XW4BJN74NVI*LD)xa zG(7gRzs0g1VKtA}0ZUw?IOcMCM8g3>6(%57MAn%<%2$~;U}jX9&MwNSFMO&|_g(kr z@e%6B0VvW8+RV%T#sw^r%d8&w-h+u}sO@*=4gt+_zSt?<6EV((3U~-y)*+2{STP`x z1e8N;T*)cu$Ug<=4}ToFA45mf#s_){#*~*OU?JzTt(k`dhXn@bw2i{r^B7s0ui0A3 zs?*3(lzZISZ)rT;nq)of5w)7BpHi}sgP`?wazXE-X%F~ibXc-6lc3j$i%Z~GWxQG< zu!amefV$=%wT5A@J~2dz@L+ah`w$0A0p;%pfwJnX{^?iFD$5cQZ;+p3tcPU@l3}PA zir48{-oBNsSZr*PCY`j6Os6_NfCmA7!N?2n+!i7S$<#%s0K5W3blvB8K7_bUK9Vxq z;5%m98990=zVCA*D$KqhIg?Kxog2b3o~dLtB@zA>!FgSW6K9Rh>RMffnWkWv8MV4{ zKTWj-O{YnB9LsC9iQ@%@7q|NA#&c^$&zKm&5Fl!`-$zv$iG1hFJs5v7aHJEmDTpeS z)7P2mN=EL0<>_&LmdB)02}N27!*6bKkRE=$G@UIEw~0aH8>5FCEQLfamx~Pvs8Vo$ zBjeHkOl5i4={)G%Pu852_2uM~lX0BDndJ~pKfu{v!)^8vY~2k*>V&ww zG;7B)QSUEHwYhFq&7gdf;hVLdZD-xf0Tgs%%#5~(7Tscoms7!(AISJk1qEKZ*qe3i zK8I8Wkr3L3$?G?i`$D>rWdJ~Ysk*}VL?rBNx)HKZw#pX}fy(2R5rF>c6`0BjsQQgHn@fdDr z0N+Q>$cOp<%=#W7)b2Ve6pyCEYxAgclIE#cMkftg-uYKWs+Q9vI`~|!51kx!3HbML z00$;&(7amudNw|2d7oa)q3;CfTcnklAR#;0rmL8m*NOm5y;^8zn@L2S%wh7AJ>1vmIGN}86FSV31l5ijU!w!4{Y>#C~v_#J(xfAixq~WGG z6P77~+=N}tbU~Z(sG0c-@K-FpG8*WuK+1M6tOdexj?oP9#%A%+2xQp4*+oeL@j(vk zKwRc2QEyH$xC6VJ5RKl5Tk`fqI5B#e>BX>ASqK`FWD^jKc!2q0yLR!As*9cx6IyI# zsf0~ljxTd(f58{LYIV(yMXzFeJe}?qboID5&Yi$D;;ztF-{N+ z%z-Tu6ZG~G?K={LrQxp2aN9YSyDS}70(bk?sGh?&^zxgN4gxJ$bA;#b%2F2t(VJsb{PPA|K*7E74RCJsKQ=6qsa;I}{s=p8PQ+Xb>K0g&dsFMv|-%(v_ zwBiDrBY)fcPiJV0iLMR$a1d2p&Q{H-DhRXYG%6Yv zg4Nm!xF3WVb99FA5n3%%F|JZ&Z!OkVr26hL;&10CO0XZHZDI5-Qe|(F@C$9tWC zSR&c0ee%@`X@}ccOA=Qx5qr|0&d6nOkKpB0X?d>lu?x+u(uS>5t;4X3MATu>q4vs{ zkb`?fHbWO44DWpDPq|vL>zmElhkt0ImYEJX77$+rTJ95EeJJkxkJ&4sh)qyya+f2U z2;1_ywTlD@Fm1!k4dW!R%0NK}kiHQK+i8UEAUB(PNmL(W_u!IO7o4A^X&oR7$ z0QIg{PQd+G8(j6#Mz-`i3IXAlJIU3AIc={WmA#T6M*rw6UX~q2ShOVio@o@)K6a&1 zQZwZb$~#uK634%n{cR&^PM|ZGFvUs#S%@()R9>O(Qlz58A4^BgQgtk9zpxg+dU>3{ z{O)S+ZeIVrK+{S}BL!O+v(9M7Lz|~~5-Y(EFQw4lkTFK87Ikpbc~UaS3vTs>#Wae# zErbz_vWvM!itUuuk~31B6+PViS~VWKALr}*P3==09rI*|NZ`srqVFgxn7nQjOMyqI z$;bBSLwGH`e$ga2b&;f5Xj{|=o0E!+Z}_JO=V`aG_Q{CcgRp(u z^W(^U{->GLU>|GD&X`ZWF9*88ud(kZDyqVGClvM8$bu2EoI_a5ouBCix7T>HeJCit z@qrVQX`83E7iQW7dqsca^c3Jw^H7bnYx3ioNIAP1j0mRV8{=D(eMhi_k2~QGY$kBC z&ybl|KWR~wTfcitMKNyB*T9_|K8)?&G?t>Q`-nRCv<48)iK+I-(cv=)VZR`FWim(7 z<4O4BZkNPd*0Bo|2JXXB>gZZ9?ZhUEc@r3L3o0hFNQiY8ix+5l(8xJzsW}ChNh#NE zgSWAG2>UH6ncE)cs$q@FyoDxdr^=*+?T2n#ep0B#45s(IvLeN zVyRgAgvYN5L&M+QB~ayhErGXrFG>3K#p9-S>+)}+<&hH4ioL?z%2NY;oMwGG5+K~_ z-bETy)#EFB-hp{kDd{Cf-+kSt$6vCHCJ_^aouta{?ldKJ9>y}M_E{5RO>{6X zIyZRjCA-9$DQ5Z2@Seuf-5&*5JwC5^mYtSLOn5gOf}HrWw^h=fo|;z)o#V(>{Von? z&8}R-go~feHAcj2BPXPG603>P;9(dvm*h~R>MXnjC+eMdJIS9CWj9h>SO!w1_iEjHw2%iPi^sD4i9%dU`b-jrjjE29?W+!l%B=~X zu2Bk-f)naO_L7&KI9w0%2D22_zLtMuCA|#dg;N4x$7j7{dQ&JmA{=iV2Zot-k%fq^ zX`9qE{|*C#{vJ+m8sH%Fe>O+^&TmGb^I6jR;t9%w#2vkbIqB%$6#kBY`86_G#*sfzOU?4cPp&^S054dAM^gXt@g)GhFS=Y4lDr9`ZN#dMP7erR z_jm4N9;$7|;vgajgAISZ#A@xoOrjmq>5F@mMgkHp$D5R;rGV&jaKA}1zL|Xo`!`}R zgVkfS)Jrw8Y|eZSXU1B2ItotEgYe5RUp0^KA&_zrkcJ60f~+`9(!82=lnnVLj*kqH z$64-okX&!(I~w839i?5A!CG*hH);v88y<^A=I5!~<@vhz>KR=;dN-cFcd3&oVMwJo z<5A@YIa{!tP})gcB()Y1xMKFnYU93{CvdM^G$Xsrf0V&Wfu$N#H86ymvpUMo>~>Gs zm}&T33yM-J#p3-qvu{F5f;3<(!I_-6xzoj|VOr5)~)Y-jIds$fnh0j3j044J++ zHA16IbV~Unq!aRb#~*|F9PRd&!DD!mr{q~ZhibIjEC#;0Dhf&vRWy>LB(llHNOZ=8 z-Sp*yd>@f#GOsrwFyGfilOf{yJb=kXUELPSX-aSK7&85#R3M_>2GUXfKHce09o6(Abf%}AN zayR`^YmDy~zx!Gal`5651I!?2dzS0wV4ltx%#s+QEOHXoQlo8`rP`IS0A@k~bIp^$ zZmbK(`!vMsi!OkQF&yAX;Er;sAAh-Uro*{%tF+yUw#O5Y#N{4R(1+pnhn<(n{E)q+ z^W>9u!s_yED_jjA7aOhD?Gr@VIIbQ`rb2AH?s->?Vd3L6AMP)r!7QB#4|sq*9kB-2 z;moy#2?jek(QGG^b(YkI+a(!^z`A=7z8x9PKyw;x4a+5p;HwQa`BF(dyRAH(-S_xw zymAmi#&u2=Z!ggA5*Mfl5m$8u;X#ylr(VNj-Z268IjC0>STNc1fzejB;P7xIsQ>~J{K~c6{{AW$i786$%bj85SYwfrmt1r<#kD%@nY?> z%)l2f2_?$yv^4@NQ-_u%ta2*po=j;ljb@jo)_|>9!X;J&21-}Gn+{15#~Mhzz0!#q zmr8Ly#2#_Czg|?lXulYFLEK|T9mz6T?z=>j%TD+zqE&cI6kS98*<<53oQ7T2-wp>N zKh%u+HN5R~-?fn6h;=8(;i%tlC-F~fJyEwY5*3A6DLQ!{N@qnKu;Ppf9^uLO$aY6} zwS5zcDF{3oCUYZ|9XL7|SC=KJo~N=ff4HJno4aU8v>$rL4nxSdm{R8b?uP@s&Va*w zzm|U(vB%$e({7{t$A4THX8L5nVI$Z#2$PHfO=%iFXEDqKr3}mtcfMQJ`T0GTN*p3< z5v)cY)5!;3#`5_{y~c)BP0+Y3?JKex>ARm^kA<`Qge_2exxObOtcwj{FNom1%@Y`v zbA#@KjPYx6crG=#)+rOVq#B8K)AvqvuNN2wX}`pJ_wlBi1{svWki1=}y}IMfG{xKW zoBJ?K&T=A{0^*C^NL0(ZRjA_u@u$KMv~6EhILi+sn&fE@y@(4cR%7y`VgF^xNPq}i30f_Te77L=pkxGk7i4wRJS zdhS}Di-6hJBaqmQ3sTX^LVzL9^>&~qwZ~Q}AiDA%;S-K+hQnJ!dwaTLrm8TF63)Q4 z`m#=!1GJIoaF*)j3u)odp#>p*%v8*Ss0U;Ri7wHw9NVl600WSgESo730m<`@-CPWuK3vHxWHTY%|$`?Y*k+T7}a3MZXrV4TpQ@vI&sOFGJ(?dOX1n=GUt zN(?Iw7Ir+90+$^&Xtu|GuxmLEUSkSq5sRlwzIdNj#;a&J!@^r8WF02zTN>1SV51`)mj^CiE;*BG@B4z$oQkEo7}>3{9!}KrHB2!DdxQ9#F-dy5whWK+^b?Pv4@Zr- zSZAHY&J7Km&I~$Q-*;d9tPLAsxQ18wlBXzuJ}qWo>;^BW9o%c0vT)cN<%$a)#(L1< zrAfKTs%p*DDX`AYkv9!)W_UG4%mjK1uEc%|OBLijN^>VPUwWI>Uox(mu6C;GBnVff z3e$;jZ-)rEt_v0N*t*<>yf_Y7modgE%C;ASNChR6J1DaqeleUw} zMX4Tex9*(;G99(;mA4m9;jgo#<2yAGWUe&MlP4;c)3Svfa&49vEuTpY8`x|6xI;oD zJmd0CSA!%@8ehTEY13)-*3VzLz)<0s>sm4tcE@D;#Sc@*4neyC8Py>KKR_Cp_a#cq z0v#eq{L%@E?sh#!d;j!~TwB)@5JNkiX0e;M3r)+HfzE|%8=+@ruI$hSo6;se%>2+E z&)Mn2Wn{zYRGOOzU39?W3dw|$0W#9&1Q3)%U`t>8x;ryGXaKZFnfdm;B+qW4mV59) zpleD6%xiKmp`>rfYZBSvQ(_m%?^~jURTL|AUN0orX#;rrL=Lr^6Z`RSj-t~O(rJct zk%W&|-sZcdTH}^_jcE>R7t*FU+kSt^X|PTmG;XAti#%-?dx5NCa;uL-9Ze*z$j09Q z?QE`us{83a!X;`z=R`kKnV@k&Md1tP!yMVTC;NT?d})}BjvbH1mV6#&WiPYw(^r`3 zkFzr-N{X?Loz(X(J$%0q6fRKqd(1?l8~-{(fYND@F2wbrx&*Wjl+#2f&dFjRCpF)~ zDtvbQ2P}!48Aw{AVU~S?TU{YQRCmr~>$i2z{NZJ4R z#3vHaY7|DvJ*06Lk4%=H_{pJ*>=yf7x2A^;T-qv~s zAs8z`+0H=dG9h$d2=z`JLiCi(G@~QOc>ahqcE+RogTQY{&FpWeH^0mbiwMLEwpPkd4 z(+_TjC?6mviU*BiLe6=k&c9zi-v69I>*TO=zH>=&6twrCFJ|xjc*EJhdAPyfF;WLb zJe4Icp1x8P_(EZx@}DHmWCQ}AQ*T15tkZbXq=%UGYTg~cEO7I-g8dxfuPg*SN0R^Z z69FbqprBTh)O#Jm`c$u#B)-F_>uREhKkv5z0k=C_1%DTbKL9k3TQe}PZNnw?8&qz6 zU<8J)d%q8H7kF2p^7|uY@y~JTssQi?b`QCfi953N{P7hJSy?0RT79FLVEyMjQA_X7 zrF4!RD*fxceyB~<&^3%5z1=4b`RRd*44&l%;Yu7T1~Vo(QE=Ja`d7dVJ|nV6A@e5# zPAw=N?3}K4rRnzkybQzl_xsY+w*UFeatgnDNIvQ5ww<#rSNk9-1i zx*zQD=Tv@vf+mmvOH7ewG}o=$l~g&~b~VW z@SL4T7v;92(_J2P3vrL7nMdmQFicd0t+vqX2b2kg%m~6m{}ao!dO?8hPjjO&1Jh{} z<)sFOZj&!i8VkG&I~_~@lYCZ!D9N6>WA`G2>h+Xn-)K>hz?;m6-d3f*4Ec{6|6EEt zOw9iRz(q~iN)_6+`Q6TY`W4Vfbg|u?o2O2|4H6O~mQLG_pzp&(=_izbQ?~Qs6TljP zISd{z*neIY7e7BCJh~3U-_CFnXI5RLVu3}$IF8_oO=p$=(Gj2hfP1|%{sEd;Q0)hr+AY_pYu)-cl+iW4fF#w%>+Y(yz7Dtm zKGSZVG=G*-A&g3{;YaxPKS9ht@e>k3pdd>9*^%Gfl)sSn$0C}L12hXIwQa+%*>itF zA0FHXwhJ}xG3|fe`@awPov;5(L_p8~??U=t8UQ-t|A%#8Y(87ibkZ<;&*}e zqFDLYyzaM5TtM@j6|LvWsG|@uuzm2O58MaR^oPJVNF3g#==~M=C}D%^ifnj;zA`Fy zc&GxsL@C4;8j8vH5@Fb`$f!(GM8Wj0JDrzu=IHj*>j~ZwlcBes%((&9LOKor=VS#{ zU78HB3V&4p#h%LihSA;PPoZhQPyA_%wI3JQNW9TU?%%S~hVF^$PmHwr{hCvur=EG- zkc_^}4!Jv311d&A{oNwpi>euiVUt`zKepeVkNlgy=OcPGJ9guq!{fypfC(T0sQha> zB?S@<*x|Py-bZ1}tfy+7Hb>pgeoX|cjBgF&Y)(q|+51`vr1Dm;*Q9AlK+~~r+~zj@ za++Set_w^`1q6=92Vh+8>mPl8rSgQ~+~wIefArL$B@_+EmW|7E@mU{=QtC9&qQBu# zCA_hB#y+5omfsz*mKY>mpxm;Z$G_UC6RNGV7?ayclV%uR^uWZK6iTusQn0@Skxdj$ zx@-Ts(Pq-mZU2^j9e@y$0w+V#-3pK$$DBCn#5uU^?04tU@2DT?*4dk)H-R5#2A=t0 z-Wy{=zt#V40$NyK z{-%L3p$Aago7UgERDyJe79$<&mmdxQpseR<<-l?5mK80qOg3GLHuFIbG0rphe1^X~`KwR~z^yf=2JZp^$NG ztAXRkw|kW!jO)1pvvl~qi_Z&xoiRJh-1Zwi^;uumvSmO}8~|ueQ7b9&PRJ!`wnyhL zvuO<=+wtf|_s7}{0Nq5AxBd&_hDtgelfJk$yiK>_;2>Fu?xoew6hDw zv>_DAXiNYxrsmWuY<-S>Eag{mJf-tDKGV%@Ct=)}z2Copas{5FO^RYXYNg$}Gq3r# zFFpfZmV9TEN2q1`qs*t-&d$-liuzCHq0ApW%~rZS(q#`g&Ot=L?2V&{3h!T~d_t{t zR&a9n!zA1tby~KUow}?}3lQ%G0Nax$zX~`Em`nxi>vR^#7o|N^>!y=IzN~ZjyUj>< zhhIo2A&h%0Y$Z(Vdp5I&r1&q-`jeW*yeM{DPfz*VGWo-HE9UqegNjs{5XYEM zGj_QOw@Nf{UvsJMzF@XPfhYm7UjvF^*n3_vW%xJ?!BbuK+*QR+%xflFj+(ZWZTG(r ztL6aRy+-u?3yZ52fD&lRfO#!n+H|P<%`HhjMK+u~=4q*68sAv+mI|K<`sNG@i3POD zbrDbCG@7vxA8!Y`KMzvQ?7Xbp?-R}gz^Nm7Or{o9x2j3WpzCf`;{Xts z3k~BXUMt_EIiTUx&;#q?8UB7-)3RcFF#xC(|KacuP`*&0>ExS(3IL9j2RdJ@yHBEW zb~l^Pw$^~ANh-+8myU-zhSH1rhe&-;^3(pVo07TLsNfv&6gaO z!p~{oIUk&sKnTt&uH1xT(#X-Cjdv13&Ht8J2&~?Nw173X)4mB&mP`pUkdKCMH%p%8 zm;jJ=TeyApIfdJ-V+jo*aUzpujA$n_N+oYU1IinT0rQwuYyn6!2y{n|2J*XOnt>`w zjHe{al|w3uKN@6T>q3P%PY0s>;y7B)_oxK!^1)o(BMvSTb?6dVFn*z6VA&ZfPvLcvW7d!8LSTpc=C1K3L?rgTr! z({@h3n8X3jK~*21iE=MGd^`X`dv)A7gi43LoWsAQi@F|Z(Inb57l`XDp1@)7R&4jR z>aeol;N)hR-`@pn!T`{k4H@W%EsPka8Y(mCpw6zv9*zb!YL{N_HK2`(3MwbQ{$wSE zzaVg+Dul+%N@)EbgY7W$CvF+ltruy3zF?5ypQtqjyEAYFI9cl?3@ zNj=C-FzZ*$KHwfEvg41ro+HX+1uC28(uG+h*A}z9#HI>|0@_`yJaC$=1?7tw6Jv3u zCun7fR>Wpp6xZ5P#6y)Y+b<@FO~jnHxr05@@Qx(uwUw>lbA04Rov7rjyp^l+fnmZ@ zL4`c56FD6RAY{u9KSopTGrAQ*;W>LBHFe4FWWee<|I$WkHaR&_rtFxRNT%~yr%A)e zUw|yAXo-%^2b%2DikLu^BOa5R!wKEIg?t2+%Yo7*ph)lkg z(vfZsv--xIP=B8|iRZ1L%$(TfaFtV_1i_iX;~4Hx3NZ2;nVlXTI2J{~OKkCNevIF^ z#<0JUU`peYf6!oaWoy%UExlqb-F`B=X0*~V12~T7#X$}?YxPCE|6!jo(nlui5?gqQ z6gcQClGv9(3V0z>(Tnw*%-U1kjXT2Ylew*zk7$Qnapv0-En0VI?Y+y}9fZ^Zb=oO~ zqKUNhKXN^?emN@ckqD5|KhfIp;THIp1th_BU*Uvk6!9DhRkNK9l4N8Kd3xqBRv7oH z^Z;=+BFI+3maqm&vm=i_&}fPS@4&wH#G~QsZ~PcMp()q=9g;dy4D)C8UUd30sV3dd z&4I1W0hG{uMnS*EexmS#q$yHv^2g7`Pu6*D)OZau@t-+MYa@G{REF-FJZ0n|nnON` zqNIV>^FUe0zY#C&4r^5;4PR$P`#|>WFt^9JY|;K<-cg_x@-q|$x9k`@O{!1M+iKbU z_NfmCuJ!B<>5#n`fslS0|uqYGUpr)}J!{Mtg~5 zfCe(6S=1P} z>6481%@NnNYrc+O zx8+M7+n7U4!ETXD=DCf6$5gYy5{$VRYTj_t6S_N_U>Y!18+x2Muq%kZ&M%=HH(g?D z3fuMzggpQFpr6gXy_ZVHjhsI3Ids$3vPSe6M$1$`Oe^YniQ zc$;dvC&3leta7zUuLqXi6pS3A&)&}*MV{8lzA*Gm_ADkpb-EOhT^nzaZcfg&jg zV7!3+=p!8io{>P$Tj7@{ok4>NKd+Ibe5*2b^v<~Drt9J%TEPm`ecfFH+f&MHDBo*~pHy$Z4={yb}Z2Z>7SgRUgh~o*_ zm$J<%D@6&yTp<4JH7P0z;!{TiDOfqfUbB24-)ZdgVa9z-q!pB)sVSIGJ#Gl!O_? z`-9V@6#52M4a_V%41xEL+PvgvWXOP_sH2$D_f*_VtjG{^<$$hqeb`=#f}yH=vf*bN zT>|Ut>*L8!Rtz1Vsb%)3vykiQB7306Ta<>qohH@B(&SfMpmL$Lb88(p&dj)abq%zi zBBsF|S@?3FV)Tpf__f+I{#?u%Ankef1Pmd<6+|%BV-6&{mpiBh*8ddpLCgfuL)BEb z&3XpJK{`y*C-`nG!*;A?)*?St^R%}#E7MgV#fgbhuK76=(}U7-(tso_a8XfHm)(ul zYMBFv6WECLeO_L7eyyQ~p}bQzjTSvL12V=gjqS8tawsqf>ElOMHZ-)L?5UB zPzs~&+R#F#QyGV5EEH9tuJF}7ZaYe9@bTS7hLuNpX}Zp4!)n7EVN|Fh67>G#E6y`T z$OT1s>Mh33xU+q@PflLhD#U=k;`Q`_3nO9n5#HsJ7xO(Gt(xWSVQRA$F+sj*h6d)4 zc7^2F!@2z%<)3%JACe@9)N2%YX$&52_(q{l3m4J|2q=d|*~7>x4qiRwPt2^0l=8)V zy(f8&S)u-cd!a62J{-^MllYRKX}9d2Ka5`T=`GA2DW83i2ch45W-AB>^)2LQd2j`O z5i=S+=b|!?eeS4GL0HV9rWod!iPt;#VAZc7;9|4g^gBCz4ZTw4hSaO{97yJ9NvyLO z^ArURtW*n)##D;F4k8kuz;U>GfTwmfesj{e_3MYHc9upY8xeRO@s9Ox@gDrzc8vns zQ*YG54)Sl6RIHb{`=L5ShbeH#j4M=ZjBw+397ckX_hz+0Cs1EDAn>qBdeiK9BT*?6 zq!OZP%#!?L{+)}trKiM_(Col}@ifd54@o2a6H$+~1I=}*C7+u=gcNiyaB>{}FYsh^Zz=z0R<9-wV7G8~GAKuwHV z@4cl9zm=Niv$uC-X{1T<-Bb_0n5q$X*hb%F8$Z8G=8U*rcCV4G(hNj|?l7k-b|^@#Qctqp^cbdwmjAEd2ZiVEiB$%PHg`09z|!*K2agn z1V%*j=L*?7^q-eh`(h08ly)3>g4=CB;stao=~*9J>N@)~qPlHuFCf?&MWUAc&&bi= zW4wC>f$5yvrgFF6%HNm^IIL3e0Wn`&fnR_6$MhUWN(F|l7c}j$XRd6u`_%?b0p8|2 z<4< z^M(HLih%I}RE)>HwvXBl{4YGL5&3|qtl96GGQ>N9Jir88jvFGs2L3;sdwxX40neH7 zH}z-x?;|z`1rrDCgQ=kZHM64dfyUfC*8erL{|6?)q3Vg-4=sTIt0p8NkhFi{3FFJ_ zJqoGQ7F*Nf~vf)Y!C^Uf+6?x!Rn+Ldd8&@Wi`^ zDJEm?ug-W(_zP;J{Oj4}A!F(6AkYQw-^0Lp& zJrinik!2`FPWH-1)z-BIi#3;cg?Cr1O33pIe{ z8`EYj_tkWtb!6$r8^vsOj*k}=pwI9PggrcP>^f#$*5r}Qv1Q>2uJO?DIN5@&VaC?^ zvAEjBDY2o+ys=;_87SeG$6FF^X;_cZv~O~HP0!^mezRG{%RXh4%_=L-DQ@_k+>7pB zK+m#1^u?3x;lHfc5Kw}S^jdHl4`U?Avq-L+=VR|Hu1g-(B0r_O*)E|#F);hw{yn3o z=>B8pgvBamz4K%Z-`j>FMx6HZ-`VAUQlvoX?^HM;ISR<+gaIlnaqX&~1u% zW?{w&1DJ$Hr2))xJlbt8x!n|SB#F!Z5zVI zH;an8^%KqVw{m6)?;lUB7HqL|c@77NW|eG}PT5sVSki=VH$jy|G?1y(W-yp-E;r?h>&49TUei|>QiaQaY4OBnSOJ+DVb&O zv?7O&bMgF_l20b-GK4SB&k}4M@PqmVS)_NY6w^6y<+E+fCXf0kWX#x$o`;K-Fp;^X zbA=3keQ;aG|!ZVwMhq}Oh)7!SkZb+3wN9jZQP zF)mzdacSQlbyszyaSS%oTk@S=_$^kF!mJEe7VSkwMj12H;e(zNgn<ssB`(K9bGdhdCe zlcQBl{XbjY?CbbROGfkNy%3K_WvhX$)5?nVUX9l@BoGG%q(<|%JWIJXzm!ADkZb4F z+ZRmu?`c)L&UVkFR7pKb-c&fxEzxWFal@@8B&q3RlIJ5!fs^tgWBMl1v$W2h@rqr1XA9(iS2F4v2&)pC7oQ&o6qmaip9CdhG6OfAJQlx*ZW zZEWdA5u2^#`4)xYo!T3Z><<-auPvL5x)B7kKGcrUg&sO8N*|~<|LnoCW46N-2%@jm z%P@?59B+`=y2sxQvB*w0v%hw13dtE8P$WH`USAo<^3TIFHLQI|fTxL2YE zCheg5dUraC(RN_6v242=_m?k~!OTii*JEM?Y)%Bty<%je2%SG~nz$hOU zj&S@Rtj$Ark-V_cQw=aTzkK!2KbtQi*~xEu-8BCm|DXH43qBCdW$N+!?}#+V|;J`t^IRa_MglB|2YW@X_Zim+mpViS@fG3ku(O+ zG*)cmyX)IrLxL!JL_vcy#+mlMf8D;MA_M@-Ds_wB@6`3O9;had186cCTAcAyj`REb zg1V4~9zCY<3t!^z=h~cuJcy;{?sNa+LFnOkKD6|t=|C{9g)*WuluH9%Tl}}*`XXvN zFKZawIK}2`nY9HCKo3I^^m?qiZ$CQTg5Z^wMI&MMZP%|PKiGQ&U1T@rSY%Q506<<3 zVMt=OE_Uk1qZMMK?jD&cnyWt6+MFoWir~_YJr?0(eUKG(sdz+hd)0CoWQ)2m-Jt8A ze2`iCC87q@x}m|i)N9vdUr9`MYMz{1^9?7WebU9$aU7IW??{wP=E!OQInovC*;^o= z5ZjTV8Lk$IvNO_v9Es=P;~Hqm7bBKg`1OxG)AqDf_Ux=36rwzv6KWN8Jx<139R=kA zGiGD4P6`lGYkEq6uB)ksn2VI_Q=6gcWDrR@TTqcskc&Bgu3#P7BU(%=wn;$Nz+AGV zGgJFmZtTAj>Oi9ep*qS2;8E(;@1@id9SKoxfrf?3q(;V&ExjMRsBtA>4vBJ!KSG62 zvT>XXYpnHKa#Ur>VuxmD&#RtQgq2!_O$rnj7Ta8CEfPag;7I1OpOM&fNyz;3>t5)3 zvungd5pu*7G=!zp)4Sk!9i~Woh*z zA|dY~1UfG!zkB7xY1tqLNYB?1+mp;99lh>|FCN*8;{@3wvLLrRihAp_?di3`Ce>EQ`m{6W{Ji zZ^n79jhjFdcGTliAQg$qEJFgmzK7>Ulq8?`;PjrPr{R#Eod)5jQuf27@m<^x4%Tf+ zxGfX2UAtaDTv$6;iy}XH!8XY6S<)~)>A}kv4qm=~VJGwG?iVi}lan6Y8SM9r^y9T_ zRH2YuamOFl4YYe#T~apW=<>%vPAgwud%NOtLw`AbAPR1(6!07`lY#KX+$~&IMY$-f zYlkw@FBoA@$i+<95}ay|JGI#esP@q*ldRZj(o~u3$ZrzILMMgdMm<9K#JFz-oth6W z&zoM6ZyNnVw92kpEGTWd%CD)IbT=iFP}vPN@hAO<_{v(u73P z|A?04Z!e1UJXz(0?!0?(SmhJzK84RQVP{TJkvhE*jk6Zi#b_Xu1+%+x<#wF%(H3vI zWG+sqs0*ofG)C~|OH-eefX$XALh$3La=rNZ^QqUK0O8kbJN2oSFs6E>C5dS2*0jDV zs6F{Kge6=nM?Plwl5?Xe^8_cW3)&h~LM$i<{{ZLun+}ZpsKE z(i_=PS<_+Thl{0#NimpW3zBZ5XkWiryDh=xz>mvuZ@(=J(L_$w6R5gKwIfLDw9GYq*~pj=rfQ9xw~S|nGId{sE*bM zY62_20wd-Rh342ZDBf_}>L@|V_383;;kbp!KgNuT{bSOxfeakh&2Q)WR?XJZG-EInVewVE%ozuk` zKanBDh+a9TmW3ISzZTPvRmEdOBCc-L&})AAUgfdVK}CLikF1SlnPO1ZeEX#oxfopw z-c!lurJLX{IC5m<-B3&qC|HmBql+{ifMMedB8FNlH9gygf_2mxzWG5Pat*#IDGic| zUhFx?HxUBu?_-yp1}rarcCXY)bBo3Z=Tw}_o|&#l8Bu{MfZ2BfEApzg;^$wR>=27{ zW?fLY7gIMLW9R>4!T)uSv~I*F=06{s@Fwz};|wzG*?C0kHI_VP;wve7m8rz{ZR5hu z^jA4DUGDhCo(mI@CRUN^hV_az&-)~82n`mqlCT@^G`S>#x>&L>(%^4`(P^UaUc zKW}$zY)MiR{qVEFb9vLd{qD1UoVg7*##9s-BfC$AHUf>v_2cF_4TpBs`eIzBCa;9O z7ndCio2ZWG>Ikloib2SNX{oVTe_pH|i(yir1Wi7Rgqr6z5?dSiMUAVfwqu1g2ApqB z{Ib4vsJ|5%1Rj6~!K&vimun3hC!F<*ym~}hD{SE0G)`#&m{YH+%zWAr z<#7eZ?Dm_Q`GNd6^fOeC0M~5?bTsV|F2={#2c5qT#bjJTVIL9gjP>1tlU93dgC&aG5Z(?VBZO?z!@&TD#( zgmh2ESLDql6iWaLtWLu$qrIP%F)DmwXqo~9!sYM9^yD^)yJ;&(cIByjv&{Z*SU{`M zp2{S)$G`b>9XH$HRy{?1xm+tFqJM02UW0i^(WUDDkP z+zC`gUd(2cOgzMU7ia<;AL7XU)Sv{z7S!ZAP@XCAo@>G^(rJz&W7w%)qqfxR`F|AP z=MrDkI*-E5tyMY0efHBjL}xG2Fr~Em;>31N>gT=7^k2)F(Qv3e>?RV|uo#1ihhB7_ zG?K*)MA{Divf-3`YtNFv@oQH@NP=lk0j(r$f$Wn z?|1VanJK)>7Hi*9_-#qPXADl_d9;`#**`P&{p;2FmG6gK$=2W?u2kA%k9{N>vN`ee zmtDvtnP5zO!nWz`G|MmR`OjtI9d?hh%kZ~v5tEed*&XbbJom3l{(1MigSB`3e2)GY zRdf11$|AL+6x+?J9FO@N`z*tc3-B|BUs;9To&2Cr@Sj2TwI%SD$Uz2|4y;V+(Ih{d{ z^C3-1mid*#1rj8rX_Z6E{TkTSRkpe^AuX*9RM=CW?Y~;Kci0KNFHIA0PX4X4f= zR|1ub`_mpqViF7QjiIrx1B{<_9Pe-c&iBQm_m*1eiRfS~HS@`B6Y%%PDoL4{F2(67 zJn;VQVuEi|o>X)Ojlo||y+5}vPu1?-!E6!Ax0!ysP$Oo+?o;=p&Yj#o1AqUJ91qMo z`KSu*?q3drKW~&(6t=FflY-x4B5#}1JkYi#eCJ_xJ^Ja}3z@lD;Ig?ch>*SJpL?p8mv*STIcM;WzkD9{;IKw2h@y&0iO<3rS^#AHv>MNv1+8KF2A+5O44++N z9nT)1Z(0DdUdNbe*e#ySs9ej|oKhfAg<#N8X+>u5-3RVG<*Gv(%J4#D6R>#h z!z;d*y3jkOPRp*bUB6<7*pb*{#xd(N6<#jD71b0k88EH~71I6#&)K5Qb8S?F=YGB=vQ2a^|<)FogCd7Kc54aUZGu zDqm7JT;1mjPaagC?g~0H)uL?pr?1U{f;K-c`{okcQ2Asm5-nsXUKU3CgEBcWbvDVNbm~f{Z+b%DhVuJ6Cz)}E z(JIMji@&`X0Y=AJat}W3w}?+OQ$OUjwLVY}(!MIotKe_6nYJ%PPqe=ZCz^-Os+jdY zkLAAlyjD5Q8lX%phrQYwSM(|lu)}2(WDdE^R*~V(^EQ5fNJNLQIpfut_L-~TbB=j_ z`%QKk_4GU9s5Rj!_KiO}Rl zP(G~VJeUKTyP^99KPNPZE%&ycTA%!wo0|nMa~pW^oGhIe(NTrKI;%%~oTH~xx=~~N zp}htDu4a9&@LCP$YUmf;%?k$~0^^Ln6S@s{c6r2FGKaoH7~o|RH7?*DgwYzi%bqPV zK-7259>>z;Y{FgLnt5u4{RC@PP@@9l+azH3ktN*kO%^9Wmm7;wSZ6znQ?JXxeVZuy z_EE4VNFPy}==OlMZaD%WYkE)KjQu}HStZlX`I+X#I1Q`R^<%>)Zp9LLXCLB;{h&_L z9Yf?TB&`P#Wu~{z#WIzLOC40~tdr}&9JrpYt9HvUbSaJeK6Nt^7w1n1)ni2EWeZCy zefEYhLI<}Igf{b$Kt;q_h;7?N&Z+Dj)yzX|LAVeSB+#_!Y>#F z4AM81E%#~y$3C!)XaV6Z_cig>b1JLJuh8RkfrdPiniP;$6RDI}@?ri7Tl{H+WL^iY z$drxZTt<(IZcSNvaY#UiUo)bTM!}x8M%VetN$xRzqii$wLcDVT__ak6-j00Bw)>*& zf|*2n+&6K$S&0rEI7`r6x*|}w>bc%Cpd++*0cUjj zP5kKG8Fa*pT><1u(5QP3VJ78yD(Zz>;{o@|xcxObTt_1S+OsW*7LhL@jC!4v&O#uk z*8z~Fl>QuHm}rDXyS*r?!_kX7TD=_-;h14svx%5HV@{Z z^N-Ie=TcnXq=Zd$%B=^d^%N$b6qy1>Y(~{AAbGm)hFR?!_31RLV`?&smZAXf3v4r; zBE=wq#(wWy9iI)~I2X|xCnTJ?eE8NW3jYq_K)%p2a-7`(+p~NuAD~szjTtlX_nF*H zzWM&z%KKwulh=eodoiilZ1kOilH@w!MBBGpTGTGgi6tyN;*+o6O%%zDIE;!;$55j- zk#z272J258L8r%_W5wIC$mWk<9 z>Zs3;6H>LU09RtW!F!0*kV|1O+z`b)m1LKPu$Nu3^@ev5c-Nu6IelEAnUS6eCgjhf z!^UZE+>RMP(LzN(#=&*M;%!@lO|<0vi>GJV$^DeaySj8cEYL-@Q-smcsa`>EGZ6J= zdEFR7M`uOywioMxInN-_nELF@$*3^NO;}duhp(*1C6t;p+SA-pNH$9g&b4^kL)tDc zd%j1dgSA&-cW<6($Hp~{v@(2q%=3lNd$|>1O5z9P>-i6ozc-FDLA$DX#Wgy{4u}Nu zCAuhk^cG=3by%$?%H%Rt2k@D^GH%<92^Yn(&plTZFY+{W^;a=r+l@U&ZGu8*Vl(NQ zX*txqDO4+Owz60i4IR-+CK@D!a`DgSl>J|h_tzfC`2v>|E*Jbd zc^Z@~0)QmN{PBhx{5H7J+nrg~xxB}(-@Ie&DAi^y&Bi`Cf5%v;>v z<4~z_6AR7$G_p%J9eX-WM@fAmFDB$ByYdf?NotG{l*yy#_P=D|G-r3S6X6QY!BArP zDObf=xoCdjWjeunQ3x2O)&zxplCbVDV=>}SVMFLftD%~G&U3>OIN zYDkjF`_{$chLUKLz4MDH5}TOmGmMm-ee+com}xly)AD&@L-~4rjH%_tL6uWNp?Mf3 z9k;1`TpQJ`nNKwg88pR_Iwx99PI1b~CKS#XFIgxWe_H74S$4mwdvQ!kH4B1iY=q6D+Z)u}RERhM9Wx7DZ*Q60kFG(x1BZ zCWMRd9lspFRZS;5$$Q1ti|Y+0&%$RoCSC61r(1KqYK$0R%Tdy4vodVWop=f=x!I^G z>K4bFxAfPt+5D?fSiHy^-wjBuuv9=F}n*0`72oOp?qbRo$7@#YXS1?9r#_+ zBxBCWhF(ZP1IR*dn$gDA0FXLj>*RI+mN>ZbI2CqO)@B#$C9M6aE@|eULzbb7dM`R+ zqQt$8wQ47xS2`b}otSvHP*BI7?pMQ1yIdkeWAgUhG)0El62M?`6rcKT^hHn2xA*aS z*%~MGY&tK`Uy)e*baa8mK<-PAa=r!o9k*lpPF}I~9{#y@W&M^yG#_`wh9wnvQq_*8 zr|9D>qDKkz?;^~@^~7}VJJbuJ9*M;+8_BK44P6VhK{J?)KALtH9m4W6VMZAyX@%Fv zXB@5GU>-J+EguK%xJ`#an}6b-9aL9OND<0JLoC3FsmmUJO5{!0sd94J%3wbUsq{Tb z#X;S%+lz-!Ezy`BV3nNiRr9ItUpwAPnNvUzUhe6fBDk-0zrknslPqH$Tua2zH9JmoAw2?S-{0T1vokR`#Qa>~mTKffY%Ywjg zLzv2mlGc+%pDJO|A!OX@rRvFLhteTjww%)}ESx3vcG2=`Jqc!6Cgt4Ws5+HXNB_1K z-icHYSgJf*JHca1s&X8uEHx$2pcb_u6%Ohs< zQ2y`hZF}K8cLLCL#=4~o+y42_P;axtyJ$A->)+lsk2r+6LsDJhzmJjSAcB0i@SaZa z@9S-UQT^y1rHlLN9pK ztCbqG`2N1$wimRF5Pi=jnlt|XT{Ow_1Fbg4;HJTx0ldi$bs?IOj@>3#DnFek-9E*B zBHmEpngcyac8qix#~*hR`NRkJ;Chhq)M2Za_tFWxt zPfPU2?CQNI-yM9V_l$$&?HGXi6=ik|I@-@RsdJvs{&@n??IPlxb!3J4aMJI z*#?Gi&`IVv<&P)%(@#7^E^Qy?`ui(C2D~P)PV3X2D z{QC#-4K6KZjA8rjmHp1cb9gM0eBkj=sXsdp`PU=R&60Fh`Mhb-a=BYQP!%+>5I-+%iuKV#O1%rZ>()c= zMG2{yh`UL*-~p(UT_j{$>JY#3f>lpZ6(B%29ia`&yuX!uk|^LQQ;!a7+)d2EtvhlV z$9mjEsy2F-DMtJuCy_!A9b!fxx}vYM1P9^gLHQ98ht@KGIVDU=Vs+D7KLCXu#tkbg zoXskom$?P4TF}#k9hJ#?{n_EWgMG733YZO zx@ucyF{HKR!^RP}AM*Cuw}t|yR=jHx)6wx`_WoX<{`X{trQbRM5EEJn*H+IgUz=Ep z;0D~}=rHnn1mG`BqV0NB<}m<3IXeo!vYE( z84Tw?vT-AY5cPl)+_c@Q=dKVPUT;0|%i81-Mb1xrDV+c@iP-K9eEb$CbSSoug!;aE z2za!S;yPPsHy--nhz7JmTDdacU3Z%^blL>d4-twvDBg1;EplU@=`#(bA724D_wPwZUd*B?0qKbT z$}e)2#Oi?eH8zhak8D;_`EMmvyN-oiZ}nq`I<$fB*ux23<#d~-w_70b@lk2Ed-9U*fTDD)D|bb+e}!pC z@ArbvBcU{5x{2l>7LYWRUhv>mIL`*c=|JEXTDm|Gz$|R|G zY4<5gc?Zk4&De2v1}K8J9S**-n};ew`Z zsn3G=?RJmdU%C<5lc#cExg9BW(Ks#&$_$_3cF*|zWQd!?~Zn$CQ6xiN_=oQOTswUmkwi5E-v~DcBcl2F;0g6G2wURmxu*& zLpLkQaQkmItdZ`9)DJ?@k~{a|P=5FMRt@`ywUJ>b>oGSW!yh(&R#+nMY@&7Aa}kaZ zzO6aUfwhjcK?j#oK;OL34YXI?;HapNCoI5G10~zqLMEg9o;^MNH`mSA;%+~rn;;t# z*ksjHP<3Q~MeWCS`qwlyF^T?3u(H$wJ&@#mLCQOFdGvTc!0$M%4;WiZjkjM^jt_eintEjXd1aVG|y#Pzs`8p%jZe>&O*<9+K{$iAY^c zyqTONSwAhUHuZmon2?Y++W;fX($f~^!Fr4XaOY;sN%@z%RjmSD%Jtcek&LBW0!fmzKRZGgyvAaSZu*9i zaUnTgeEZigQ73?JKtB7DmI_Q)we*)KY;mV`*SkBb(R+KSewjAXZW8w3ow&r`@UrgX%7(gDl0Tz3N{`Dxne>Xu>@^LTMoyecvr5``j4PLL{gJauf^2a-H zwPr4+OVfw5<$iIs{`!OkB=@7=LWusm-~D!&@}$#K_20&3MBZ;;H1dPHem@%fy}N@; zE^|`(2+tf4lXs1LeO%_%D<4-y!^; zZT-o}{%2eNa!CGjnf`LG{-5`RThT3NerN&waG?M5ivOC4|AL(#6Y+m%u;V>B-;3;dI(93sIX&0fN8%2W~x(OJnzpk9)G%p}_$r0tVr zBDVE>R5x=2N!?Z#RK6T?d$e=~u$JATkaie>M#fx7YH#xqCC&ElQGU~AqN)8|UM+9u zd|*7(DwdT^{yVs>^ksvr9r;WQ?XL{~KLZ0+T1eNB+OdBpqW(J$rH+F<(OVHV>E9=c z$fY6oRTZ;m$1kbuKQ9Eo4P53~?307PVie!s*Yg2zNs%Yzt>pFz{VQI9*&KwV99yZ~ zolEfPZ)$n~>T@Z}ox2=}lLuz8;X^v3)6eC2uLTAMri(!OXo(jXoBrw3>yu8wmk*yo zO($9^%L}Nw;4}w>+xiZqR;-T3X2}VUzuciA#KHBtlEe`75;Jj5t_{#b%n&LlvT(+K z(T;JrX{Q=95|;ywK;LsXq0lNXbo}V{XHjYb58A3*d8U$lpRTu+`_M5KUEP(pMt{1Zj@7w)t789B*AqL;8v z<++nk12|GP<6*Tr=^4)zZB_0fBIgMjY|21xEi!6fS_ZD%>*L~YX6Wx9ljY35bjv*Z zL$zLgr{FcBHBi7Z^Lx`Yryx4lymeKUrySt3fKL(CMoFmAh@@BL)e|E?!8>X#lx=pg zNg)uy%^RS!62^;34r2$c*Gb$o<25J0Mmx8`2S?5#MM@*ipg&nB*kjK3>@NM@9|t~y zdhBB1nWaj(;9!Oz50Ghw@=r8~?Ma+L#BKL0fspD@4zRyNAQxuj=NOe>0$u01K@YZ% z)&5=mVg*vCQ9Znr-8 zi194>Gv%p1(dGVqo&mwzF&qENQ_q1p79PD50oI#$myU2*nOG`V52)#SEZRaMC3Gy# zEwdCdMF<<3!|YYI^nOO=;8LW*H48+f%THOCgCZmD9B0`=iy=}IWR{ih80ipptG=-j2c5tV}Ihwiv%MsUyWCiMgEq47lB#PpmVfJEy^}F^N@_SlH za^o2hCrt*bqqiIqQ_*K}%aBnm=@#$+JwYB#sGOBu>jSL64v2&rTu4*&qe@PJ0-J1k zPupw6m$D~<@Xy~2?m7mCV;lzI6XZ92KE&)7l{b%z;u&set$)LP*jilOAY z?H;Q0qYOueN{tf~*>&0-%8iLv2t+ikSpp@19hx-7ZWUu76XI+IZ16?@kQF4;<51?j zY#^k;wk6Sz5XF~*WfrvbT@*%L8wH*bkQ}N;a@;y!bsl<4rM~7&r+h$e&oq!GU)6+- zT}7(G3)W)liW=_Vxb&R#k0pmObQY-L6XOGN!4AaG9ghMUmv#!8YD`3)g7Xl;e7pP8t=P+_o+iZ)hiBr*rB$NnI%u`HZ>_>73FCXz^S(3&JK&-Wwwr`#EO&5Nb# zh*6ueq_P~_?}N=U8kh(P4 zz<65_%5EQ{>$k)aNF=1UK0ftQzR(#&rbANVU5eu#k>-=rQ7?T@Aww+$rk?!qx+%x2 z*BAGz!d_`JjS|{V#fnr6WDz@F{FK*^)mHQ{W`B&3m^Wr0NxZsX?DH|Nyt?zVp+uLH zpW89nWpTbN`^+)cwx;rE9QU9R)(y|9I61%Tvc@!H1ASc=tBy<3pxeN@j##yCs!7p9 zGU0wC&m_k?erhD)K1JGX7eDH9^vKbVoq?VUNo(kfd;(YT^iLEsGa!+Wv#Zf&;!XYB z2&%PVAZAQ<%{)M)z%F()i#kApu<~qfIA;G+QLNC>7SL~I41rBlU|<@74ci>qPxDii zsg*Ps>*%>xB1RdACh*y*sqJOxSAU7N$ttfEXx$G z#IY`W+4^FyiW2${e%0d5e3ftl9Ifezri%DMqq+buV5SRv#>Ui?ykQTErr4+}r)ogA z*ug{NL|F7!qN!2q*qB;O-sHxF+1WuA{pyn!?9=k7Ed}woC4mm8S1rC7ZWMn@qUQr2 z&3-7qa9*sn^_fxePRUvk8nDyhWwS^thG)0cF-5(!EHGxvP(ODZ(ntdL8eM9OJ_-cS z8L!9O_gyWEE%5_Bc8<^qW6nE4bLd5(a+OM5D0*EyI%&q)w_d;4S9&g}<_0Eq4?a)J z3S)}x{cJ)mFvN%E@?bNU|KRDf?Atm=*WetkVGA|e?v_wkv9{|XU%wx&6puC2mB^N@ zj2Sa{`_(reB@|ga1ZwD+V;nv9-6K)8w8|MVVKXjqBLp;(6l>?S5`Qn6MRDK5GG#zn z0hO#{=Cb3o6~Vr|>X}(#3dL#j>MuVfpQUr4%h#3pE(dc`>DQ9z=&QRUXE}&(ki_Sy z*cioq@l_>%NPU#;lsu9BTXMFxx(;8pTN1Y|6fanyIcwFFZK8q%Puz5pT?tjId2^2nBtmH0@zNuDN{gX@Ou%O2p&zr(+H?IgQ?5bTtz@eq|}z|S_WhPFWany9>DU|ev z3$e_XVjbdfXF6?KZI6!@TWPE{wy}ui_s8|XwdbA-?TZTYj1rQw)x};@elYM0BcPuX z@-ag7k&ZE>(m|3WXq8++yL3ke4R&*CbwoxK6Z$yPst}{zV83rwrZVOp-=L`?p!yVp(XIBE63ZJAPG`kvu=jhJ|PY zN=7ssJq9uz@aUGJ$O@Dy8WUrI7N@NhFYX){50Hy&ru*!WHNeUC83@SaIYZA)F0|Z< z8)|&C#iArv+ZPjW)HCW9z)Vww2|9kY-kzHL8DF47S`8m|A=u=AtEpIQNn8hRs=UfC zt0LQenz_^I?KJwsJh)b`tjrDK$#d-Xe-IpVHrG%b6S`oV*;GCm<-y8?b@B6{?iUJN zq$wONY8K0oeY+ah-*(N5PImMZ)}E8R5Wh>Z)mAL|Vj=muogC^RQ~)(ijjl%UpsWrg zJM^6DojFk8*8OOGyFbrEwNuXc992`A{>fR^!&j|C@3E_fu0G#V5oKkPv5uK&Bvn{d zUR4njY(0O>`DK+%lN^aAB$at8-A0T%Ofcsg&)F-`ydI{K4HKDh&G6y7puu4EHp|zR+**V~ zlq@G6>+tm%h~X*y!ERi=LBlv@13=53?YuZ z!DQDbcw3+SS@gv0^kxlz=y>EbGvnJMGcjYNfssb1xQGqJzhp!T6{gsA_F3uH->1{{ z(jV_t^udotM6c&&x!={NK5Cp6rZO}}$Tpd4vSa2Nbi*p6lWD&>55=7`2AU>&#*VSO*q!cl!fGxbqj0f1x!$yj4Po`KmyGWj=Wg|RmAz)R zIo#b)Iuy(0)gDCP|0zD91156?T~o0>E051kUJEI-(^aO(gp5e`6IGV%!hC_V%8C-I zjEY|(!kW*YXoJp0y5&%<)Pb_!PAwmi`g#^zV1{<8hiDo8Duc23sg!xap{pP4(m25T zmgulP8*8xU@4f;hdZZa;s=AIdJew);q={WtBweJV@}XAjUah)mS=5(Um1IW@(`;+< zSeUecaxih|5PA1}m0|W&dR<Ijn*_S zMQ$x4GSB<>Q@;=zdo`Z5?uNBv4_6M3pCkCv# z9hYJEGf@gV{|{^yJWW&Xl*VzI((=&h$lFThrP~E@z|d?gDsEh!4%4=8U%1xnK{W0G`bhX+Tk3tItOgiRH#)5XaRw% zBslsSC2h0V)?N02N$aA+b1E5vCp?zdcHF`)%}p?P>5f@4Z3^P{8M&AFCy#Rs@NHS8 zIdB8v09#ViH5D@u7suT-C|Mo7Xq&-CkL}dc&|RONWNWXB%w$zgr;khI9n2m?kzz@>W1Sjc104J`oAF0P z-rnS?mlz_R=L6wHnuOfPZSVWFJw?JhhUqPJaieo`fk7w_>Z{sNlv0Fq$VeeVaV&N& zFPD~&1|6Y&8n<-=uHib=XoPL z-R0$S_O+7z>#l@F{{N4?_Y7-tTl&TYQJR8^h|(1i5djNDYA6aS(wlS@=}mzUDIuaF zDpHiDbVPcIw9pCI5CVjnKte#J6G9*mLP-0E{hsHXefHkZ_5b>Qc)#Sj;Y!w;duG;e z%9=GR_f|p(5=Y@lZXHtmQ`Nv)@nLoqf3e1xKUtwpZtW zN|Xhhj`RHTYZAy^EJM~5`|(h9<0=T6rQY@(_&6IZP%qjV8TDVK3m2@o&Pd90|Gx5P z5dU{lM(@rdJN020RBrrdy!m(a#_Qc|(hH3=f!$-x|B~~c9t?L|=0sTQ{H+XScP@4} z40e5YUs>ospItv5!5(@rYx%$8_AWHc9{f{+}O?Uu0YT z!y)G+{`uJZb657zo5c~Q|HFj;>?n7>*e#HHXT9{lxz$^3~4|C!q8^=^H4 z_Dybs{|xvazQq)Xu?U-}VI+ic=qGzqWudV0qh#=UFB0rj5w)xCz*YZ-|^G$#{Mj`!6R#} zsR;J`>IQl*=tia3zqB;?*WTmvmu!)}%Rc+%pA}7veIO=UW|WZfA9DYsR9~*LNw{T} zdiNif*3Sg?xfJ-}<*gh4s1A2`3lY!A^;)j0BINPz zKYINq&`p&&~ZI4FWvet*8b0CY}?^ociaG{%T9R&ai-kTw(QCH zTaB_byET--?8T5eVRkj_)jJi!UT3Mh$@qWM|9>97-?}q=5!+|Srt;m|zTzC;x1@pw zud=;53^(&sxjbfxMmTZ7a3l7mp%Py>gAZeBuaPUw zF3pP{rP3NZJhmQ2&}E7?e2Q~xqr6KJdPl8I*Plxb^C8;WD_iLIg0`<5VB_x}rzQ|E zeAbaqBZ}dLdK)QHl-o@yH4i~;=m#P{ajKB^Y zG-}8lS@QaQF|>gNA-6Fs3fAIW!z@EhfXe~@9N?i3-&7Einw=xeS)q=XnXWbU4|Xg zLI6N3AXS7&RyP9Lm&D!CKFUt!TK%JQa?{(lo7d@XX_ph3p3T2E^U_Vs84n#o#)={* z?$M`oDB_nJIg^(VDuu<>TCNc_`+DO*6Cc|`V!w4ilEzmv6N4A#j5B5gSXTI_{KhOx z67({}RVvGK)MoE0>nSlDBw_veZGry@_YP)c&l@uS^)#ezWqr!j5p776f^DZadnuei zI)}8W3HOe__NubYkVh!DuN?=~EJY|}RH;Rvj|T;Pc_?#XW^*K!63`g^p53hM`y+0l z#_BF8k;1%0tGt}}P-@~6Ey5+VARKX~3SV3Yrtfu1^~kvWX``A0m+Miygx^>&p|w$f zcp{@q5$_Ii4zpRJ?@Wn+p!oS_daU`XbG62T$lMDlg3|zNLlEHxVO7=6e%OFlLvvTh zNjTzp`|R}*Qaq7p&3yP-5D_Fe1*-1^GgQ+nXz=z1)&O)a-LVws@;#5Bq%oJg!|1&% z0M0RuoU0b&%?2>u1mHW&cL*_aPvGJ5_4$*q3Xr@ zAW1ta0rd)((A=(w>}A)BJ+AgCwG(*C$vrM0tEwhqHOyWF}}LPiHgxT&cHd@ewUgKhc=ip?>i?QGf$R?wK80%EDE_73Hh9do)KW2O`(lS)QG@XC#aG#N;}8$NuB;uhNm zj%iE{0yCd_wBiKM-0*CW zUT7oG&IvZf8W%DL0aWfI6dJ1ITZ!P(m5sT)G>CHqA(^bDCIM#7Xr*5}7KIoOy{PZ6 zg{!yDFzo2CPeQ)oz4v(kMKi8w$Y%`?9D$+$g)wt3!U8^Oi+o3QZS5MC3%}SNoE$ym z{xi03V{m8Kjy&Eyt>c9I9Vv%%W1mMD+ab4GOO{f=_X;OWP$$aMeH(1DiosiW_<4x- z5^=5@zGFh&7KyeJ&{`fHVsdFh0w47i&@%j-(!$H^A}JV!*J`hA1{uFw^Um8d2wrn- z09Jm~+(>I`@g<6jf|BKc=9X4b-Kht(epDp|yrv^I7Tv)r5=770@RqP3u$`Xm4q7Y@ zA#WUAb-r$!bIv-_f28~?uBkdtPX_F{lMqB?bw#w+Edv*-P-T>&;c{qtH?16Inl{kw zn3h~N-#WkY#rN7z3^A(zeA<%}Uu>#ww${VxI~5H(%8hk6Io*2Os)6{Pf@w@-edkHr z{EOM{u=lkQa6me(O`^+Lt|~=^P;`u!|Av0Gf4;{q}=YJCnWr-bik^eFmP+aVJ_289%Z7q1=C#3 z-mo#7Z-UdyST24IPZL>W;A;oMHoHkq$4gT8mkx_+Ey`Mp#{fYcgI}>40N{}m*p}>mp1`?`C>`o#Z?-o!##$fmQWy0z@+3PYg8#+;RkM+zA zQe=06N!Q9dTQ++O(U7%_s=u5_4Wll5P1y%gKz$QI)xTa}M8=AT1SulFNHrRi6&Jm_ zvJjH~zSwWI9GNzk;rOT?uZkpUdrft8Y6BTI8)}LtSCAbHIAcL`5$YjM0~6LrbbjS6 zsyMMM@7u9VsPjm~%yL(pRE40NH+7C^u8;+1naBpMZjL!-m`@P#aT!j5ttHi427WA7 z(`E~4tFeD%${&T=P~iZvsTjGXzh0FmZrz60HZ$Wh`^&De;3IZ2}px`4~7kjSwP1s2}r# zYLxM@<^*+Z-7+?`m!cR!x!mE^In=nIjA`-B_nNa^ZP9ZLg(c|sTuUdqL#uk1wR0B? zM@Y|C9>TZpNmwUd1T<#ax$*0M3I{XVm_)cgU~4J>rMN&}ij<{zVB2_y>U+*))pz_# zK`-)~Yc|a;JYWWU;}h)s?3T#D`gQ|=x>6f`XXlLZ)Rm=*xdl^Zgd9MDL=TJ(BU3`o zfVW@)lKAKZ1Q@3%JPp^Hts`SJC{4shXv_dvm+>nAk1W!ja?sbQhU}ls4j7O4Qe4Ma z>`X$zw|;<|=Q~*6be56jHXvf_!WN;-hveMfO!OCPm}=^8NI_wNlg-g}WE0nBRN!sD9<(Hc-O3JFec zC33qlA29H-ZAzPDO!7m>s=HPq%DT8sW3fW2jB;?cH zNZ94n^yxA_&Pl23+A_mwb#qx-eJ*gNR`ODCSAsdZ8|GJa*+%gsnIWj_*osj8@*b`R zITwWjRQuYtOWG>Y781xc&(f(y4+~J)sb0Ad4?N9T^@0EAPtQ2YJe}ZVlO8tiS1`jj zxWmRj(La&n^&E?z|IiF+C@%JPoIl0CETyWCAo zF$XxY&vj8FAO>UHQqgU~wQ#HIAlvC;=s`4nS~*y(!60=K)DL&7xKk}gUV|6=LV49% z?I$2aN_})Qrn(Quw@@8OPSc}{RCOxbO@O`++K{yAi$Zf{sN*BGE(SHvl0@pyEug~D zwN-o8LsX^vXR!Wljv6akdE$!x2nM5pKD;$Lf*czw4rs2%l%MWJq#BGMF(AKks-pB#%k(QNBXPUm@T;N zFyG9T`vu8+<$^q@Yth^pkwnNx=5Ja`(2DJsDxEE@Qt_=;Ym?}g2<1XXgQ8lL7j>~Z zYwQ7m-N(si->Z=fH`bc<9H2^XrCo{^)?5#)lD!T#Q8?d3>xk|; z&ut)}{UND9^rshX7ZX#|xr3Q-a3{A@!NQUU+B~|kqvy>YHGTS={j`mMzl1$Tu46ni zuz>7o>FCy-tt-etb>k;HTEWY-IWOaE=ME}WaFh_SGfh^T0s!7GbK>m{Z{7hE+|a~$U?CVP2S~Nk!z9@pyh0Nf0>TOAm z;p?{Q^+W`IioGf2w)b0`#@oTuA;ap5$cZcS)GYNYM|35ch}AlFoa$JWX_26I`8N-@ zj#@1=Fe2laH4Y8uQG7L|Nqivh>y6B{(aX?w)a<$pGt{#uD})!AnXWE(*jNqcA9+M^K#%vRr9+s_e6w26K+ z{%}qwGP-bbtQ;1|N%T)q4@cehSRzq_80AsR2!OIyeR0MQKW6<%n;Omv0tGA;!nfEB zq{sM(<_!kp+CdS%73Ujox7&r}S|0}7z%MvXshIu1O(WlT!1_B{+-4#$kgYVo2!@2N zQwMp*-4ReSWj|Fj%PMZ_aXVvrspl)1d=e@&t?|>4@QU$}artMaSfIjtt3sb}88wdO z*bFy&w`tOusq88UZI-%8K#i+ALFQ_wjX|Xq=DHL2$>f#^wQ1vq=xTMA-SU#=sy50f zFTTMb4?tge?07J3xte}tu)ZD8WUG*xUFy$z18sa#Vu%osVn#6LO3V1nJZ>9|KQqA+ z)*EW))$*!2EX$Yn)9&7+hOB-=O;#}-fCj4rVdF$Id1FbCXFGnhPDxR#{`pa1I$uM%E^tj0tmO_Z-wW*zgA}vUw zjRdxlt3{uy>Vwg^! zo`GmEKBKZYSz?qOKP7v!zmw+x&A2 zr#L2ZTLT?+$zyqFx6GMFcKnCRZ$VK4*eI3fOVus_Y<`k+P=%(TO zeakyqKs1q z(Kpu3hguPv-RR|b($}kXff^sQ-sW_*C>9nd> zl)kv^a@@ei@aD)g#b&b~&F2J(p6wynUe5Uz=?Kl@HG-^d%=iKsLjbC?mPK!z>l~D? zV}j3B=sK%uE@yD%h26W6>FiE+7Ago_SlV8PO0ZEcj`+mh)6Ns5BeIS+G9lkW7j|@T zy0j-1zTWTHJ@IoK3rJ;NZdQ_Ddf9xnE1b0>=#@I-IN~|08ckHD*Wa(6<@(5Qf$-W9 zeRPb2+h-dV3ydY%*Ii7d-W+5U5hX0$09H40{GuDH)l*1OTFvB*U*DaGmBOu0!x_s2 z;2D7O<-`o9=^(%M+&R;y^=%HJ+e0O3GER4CV`x^1`1Y6Su?0u3*iBpXl%w0mkv83l z9ct=A*SW0dHnV`Y=(r$p5=}IJZf5{lL;p5VB1jJh@0GvK4BxVG!)V^lcwdAylJ~7;U$Wx>>O}ahHG$2YN$txHId(4`f$^Bjnc`J)M9ml$cR? zLVs36c-?u(%k?)%NoO}L7Dn?q7`_!>i%n#qr@);imN_gb$l{0mCy)7V>mAj%sCi=f zb=+?gTJud*Rc%Gq_c!v0kkgYP@AEG#-4ojH>hBZ2RwH85`Kr{0<8X2WYaz1Q>wPN- z-`)!HB1R`FPqw#S_8MqIuB;4P_R5`5oTJ>hoj2RP7?w?U-PXeC0^0K02(f7Lm0?Eo zU{FKyhKro;{px84Kr5J<&p?u<$(YrkwhdmXL3Fe>&g*1`Zjur}8=a7vc52=m^w}0( zQA-dT4NOoWqDvya!neFMUlvb4YxY;a+pK-+@g7bdn?yZwBXF)#+3(dJ&V<`PKe}k% zt~h2&m_kQ?>H*kr%NABtpe3W+VG^@Or}COYxLfHp@kIXIAf|U1JA{aDA%|MY5+8S29U%^ z|Br(7S?#A;7W%R1Y3A1?fz{T#Ad#;wUEGejQB2@;`Yj;t5ltvM_0y9&QSfm^FvJ1= zF!19WPUmwn*%>#B5lgg|I~4-aD95@&+;1a`vS-@GBwNe1JJuN$D%O@inRh|dwa~_B z(U(;}XJpKiU|FZSN|ohI*SUk2mMuHi4`l=!aGaOOmVa>6=uxk!j6{WUj@!4SHs>lF zDRplT@EqX@=kbN?M|XZ#aX4*~^l@MLZ=xvJRgJvJr!}axIlNeRaWqCAG^L=vpY;B?t+*$JV zpzKC3Z^v{Xwk5mPiF(edDgTwx>#D{;FR9nBl;p4x-WcyshB7Mv7Q09Yo3LXS!Ljdz z$`O^qX~)jckEp??BoswsDhapcrjB+BdZdbZ=xpZx(*5)iJ*rd` zu}zrT%ea2GC}}YIs)mX19@`;Ub=HbJU=0C;QKzfBZ(0=0q{_(OIEW z*cw-BX@^1xkYtcC1zj~0FFl)I0gbW6)Re}$}a zSvEP|7`bX1`oWU+VvB%TR%Fqnu@vV}>cm#uuZ=|o5Nia~ymhfxxjLn}<&rVYTR5Nu zvwz_#DOQ08icIV<4^|u^T)}A%A??e-(Il8im9f3O_QvllUE6fC$BWCC3GSbJ3cjuO z7VX^NQ+;*DX^5lT z$X)@NM>=L?!t<3b-W;VP-gK_C6nI@yv5NX7Dnhc)v-N2oNH=>?FpwNkeJw*n;m6`g z*sXUqGRgKX#{EN>9L1h+GjT!*U6o##|MHbl2;Pe7?Sf%`F1?WrE%};4ITb%pia`v`>@CJEN0-8%Q06o zZGrK&jH(qSdHdB>Z_Cv_??Vpu=g#g)EnBSnkfO8$g7W8|^J*~qDSsT=ax( ztg9wrX#q47-zO|dSK>HX)aigwy)oWKFKF_K(6H2}>DEWLD zV{VF0Nr7&*rctzmS@In8giVvaY&7rXYd*Xa3L9bcQWK<83%q%t$u;EHCF zQNJ7!s(Q&*c7*bJ3aJ8}GN0;RYVfvfIg{f&@*)D~Oghzw1pE}t*ojch>5wXv-D!7T zA?{J6JX9BTh_MGJhW@@TuWsYm;P2o!U1nqD3x#Fa$dWG0uZM+dnYF#!JRL6O;+L0K zPmt|jg<1@Q%7$@^y;3<>Er)p5xN$uz=76kOGqXfcVOIvr$h2B!2L#hiGOJj?x4a?T zwE_@l7iUew5`#0hWQkG*sn0T^i zP{7Wc>bRV!SgG~G$;uXgJN^4Ex|N4dw&>e{K+*+I;~%_iHc~BLe7q|TL*5Dr2U22(@0XsvroX9Y3zhHAH+mIIRr$PXZcp##wg>ij2&$8= z$HZ7{HU`f=&kua0qwTBmVff)}Ch1h42spLf=r*w)=gHh-(yVW*a>+X5gWu7+4>a#j zOB_*ef(%OD7~xgw+TR#|?dTpX|?06;p|L z33(@{{k;C5X3zSg*-i^0KKO1z`UoJv@1|C=_|*ZR#236Qz$#HrgE zWw=qI!1s9*q>uEr)T>V8e;%73zS+K}osv*&DIqFc@}X@~2loP*%o>L;GSMp;2o!s% ziVs`~ga9Ix{3}Fdv&vqFbsfcJTa;<4d@!B!5P5+c+vkW{o$Q&4e_eg6+PF{|Z=Krv zo7rtl&03C)sAsku{%BnK9|S8VX0ZcSNho2zV8;1Qv#xo3Zr zPr@*|X=W#z7r#5PLZ}{vGPOY7@Z-Ey;5c0t-*F@33ktEF_DUC^Zv&~y8bo+5sGilA z^oU9jjkkM@w-%{9Fb5Wy)Ex(}riEPDteP4zRf4u}-d8`eGx?S21U1jPh=r)tL)Uz6 zN=E4`FWA(ZKF{J@-uM`Lc&E=3%e1nsW9591E z7&$tvk$kUmcAF9o5^Vi{)WFPQZ&zNZ(BK4 zkOKisv*v1%NSl&s$)%sc4GKlEfy1B`2SfU-=8$$z&VAk4uW(sUdrj!<5ytt^BBbyd zcr4*m^wuiElrq{x=RB{@@{OrV0+urgWFuopwyvl z?b|Y3ht3+tot$~my}5c;OK_i#jum`gcn zI|NEi<@3sW^cc?H6nGqz+FE&ALq|AtD5h+Agrhd_NYPMuOJStTO&%*^vo!>w(Kvj$ z^lVdEYoEe))nk~Em4}$(373xG<>xlSzko#sgR--H&!>TmaHi5vd)B3vb%@e+;hWwg z&IS@S^}Tlp#HTk zmPW|J1d0(s{h1$V@Td}j6IB#)&Wx+tA#WB6s4hDe%Bv!aR*Q}JzAsHD*k{iNCWFF4 zVWP+eafY>$IXNL%zuf!iTqg&Zpa;@uGg|hkPYIMPZmTQs4sBLCnC{l3eVgc`QfegW zqbrdO{lyt}^3$>TF?S{W@f=qqFdyptxrO(g(zKoHuu$SSVoK~`3bOs3HdqP&M%#Qd zs2}Rw*izVL7J1t@{B09&-iHH znCWTN{hHVt5;+g7_Bg1Yu+>v{gxub$e_w~|Ac1rn>z+KkDOFDl#Gc;L@1<7R@Ic^e zkKq1Q8G)U}L-8&5q^;lo-omq*i4LvvZ-v+=Kk`xp2=-xHk=QqI+(c5j;D$m{<&KU0 zUGK=DmSv-GL+3*-&FC+@ofq0Ai4lwYv{naoqE?5DT_SRv<2#f?4U|59eY2zx6qQP0 zcR?Q!78d0Nm$n|!R}+<}7Aw_RA$gW4P*>r#1g|qq*^QzT5~Tb1XA|a!{6yUg!-EgD&7{)<=3bY%+eV_840(YyopHXp;C zw*Xu()gSGQZHE*_#$vQzwS$E>+8=jV{E6^7eSBGmSA zwEa>@f%aE!mZ!x#9ccG08r}Kaa0f}Al2bu5T;#I7E`KouTtmcB5+KeT7=y|@Z7+`brUdvn|H8#Iq~F?_@vMY6|HPRr z-T?YqX1^1dJmJH))&xfp3a{S4xv?EIqep&-wZr zSM_aB{SBc{j|=Y$LN+a)$~oR_)pHh|y9v#ws*udP8WYrRqpL&IyIZ~_Xj)r7aN!03`kizyO~5Umv2<9yS_4t0 z>ZeFRc;BZN{7Uft=?j6M7g^hHyjq+Ajz?dN>?BG=w-eBej>EXuH@I;(WrBYnj>JB*4{BUkZ5{sJw71iVD4AP&6PsW( z<9oXJ$>V}-R^wgW7Z(FZtG0&X4Z$6Y3eFeK+xEZ`%jT&wZb3j9C9h^Rm%Bo4?YM)IrabANG#OTddq8u)Yw07U+H1Gu zlNxP!jV6?ETudj-855q0b?%y%BhusH>&_V7k+uSpUXhmkTUQ*8#;lSPS- zsJ~9CGILla59q$2u~-c2=U_a2OCxZ$iupaATbz=Siq$W*PNFsGH5la!tiT^8v;c?C z9!;=7z4&&~+|>({2xVdKw0@m?AW#TX#rcR#-O16cUIutcC5SISnQ@vR?sv2FlM-Hj zt-HKGpm9=lk_nu+19xesO`0-`L*!UXJECO@p&mUoUV=4BtMeaZ>f7OAaZCFlqL$PW z1(s0NrFG{*eXjxL(1I6QSgQG0(KBiie|1u%&pSfRj9nOMAFFmrsk8X456#3DJ{)x* z4F4f(A^}8$7C-dz6~>Q6w(CE!b-A&5sH^4G&ouV(_Gc2;Goo_wS`}*W#0%Nv)oOKhwDUVZeSz7!lssdlvl4KlI&!Z z$DecFqO(Iuc0?C|-U%IXVI&UyShfh2+Mo0I1YvkQN`-Wc1*Q#^jM@9d`n(13lb1qV zavm(~MPd`|bC=DlXKRBjT0Nu!MJvNRuz|~@2_8H`hV4;2)}!*N_~2TARzHfO?4PI0 zSd?*!7C8R+u(SWbZCy-dGBB=1m-;Deb!^R5H>rDNuq#orJ~LtGQ8k0gB>MJ8EW!v3 zKgw%n0V)!r)f9hlW$b$(F#K(hlxiJ{M(xNKYg{rWzkVO$JF9c6+UsBjr(sN-cjEU& z6;acoJ!Jy9Z{v*;mca?B3RiCo+^9_5FVZsfMD$t%F4}9`@_g*=#N|OA9o!EEE*!E8`sB>cQc)( z=GI2&`*iQ*XeV(N+(bNh+PY*NJjA0H5I13zy-=Ij1H=ak-t{bnBxiS>MlB4tmVIEI6=n-@4cowZqTs&MLKOD+azDkAFt{L# zQ+po-2Ijb8JB(cY?gzJIsiPVK`%4IZ{bSgy;FuCTsHoZdcQqGJ_}dMK+^rkFa3d{W z_`4o!nUiQ|cU2k*-=~i6^P={Q_-2hHG!KJ|YXcxXNxd$dH+q10?XW!-X-7$v*o2(sM(Z}NejcgoLICNMb$-vnxgmK$D|LB zIpl@gmdxj=dIe&TH(Tb^zJfa6D}j@OGo`|Mh2^sfrf>80;lKI^^Ah;gpP57hMy9DN z8<)pY2s#9*bWiGlIoY8!C@(I|1EYRmysc5|P3ZH0X4=nG_>JKJ^;o9=GZ^Vzs~)t& zX;$~4M6vi~&sz!FRAA``)cKt@t3!JEQTu+pbnXBfBMz57iZN4AZ~W3&A#eog)YNy> z!pz>Py(HWwQM4&jhrA`8r3<2#7KD=TN4UgH3qpE0vVB_oIey;a)^Aa{h^4K>!2nN`ubhPisWk?Rkt|qD=O5>wK(^S1WOpXp*KQfQfHT5Q5!iq-tXK( zn0cH~0xDj`T4|j9_C=p|fRr&V1^!MtoINxbi?Az%7DePDG>bFMu~y}8=bK7u<;Ga|VznMw4ezvooR9#v8~Da2b2iK)6ZVeigH4*6tR6&IwY+$#bp2h~ zS!k$BJd9(m9$DmV^AHA`wK6aEsqgo|oT&?dlr1ODzcwRBm!nC4gf$;AfO%|jXn0Fn zxv@RVJG3J3bkj%}BPuf`IrB_Q;F7a7Sozulf)WlR#@`~3dAW``p{emyiTo68?&eY1 z?k3B1S?%osYTGPJ0gU{bA&)dhs_L@@{E%AeZg#kOoY1Y@lTVn=T?+fCj8n-GfC zD(9EXd`tWc3jkt00rNpz?4(@GHt(UUiEep=r??LNu)Ooh2>2-M;b5OE=&-Nff_7ik%m$K=tGuS8e{C zIgClT5I7fn2YI?XZ{-geBXp)Y>@Gp^hXZyx4fQa{G%=YDg$X{ zj)cy$_btJ5$piQ50u_!0HxP1^(l(iT!2Pddm$?yi6S>i_wXw0cZ&v*~vmHcakDUw{8dJF9o7`AB3A(CFWj{Aaq| zr{JT~FS2Ehru>m+`F{ia|1eQ{KWBiQtLpx$eBS@!wq7{zgY&kojB9>}z0Y%Uy%94p zua)FUeXrMTmV>DLrXun`68?kvXWRF5TNM%aIzHBu`YXF#$l(_;oqSdH^?^DO zVqQb;gC|rt{`{MJ%K7ec5{65+Up-+9TBTlZ}>k~BjNvXfvq3^SLi~1_yO$Ilt1C_zaTN@HK(nu?TKmVrh1l&kJS=a zC4iIX=&sy2E|&5Ac{%>^+gCDrgI56P`^ryxsnm4(w>|{kG(g; z`!Y`;=AZqnnf$zQTP@Y-jG5tvV4LKA=*u_p+L#BfVHqT6*NTh$kZ=_$#6~3xh+|?*8Y{kniB6zmD{jlh1cjPax6GJ+38|MGM!J#T7 zT(#wZqk{DW+nL-G6UD`IYN7C3{ogRvLM0}-0z~D^JP+xu7y)FD5Ymr6a9)Xg4NVX#Yf|Pl^z9gNrS) zv)t_Wof|Z%Km6bF%m1)XGYmTp)1V)5x&ldT55+rd&CYRS#3*io60JeLa83H~D_9S3 z4j|6>n728D&fDO?IWH*u2(`7{T7)ZqB6b}2ievbcHsEcTg$?|_4P@Ewni^+6qPR%q zuc{xzC%mY!Chc^=>v=nQa10i@ehPX4_}giVX|0Yq6PbHo0py5{&Q|NO^Ttl8O)(zf zKLtujoz2;r(Ar|Ii7~VT?C|&Y3NQe)wTZi^fOuS`3p!WLgMK?}d)ZJ8^j%rTJxis= z^{GIEs`?6X*|Fc#lsVcDN$Jni=~u4vz{6le1I81}_@KM-^DOTaK*YB*Z6x?OrFT-Q z7=xBdYA{5?CstWBdA0R+`^trRtmw4C8;Yq& zI#}nE^4%%Pl-sdUm+{5PK`M_yOjBc4i4fKRf^}woReA5Cd+qba5rWhAQ*^@-npN#F z0S(x@uwUs~7(weZ6Ycgn-df_JndGSm5ddRYHlBdu7pOPgPw-<c2Bq@NhReT4LQ)@Zev6UAo%(Oi~f*SlrH za71V*H6x1(agunHE5>Mh8A)`N(pzo#QUGH@w*>oN5@w8{2OHDumhRvK+7f_7tCGlUVArDpGn=n0*h?m^;>yE7Oqj8l_$cy;Id|{7G}2e=8$V-S6JkZw9OKqG=1j z6->8_+?a?Ybk%VCfk^B5)L>;)q^sE43SWIFgV)5Q<|9pf3e zN$Pgby>W}xz^`JSqtb<1Z4Upfn!CI74$5|3pMCz;Q{%5dF{-au81GcwL?R7+URr)o z_(Ik9QCId7?13vV*L7d2RwcIaySQ8XMr8tINtfj~a!j#`b}aIC-MpepU+{bK@lQ~& z+PtM0g)YGa@2id^K5Ftg8iGItMD4t`G(?8Vq;}INS&jZ4I+OjIDw!Gs*Yw>J)&hn< zmXU*HBI5*GM~^9O_c%5KGdGv8YGnL+*q{bl&PcA&p`lPGgf@MoVson0*fcy50_svM zrq~>P#0*{8c<;kG~T*UlDTW?MGe>%;2$;W?59V+qNIKX z)O>#R-tU2o{el_mdr9VPU_ZGsjb9r?xIDP;qzL+5&;TV*j+x8Ad7&!j_)xw@ww19a zwnOy}{8`LzkuNC=W_kC6CMotTN(6(lp2VkVAJ9<&=`cc8;o2%Nd;u8Q`Ip#~r4&G; zyc^h;LD6QLa~)hull02lYy1Qukv&tPG_Xs=tCxZI9}3~8y!1XS>8Rn<)}76Z!I!&= z3dW@m>!JK~)Fzbt4mohlazskZJ?R2XSU0-*)AHDgxr{ii{`*natX zLoXIcO5`dkf!YzKzZxhO5Fj*l!lRvgCH-Bx+^&~z$PPpTuLq>Z{*Q_H7l`ZSa+-)R z{5PVvr!Zlm@&a#frWBjvcz(f(^+JRw)1B_sFjU|y>1amcy{@Fo^idO+P8CO$4{E99 z9*ED@)-C*L9wr&^yhkHCKBy0AtPp1QGX2MnJ1I_i;&u*ihP>tA%(EQB8PZi=%QZ_5em);R;MZPPn-nx!YT3otj=$ccOyc3`mTJ;9?0eh^KCWcRFS`|cL=ICQQ zvl&5JXwPV!0d#Y436SpRAoBCf_QT~2T@S-nC44I#L8LjP8oB3~g6e|+(fyx!=5G+; zi%&6`dOpWg-a5q0qE?NfY7_!PVO9>6HG%8~fzJ>}`Xl|mg0}|v1-IYyh~BO2q=MXD zo6Mfi)vk$Pd^ymvgo`YceAu;<=d%1#n2wk>qf58tY}Ftl#>%e382vSB>$r@SB`otE zeiJjPf@!Kiv};H1G{P7ha#R(u@~bg(MJ5@im#uH|D>equ#sV4!@R()%=B>7FAvV0` zpWN3}<7((zcm8i!E4?;U_r?DW;un^c%pZ^wtwrlx+ffpEnCFtXuHHrSnQw%7PbGEC zE44%Bf{%k>fljNxtes|Cnu_8@CK_jqoR9>;EuRY*5N;4QPP~PEFjxS4z!cA-_RHx$ zYHN-(C01dY;~2{?5dMP?4ex33ImpY*_iaywU0FOTa((K;deC4HcWY;W5N&bn7i{Z! zmIF3Sg77j+c~f5Idow$i-p0a+`nSWTCKfEBx7`-D#n#$&=>oK$8HWc{&)nLG3%u1t zykS3nNu5M{gGX*G-H4z}kInbLUmA9HULN+iRgav8j8y}`f|08O6-OHU>-$%Wvvv}i z@V;2@&efOb@c$Ecv;Dy5$GpP-imbEpYa8ZuD+!V8&CyAzs%hPlaRE7JuXd2;@IJ6x zjruBdz(Kn^;dJhm9ewO%MfK`D zP_(GhMug6#_ zN~vW3twS1JpV^9YHbyT6RprzjV(!Ly;MhyOX1=34+*!+F7w%9^WqZeB!~W!!4<6r_ z+2|jj0CU1cXI`8rx_di!N4m1Y{NgW?h{Ct4F7ZYKFz<#BYYEV4oxalj-#MXEiXmrD&3Ba4zf5bFv3NB+;1r``&~9@ z;@ScseFK6g*{V0XE4M<;fF+qr%ncCCvp^d&X@2hmE@fKCe}iAZP`~L0HS}oq-kBH?@A2FMpCkZi<=hzwSEMtCO9AkMEUQ$^BW}sWyix@ zd~Ec>E~R=r7^8J*YAPbxERC_@?6+?J;rBN=Jk~4YIyzZdUQXgLZ_r0hM{SGJ{8t`0 z1tD;iCdexPG&2{Rmg&v0ukVx_d*^Ru`A;WG`Q^c>ulqB#ryT3O@AhY^n!G!rml!TG ztj%@r3|okv5(Xh`b^5me|9HxG)QcIoAnJgG(3zJbXSzsJ(CJ z75j+hrMxHIT^32_eqBVjyc1wkApN3G?Ju!9`_G!AFZOE*A2_J*p_(ooJg>wb#@80N z@ay76c3V7Kl}C@U!+iFh_upPZ+K7`c`uU#PCp`s+t_vJdm9pL!Z_Peyro`M;#9{tJ zSIvUHX#JH|=|e&>v(nx?=ej?J*Z3LL+OLRSf6BIkmF(a>!xl7jn@iN}4yw`tRqfLH z+)3Kxzm=MFNcwsvx1D6l^6lhZ+i;rS#;e#oIt_kUFaP{LKB|l_X|~71N3ZZN3ujr$ z;)i>efn*^HobXPFgNyIv;71@HWgA=iLX)kvlAN)9ys+V$3J&OMmlJQqld6k^|BGIADDg#2EK5}RebI9ReAY^x2eIXNm6RI!>Z(!PHU45U+KBcZH=HnJle79_HERmL3um~{A?s<-okg&>blF*)tHU?S&-!wV*s zYODrUF^CuyRXngU#dihOk z98p%#Tw3mv}9SbJmj^$Dl7zU>MC z4ryKi%?bGO12acs6~~9>g>n^Vfb(8Rc8NqZByVAA4w7XO)dBV;x!%=;$u=f&sQmXx zEGaUavJ#kVk@DaQ-3c`|Vbxr5pjzk^u%y|Umv^Ss;U>omcNb0OofqW|m*%+NERo=K zMJane33SL6KQ)X#sNU;s&9yHn1h{}Ou0g>_nh97#&T!Z!FUm4gdX0930J6)bbUJK% zyuv7wcNVb4o~j45>x}h;XUY@08|q4?I5(JG?O$A!QLa~ezy!%Vz-ra3G32<*&1ap5 ze?PtT&f>;JHkMPaz$~-#i^yA-1x~C#41*TRp3g#Rr$7oPha8q!$Cjy@00)t}v>Xh! zt=JQSTHJ>$VK_cZ^yb?&C9I&CoCAL8Q?c(ozKtnoi^Z?+LREs_8Q z#y(AM7Ee=-DHDMy*XWhbtS$#d)*qMjm#CGZPWMa&rm~dOFUHxO4x4~VQw0CHEofr- z@oD{nb7`R{xdPaBDBy|ocSv(z&;v}5(+i(p#4_{?sXA@|^Fz0;&tHxsF%8Bi4c{xw zYDY;%z@gUU;}RuIz77jofJ(hP&My+|=w`5Idvr;73o}aSbj)Ws-t+Oba8!$fGqAYM z%P5@I?%>1vBT(RS-$K-Ok^?8JMVOAFUAG&s*k_rTd_~fPwK0hM!{Y^4Y!7@w^~?{B zf*y(a`xdBjOo;+U_sZ&qr^*7xjCCqU);MSIAtx+_04ByhUhjr;N`f65fk7lu&gbjA zAcW~pgvL~x)2J!eOaFjj;>+I+VhRH0jn4|R1>ORSs0xl2d0t>f{FouI7PUkZ&{*YQ z!Kd@e37D^0P6Ywo5m_eP>$cz_%b|Xbrjxws=O!WLCeVeS-km<6&iGT%Q0|^z z-Pe=?j2d6`b1|J#ea$A;gA&dnE(%pW;S;!40+XrKR-ohE?(SV9!*o=T!`_TTP5k)u zDAZ6%;%s@mGwG`TUSPp&0cx?Gt4m!gkRbpxpP%UzuhTgvRQK#*U35IJ^86VdV4i9a z23Fl^z}&$q=<#)N%Yh=t43M=*8cswiT-_LX&e&KH7`_wSfZmmohyxDN|Ke8pU!k}n zram|eHGCE^oje|U@p}a*XNiDz-YisE$GDBGjFBY^m;zR8<6Mud78*)R#WJE^v2Cb9b|tbC8h-%uZeRZW3n-KE zNGcXQ0VUsitR^T07?Phm)&oQR$2VSG(2OjSINS^`P*L?H)`1zDBv5SB37}vb4TaHA hfMt-8k`_MvXFS%k&}Q51V`mwFz|+;wWt~$(697U0qaXkP diff --git a/docs/images/admin-vault-integration.png b/docs/images/admin-vault-integration.png new file mode 100644 index 0000000000000000000000000000000000000000..ef72c0ce2555783537017a2624dfb06e79068029 GIT binary patch literal 49191 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%0DIFW?pkl8C(9n?VpD)P!r>;VE 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 diff --git a/docs/images/dashboard.png b/docs/images/dashboard.png index bf11c37d0a087d12cff9c9bce9a09d9c17c80a1f..4c217b3a30d8532e23ac3eefeca60fc9630458f7 100644 GIT binary patch literal 58856 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

>YieR!bKR=3rN5I__r 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 literal 85683 zcmeEuXH=8jwl2kpf`|oBM8HlHP^xqg1*Hf`?;wUw=)Hr2AVsA~ZxUJ{5J>0&L`4#5 zV(3+*6N+>~xr=Y_bIv~d!!hoU`|obX2!yw-cda$oY|k@SxY`p1TIx&GWMpKtj~_jF zN=61rAS0vXJ8>Kwk@a~QNJd6(W-TYD_E=8tikh>7g|!`&jEv*0{hKBw3iUHzr1572 ze}v@Cj6J5ltyr9yqW9Re4Dpg+?_ty{LoBOhFbdAJWyz7gBIY*trt{{>9m;HunW3zj z<33-Xr%Y?x2*sHBFPU3hl*;7hxU20<$)Tfcq^$ZfQAfKu{leDROE#w$H$Iy_mi?+m zgSEBP-E>^>7XRc?khq?*xBYrL)#S(NUyUoH`_ao&T5?%CvZ5t-hL0JZd}fA!p1S!; zPK@QD?Y8H{hBcNh-TZNQjoLvYhm{Q@TgvE zOcpaQA`RfT);iNCJ@+nN7q@n7!L{hvGU3JTo$*IWPP)W6@VnIp#DQXG6|DH4{>TM^1GBPq5vd0f(H9g4}hELXM zt{$|ksQM^csb_Q0-%mg(y}kK%K`;9O)TDgrV+S_$Yw|k|+ph^=Zh_{RPM*2?9oF* ze%SF-|LOR@jUQAwQ$FevJOedQm_Uf`;`_tcXI`V$L>dpL`~H4hIXhhIQOUrq9VdF6 zKLJ0)nb?QZcig-zve}?2@fK4U#D)jDbEM^1uzR(D3>KnSeEFc z3yUj9ycZ{Sw^#SZwu+v9>(#SlAx&ol*sc8hyfVJuHeib+x{v*y#1mtr_m@L7up5iR zgTkY}F3e)C`6}rWqLXU{xAHaeqS3J7flDGVJL!Yna+M_h&j~yR+Ey4`Jhwr;_xjK> zgod#%S*Xwi?m0dCxW7I}z(@J)t@oZU`Q1dt<~pG&IvMw3B9?ZcuPlef zW5@~9dMo8d%8lajcrGmzp08o(OAMQXs`OsPu-9~&@Uu@RNWbxX#3ajfr=Y2^V0z6S z%$$PkNxGUE z;xqJSsUdNU0brGC1nbhTalf^Mv$?6EMkZEs2AmUgjzHNqsmaqH)6KI%yP=dkln z?ltXf5N(TekeFCiseZ^izS;$T@x8Tf74ns?90h}rx$Ipw~GY7ERQ$yY-Bcm@B2bAui3e|)Nmji-*+NmVVMc%G3r-2+vHE( zK4%ty-L{+B93hEJ=rwN+I!Ir5gkA43ATBr4RhGAl;R#aOHr|fL4X0S>z0Zu_Of-CE zRO^nW;j8P6N8X!9l<(a*X|jIilRnxe>FGGtsf%wMlXI04lUdL8Ax)&aeJ=fBR#bwL zg=}knGh#gsbxVOpUQNU?Wc^0+Y?8g(e2<%Sglyrll61DsR`!fO(Ab!z3%(Pjm@|2! z6hXC2#F7>_7RoykydCwL^dO0ZU_CtbZKOULH{!Qx#4PTP;PxqNJ}v%fGo0==X$Mzq zP>CTe)^_wD^d^F<2kk4<+!lxWA<1Zj0j&C_6fz(u5Va_FIbe6Cr$B>Uq~Xi@yhjkR zesjbhbswppm^?*mp%ljcBPf?_|5s~lbIw-e(W?(CV_J;vK{bU?)ef{`#Z{%YKlu1e z#_J61%p;emT1=RMI!ZM5E+9$R^_6Zp5=^uSFTbDQod%tX(hfffy`A`S4AmjFG08L6 zi*zt>s7L$lZ%<=9SDqzmA?hdCrg{;20+n*>jdfryM~GFiPsCbX&kT7^MDe~aqMA9> zayx6Y6A4bA&MH)eEqvZ|UWihJaun (LT54(1&ERy?jxn-HUpfErISE-x$t!tqk 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 Bh-Ux* diff --git a/docs/images/remote-script.png b/docs/images/remote-script.png index 72255d0ca3c9fb3803a84a944b72f90693b8b95d..8ee01f3f7a2a4b07d09d9cfe735f23fadf115672 100644 GIT binary patch literal 53099 zcmd43XHb*vw=axfMUh7V6=^m=2t~Sd0THFQ5IQP7NRbwL><9=b8hViq2@rZGL6P1| z=p923y+h!=^6dSec|V<*GqcZ};}8>y`F7z;d%Xo9=bC&z#(+f3-r&-AiS8q*_aEX$KjBT8qM>|{q5hxx6>EIVie#G2GiPU8vrbNViyT;Q z7xjchy9q_nTLeqF8l4Do;8^`Pg3ml$=hgoChO&mWG<#=kn+_iboWvi~26Ekb!dBtF zeFTNnthG;Lo^yQNo$x{u|Df*b(Kp107Eqo0_oXJUC_2oZ&qcXSG>yT+d{xc*NFMUv=t;IUJd3qPc07>^^?BeR{G?O+kZks z8ZHS53oCWv`1fhPCi0N4t+>PfbgBrFYV5qx>Imx&!h=^6Sz`q-Jx-e4m9fM6>lS^r zQ5FG1SPS_j&-;e?&%@beZ%Q~V6NyAu*sE8|@se(5FWqpN@4CGdsYgQm{&0bShW4%n zGeHu)XJbYT&+X{YzojhLtpwf!)%EfPiGE0baNPGEY;qI$X_S$ystO2)=J8b1JH|FE&2P7~_u04cJm}N(!mr>%?51YkJ2;v?} zuT^*Bu$BXP^g2%5(ew%L#`YqiwUSfVs_B7c!O;#S29vPmV=wJ4TluAdina1<_Li23_tK3AwHx|8tZ&?A+w3{j3NLoI zMhOm_#ELmoe!&`-pve32R=Pipj>g4K9bdLFyo=nMItSUVIatKB$4Ly-F7#$HJ>oUU*;~j= zVwd%CA1#0Vo=x;;97n)jvMZJrUr=!3cgDD)#%->npFeprcX8%Dy_{i}0u2L~dU@!; zuZ@zP@-r8&&DUcLa);-VkWS(HOi~s&KNblmKD`WeZSAj{Or7fYj<*Laa{Ico^)h!z zBOKD6%iw0{b9|9CmwiM&*w%w}Ss=+`4*h(TcYLbBtSGV*KbW6Jb_20H^ z6#>Lb)PZnRix1}=Rfu05kJ_#v-l2AaosqcRChKkO8 zso!z>Pf+Z*sz%GW<4EaPk!`r_?BuWa{s&w8J0s5A8nHi?7Z=)}PSNJ;JP68(TicyL zCOv$uXvX&T?c1HEvvfD-@#2{9aILXQ57PQaaCA(|*T71Jvr4{fxF5xP$$7lm=DUH zYkVI+J{>g%+Cwe>Khc6S#Jf>qlX2YxX%!##U;n?zpwkUeDo}yAG#ijn- zO!b(JA={*wxZo--azHB|Q0+bY-fF_d2&Oh~9*0yVYIYdEV0^b9a85(6n z#Fe8b4pE?zc+PhzEWi{HM|6AYal^7{;$h5*Zg)6*2OR0*7yQ{Dv1Hqup z-%M||;V3>MUAJ6t_Z|mbO;ric(@j^ccIYX#*CXl5pBxpL50~$DB+4Fwn#dyMo<*s= zX@yAYwJEh7jg#uPF)J-EH*%4Nk9H2-=Cx=d@7`V#IH^9h!q-1CA+1s~dahwr8c!VE z&RUw2NE(rLAE;=zW#X$os@^E!H(YLysP~O*8RP4ezaDGAxihmNxj4(ap;{2J8reK_ ztIV>VI%NAkYPXqM*+S4fN2Qt1x+scQ?(9KvhU8G1ac_wdIR_CQ&j7`draf0ZR)xKcl7RoC6}AGQD^tQcw^J%K0Gk zLxHjM3!*Vx{d@+zS$dgavPWZx2_6?NIdXwzqyF75h@BrPrZyH%&%#TrTd&od5%0oGYOCg}WaQefbL|=^7bfj? zLJg>dRu->ETu)n)Ey`VziRA|6i^n(n1G4$^a*mgaIy<6;l-O=-#EKT!>by1Ho_Z2` zb9;G6k9dd}_g1OlyZITRu`$=_EE(K$4Qz#r$(g@&?w4x=!XRcmI2#OWe6FcDlP@TI zV|`D@h;hxi&MIfGHF=R+w$%=gcT-gdQu7jwU4K_PeH81&3|1`llB&+FUP9ks_0#ec zdAr!@8%P=!v4Z72c|qG;P!NgKJSk%7SZ1!?{5w5Uu^4C{%V%9Un}u@gye{qOUuZ@& z`sfzQw`TgyjiuAc*I7^hvHtkAeJugGEB*&9-&QXtjJS)hY_-&$8D_eifsXq^61UIB$e4!C*-UBUjB0ll9XU(SzAU4l zuC6{BqRBFAzcNzRNkO$vkTa86sZnN64y;=zlgKCam&Vk4p4Bre3Y*GuoTPs$ifr|S zFT8HO64dD^^F8}Hm&oz*r>Erbpf5Pj{aELIBs*khar@#(hyAU^CTkI{EZwyQyrvo6 zPj<&RNB6b%{;Po7%tuNh@uu#kck7T3t4~^GJHnX|2X9Q@jx$$7zxCH}M{+j0tl;)tY4C2_ zgK%T_Y}RW$C4XIXs2B0)nplG6krDisSQU#R-54@?!J#_tue8Nyi6Eg7uc$N?%wddw%Ri37ElcF3{1Hu*zT0d9_?9s*Ld6JKEnA*flSA zxvdh$It-h}MRIE;_MO~O4(2nj9{l$haWKJXHf*Y0R^m6CqD8u4nr5#BsF!ToV($I@ zs&*(~b-v?kw%u%q?{UqWd@Zh|QH@Pj@>ISeR_jSpwBE@Veb!LPs1L1tjq%}<2Qx1S zz9b>0y7Rz{}8#l8{=# znl0T(J|p!jgU8Qq`u+q!SWBK(kTn2kq4JO1WKkN}PnVfv%oWpY=(cFK>GIVZha z`u{Vn zTK-HOH~>jT4Bj@qF%Gc21udFN`+#3h*9i&r=2c##w#ue=o!2j*qcu*6xn<{klpZ4{ z-Mu9)wKF8Q2(Xf=melrZ5r?m9A5^6l5|Cokzd12$8B-_n*}LYb-C*Y$bg z8vf?QNyFYFalEX)VmnC_LSfDakj50z`1CFLsJ@l}x~=^wJW!}_$UzFrcBp@_v|D<>L?z)Clv#l_;b_wx=r97-nnxJK>D=fvrH4DC7IS1 z6ojcB6~I(4;WTRJ?7yk@RA6G3@I%0&yFbi9GgADBOhy%$nJbQfEl<PkB6u6NgC0CjhzAzbM@eZ2W= zVT+}A*5~y3Mhon=njwczPBzbst#Q!%?)xw;nHO%IBMOj&$W}4`(E=)- zdQFin_}VH|HGL9uJ^4}oHUT(MB}L7*bdlW4CFcU&6TmLGN0>= zU%<|NNkSf1s6`3Trq_pDFT)cLH(CYpYriipmbr|_6b}N_HB=W65a9W7s2;$5+|fqs zfVnRzL=fjiM8V?SyoL&`&w<`UB01vXDau3|S}jnJ=ycEtvqCx7kZb&@{qoEzJ?(eT z;3qE~SCDIRk?_m`tZ7Jax!?9OzQls?K|>Mu7E^GgD15Qg+WnRKa2g}hZ zM}P5{Q>bjxl%AUAk(-!3cXwvWZa_h+cUwWl)Pb6v&zw*rGBp3{&w#h7^6Ujpzd;Mx zS)IVYtfzI`{H`Tugb%3M=Xp*Hb0xNTtd5VlT1~D3Fo?w;7wQJG>m)1DO!#eTeCN`z zX^%}mzf(sq|0h8g(+5aH7@PF)gh^OXP(Xbr-Mk z5PCu&fv$3*ZbHeuf74~wHpn^RPsG;MQjQ?fxUQC z{ZjLZg=7GylGDljXGk}9p4U0A!!y=v9g}Pf%xrF4QcCmk7Bo25J1wmTbHYytQm|&y zi0xsbKHjCzakmqz^wAlbXZq)#e{S5cOTiW<@m$U{KR|u{{CR(K zP6DuY@Ww4==%X05BXr+xkDB1n_v~X+i~)a?HxdB<51I}d3aU@=#|M~*?r0&);?l?& zwI(2Obj=D6(BrnNb$3j%LD_CgkS;^H2VQ0i-lZN|=^Zb%@8v?-HimOx6Y1xwK3!%T z&M_)t;MUCQSP_N+W|io>QUT-@v>|{|E1=ebZR^Le#$3ya&v9a6@(^>*Gp*QJ9-_eI z&DOdg?b`={s`6Rjs)^-a`oG;(`QckKC%I}>7f3%~wcatFp~1pbOwa;C1FNGhr^~kT)#2FACt3W<%I7D45Hi{U?V`~r^F8+k1%zQoITyJF32a!gY6vvtAS z=^r?bSMOK2t^2K38kfNJGBrz_fyks&A-keAm3E7swwCh8R_-gC^LV~8->VzR933oSC;WHKmad_7QX4*8V9-pG zs{tf}gCj{0f8+{SA%wRM@@m0r_iPbLVgs?@(wG6TsiNN&{ILwutGkbyUYsGcYn*Q5wfnY@Ug2 z|C3qY!spMAzs!B#=zYBK1T3K~|Mg;IU*e!cHq!xM>N&cZg~ZIH0QlHt-jj}4F*T;i zwipqI$?5u#9W(U7Y)8VOJWw143oONAJX+1FJW1e(E9Vk@FLTI^g3D~;-9A_T@C>E> zubm&_X!};=lvk7L8JBdjefpF)^+g13X%9Qab68_>?>!!m1X?0V1ApybNq3DErx37j zJWGH6Vzu9V53w#vkfZ-ZjmP8JU+K5b*CuNHm{0awIkHZo!p-G`NzZ+J-jzT5S1_$D z+WTmAz76~1hFxKbg@HVz=CkB=OIEzF0+)0f^n#g}tDT{_~Chaas9) zOWej?7cl*gMxOOQEpY#DJ<0zY>+yf`DXRH9wbNX46`9!oYsC{=?ozu<1=GvzuMC9a zx6{k8Ngi>hZRi$61Z8pz&n$KH{_G8Olux{d@S78i(nn5PLkJ(P-OqE3;1ms~NGw#@ zg5)IX1bkbK7Ve}SC|emd6UPUH8;}Ka<`dheiN9}t4h@y{Jz85QkDNq{Z>{y?bAK2t z{>tE{C&?8ctE3rV@UGdZy!UM`eIJW#wOGe0U+r+{;Xl^|j8WJK)t_%2kXlu|mcOVn z&G&J*zg;UYq$1K!dhPwE7aU^zYfD*jL#{+*&fx+vs&+z8v<9Y`&{vrzlp5$Qy8)Vk{eA`x2oKpJ@Itia_ z3!E-g_}tuJ6_Ee$PDmm)vKj*a^7m|&Xl?w+a-SVcw$?lAY;=^m=~`&jN&cNbVQ~D= zX1_Rj=V|DLD$FQ@bLe=5>v10<>GEYr-yY%ETW!=|ObR|xY3&xcUG2KyrwH-nntpS< z<7jxiF({9g+nKfy!S^)@m#}B|q?s8O(AtKx9WMoTFU@N7G_jru9`HU+sOE&2h2UJD z_gaMD$)X$c0ik$Lv5bYK_o@cYUgY5tl>8U-<1zdN`CD#Z6-%zU9$W2UEp~>;yVRlT zc4O22f1Y6dSikZ-9pQ$36Q(hV?1;U)nmQIpu(Bk<(S9`o^DIiMZI62*&gFP( zeX4T;5AQEmsib?2JB}>FS}f6Xt(ezzNs?QlVT&qeGACpeHdKIzUax5=Zo_(R*!aX$ zSyle%;3rGoNCksRsQ`H)&lm3S(7`S-!|ZHcqR0!EkrszJ|B>R>%;8%%Ee@NL%Y z%%rYL&aKa&o%0*!E#~2``|azRjroZs>fdX?{SEHip_k~Xv_nz zTb*z;-{`b&s|bnYH>&CG<nB$i}HnMBWj(D-!D4&nGOB=ox?B@xG01 zQ}ocKB$?uoOZST{9=a)7o1c6!VlXcA;?U_}lYe%2c?F?aG=qT@1_T=DF zEw4<#NEM-%jHhp6Eq3pjlR(lI!>fG_PQEj3pR6V|;Kip_;rvqk$Ftx2In-q;Ey-my zNiwAfwV0djEO@C~>%=!@-w#Jis4n#o2jbD%i)*{iM(Gq?+yIEK)&ng ztXnT;vA}Edt||49y2z?ELbj~JDA^oym2fk9N>ZuvRK!~G?PDs4^>=Qt*lc$VI3 zKs4FLDQ!sAr=^lk+TV+e=a#Vu36k@-!m2jXBglM~+MZD#E#weV4t6Vi$uDTLj1^O( z4(tsJN*nY}bn?~zUaVD++=SX6Y`bMoUTK3- zybdOi7(Q5KO{7mPJJ}C$>i1sBJv2FXqg}^sBmH)Nx#f-@O63@SRLE_)|4p2{SOfnB8iEdS$a`9qZdhh?8wp#hyy-Y^1&1wZOc(6S&I3auvFRyx!RpRtx_c)iy6*6gy=v6_*r%CBi3?V_v!uABq6 zgC;@|-p9VJkY6o;PbXJrCB<5keV7b7^sIEnW z-gn30-41{%}1UqCgWmwYvW^KXk5Qaz;DL2vq0 z&OEHQ>P)NwE*|A~oRD`1uofo`EY61Zf9{6M6uK|;0Feqr0x-a0$~G)WNelrdtBZ@v zuXks*)69`%kMx7?RF!k5PaBr~sq|Rte`tyi7*oB_9xJ9tUk|jA9O*|uyH$-682hR4 zUcjt!Uh*=FI3G~G4Gv14|Dtw0Ds>z&29HwfsC?$(ztT&D+30$3h@{)>rHdCay6M56 zP_{n1D+z$G(#s!pRTdF)jNJCtrnrX8D_pI|tG!LioI*c;)CAqxZe%LXkftd)Mrn60+agLcP^eP-eDt&+gx0;q_PQ3t9ObY zX}1@8RXm>4VQ`tcYasNJD~*a6+*_Z~H~{-#Vc|BL2Lu$2m(OT*HTO9ZIurb-Yj;q!;R6`{tC=r%OT-B~=G|dxi@g zHM`^gwHTk=Z@hsbG_oFNtLlR@q<7c?q>zFln|9$k-t*EE+kY6eqA>#Lt$ERm~_>%x~IX~38a$(rSnED*I z?i6J$@&K@J9knu4bc77V*1##YKLinrSKwS27bd{0I<#Yj&*WWd96J)dg;!-ZpJ(2amZE$Pv&b(o+rIqRcZHoT4Fy zfowfnph*F#q+5IdlmBX{(33Q5bfGuzq2Jyb*jMkFhR|5$1l8dfvDsheINW14fR5D- zAFLu?xA1#WdIYi+W*L|0=*aV_;ah22eZ>(YrH;K0LN;wT+_>uL7V1kT#6S{6-Aa}4 zx7`YHj9>ug=IhO#k?bH^7|2sR^ScSPL-jIt=IE#9zc~B*_iz1kxcya6AVzgxvTBRg zv7d@_##I2(cGR${N*Q54)0{SP}zBj|?x*cSDWo%?0?s)q$ zMRm{cUai?Ry|y$rx7#7T>b}_5T%nuLsStDkOca>lGkgFU2uC)YAI*hjUv|Vxl7vp3 zI#roH&Mf;n-8wf7O$_2wV9|bi)XbgKx2C5hTVmB5;lhE?k--zM`Xiz3jj9!otMy&!pS*qc_c>-D~Ri$EK#H$Lvkx=ZC9(a#2Z8`++Cg3RrLk0jli; zqOW3DBJNI7#pLF}_EJ*7fjwt&xcsr91PIu{uitBT8(8!Q2b_zHmO_icWcRlgdh6Nr zHT4Jkxd_4jAfjNv+eJIVC%}wgb+#SxI@_+GIt;6}H2YLAy(t+6X35fE zL8_E{ysc)1Zh~I)ia{GY)WZGN)9`00rt%o#I$_u966zr8ZVA0 z`KERwl+|24{EWViL>(pgRoYXHHil%w8#lMNDYhaio?!hv!y9xhrc9>p_Mo%F&L>Bk zT6CNb{>(sM7OUVw8RDEd0X)P`M z);}_*u4SK~eIfRCk6t&Csd7lbgOGrtm^O=9m9M1#_=9nL&0`(2CH?Zxc@!Oqda^57 z33^qZj}isB=8$y9;oNg*F3OQHn&~~Tpgro&6-rR@Kw>$@W#pnKEpH`V|7z3f4!rSE zG7s3dc8iia55!N0BvMXKmXnlV5ipEs10rYq#>(-%sqUEzC9k(WFN!{cJNB}9dK-Lv z9kqeoNPC74UN@GAO1fxZ2xabVZCwJL%RuGLW@XF^;z*Ra&$D_0uvvx?*}CX>`^4Cl zo(O0~$syYoZAX$k-fw?n(bQ`;#&+umiFrxVZW7cWbYRu1C$b^G-k*b%!*h#6VtXNN zNMDT81a8b)AUE0E=dhXgx%9*cumMO(yW_stewAdY_1IiJqpIM9Ps2(Zz`R5V`(99CuA3duPoNCKk4tl>u zY0xITj1^`1NZLO1sn|al+C+3JZ3@V0>~HmIZ8L&`f~e!XuOEGoNQ>s>m1=xIxP7vj zbQ0}qvCxway(c>1<3{rP$_qI^GBh%yZ9kd)PTr_~Sxr3OkRXlle1_iux;h!4w8)u13z`X1 z^=9Q#)cOM+mkT0iTE{(k%saCXtK%I|M2+7LyGgN~&KxsIBn8E9WEMu*6Zi12c=1EPeZ!Bh3F08l5a0LP>&}l# za6ObA2SGTIV5)1vGr*b6TNhW=H<1jxJx(0N=cBqhxiI(G5u3wvHCU4}%_>Z5P0NwZ zEv-bEou{Y};BeXZizJ&F&u9#M@{t;?)+{%pICih98M2Un;xn#*WY6zHR2INw*}t77 zJ61m*LO+W;4o6#9>Yjv=`Q86(nUJ*Z)r7=*Iw)5FiaKESs*j&Pp9J3OXpAce8Sg~h z*83{_NsZW>@xcby8Y|&E?ti#r_yQIYP(ifzQ)Y?0uqDwKq zjAM#yJB`;t8Td@w0eWkHhhDYUI_U9+61qPhooc;;2B1BuOO!?Y)dTx}_4xBOF1#9L zcHN3~oidwW#s@lfhp*qz@(Vl-{KNyRcsgKu3FV#w<^;b_1fgK;iBTqi0 z{BD2fxg70kT#XpYBuII*dAw(QrOyi+D+C_)=4^Y> zTp{)-es3EyoxX@k3`4mCb6R~~pi0xhB9QMj2;bfWR~WQqxTHW+U!k?y=KDv$I5aDL z6+@fG<4RZLwXm&w8oHxbAnT-CqBRvzcY9r#b4$Rb0v-7RX^gnm&9?QALLlsbr{eA+y(4Cx1^~pz5d7oW;*d^+ zeuFezy_W|IE|Bwc zi$Db0C|k?d>(1_QCVRP_c$t>rgD4bkYRkzpN`l2F|e}6zteKr_}dI@aq$6Hz1s&Me-D6$n60fHhvqoXE_jot5>Wr z#~rvhIn%${xp z^ze9tRu%w`J`=>?61&V`!UD-z6*KA>uAkg2AzO+b@R2~$J+4snrZI3ev6QPbkG`|Kfkj4$pj!BqtjN)&AJgv(z z$F@M&CQIta9ij!e7v0}PeKX#7YtMwM*rDP`s5JmCvkD~THR^Z^@ zRSD}mc23V=llF{O$J|fsii#we?SjT1zH7Q(KEYAi>1R+NoBUPYd0fUZ7>pd0pK!Wu z+s3TC2dKv(Q!I+%5VURG)pz5R4TJz3TgnQnVgsaC^~cb6#dJ&5UJm0npg+;9iJ*r7 z^jI;93C2jKi{H962~f8?PK|UZh}%m6KqgAiqSPq}C_{qA#Z8yOnMJsgzo5U-mVx@! z_MJPN*reD2yBZ6m86f@eHGce)p&m2s=UHrbF)m^m9Lofx%))HVR*xF5q*Qn}7YSsb zm<`Ul;qDdse}sQ*2GncC&2>R1SzIpnqrY3$cVY$B1NBUSPaJQsej-7+7ZC z+mL?k01*9oN%#SUQ?F0g(vT%Nn*qsx{Vg%r2XT3oS9)f~hg#q6DEC!7a2hQKv5Er_ zI59Z)fp);B`G=&22GoIl*SMEQlSQLOdGTlW`+%JxTXYWmJrEbo9P-3o4df+YSLHdl zjJ2XBL`wxd)8|rNR(aAmntUgf+_j&H`(g~BKd6n_UYPpD+dm=!a52o%zTLXMq`G3t zH5^kKRGJ%U+0i0C(hd~-H;s3xGG&xM4i(wPVXG?((i>y|F*Jr4g(hYSwKAN&PzGIsgvfmWu$MCGB+H;uaw2wvqu?`(+y6 z(wu_}qi{-!ip4`B)-8SGw^!=2cSf@HxFJmQL11R-ks19>gR;-1`I}71B?~_`#oqGd z^}D(ly%S%i6wakcuf^=lVn+%#_VDa;cfsv~S()JxmC&0+;Q`RsC=dg)tKd5Tl%H&& z#V`3GBeZS97q*S1iF_#TAv5%AI>HXO1e1VhK8#C*9Us&2VRSPJP=g-Ud#s*47nzEz=~jfoPo@y8p#(U;cSjN%`^^%-zr|zeFE&R z6Q^yUsx$Ex-hp1=;e+NHLr1i~fpcI6po)RU;69{9d|NuJ7~_~%xC1ETF3`vCQSX{je9z%7C;E?ss*A97_@Pw zAk-6OscnGujNAj*?r7XD)3Z7Bh}y^}rWd*CaWW&KJ0uTS%TaJcpV z=fX@n-u7n}difZz2-7E*Ss$)_QvnH5#S%CHM;SWw7(H5?688a$weQyai}Wk&E3bg2 zyUw5`^CCU$$5;(O-4vA*!sOL4@?hOI7OZ9ScW%m1m$l!bqc<=(A?bm%YhY{)2muSi z8=w~M9Urdd>gxdsb8T&n!s?nqE;<85_5pqy+3*VP&(ul+0)E`YFydX+N+kpkJiv8} zd!m4>Y2Ebo7kPo{UY`ok?%C-8gz^F~1pI0t#6sv1sQr;ZeZTz|Xd&k=vql5M0)!j+ z8b`p@A$B;!`O`oojl#cBj5{5XXu-hEs>4rJyKK{8W}S@4!%P$m(6O{n?yj_3;3W&- z1l~Czm2mbFT|K}C2rKv)aibVvYj&^6Q`8iVm~;JtQ-H(7g}yMDwmR~Zp%8%_#Njia zOwpJ@fd(V7rjH&y0z(zR4)F&kTsh?0!Z^UFiP8wC#lCEivKIvY2$1VRsSgE5(Trl# z-2Pua+0{2%@ed0?JTU4TATdioiaa?cYq-sU(N`Gu1c=eeHf881OuYJCwLn@2fl=ok zSCE&bI@!)&ERE`i4CMr_&MpG(>WqpG6o9NvGgh`|Z0CtzR%1atR5Xmt!o<1}Y4 zb)|q%WO{HvDDq+hUzkNq`yVsN@BjU-9LyLL6f{&|85nE~rntSf2{4ZVu;dfqv;(ll z!}J3J)5K6b4~m$l()W8H*8~Be*y4png&F@_^744#ml@=l?t@1Ge-Xr>LJ_Vhc3fTnJp0Q__lOma-zx8FNFbdY8gG?xJa1gKz%@?MZm-aiz|IE9+udVp%GV{Wam>9KM`=K5uU;}3wn8< z88Ga+>lTK9meukKi4t-kpuvQ;`|_ZWtYGew!yVER0h3t;^i4TgqSy76YT*ktwCgK0 z9V2?-=~0t_F^ac#_jV`tgM=@bE^HVhZKr$zU=!$5KtLsY@7W33RiJaM?6};5u?g?l zWD|P%Au>C#zrTo;V5U3@9I*wWo?Z7XZbaMbrB34F$_|&_& zkdc_spA5W5pPzs{8?NkwzE?8BXH@vOZnb(-^Xb#4po55+0<7=I;JEL=PM7o_EdXeh zaNCQQFM9?^ww)c=8g@5!<6J9G;$B~YQJ`yS=J-uOKfZ*8^=}gNdOx`aAeKn>o~vGn zOQC(XKRgeCkhngCI|^=D>GXbX)2PC%!{Tz^{iVds9$kCkeLY4T}JySD<)$fAy6 z`H~qrX5l}t?svDMYlxt!gdynF=V?^v;fb;4-+&^d8UJt{c!V}@53>3$W_AX@KSvKQ zG4s)%@jv0(N(8w+#E-2bwnX~vPZNphPf)S1;S+X8KyJ*n`8upc`vK0!+vOvf zmCOpJuzHLAHNnR|HcKVYK^d-z`10d61J0UwnFijdTEUUBZ!Tj5(cNx?cJ^ zFjTeaGJunkJ%x$Pa&-n{;6+GDg2zISvIYsDC$n`W zY*k{IQQ>eoAQA%xJ)1qQTaN^mR;x=q^h#93wzl23y0~ZtTXigrTXl*IStwo-SeRZ_ zUTS-m*vuSMpFhFa5L*9GE^bei2lzG~-CT$~ASyQ@F z8iNsK179NV{s;i32>KV-Ru2mp<<@QJA;`)_&bqX3AKNzKY|w7{y9@9p)K8p4mVOIWGxJQM_ z6W%}3<5!-6HtQ%W|5B%86MF_d(sy`*`T%xTq207Z8`_{hlMR}xsylo}GgkB&(E=r? z|LlQv9*eG{Ui$YV4J>V5cXY;@YeC-IQrN@J~DRP65+84X9rGu%+c;u0u#_Z$0BhZrA$ z*dFWKORRkte-5a1){kHQWQ>V5D`6{d)f};z_89VfMK|f){@Lu8 zakR^5iH0%Noqhu* zbd=ehZy!gd{h6)~4K0(hVJZ;IYgwFGZjT|~yPTY7p?7*>?P4y}Z0#u7aqDn@uE^d? zhV^<=J4z_C<)Un0LPn689@*RIK?iyLQ`$^k=@&mrRkc2edksL;@IKSiAMdv2hqXI4 zE34Zn&NSpQ@eWEtOuN$EUN#$`sfAoe$&PcchoI9PS&4!q@x}99yxHc9e$ICeQKhA& z)eQi1m@<#7-1-dp#-_w#5I2_dsU;%g;;r#A+v=-BLR-A|UpYL&R_Ufk*jD>~ZlxxT zH7{d=-(9(Kg?7`&h$&iQH{Q-9rt?|N>$a%MT$UPzs}oE!X3wjOSBI)nu4Q$803yk~ z!gCFWZ&S+>4IW{V1ACPqxM9Qsq3lZT#|P;2*DsFyZ%w~v!Y*MVI%8oA^BX4v#K)|YX$w+|jyZyd%| zP8KCR4@Jn5uA$j~n`@15onwmH`sZd>YIISKV{&qG2R8&hD8OJ=;aV?qrO2h~%4*yA z@bEFb5mF#MfuSxW4rZ(0?mmKLJ=jI7+LQ+ME407#6>#*fN{iY1O$xQ-T;si0SS0DJ zWliJ33g&-c6^bPf^_W8tWfI%Z>OVbZ@AJOqQIaK>T^ZSLA@m$*c^$ip#QqudS~|BK z+~ReWvi$FZg6dw$B)#%^5ic*Jf&4(+(-zYkMsRK&*G!F^qoNwU z(6fnnLsz2zW3;-ah9KeG*g-G1SDVhNU*=@C^kn(FxLMYVMcqD+Wa_Yp_q;m1Mp>^j zp5&{!er`2~&fQd0r2o;Ub~rOh&`M3Jd zyZLOaz<>C`09RQQ5CPM5KV1WZ0|3vc@LHdy{C_t8A9ZgXm*v`R3qN3^!cxJYOq38* zLK<8sAqY|rDWHO+gmi-i27&=1rKof&-LMovP*NTcq>)rgy3e?Ay?gKX#Qyd^`<(Ch zeeYlEm3r>$zOH%AImVb{-izxiRrxf2TSQ!qTm!8NVrIQ;tF>(zS9@$cg?961z8!H& z6d)+h3aNLKVkZg_jJE~a1m2e9NDRtlq&corKizelnzQ@7^f< zQO^^V(1dg~P(0)Eweyk6k_`lx_9E9@xc)Y4bs$@iI>TIetR`9cglK%7oSj+bW(Llv zpyo`A;H>1KaF9?rAzz<<^z2>a&z#ym=Mlj)vb%b_t6SNpDwg*5sxjS>S z+1{KGi=X+qTzRL-28C&ai_-kF#P#hqboMbUr(cAl{Oc%m%bq?R%=dXXJ2rkvq*!%R zq1Th8icL@|M%%M`qY~A27*33q@LZe)3ZGc4QGAjdM5;8%WY7IL5*{MB4 z%ku4+&_O}>P(pX&%K43*Z=ko_)xHO*c0ru>x0>wlp#+FWf!*F;s;s@{)mpK{{Q|`9Y;ZP5H2v=&3uL z7C$oYEUde@&|Ayu_WsJ@Gy^j`vwX9HEOV5c=N`0pI*D$myXENT%r-fF&UC7^^~6;k zH#w&r3`%bT*&up3bpY1GM$lH>iAx~HpG#X?3Zg4 zs+wWk5LWkGpGkJ_<@q?5$vWB02_b_+M_ z#@*8{6}A`rrIVwf4=SFh7KJuS{fTt44JCpfrNsMlrp#i_V?bgBFP4z(qS?R10r&{l zDKtNilo@R_u1TEOkr7{ z35+E;3F3yKf@hEhgCj{Ys&iCknjs*VZ<^c}?fj!fCj%+^OhC#EXK z2A?0j4eF!0qs;zEyLL-;OG{r&UP%VW=k|fmbGBl(wDjj;4=g3!{@M3>@;Ch4WK#SWh*!+1&7`nEob>y+4Oq zh<5p^KaVfy{{stnc5AxCc~@d~J33x}h2PXa;Avv9Qbd*)&IPIp;R7C2{gO}Z9v-B>+Is9Jtz%r#4W5Wm_zaE5Uyn3 zt_&9MDy~Ox@B_THFhB3==0;%QB=0~wL>nMOgo%lWh|ad7iY6Cdl$4y}vP}D84Nn=! z#9b3U5uF4jEK({8*A*&MsAd7YYUre_i5-3%&-=!_`1fB9;&6|iN{x(x`fFj{c0YlQ zljIx*_qj*U9VwadBoOh=opKwxxRNEPc$Qb;>TKzj2ZrI2|1Uz<;8pxV*q^j${9Kd^ zWMkVwnH)YtD3<|BZ)0Y52dN17h6k==p#AY&74OD3lDrR%(`?%Gwm$OfSFH)jqenmI z^}@*^6SuiYz}-7{giujVJVV4v+}|xGQxymVRPlv`2OuSLySQEzNYo`f=3!)4K~35> zD8x!dvU)o#{`i$=mA!OIT~Gbz@FIH3XqQ`-Pl0Ejz|}CIIvI*=K@aKWW|G zN=@pNAy!Ci57n&K;^Jb%(b{o|efvsW7Qsv>g*oCr#@`L=0wq`kKAO?Aqo`2)x|v8E z_jU$`UNKD&*A0Uy42kOTk9!BM2)<{mEj2c}PQ9){^~8I*ZLSOl4jw!oA;Pd@$CHmn zn}+#FV&P#g_HXKPUdse>Qn2T6fb8IQs#yaOTewur1JgsAYbWtNHV|*()~#EC>?-ei zllXR--v_Y#O_0)pH{S|sYNTkv>dVOZuV3}7NtZH@ySuypEPEJp_L0xFEdu)*{AzjL zf@Z!YaZJ_i1=T~x+=)Gp|L~W!DI4EdQk4_ZqvHC($$KT*Q;kLV-TU`#!nTKc?wR!0 zyf6UUvH4hma;7=iq0qu0N#(T+n1lvbo990V>Ry{)5*sU7!w4G-Eu`9%Q^MenkZn+k zQy!V8ecch}@3=Ki_+5==)Y0MfEqef-?_^{Qt>r)4VnTAJcak{09UHqEOP#Yv&`wM~ zHIB5Rpm%Uc(82DqUG&2!B|fwID2Tkp$4htMaD35^^9>Vo`GsSmcbEz8h>)s-kqQCF zg3M6GV~jBuGHt-hXU?3t3Wq*DA>&F=gTxK4Gl9&@qHCvW3*`SayLgh$KX4vZte03* zvW9JWbs_HD@7d-Z_NV|0Ax&Bi&MRpf6{I{WLKc7be9y1f_qVgKh=1BYQVRAg9gQ=d zxYBrb_`$7$6*24O9_27&D1LUTK5)Eyrs!Nyl*fAS4f2b8hxRiE{IQF8s|Q`mUr*j6 zg)>huA0>Rf{Go_BwCP_xU(JH%GG*|EWB7tM|E>RoORQ4NQ#50k)|NEQcrn?4R3aEe ztCl<44nj(RL^%>IE6oSF)Z>mrKM%fu8&U#TpI{*Xv|1LV@8VD;*d=7MUrHcj!~qbq zY{>xNtwr*lyhEI-k%OcovP4&c+o*W(BSOEp++h@U5QR7L-VSJTfxkyEFhNE|!+>iL?^ngi^MLnxyWeV}R zz5OH-stsFqE5AB(7h7J-ic32!N{0z=a1y28y}U_q9@7&Od`|?-8%#lSFs5Efh?PWfu#>b;;F?&s^IDS44g_6@ z6~4kW&hdQ(Bfsews4a+-rhL?P9@8&CqY2)m%KbkTGo%f#YfH{fGZZ2tb3RI{}8(6&JT=5Wyh?0!79 zhYMtX4ZJpX({J9q!LsJ_^#Wh7a(XXy`ZO%tD)2~+lSPo$6vDWNSawi`SFc{}-aPjO zUZqErlKLap`x8* zm%3U-Jx=I|GF8s$ zcD3f(ft5TCjH_C7yxR8H_p?iMG&E`D&$^I?e~9?n(a|v%Gm-s~|7x~mqp&+sMVV7@ zXbYc9Agu@t-NrXhKZ*bACF=-U2OvmQn4YCxM}y{}6YbiLqwOA8DVU9c$Sd`$ z+cp3;7|?0co1NWahG@5{5>W6%>)W?#u{?!{AB=H0jF4l)ak0Tp5)QTkuJ+zF*nfCU z$=}MYj9SYkb>Ci=rl`W#r2sVf5*;lqk6Mghnd#|4@*C9$oWda75wDVh%o8*02UXMG zA9|(yQVL<{C-&XCebU#&(u7#qJ^&+_2RjsUDF{@xq*ZaPaenl3U7O#}Il9rDJ`apnnt&OKt#$6k4*`~EQ$bRwvQxaA-CAgUy4*8+l=>OCLI&oOcoN*tn2p(Hhf zlSGF295^`x6aJQk-G^;ct?2fW7A9n z7yH~*o@)`196eG<@Y*7e+u9p_u6;Yt2OBQke8iGz%7uoH3)rmaL3@-S>y$a2q^{4l zFr%>jCFv@a+-4!x=&WyUVzwix?jT?qjzuP0wr$Vu#C{yvN9x#S|EweD+H3zRo*qIJ zwca=Mpksh@cUi#RV(c2ivk_8^Iu(Nl&#+UsfZ~IZ_9i`PJG2mpQra)K@H|G3b%h;%uhR0Lh1f`rV%WxQKjF>?J2 z^TT~9h?j9&Up7;Uh~2H+28GSzE^vav zNwLa>Ya!IhEwQH(MWXVHR+ilqcWmEo3&9h^&gI!2y5wg%DaHbxj&De<@j|RFM_D8$ z=lk#su#ivKl6oQc7lfCBPJ?#(;`<;?(9C{^oy)|)5M8u|!Hkmn7E)w~^KtK`)_K{n zx)qeihl#QFR!8WTACxu~??#4K1XA|nN4ZZbDi;!)7fe>idZv8)!3j;D<|`&kHNK2Q@IefQ@Z1SI__Rz5E*-XmTr=i4Aw5 zc`IRP*;~nP9z4Lq;LIJBw>Y-H*J* z3T9cb)~?F7nW{)-^+j#PX|4~QD5S0E1x=V|MAEYeL(=#ewK!#Y*MDFEU!Jvpz2&cl z)Kt|7K`2p#>~LXXW~PZJ!E@`>-GRs+TRGKAioW@Vi@lc=SMY9iH|;g5I)C;D$JLgM z3fe_dy&$!XZ5-n?{tndCO-(apOv*2+poKl2FCPJDZ6_!NmEM<4fMyGNEH<%CBZB96tX%$?6vh$GB7-k9N+_3CS1hQ-y~t zR@@PE$u|`jH|yO^RfS5i!AZh>)@Eu_*S}3maRc9L9j4IFb4~JBL!~JfxhriK9Zewt z8$mm6PV}LDigG)O+bYL5a!5<7u+V?Le%f~pgR{e-v}32E-4iEGeWsd=9DZon@suE; z=y2}Y>b8FqODw&?4wr$_0NKi~@XQ|45nwRpUc~9u*r)k9Yk6hA8S42V=dGJJZ>FQm zW~S1*ruo;b&j#%&3hbP}QIDuEK6S1{H2$^Oo(M!7(!0__b#=u5o?&!KjTM7r2TNrkUU* z#*<=99ec_3BzL((6TQVSm)YHSHpJy(BUK(>y2hrv{57r}^yZf8?_mkEZ{Wh*giR$+ zzwAHjTX*ESb2nnvGIF=f=g7X0UB{PojO}xKuOLjFt*Il-8qKiw;-L^%t)A!E>jj(p z*Cv=C-F-pqNkDRskfT~#TL(Yc9mE=8J-@J!xOs8^hW_#CR39M&^Qk^f4piEZ>L{2# z&55=77VcHXCn6&9lBrc&Ve^JmYhmZle9-t9<*iHAT|&?Z-A7#Z1(Bem`0&J%)zVenl-a|Q-nY=RQKMC z0M$C=m(ASqI8D_mh(4BL|K_pMRu<7U=;)6VzCvZz95JEWeQHRhSA#=kP*XscPeyiU zu&37P4M$m?hkM=Ae)M(AA=~h@?T+tz>Y(^0do2Ux5AU~q{xxL&49dP;jEo7*0>N`E zW=^zeB@qEVD)ReDYvPrv?jVLEWp;)kV|5S8a;wl?z!}CTChR0WaH0L{nl7vP>Dl@D zmaX>zRD6fq8yGzlA0~~4~`^mTE zLc6+lh$v}q%I_Ly7ZWRh_#k1+HxrFroa%D2pPhqa3=Pl@2(LPA-kl%%c>;LWB}@1S~=TXD-fe-k7L4 ziW|i)x3&QXNyPCdyhdL`{J{sY9-xitK#nI;@gmg}`&vbAM;se-c6tug(hGkmY*;|T z6~{shzUaUFbF1bcVi~Thv>O?!86%eUQ58V6KTpYRf61J3C1EVFHBlRMrs8f1RQnKy zBaY~28fF~c`LMCJ;naMLO&r}AfRdrFFFijaJx!oz#{Wi3=Wi94|0&CCcPMRCen2R? zsKID&fak)nAWOh=kLhOUl*vwnd=Kc+9IVK@3u|9<7NQoT^sHaMzNK7QkS^_1Xvz3M z-`t_mqvfK$Ius50jhi7fCI(!Py}Zz^DzYVU z%`#d6RP+BFm4Bf5<1gC_`*c3X8{B)On{^c~6qg~_Lqk%E#1yjZkWmTb4T^fdaFWT1 zy~r<+K72W-5~-AshtRGTH#9c)m zXuPDvbX}08zK~ulXF$=CC&*+uR#<umjg2EpzSJOYfewPv5C}T<$C{&K#=p&EgDbdIN76$8!jqc zhj)v2zB-$RqLzbZ5SjcKlG~)E&8JB={m>r++SNm}0_&!L0)tRueH!O0kX)L4vW{f7 z7H}AjD;ntMt*KT%@H{$HETl!UqAfpI>L5G39k}xomZK!On+4oLXJlj!+h?A3PP*l} zZW~FJ4&U+t=&33VegzuLDv|S{j-*tW|J7qASX=!N(+?H|*HCpfBD*yKgs|_*HJZud z&vfOteSCKETzGbJ!>d=X8Xz5%67^X}%KoGLpimF;V2=BwMM;s2TcWU_Yn51q9@zdi ztdae{;k{VEO{xI82m{xPRHvvXx4opJ*(`SjfA^4o&m%tS;}6flmlQS`J4uK3VPB(p z{;jtU4ZM_j(ti#&Kidy)1_&m;3c_PK9k2(a{byulbt|^h(@(8{EKYYpj3=_U18|32 z-Bw!)zA$C}EMbJ>%fP_v6DW`^z<>kfM%9@G90S!uUi#tj>S+B=v;`eIc@jl?Az|t7 zxs>Pe(+$!d!^@WedaAz2z8!U+$-C#*D%?+#crX6&QVZ;!Q)9f>Poi2+k}swyL%FC0 zFCO$51U|$@9(+X{Z0X)QrGkVaSGSeXqsO-rogyOLVnEo9&*2<2NQ%M}26w*%I$`rHfW6^vO*1)R za@>p@vFox-S%iXY354Tos1f2`WVf16)*bVYsBTi<5iYwa(u0=SB89 zy)OJddXv$E$w@Lmmz}0B@_x`O+7`s<6}|^~rVgpJGBGJ!2#)5)X8T4i;3ii#n@73* zwzZ^d3rV%IiaDU3t7y&Qv8l`-8(COcN0cnyM~ss4g#ZL0oiK3jx(#?T;oyaZ%Y>Rf zki&511`~QU$lV^m#rQ7(okW=CJdS}x2XG`3X3V1wWQf1zSk&?N*(@0wn3ln0YI0mU z=vK^Gg1>m310v_4kyjSGKIe_l)KN~l{>mT)SuXMwqVe~=i$L(iZ6-WHJnL7S2*UrJ z=&{%xJ^qPyn%`Uw%?2;=R%6b2H0e3T+ghYqwC3{b(>(%P_aKR|iW;JDlTHog69kd; zx>kekOAD$@zN{4$!j&1C{Wli(JROj8`^Am>x8 znMYdzxWtzuE&|F8w+&-ji#+m07OH}CGHf<;5X}yp1_Npb+ufdI)R4wb-SzT0bg20S z_mG)hj?E=-i1tR>#hxCZ89H40S+1BlL;={~euQZLIqu*m zGD}up0LGmOG?B>43y>ge#sl1h53FBrOT6R-w%#o5Vw-&Vl+a zgOOLF|D68tgz|04?ckArU;&oVYx6r=Sj@@%Ko!T$8fY;+?s|}ULuo~XsG#MYhNmC> z9}%pNiG10HbuYL{-t@sYHtbqwW+!o#xB6b;4nWENF0{Wn>fwJ)5QLI>i&?i2B(=?s ze57Ib20oVJMM0x^l7;Nj8S8TyD!iS=W$2wg5eg6e?X7Jn1ED zFaSF`06S0%@L~WPAvH5OrWz%O?Tw=tdmRuo%*0&~($VX^Y9U;bzRml|YasVf?>+zY z5iK~fE7rVgfc4=z8X_9Yuxso{j%pw#k+)AFh*d?1&VY?UY>mg{G5i;N8^q9FMKp+! z#CB5&3Dc|fuyj=HADKl1Xgq$^Qzm$0u!21UjVNw3b5>j(w-&ls9_tBdH&`JW_u9;crz&carw0Emg|K(E`?w!BQxVc4r0M+N`G zJdaNH|0B=yD_qjcbM?VTNb25C2rB?c>A!6~f*11_K;h?Tlx9-WhU*4m9Uas}n=}+O zc8_!v7x!l2x#KUpca~5EkAqyu@+Ipxu4wAJTmcvX=anWKXf#2B6HY>$&Rn}^{)yo! z@dU+_;YzTgc$x4b!7cKOqG`avl-QZX#wE9lOXFNn|GyACcrmS3Ydb~d&|rXh9_q@J zF+~4w8DDx6g7<}~RKWN%HQx8AuUhl-+foMgF+3;V`lZh!gIU++$5qM}q+;{(gXp zr6YDUC-wQTlT{IHkUI1co?*r(o2UMR98Rdf)&4FAT4LZKR)+96i&ak57Z>DnH@B%S z$rfCKX5xQF;Rx8JW@l%gR7VnL_xIDvJ}*UxhaqfEd^TdI)tewX{ls-NO$0F@<3*Zj!s#`KK{Ox{1M(A zL?QyVG2q@kjK-|PMokRXKi0~XTJWkODQqV*^CDUVIn)Cf1@295E|JFgiH0C!DpDs^ z95@a2Tyo*eKT|e^(>{*4IZNU>J8&{G*>7t}vwUbk6_Ai6hO{~-Jsd*=wG$yg0l(M* zMIlTtK#cT&9BR2hr4aNTJdbJFvuC@>%INGi;yGX$_pBMsFKxPry{L1EPWPuhyBX0I5Q%D7J=b)<5!V?zJA7E7HN^fX6gQ z8e$q+wkE=eDTKfSlUC+1=92w3r}|zY8$zOgkGx5b;sU~k=3;0xSPz8e1)K{0!d!*% zB&=ok{w4f!*l}%BJd}u9_NvFM_IN$6N~RRN~)Dr8c2lf6Akm z(7y9Q!$CN0_{)Ri?a_1xCJY^hEP6OMq2vlc$p!YVX$3vx`H~7?jSkGfHsV10I7(^9a(7UX zRi^+MY}am(@x3+DmSq`M$oy@KZ_W;`-HC_8YhMM1s_Q!LiQhQmfAjXrd0qX&?XJV> zeQi)nE9?~5p^m=wF12J;O1pKMy2ayZ^kie3yf|hcF`SqnDSEy(>g*F-r-VogU^#HZ z8AwbS85pL@_j;L5HFQ0ONE3InSz1X+2^`~^cOBVa6I&N+g^&wVsaEWx4?0&m;m81w zJ)MZhz)LktS>U5{xHfQ8TlAwLZlFg>2oBf*^`hV*lAu|D764FfO6uqX!N?)cO1itZ zRGq0Qn%JG{D0q<kHn;p?Y}@1=%NyY%;qN^07*TMGIE09dv6g72ptN>>td?%_x)*oKwqc}VbOHl75vD5DwG z^CQWNPjh(Rcx1`p#Z&H1+nez0QFeAdk)N-CUO= z`{&Gt4eL6gZ0Y?R0^zo_BE`6htz3P01-nz-x2_NorV_abQU0VQOQo8p8}CPol8FlF zGLd?pVO7883g;rupZr(9+F;vE&!YG>{`{;iS51bpjD+Y%U8cLhqfF|1GndxO6|bi%4d%RkWz-RoL(g@`-re&OQN_TG?h z=c%yhGr1rA*%;}W_SFzN5N_E<#qT_uNe_2Mz3i!D@h9+Xv`%1*6VXy$8D8B(b~_Q0 zj)q-y2>ygz2@(z_G*C1Sp=?bKd;JF<{VP;K3EvlBk;$&(>+5S_WN)7#l@oIK(4jLN zO9(H0eW;~~wswYl0@puf##7N53G$9CHkRR7P|}S%lJpDndUK-OyPY6By2WoVmiJ_v z_jUDMd-mjB{Obk)9(EH9Xc9Sjva!5ec2hdQ;KSPqoe%JDF9;7oBN-KK4~Nze2X$_K zK6G@j?GS^@VX*YDhXLIxvj$h$Go*W{Q2-Mnw~pZ?rr4n1GJ7$+i0gz1Mmo9^6V;@8 zc{M{=Ke>KOkT?zn4KgdIp$0Ql?MNRK7gIn=4lT7K6~IN?+!2K2?E0M|!2r^hRvH{W zLNS1?jofb!21nW^niu166I4_0EaxaPd%}?n6BF0}N4&Yt-n{WC0h8eW-uY6(VEFmq+ipzuND8PJJusEikY=kCSP7q@0 z<$es)v_#%K-c#;Nx7Ty-*A*hOmXqCBvVw_$G#fY8dTpLPM%T(_EKCdoIpzA@@-F}x zyh1`>sl$;vR4tx^f(_B$o3xmUHAC3o!`tDU*B*0j*_y%ky)x(rG+{(d;cb6iEpi32 z%yg_*ZEY<||0mbCfu3(kb=)+(`|oc7?0Zk7>+edg4fGR!^8euU_J0GIc3M)&J&lWt zgBjUo()P%JjULKcXG={s1EOXlDpl-cqkDdSTWD#sNc*U8rbU5{1)Xuv0@SAQ%U^bo zfoiv0%)dT!gE=Xuw)}@87S%NDtTQW#8MkwM#6! z`}+yHO-Z07o)j)EEghe#m;3;^4Ai;kS3*!y~uSC3P4S5Un5dyo7w6p+VCvlDAG&-YrS}ndF&KF2YNhR^K z<8&_)+tVr+ofpZ_$y6Jn-a%^6FJ?>_{ghQ3(ucv(Kmfl3jr5#rxHf??%|#lIX`5-p z>+SU4wbxw^5A}PF06-nI&r?lER=uPSXTE0evz4~m5OHLP*&8{p7E)-qn2&yads>je z6%>9N?mUPWfAqn$9CX>Md7FPnHq8(u5G~${)BsNG&Teid6_2Gihv4)Rb|Az@IYnK- zeJDb-kfo?-CDrcFOXL%jD1&bZcf+cVP~Kt)qaQr~-ryA@LE_jCsa!pqrYHniwLp{S zr-$7@kphb$T+&J2w^XQ#q|;1lJeL<;_>ve$k$GJ8@p7y!K~xR&ocLY=Bf0|2C4JD0 z0uA{QLP?Nyk6s^Ex@zzX;ue5|+|`jma=U*^rRmjzB-c<=hnK^DvpUZVGC9=m>3bxg z75z7eBzxjj=6@)q{{x8Ri4!OO+Ok; z?$u70#*8IWeK7P?;wQ04%qF%yt!>j==5Ze{{ zZd9P?JOGG=wC62s^SLN6i#vp%NPtEULmy`t5}RX?sd&xLyM3!smE@gq^IsInof(yj zuEdg&N)-PSjF$~>CT@R#bJ)1wym8sUJo1ji7a70ZD!7aA?{M;~W+kTg!czxil^N1+ z7<*v`s~r%Ho`^!Q7)U0Og@&&OY?Fz$2@pCEe7z$oY*LL3dMc2<6~jM@=iq2=KkHI) z#g=g7&;VUAQL-4C%WA5xiU8LM(|1%WC-KB!X9x=)^h)5rSkMiIL$Z3z#xAby{H}cN z!GBnvTtAA12YIx8$Bx%0z+={}fHOw|a}Do-bK~ku=#0nFZ9=uP;&}5g7C;*eOPjVa zRvjG)c#j1{?J_^`T0>O~+5=+GR)ZfwHmQl`y(gYH!*6ggAr`N4^b3=DRBu1)UzMv7_VuWXztz;#oNL5p#>1Ny zJdLlkLm=cP)-h)dkjf$~77#0I!SE!!m=_Qs;?r6ST|wT4#zt|YkAJXfacf`7fs*jI zD*4_xp7uf+Zu=Hi4HxYd_-+KjH0Z%zN&WYzFU_0NdQlc8b|znJjXe*g-wT+99DlTd zmulgEAxgfQbR+#~(muT;trO(ul2{Zxl{WGD(4X!-x({W|J&bAill&gno8_07s?&7h zQBgyEKY`0b&EaTLiQN=B%IWLl1H|eHtZb6w*Z;e6WKvRd&|5{H4pe9fl_38!t)2w4 zbQfCW+$7>#$rBrz$%uEKJ|!ZmA}bOQL_b&|C;l zB~A{m@Y&FpF7QYH;DNO7UYCa%%Gw zx69{784!PyPlb>lhli*#61rcv>3-&)kI-3+G235Ip0#PegW?CD#j-=prn7|T>NrVbe9q2NwQO#~5l?K#W)f@(scg3Fz4X&&h#0T%XUR z#w{=1NU>viHc7-N=cE6J#2ngjTqp1#4(!fkOOq}iwmp8;xvlGZ8MK$ePr z0zWn-$cgLHv#2zW5u8}Zdo>BD-&LMSy!8X^;KE4X}pgh5=W9414E}MUS-0} zGR#YPdeHl_0uP+f)TZ`Y5e0%8MYHwGeoP;$N|E#@D0mK>kzX|3L zLDyT<`?p>oL@1V!3uws4smIrY{%Z}_xgwD4GXC17PF-)B{{f)rL~{v{fiSE3W5lyZsjTfZ3hiD+kV*9$sgFOt zib4zAGtym$@IR&9e%Z`_i($wv&(!PZ|5qJua7Sx2Ek11Z|(ty{@;0bBe)_)|QCJb!cIBoZxF z0kNL(I7%U&8&m&oap6wAW=(Pift)oa_xAVWAip`h(g7ns9JIdbp9rdB&?DtQNBmfDMBAEX7=ZFvHZdT|%9!KM|>3)e>LPsXdf_WAV19r}gL z;t!(Ycv5fC4q)xGv~P~Mq9|@VSHOev(X!17q@NC&o;)US&JN_8YozKYcZLE=V^9$wIBR4Od64KK z-zTcgs%T$RFjQrwWn~C_POwo1&)f9+D9{?DiJ|Ad)PxHBfTfyp(Qtd=0wMcboV}L* zD-YfL8jySO1vhEzmKdrvIdbR7^`_#&1L449Iy0eT^H8;HD`i5iyJfUW~*83G)6 zu14zo7_MQ1bmIp*(eJp_Vv)+gp?aow94kIlT$oIB#<=wDK``73S;!2cN&N(2Gw@G3 ziq*9I;j3AePWsmaaYp%Q-2w>1UJTNTaP>qM9S>PvNF*|;dyds#fRK|1HP?N`CrrY> z8x(t@Ex@cfE&7*bYjj91qzPh|-mUE&!qwCUonvJ-(UOsy4SmSpx(5ej9WD&XRj=7i z%+r3WCk(o@|03@vhHt<9lFD8_Iuk44Te- z?kXfbf|7hSL3;RVV@bs%xGn$LV+-n+D3Vp#`s88t97+iSD}6tIBxBO69>n5^U9Yyp zPbOa7^LKTk;-~IG<`8U;4k21HfkEptTx3uRvL^Vack#VVAIibV+ZH`oXK9wTm7jIy@bd|yC96S_{sTwt zN>6`(u(+F}bSaAY{_%1BH=OOGBw1P6Fsk0OWC4N5wQ*ny{PqCNHcd#X4)i2$P`SDW zR-$cThiMN_)s?6{S)*i%deAqZR?jvCKCJTIZrs{i8vU%L(9KDF1_g>`TORpG48;m* zCESD0i8r3nxTdfB8UPy(tZF5S9~GD8x#kcmyR7t={fUahi%VTFUXSBR7RgE|cO8NL z^a8{`t-h-yaE{{eG@1>1sTo3!3jKlBP&o~d$jDL>BN+ud*}^JgLGcokxQ9xJ8SGMD zg!)gjl^_?;J{y}b2(}Dk!*_9M6R>4o3e1)(`s4{0L6wUmb+3IN+o4|B5nAVd-34R= z=bR5DW+$!6xFo-=k)N8Lbakx!PWW_uvh{ROp328Bb={BE?{*&@F0?v{sPeEcE+_ie z^UMB2x<(go0<{4~!ell+of<<+fJ>%}&|j3e=W?MuM^(z@X~nTMt;p z^FX%C2Y}cirVNpHD3wVN4pO)K2`NKs!W~gqEIS`jd#P13i4(jB;0V4DJ~~g>u?tvW z4SDUj2QbksE<-n7m5rM~z(HR<5PWZ8RyhWnME}E>5+Brlk+W;0IbD{m6-gr3!xsQJ z5k#xgk;xKWgeqrgA*?3Z;^klv7{>eBlN`CR3caQz6A*;+T==m4@j_n`c#yr z(sFrw=(4DR-k>pi-?hiY4e333WZipz`AW_#vy#R0cK>%rL@VvV{TjlIMs9cJq(HkW zV$|BJ(=gQija(d{9;^B_JxxnXTaDRE>ysKTZFc~rNdE?f6@ZaB9D=Q@7e6U`o42(* zPAQnvM`=^-r5wf^)~&mOHYBj#|A2}}BWIIeMIZSHmJk?{)s^|o!9S;Jb$&xqovhS0 zxKaW+FhcUvr%!o`llV%|jn$mNn+d^h+aG^C*e)l8m$ z;P0=G&Of9U+=2u(we;{v?A^)5!h@DYO-;kqe%=FBr9 z5jy+*)({qTweqd!*x^(qToct1_9s>hILPdLS$Z3?Rev=;{5k(Z-+v!R) z!smwxfADoWO8~JFCT7o6+xg$U3-1LaWd@D|Y)kE1uup*OesH7oB57xp^lVisPP6HH zhnAKD;|iA`4OX4{j{H|`t%fn}rcEv&2J{Ypk-CsjT1`w~BVM0e(<(_3ZX_QDm12OX zKGoNvr$JECy#+RaLd5_H-OK0*akrCbeZchy_<&LcxTUw^N%`C%g6V!L6QQyUpb>t z+_y?VAHeKg8&%Ddz}T79!##dh_3PR21gF0I5VOf((;OOm+i(;Q?$(5?F%#ld;`_GZNCU1v zXK!y0ZVz4!NxBN;4s=G_jGGYOV6!*&R0q9uEv(Cq*gooSi1ht(^YLnlyzea33P%|X ziQ0P1poq4;oufJ32AOCgt;z}rQ~dAo9a1>&$LQ7H( zf-qk|P|DOm>Z4(M<(O7lS-N${#O$XTiMr_8woIvCZ4U0EeVC)(9U;W7dEG?zsP;q; z`zOng8+K-IW9f!%Swj*{=dx~kP1OWW)yDK1`(+1Mm!~#a>GF&B$#2ivjn(%4Ml@aj zqeivfyonvWK449Zm&-(|jD*C+&243`n-le3X^)v}i!XNAQd3c%-8kc6u>FsRr&Z`{ zV(-z!W$Nf!kQ-zzGIbIuIyE|p5-p9cop)s??*-xkQnd{#(m-~Q`=*mhJLt_fzj z&~%}X{^W#9vGaInM33Z3MDz8zYHLSF@Q+nFVGe^Y(On{-1PoB_+&T53liU|uj_u{- z_^dZQnVi}tX4!V5{MGvM@N2^!F>`0=UVOFtJUP^J-{rdibywRYql{e9uwQ#4U-(lhh%@yN+u(=a^QHI=AS>5>n8k`}gjt7mK^k zzUj`m_ZiAT|9}9eR3-vUW@iV_q~UP!O6TOH{g)&u5m}Fk_H^y|yNnWP$EKegv9=BJ zS||09Kye>@6Yd9J8zTwB-Eraxz3JL;P?ikE8?)Z=!V)uMj z=+dyP%IVA0QX=$yMoFG?=W}HrXDXKKx!&je%)sCu{(ghT%EI->H!iFams6+K`xaKr;q zm2XNIPpE?EN;B6&gp+d!wi%4d2RYY;^=0)ZvhC<^r+C%hRyloSHft06N3jdxPKz=> z?ob(4&wkjeS>Rl=!K;9GJPgK&US%HfjIr|@d_ET}jb2NXaGsd9qZ@8HzSI=J++OI? z;Zvj9BbXa&a6dSpX8MY?^TPaAQ4{^3vnCyjXRKU*y>mOZ)ES_8%f~6qX3ml^{?51f z@)9<$!mfz?V~vzse|_QkBF8p1a`4Ep`7Z^xXBN+C?mnzP<@S3GPLooChBB^QyN2F_ zfwue^^ai4nDgIE>_`I$|Cxqr^T2oy~Nk@B)np6dp$etKWSokWH*G5LB3~64{QN7o= z4z=!cUEi=_gWy7NMpM!BNB>^yt)bKDgMwoARgxMJQ(@&TveWgm%TIWOavZAO-rU6K zuQ#8UcI|uQHLPoRi{bac$BV6cTUKW~v zXR!X3qrD={)uyw9uHRx)&9unfw=(a)U)Yj)Z4UP#6>eA;!`2Nz11Dj^=fIf3eaPuKQdgi2O36{9}bjd5wKl zW03_N#W%SNZ*tw*Ao}MyYnoLw9!KP@$ZAGB%CH!nKc89OThnItVAD^V#l-5{&9ceC z(zzj)H>8rg(z(ZTcJIuB2-T4BkOk$yAM}u&tA>52^ELv??k|JR0DS zRdwQ9-`VNEOdDa+-5m&t0CusWaGN@t~Qet=d0Hy$L=&JzdSnP4`({PtiuI1r8MnD=HDci9H<&rRMtt1qBZtJbjRykl6>2 z?%~4u6BHrxHNhiCj);h~2kwl_XHnqPN9g4T7hH+$;~ zm!Ry?@tNMHlcpa-f@9gPItB)f=r5?$ocJPoW=godLg|r7+hk6vmoBk$#dC%gf{b4K zvIL~vjIDXToG8o53?lo3M0J^kn!aj=)nA4?`j?crD4*Vi`(?E0%6u-6e{XKrxo6jr z@|0xD=0XE6-k(2nm#O|@)OZ{aBHlp+(o;*yR4EiBILP3LssR88<$91bVxnF~*x2R@}MXqgu$O^Jc!*UM2H|C0KdV6~zplN}LfTLs9wf5npak8hm z)?FPHqPaUp`1@W3-T7=?-w1KpTutew*4Ms)CxgZ9#AIUFuIkK`8Je`unwnjDPV+9m zSmzb{51lt<@$>1EgSvU3PJbn5!^e|N3Fs&P( znwpxJm>3^FVY-Lb_jOWIQbB>3pkPxZBlXy()hw=}q5?eFQFiv#gw1ag4b2dSiz@{Y zT-Cr9=0E z-xpx5-odl-^7T|^#HSJ(oYWGQe=C2ao$>hAUAuS3)n1z%P!WipH@bpmkNb6fnfFRC z>lEb#XMvz~iAuWp7a@iDvNbMDLbrW=e>~$Sen~=Ie45fT#rGWZ05VVV@qOt$5?ht> zV04hJrcatA@n=&sdU5c5agUUOn8qWS88!j_JU=gfH)A|=^OmCD3Yppi0I6+lZMP^T zw6?bP&9|F!{eJni2fzlh(E9#$maMNo(%)~=S*o^LQ)F!H6lVVo^JY!aRLMWmXY;Q*g$>`uMOe-sQ;pzkvSy@jMpL9GZ58g@xCf9;JTc zTj!7pra|XD)No%UcR+LR1(dzJr$=$~LY1}W>rBG3iFgH7oPb5W%0GNy*tJXZ1>?4D zb(t2LppyY&Jh@&+zxE=XnvM=2vXd5CYfv{YVM;H2M;l)3BgsljFRdje1AAK{+A!?g zsj+u7Pe5mnbLpLJB3qa1wh)am@Q$+|sQs&>!{DWeq@*M=oU*boc3$2z6tgM8Y;0`J z&CM7f!+4x~9|lv5N?Dgjs=z*P^sxfZ9{eb78+)xGY6>wnts!9?b+|}>xSjo+{1a7G zRl+_%GjO;$y&t3z_By7xFB47X8XApudOEj5X`oPQA;=JrlOI4N{pi@Z&hSA2=FpuN z9p+C~Depp?59VcBamRVlf_;sia&>WGJ95MeObdQp#$ig%N1%ME#m5RKRkDx+S$wgSFv$4G>rLt4oD>NmebQLw6#N)HBPmm5v)E_Kn#5y zP;OYGWv}wPd|%#t^s8%7bX(;O9@YzX9gGgP&p~~^w5u3-%WFXE%c}Ut{R?w-$)=XMx!D%6E~*#Pwgkd?CAQER<;{ zQ_{@U1djixw(PYb`#CJ9a;Ai)X~gnAQyN6E>(FgU4!}uH%b@w>+B1|+*}=^V|M04l z&SRZ8M_I}xR#VtDXUS@01BPqK77Bpf$N(<@mk@*G2fS4*HC_xN-&Cxxo5GmXK|W&K z57;r&zX)5OxG#X4+|aJKG?1sB%L0fukVB3B4dsqS0c{izGr2YLxj=yypx*$un;Zmy=9`y$h= z*6Bqn_saax_%3zCB0=e05MNJEPtYxaB;Lna-u3bKvNaA+wBJ@gbx25JhvrNtcwLvCgzs5{U@;Bk2ivp2$4$(ibcVt4cP}0)mnQQz|y+QV;+|8C(9=drik8o`; z9c@Z|(Wm0YAK9XH;X-&`Y+I~V+#>*NoK}Yp9bz|T;-{g?5gx4fzx*AHo}S?(T_uwA zDeb1-SBUf;`cvB3Mcv0VqBUhh{kO7&H-5}34v+khod1YhgcV+TKl6fGbXpl}CHLm3 z_Ih5C+YrWcWpLxUvuEp0NP^l4a&h?niH7kXBVJlH}tbDK|xm!4B(SQx}n&Xx;IKq zu>XqFu{So3`SZ&k-eFH1#&XIvS&o-!?`af>g1|#3*b*(}9(tX1Z^u9L)o4wy+YP-7 za1$l}x8}Y(sL8F{JBp&BSm7ujpmGoa!2&29%aJObPyzu_AwYnj7&=7dAR0sjL{t=z z79fNsHB?1F=`~18=q*5Kp(KQSJ9xhN-uIiiGk5OHoqPF?oZ^u+KK z2wIpzD{W~o647| zF=VYE)sDa%EIU1{3;>F%925Sip|#bbTkEtbVnRwk<6NreL!<$VVABV<6AE zQYN4_0++$1s7}i|LwL;>EE;|*f_?3so-;1`4)^(e2CX{}@ce=mGB_Q3fx1Uu^UQ3P zs@k90RjuUP32JRdt5fSX+8>4IVJnCaUQ$f*v9KEat%en{Rj3K9+vkAsVKi>A7x4RtK>MVB{#zqkGs=com7H*j`#2DS`3kba+BZc?6k<|xDEkAi`qqM;u3(Xc4SD~&in$5 zHHBbeW({=Q2_9zhgjjS-(0iB{yb6xbf}vcCtWw5!#oPxFVbc9{Cm6d{!4rtqLCiN( zP%S7O)PhM*!pqq@7$D2(9fBmm3O73%Y-3LkHpR0$8GMw1M=OKNU6g7p&+n}LmKN=!7{Ca5^v9O zI>Z60jg&g|@%xMR-#{m{005W@P0IAf!o7Nd4&?VkzeZl$^9w9!s^wpy_^s|KK+_{< zY_C7%q5B4I&>N07F{Tz@F9T(Z=)rykqFQPObOE+hz%@19E}W%O@l6?*BN_-i1=*8> z=P;QrsZYO1H)p1#WJn25(*Wb(fY6n!>q_N3g=u`iPW&97eul6-a}5We4rIBbQN29b z?+ccd3A6IOj+mXP>L@F8=u;Gs#~KQI_xt_LVBa+we4|PYN-He`E^y$<`mNVIrNk({ zPeDdnj z(t6S+Bhc@2K!_7v=%#r#(R`wO%JL@d7Gi`uS)LE6S3kaatzV&VZ-D6+l6xhNWcw1vNAGy4Zb(TDBK_h{moTSRz*bx)B+#+6O;hEXKw!XtM}e&i4+_T z@N9aw2UHW+plpAI*TT%q%*H0`gyTYVr(=)9em6`oZGG3ST_+6Fo>n>^WZdU;*Y58x zYx>DK%YzgIWJywTGSK)!YZvXQv#=w?{Ctzi{ul#pnVZ(2l&GDg;WR)mihDazK|z(A z0x(%sYOi8L$*=DS%P~~WocShyEYJwR|1~u=0J`AFGzj9eb|D3*q>c`gPWepuhSJ9R z`iX)A@RVF#Kbe&ZNF3Iu^D#wu}BPD2tB zr-V+P{Ea*C8#gV|$6F}Jz-I>Ggr$mYVj$t=T>~&No*c8-X)rXg9YG=-<-c?M%J+Q% zXE}E&(EVGOvqdHk@E!!)iTq2z8}~T#JALIpG3m8LxgeFtL8&}&GE5SzjUj&^_=Hq_ zJODeJS1<|Kkf3)3@ZN{I>SWp=k45+L@&e1*M^{(Z#U<034}ggvjs`$@EEYIgjxbx0 zpAJd{{7Sq9_zQiY+p#zXU0G71sG(seqj>U_pKLt%i;01*sk)Q{bQ<8Xmzt%{pU(nb z)BHVfQJ_K#_RuwN>oKN_fpe+<7la#PHV!ZWS5EJGknAK?_(9XSqp_vMOLVz&>?4q; z&!0c%-YwUS0xa#M>YT&Y#>Stu1q1|o0qnoNzV26KG-kG@$`eE^X`9{gD@l64`JMtA z$gCCx89-(yL1GN7NvF330+Bxgrl--D#KcoEPx&p(^Z=S6&zquZe$Ti7M5A4-p6I(t z5yDSgx-qUR?lzirP72N3*vNR6@xcWK`%tJ2swL&Wjf(2KZD3%YO?nF8^?pEF0?*v! zt$?U7i!)c^6xRE&4E$slBWEM=`lY3Z^hv4LM;A1;_uID{wJ?H34fd0Hpf#QZE3liPEcZOskSoX;avwdd^+n@Sfn3;LJg9|VZyKDNc zxPk;cMwWL<3o>GCV!|aXBjJO77_vezxp$?*kJ&eo*$eBZK)u}S=Cb&m=Vo3Op1Fl| zjwhB<<=C4;S#a^3`OTufQ{t1EdtJ&la(7!MF_}_6@omj*!V4y*sZrcowB_k z)yb0gO4wD2dvSk#c1_-E41>X1H48xZtUr^0xNSemj(1f0206mm8HZBlR9^*Br^!+*n7!4n(83M~-;)HIlB^%$k<-17J*@DS?$X)$ zGw|in=lR$h&yU6~MV$$cit5NgBMY8llft0w-L5=Ou*wY=KWI5?-IKSi)s(SitDn0q z^~|a<(_#0YXdPtEp;Z1GIs-^2Vt-IFMVx^BKyHqRT1g&P#5r0N!7F?FTJ!^B93L zmC}h~snpDgQi~`;zc-X2M^AK!u>d)bH1!Vjz1*;TyQF9+AJhZn-W9k!BXQ-ymnW61 zYS4c@Si>1+JP45_6w&dKOlyP-xD)37fE?OEEMRaQs4*B zzUl~|{y(RFE;i_16}}V3S0_E*H;t(V|VHP90sBZfOpOG+S6ejVGsL25FfbziD%*;ygkVe2dT(5 z%jp5QnbZec=@HDHDE{|mss(4l@h4&ZhmIqydW0M6Hr}Pq)LL%GRM((FlY~ZdrnyXy z0+fr#RpSF{P$g@|X^{Vi6v{}LRE9TEVHx*bw=w|o$s&PCry|h#uXwFRvzgI^SQk?` zVT-EUT=;1)q5iWHQrg?v`#RP1zS?4AfW^a{$q@)dWt7bgxz-FoD!#zz=;*lO$7!d! z0976kInx6b$N=M^DpgCJ_VO}uZ&w9LxaL1DwOD5m><02G`virB2}U?s$v98~?*lFV z@wkhfui-uUFCRD|;HR(uF#gkYhT318^9;YD)vF^X9fzLlgGw5BN?FmTJGC+Z4f9h| zYio~*ix%FrRbe4n=sOnSqPss+h_r_4z7*bG)=8O{vqoLKeA#3aee2pFh_N{}T;X&^ zqZdd~9o&S9)K|!byH{kpZn}vVW@u*7I2@)t5_p z=F+zPz5oro2GxCsP16r>H=>8$`3XpTggvKHaX6t#x%Xx}K&2Tr0CNeG{E`h)_oW8X zK%ipzJ^~?e_N){{n(VX*p!Tf%&zhMmFdHSKoDIZ9@e>&v3N;|MYierRJpq!k`Qi#o zGT)SzmO|sn_jR7+{qZD6hrUC}dqtg=DP(W_`7wdV!s8l`>Ly2MltCAq}A5~ zQ&m?d`x%+*xgrSKk-tDw1I9s5HwO;~XK_!5rIeIEdwwu39E9Y`4upIsHvsBX}3YNgN=wK`Rzs zz`9Z81NwbIjgxiYRLk)W=w#~OgW$k{GX z29_8Id;E)C2DU;%LSkZKwxdL_ND$u$5$2KrKOYPg17Q-*Y1gEa-qm<>0ss_gz%`JO z*)|~Cq|OZ)ZK1UwTTfoTdAsVo;Wc@9RoGe zI2Wrv228An68u5Ft5Ec=A;GEOsOaeJJrKg)-^Tats48`GzTj&Jw3=C2IkRN2UrBnLqpmFj54XLY zKTz!|#DBpwv9O)rkD#CP$)2+lB9qLYVmCUi5j@sVJ+QfbSDEI{=-7Jp!CdCSAz2PS z4RNw1WDHC#?)W8)zQftR<_3cTJp}#|ul#q1a3KGM@7b2QGq*UxF2a5^xaM21%HPaA zy97Q)>4xzv$wiDIg!Qp-3#;La%}?NVqB42ooNsby1O!$bVId2)!OZ%mUsY%~V|T|O zb7Bjf*Fc9S9h(8d;}u%^2J3!SekLEC1-$~*6qs-KfHPI~r1w=H2@LgqIsfI}_!+K< z%a8h6FCUy&FGrO*pZ5wJl@Hu*|0Pl{0SIG0iu@22Z(7wo{v$t@)A#lwyT-us`Zjx@ z(_@yQi5&TT$;jeG53+g?>z?DRCH=`0L|^3y>&dYe`qJtp-tXC{Bu$hrxO4SQ-+y*Pi9}<1#966RT0-K090oB40th`f1~=`_dfH(+J3lT+Fq$@~ZOw z41dg8B;1de^n+XN@Ko`IoHB2nhu56mF@GG9ldZxy_w`=g{P|Ik$a_+bxy5d>%iWk~ z&zEiWIw06H*X`I>=r&%gBuuvLf{(DAlV^C<829MuG&}#+&7P}Jfs8@#){&GWh-TX* zkiJ6L_#qz}Ht*v|wj)0fJ=P&& ziLeVIqeKalBLaK8adR&S_qfH0M-X=Qs^9CxbGW@{`%r+zET+};4i2*^3G7Z9`y`Yf zaZ+9;=U<+pqLM4i!@oOue=_$=#zYM!Cy2GDuo;@eDs(gYQ4*Hjc_4=pXr+d+o2*{V z2{owjsY!~>ihVMtLO*folJDfzY=LLDD|}|N@M4VcA4*aALG60hZ!14X%3+p0u4#ux zJsoIKV-(YlR!m3lMpA<6X2_*gzKyheevsVtTIa9pW-0xNd0&NP*jv(SlBd%HC8()MiP$9JGk$4vy^LPHL+7Y7Qq@*fC0FP1hILIuMmWVz zed(k0(;8wWs~#`=j-7(Jlbc+gg=u=Z6g7g5v+YkuYjL# zkN;wr2$SF+hxR0BtIRi1=feaQ8;oHO?=TtA{UWpuWG?e;_wMJOD8H1}U(SGd;#^i7 z#28T1Iy6t}va85FGfYjr*;1k{8Zq@17q~DLzDQLs6l8Bii;9qo?@ceSZF3U3f2Hr7 z)vcnE{q3jsW75@wHC>_{+g#~cToUfK$J)JpCTa6&BI+yz_Pcn<2C1>lAaatz_?ssJ z6L-~dxnnoj@ad{<7qqi7zI5kX6RV$8={LzfUowex?%B*nQtSma=023&RMDzrRd?qM z`08j|##$Atr$v%0gJQ|ccW34a?2;gpZ;aNncD_glhmZ$ksQ-9y4$ZP~iq`YedTXiX z(s4VD&8Ei8N3^LYqYu27KK5_+?XtYLiej0BIVA?h&VQj{eETP9s@{Xs(>jYFUE8sL zXf=la)s^d?ug@u~vm1Y!lk%Oyx#|*<@6%@sj}^ppC0_R3v`EPE8E+S3j*5H~h%7?% zZ!9O6N%>FA8)ma?o7I80`% z2Q8CP76+K~BD>(2=_?*htNb(&qJlsa^7J5Hsg&;h@itpIdysMZ(SmQDK>5w4ThXmE zZ5gq%mZd)cXVLF{tnYfa%7xxiM$O3PEN|G>dtaxjrI!kl%!MZ<7h;`;EE_5}vsSVz zLY*uFnN!m$@)O!4E&8HWY3?T`)$*i{U+`ZH>K0maT~~FZdErCa_bU#KuUX`pEoI<>AJe75;v!VHy?=H^j0vU!qa zEWSZ0jz@GC7%KD`rPhXswJPO(u4^Hl6%Sf&Pw`pv)l5)9fqCFUbE*npk(V?4i^4xB zX<4h6PhP7kdSXi^W1FpGD|!b@rTq^iye9hV`8q#{;g=M_W2p?!{-^rgD#^%W*nD3B zK#>|ld6zGSDnT7jTwx)Qlr4YV0nNE&2e!AJc71jxw{`SEaaV(Z0^QMK84Ql%jDST3 zO}z=r?>Kl8OW8&vyS{sA1gAhu*A8^o+#bAJWtpz~DasQ!&r;T08?0Okeu7It>YJn% z19_u2zo}L49#|e2AYa!*`_7flmu(}X*q|HuiN9|Zo{VE}&i~jFl zWkq1mJkKzN-f2I`@GqAeckopxjDG)NOi=bmgVBTjKo?)=WWC|swnD4T&bS^J(HKxe)!ym_INDhi$0nE8ZgE!$`pinp%xubKR* zQq^1RoXYHKYcVGN85z%qs5sxGlqM}~AE`!&E!8q5Jo!5(cKXYu&8)^s_~z2%eRAH} zR=MHD`yvK+ZZkp@lfUNKVF` zQ>ewzb#D2-N4hlC_86}Bf%IGzyzwo=Dr@G#a$#c2dk{Iz>rTz*n$+cYf~`(zr#TEKGH{D}8N zI3^p2`zz;Ius6?(a(wLe{q+?r9}R8OBP^|X&@$*%jOaO55wE-GAKhiIy!yPSMUIjj zz+x34m%-hB=i}$X9 z&if1|zk^mw$=#_gy%CaZhV4SDQq)nhXCgI~he@i_ILs`>E;m%~DZ&t9Gs=oHljbKW zR~&kZ(~Ol>dLEwg8k}Trc8=iOg?t#k^QMI%jg7i0-WqwPJNwZGTqsIn4t8{}qM$9W z;;*=HC6sL+`Pcd48{4VfQnPe9?RvQd8UptnCF0$VHqB;SC%E=0cq3EJIzMCJ>>5c9 zC|*UDO}BP*5o^d^8yLRA$;`~5fwSixkz^u-^?LCqOs&O$!3I3nLGD-Wx%rQ9Qd9lf9mw53Qhf@2}=1&bE4NL$IYb(ED5XW$=lr>>67R8>+=C*kU7_l?BTOdUk3Y|94m6Nn73hl=D0#e zD*dd39?te#PyJ;nWe*%S`yvMG@h3`9%P#s-ta*VJy7zsyY`3#_b~c0Fi28$V?Yt0Q z%bcvLbnb}_>#1Cx{UPuLXUi%R6q1x|vMydI-9Mr6fZb8hDO=(NG^qrQ;kEU&IVOf* zRQ-V-FefQ=+s)pqs<{r+aWO5-JIj|%DCMa5I%It5p{hb^V?>dx{}N~6NIyN@^~f8|c<-%+?5zct80q>a!V{lg~RTB`EjntH!2f-(`?y ziCc4x)U>9Gz;R@RvO1Dmx#59_jzOQM=kE##1$YDK7-2oNr7urw)HgS%0e@9 zVr#+Cr&v8_!>GsVZk10f$8t#jWMOIfZt*@?kF=THh9~+#4fbfMgH;dfZ%s%%+9E_) zYwUG}-4nS2{&vp2Bb zKn1MI9UsffE9&Ff%fkp;;zT%(weQ2 z8^_8NCEb18eSsEK58NV)y-?xAL?0_3d8~G=AsdxY>he;_H!BA>!nZOK-nqSx@lR0; z*RP{hTsAPXA<@J4hkh39(ZdREF1Y=>`{)rg5jk{lm^=QwVwPTzBk}+9O}RX5N$rn~ zTDQa{c0GGGE~;`@@Hw3FD7=4(^AMp+>yUs`UT~UmG_R@^FzWtvvqSv*0ieI$MG-=N zzM=-MCtY${=K;5f)35ijXWgu=-+i(d#KI}^;gs!*A(l2FuD7pyJp-vkImXeQYsdap zeRI?bt=HmQ1vK-+z_-sc|YD9y|4F zknvKL$pbwV_wMU2I=!ddS_C}sf}*XxJz?_F4O_DMU}*TEebgk4&1)@^_>^-R8ggnE zmVZ3?g-*-wkl*7K7+CQAHy)sk=cxwgLLgmr+mIUM4%h!i*yX>G3%;oV-k!}q6H842 f|8R4BQ!Yr5=*5a_?w<`fBcpT6;IHf(cb@(q7Yudn literal 90300 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 z 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 PN9a=qzvlh&+s*$0{Qui) diff --git a/docs/images/saved-commands.png b/docs/images/saved-commands.png index b63ae0628f522888c8f1a043da39cdc78d42b11f..582fa7fbb6bb1764c653e052d088a61ac75a5cc5 100644 GIT binary patch literal 27361 zcmd43XIN8PyEcllEDHrh1*9)w2`EiKdWnUiA|N2WDF`SnbODcLLXlUr4JXX=A zp*aVBr2XgOS@6d`!6=`G<_gUdl?N|;k~c8t>I@D^7j_;6dQ{TUeF!x#O~GKqQ#SKg zBaD+ULvnVEwWfC7F9XNFfB$&#@ujP*WXr9IR3(b(hqJ!h+a&mIP0@bx@_`)QO&Pr% zS`#kT;By{aMamp=8T@he9~xR3n$Lfoxj{qo?%#`z;8*`XpaC!V=kK$3!C#(Sd3T0} z=J5v_@Z$Sd|9T02_2vKJf4Oh6R{6F+TLYzL&JvzRuOMbnWL%%0`AzOEu53;ZaYI}L zuEnA3)Hc4#c0H&3cs|??T=MK%c|I04R!Bc772@(uy@f~ZS&9_Qz(8-<$wcNuKyxo8 z6hGAdjK_6sOj4k?`+E%agFbmv`d~_$qk_Y&XLc2(mlH0%(*J8}P6G+sn%cJD{<<4( z-~asqFy5Vw%>tpDpIMZ}%H0dZw+*<9Z ziwWGo@BHBhQ=7js)RmOo*5a{tIreoPUyn>ZIQRN~yW5JyT=rkf$>R21`7z+SSw5EP zJp-E%dlh;s?szDTTsC50I+ClO*KO#I>xOLxwDlQ_2U=S^0s7pTU|*4eP2O3a7!BhZDcX_C1jr>vom2jYt}>LEdUZONpBH_bQ)m z1TreiZd*8&kC;?Ap3H}f*@iz4XA$X@TTTuat$CAR6PM#sq}F$Q=Zjr?6c-kLx~ZA~ z;UmqswsScYR@;(`9mWcyKk~qj=e~UTvJwC5olv8xbM;cFKx);nu13$8QQ&!cdHl4y zrO#Z@h9QoG$EHa;P0Fw5e?3EUUuxJku;S1}O0Z#1F6_N$(rCd{zQy8C^0 zaZj&omAS{SqOuV9&JT4w$He_UtV2SQU2~X?fy&k0$KIz&nF~&-eM3SJWUM_w!kw zl~De#hnHRYl<==P0t4Ns{AJKGX|vJ{l66SOs$ z(RG2x|JSrzmlSlS?l{yA_AeY9nv$S}U(E~(V4c9_ryemX-J5(#M?#%jsoU=j&-@N2 z5tN8K&1^I@!p{z;hN1nLzayY_uRR?`pvGveX3FA};3b)r{_kG(@+WtP)HT!O;A$xZ z&$Y4~J&F3)ZB=X&ii-TXhv%J4DVa{sya?Y`^@5+B;O3Z0v-)~j8u;szGdj1YHd#S0e$nt+AKe_%hH!~nsmuttz5O@`mgTN5_06+VeeLUg zDcfNo6Qy=y^#_B|h19j^gHRODlQ*FV(}^aPHRYpmYn1WQ=SK{;wa_X#6{%SL=9xL(Vi@MrQ?H|?4IVrgV2H+W3a=HZzwI~Rny+fzD7$~ ziJ5YqF2rPRqG4~2+Y#iK!wY=uA_G35fwgwwDoKY^qYk_7VlPvr9qscyk0dw14gqCy z*(TmR4iQn6l!d*LQ}P*Z{jPSaM(BJmOBB7#^e?YX%3n2)**w?De;ORH4FRd}N0-gW zcP7vABCybJQVyfPFYs`#%6!<;l)((6U%dD^RrdDU@3lXCNMT4P@2}@)T|`GE8N&a3 zoOsCMbf>t(3eQT&2N%#e3|RRQoF2r7#>rLgwsExgjaed;C{>_9s+L6BA~nGM+9>Vg zmiKrQ<76FwU0d<2%SM4ky>F`#wEl2ZqD$Bv<2hDPF=@{%+95sVcrAE%0SV!*tsqt+ zl?f|}4u!B0eM1`>nqQxL=o_1}Sd^t#rn7ekHTV6ezFRksu2)1N2BKs67msrvEPvXU zn3$xuuOvAI7df*_oS>eRBEBh|G(WMlka{y1e2vd&IM*<*OIhPUw%D-mtDpCH;n4I2 zP4!zxMCK{y$%a!MCEt{4v)Ueo7*Qh>H)0I~L$=1tSJ)vThxRr8rT(2d`dhAU+o@Rx zTV)#Y{?mklb#F*!yBlla@a9g&dU+10dli~-&Xb^?^ccLcnA-^#8Ie_Pd#$iJd@HXm zLdog4%;?ib)+B;L604g1U{Y?s2~KCwWitzZX4;mQ;w}+iME**0EP3+dG}Uh_w9)u* z2i!@g;fq3?0S`jW41A__yVp@j<*+J_6G7Za$%_~P9>0xZ+nz+#imq8$ zv@R;0o}SprW8{?mwbQbhfA2IaZb0n9i1^850T^)NdJM$*XWIei$xz)P`OOK@LbZ^@W4@um~Bh@NlkVYJdaSyZ%E9ZvlS{k z-dY+ke*16g!S9c48uxlnwK?x9!+SX)sMjV>Ft+Z?Qg)*ox6_`5MFBL~b$ZXTdZ`MI z?MapP)9Ofm+}dO4s8gg*I`6cG40z>nKm>U3Q4uNK$6_fMI^LkONhnA0a$%zaY@Th( zUs9&w2{;&FTBhTnknw0%3;AmU_;KB!%l?B;1eh&N+1X^9+$(19fwrihX8^-Tut|Pm z;F1@!W=4M(bbAW`OzF9Q=hrtYu@=cc&ogo-lkhiNY#hr5)OPnlNf12~EeAQgGt2x!1(4J9%9qm1eJJl|cDD-kF1(HpU$t>aWm5n&N(Ws`lcDadu1f5lylt$?YWi}#9&^uy_|O~5 z88TtCG@s*)vGKz>KMgpg7LD~Z$O_~6YAKX!5*lHtNd3ItX}zV1A&UEZx8!eQxk{DV z^_hnz1v53x1}S^wp?0mJsWRt|vZp-x`oDJ~*Lzbf_OKbrl74DWDn2uBp$ne94xUF| zlE%cw#9SA9lIjY7k%ahE!`3%iVeN6#$9viVd^;ZMl z`z*y8^3p)-cH1ha-85o800iDOfLfMT2C!Rf-nHzJnR|~EER+ITYp*(Z7fk~~&Fr5x zn@pC0`hF$Y-l7CnD?uW|X{y3CKL#6b-5wR0hN<;N?6$H}kMoj>Yx%3?*34&#FQ(mb zAK8Y`Nfu^*MIj{xy44vH}9T&oXK);Uv%*@66BYCtlHtPzzy4ByVX(eNPnQ#l7wAaDfK zW-roH?Ai<5)(XrUlzr7qk?Ze~vhyLCnn^g-*(Ra4bX?2H?!67CTc$SvmhMYw&x=_e zpf+l-tLh|JJ*$p3rx2%`l@NIYmDq>)Z{pUSDhFwNbisbx^>{S-u;?L^PfkW0VW*jq zFGtn5th*6rW@4LQLl$_NqRSakZ5x*PTm3yrGU(-0KLeAu8DPQ?soR5!q6@rx zq{brHp+y$;px>s{Azlx!Yz<{;dlZ%S${P<{`aJK_@sw|UXz4n(g`?dg0Vef!@b%!& zC(ISE7yBA==fwxO&(PB}rZb(X(pjb`t-ZzJ-7kHj7Q~&cm_SCKuz_%JLPG zkla%mx*Z9vR?C~r(9UzN_F4ypI9bkFjp)$e7QQm%JjAdmljfJVlWgpcYiO@ZpUXm= zKJt(;_uAqsHz}I3^?H&qvXI94u5{4UsZVwxqN%-=?Pe| zw8&k)U5~o1=+K#O68kzu&74D%Lt5lChj6s%NA0po8|2e%vAR!{b;ozkhy1phy>ZL* zA{}exr*B=z221I+pw`y$AlDK5pFac_aTq3AK1MZ+D=38#AC_7|ueBq2c$V6nDkf|J zgw6x#s#jqEJb-zB#bfh+XjFZCM$)8MHWAr z%-X!M0p4I}C(kh=j;F9>uVEc^=H(qKxDOL5%r>v}g1bwA@#BSFu=eJ!o@vw9eArRv z=e1hR^0)LfG8s~Ji)={ex!8w$aidyx+F~cKhRckvQS?qD6J1h2BUl+J@x zN%!7grk~AJ3~^Mp-2X&FK>K9;p^^EVTrNQ$)3DEc0(%+vW95T5>U`~h3d zi04gFTW@OTL2!!D1(BJYQGd7}$ke3yZB;*{fZ;~oemE-)PN0@3Yye)>DDte^Pwd6Y z)>Zrz6peAJ#DJzY|^BRu{08pF(+Lj%)9%ZVtzJOmD zu#pJp4(V4x)$B!spcEbodt)6hKskzj52j7O;+9(-O>O*2j0)_3z$`MOk* zWi5O&VZp9D`7R2cR9$&Sn`i$~f#a6-=cl$YG0zh9C7gahWY<__@SD%E&ywV}miY@G z5_+)s+S9FC8OQNo)N$w_awDEKnAL(nk5Y@IvI#O+|9w#2)fyr@Ey*ER!9yEyb(PaJVEys$Xrd{H4l1=Il%jDk9LVv?gzg$fR8v7|!n zG-aK9ZbhG+Yubvg&Ga(Yxz$;&MI>|f+|e11be*b%Qd(Ip&0Kz;J4p)8yArelhHH;j zX2b5MJSZuvmXJU7u8Yh(uK{}VylgPH0vHLy>t(1ETyZ;hxF-AGinKKEPF@tj>NBD& zaYK?2;e#AZ_Pz6Cr`XotrFK23Qg3ZL@KO*0&X?jD^nf)$!eQ?NOcy#_AGUoe;st0f z1EUD@U-F)7*MqQsBtV^e{ckrQxm=0IyE>kJ6cYYYvr0!ncQ}-nO;wp)&h2%DOZRqt z;idBDCT(XK8g<@9N+aj(!h6ECl}{D{gCgAE3|N5U6O$sqZX})O<2lAEg#tz`2S62! z?P2;Jhnx#;F#*OTdoIOmRX$+2Y}>;8b8O#!9|Y2AXyZ%eyt0zro>n|Q*utE?zrY=G zPzx9b?Zg+q1I9onI0C&v|M(bCT zvMgeYucV!&2cKmAlbJ#liG_iU_SDA;<8Ll~ZrYvm! zfop#fD5HR@@B$s5%WM1xI9kjMN8OTrEic0*NVXZ<7ow_6t8C=u;lB?!*6u-Pz-rUj z=T1y~#J71*Scj^avnDA*iuiNID$@}4Qw=M}CpaHd@vlih91CYxO{ZWvj z4Coo1GtK}oc=&@=4Jt}soBHu67=T~$Cl2S3-zBPrKYuQQ0&E;`I1!8WzNwnNUeDt52Dftw!dfaUD|->4U}`o5ldEOt^p$U zA1=?NvGo$uu}@so-s3sB^LFS{dtc6_wdgr46ZRak%2gq~4x8 zNuYAXk2UHI4mms{W5xyh!VVKhy6nRezS`n);FG_qcgf4>?Ra*z|02#k0hXkB{O*5% zGXLKb^A9n%^)dkgN%MRt=l>X!|G)oO{}Xz_|C_4}_YU?4jL^rMt;&E?Pm}YMm&SX& zbcWlG><~XxSYTdhadheJaQ+CJHhieK{pmzeA1;{WnYO(Xl=GR=;_?sWq|`nxIs>xK+xStmI%TO^K>mJv2zEQEg9_bLWrZR`y-V zDw+ux*+F7^S;}VCog}@+XT={uQsUnm&iEHOA#3k#lV5eVgj%b?iJhpTnZruCQahk^ z(8TC93pGZ=@yht#l`2x1QgFb5!I56Q$J8yvMEXMYlrVW1()VVdVO>jrq-1(=bYdw) z+T5@EbVm~Yja`G8QmA0R564s7M+%NGl=%zPU3f?Lt5741P@tc8lw!AW>OKhlz4663 zt$z14NiEV_b~m?9+XD(~ftmXjjsCQm5<5lj4NGNdvnxmtD%Yk1k|1WoZxdn#{1rB0 z6^f2mT7$!~hRQsHu@us(3{MTYyte4hL4-0_yv3`rp~6#QkKMMsJ2s9hetK=?lDt@H zXFeO`GK>-{K!)!fcRXUrq5VFq5z*7}B2B`%JYis53;8Z>GP6C3-x3MxBJf&*6Olc=r6!+zBE5W9u+s!yR{v|+(wL_T*$Z8FrOzm!!lU?uet31BmuJ*`# zrV{Q12*bo|!g}A#aiiXp=Xwg>^3_5LHeh}-tdM2Wt1`$Va&NO6-% z;0%0gl21AkImPYnT7N#$YFb?k0zY(O`~!9nOKhU?nXPGuk$~RXJa}_!W&}?ud8WM; zO?TmREpW`TX0tueX8dIuqzzr?x3MF(b-X_V^NyJL@{yrDW8`f=#$yQJg0#B!_Dgc1d9b0C-^tT zS8i_;2*pBLf)TRTlQ9U(0DF(i{$#Qy1HnCbs|(4!_r#x*+@ZkJuyfx-(QiRc2wLp@ zb3Nx;yMC2pY>&8dZ=zg1mPF}(+Kj;K%hXYb&25pKUm`j8aLqDm+`ZJh5}N4y_d&Ab zd-k1fC7yf`BJY7Ye)m=3aHG_y)L_>s#$~~-OAC{! znR*2ro=VD)w@rrj`=~SrNAKs`o|O%b+sgWo++3UXTUkAkIoL%WG}qpfO?gif?=59q zUSF<7uVA;@fP%agL1~P*86`kgYO;^u2v{3+xB@|K)Qt?Va=IOsrlC)|e<5cG^BC4W zruJBiiz(sX%n`->F#Pzd!2PI;n|k~ap%T!*)aLJ>CvGTN4wAYy<-M-- zYIxf1AW?y{?x;5y0v}0h@ZZkJxrSCCPR8$@QTAKt=)?N^?kAz^c?E59B#LmH12 zQ1a;DN!Lb7Nf%hLETGv;6oVKr@j?kw4qG7RIaP*giAF5nnvlm_tfIZmMmPsKyeP=ekV99sEymzB{HBoj4=M z!SQIO*d!9Z6@AhKHkUBF)QQyNW@TR?2^RxGe`aA#^r6Xl;Pu1^Z2M?_O8-H9#Mkx@$5JAg2{5c?7k((hP#zV%UukC z$bZ&pWW9Dcm!t64Zf~S%8D>7j-L@xL{5XXbd~dpCBU^iMqv2qg@#T+kDRCQve&xzZ z+tEO|7QRysG=kWXH#+3V*RpoK8>ZSbQV9MbqWoIsn5pMloVPXwzLzZq@!kKut{gzZ z?z(=(rc`V>yNliA9;A%;k@spbeFQ_$PRwgg-J%~?%Hig##r|SfnvXoCOi*$Z*rgmi z=aqQO5eF>T%j{R0c@8QC;NK*~`%+9R$XNp$H?k!V!OmPlzADx zUJbem-<`fz+M>D>iz#kATEM3#Q9Phg(i`G>nB)GmNG56kU%NxbIVotS$uC8BA;WzS z4b)TdqkJ-mqqeUcn+RQDqXk@nKm>vCLnG>h&6`+$Of0A_~Ig)8Oc)5ti9bl$x1EO>NvAe;Iw953OAJ)xscPF#$`^habb|zfxqK zmi5T6C9(rfn~928vhCqC3>X6oL=k$1<^BF%fWgVY1!|vr&UcIHU1@dvp7RR{2i#fz zn^dRAh{m1&m_S-ahVfJ+*+}90|23dQ(}C%&{ z3jq7?RG%IcSkRs3o&R@k62QR5bY7ByrPNF8e~@zcE@&C*z_i}O$i8~qL28!!C3QiJs=@;G#%v5ty~p?@bCbp$ zHfzO_^xdiMoL?a-S1sNSVeCg(9_6NuJLEy#@Ba`%B^m^B!K8YEfiJ^62dIuV|IPxI zpcjAqDwr$o3=MJ3)5!iLVl4;2+Y701*x-m*tW!(Wz?pWl{5*GKVqeNg##_ zXeHl!t4kr1fYIa>@M*7K6arcu7#0?Q#bTz`dmB*CmChJ>6L0=!->yvU0C!OpRka7R z8W?_YdKQw7n_F1>Jk9v((?S#U-#KdMW~tN|;In~4!E=pBvCEMWVdjbs!%sRCfjJhB zM^i|EQ;6NAjN}<^f3uDXeQ4DcC(`9V@?#hXr=`FRqpHx9V3&IPJT1-6wR`r1iYQ_smTJ%e zWBlzjc=K0nWwxLLK?;sX8wm8kF7uxc&tU)foDX0wd$&(X!1~j0f=jyd$shc}xn?y} z@GK*n1eL~Ly6~p|`|mRsIDZXkDU?I84K`hI;uC;?4meqgr}_e@+Lf-Z?hUsqmHdu~bHO}!lC8mggpdw~i2RFO-qX8a=|%mSuTi;G0}I&FtvDmz&ar_HdxwDE zIvgyB%RVo2QI9Qz^PWdcER!%wB)}2Nv z0K}O_F>7rERHWisHi{}xo zz_h)xxEtt3mX5`(Z4qqyfG%zi;Zu(imYkSt4wkVW7Q}Iw0tMU|0~}M<^8;pAX@O1Y zRJ@4Fyz=;b)s&t9j1l-ELpgd`-`*}#z}_PRsX50{!4WW);=jkq1t#U4j9FKPB2eqK z+YLex|Ae3kw=NNH;2QvB?GGTJ7PDE40PeFMEG`U?V$8jw3>AQo5;KsK_HzvW)(hl? ztNUT}N&2D;xa`GtlS+p%@RQLyqYBxVR4)loB_tV2FVlRlfgN{#MXgm~2A1tEX;SRA z5&Ojr!4|uZPmIT)RpW8N$#EEbqhS-iCoGJ0{y7&7bpn+(el_z>#3h&zD=d9iGnn383XqQtv-kQdH^c=p zNB7mJsLmR2{8Uv8$-u)V>*jawN=s(QmIRi{br#d_PZeB>6DeSFWlC}|+{F2&9 z(jwa-B5WPfU;ImLd-jx>=6H7tfdeC&#(MhA8>)kb_X11XrpcWT4vxidvIHe3)H2e4 z+$?c+9BDGdXtWAOGg^yi0dc!Y?P9@GRRiR!Uf^Ss5W3-~m}yXDEI(HIqUoHSU{mUmE*71zSWP?#zX`OCysqzUYEKfu3_6j?$jH?D;`U40<$ z<^3$HM2UM%B#aRn3|tFPKwswo2Xjt!IMzt_QsRJV^XNzEg0K6a46;fqCnyMNk%<2 zp3B^Z;yD+II@cpVbN($odMn*9-z3Jp65};BFYviFEuxN3dXI;^6D-)MRxd-hElvc4 zH#;9rZ^jy_!~oo7f|t}EMp?N%lQxj6Q2Xo84GAxm1lf3j=J6j{DPAT&vE#--eh)7} zfb!0ZZwqS=0aAnS&#lL39kr-i$oea_|4a&7owirG3b*n{&O5zIbeb#+UFy@b;q)wO zAlP4rqs%xnW(C*O?nHH{B}Wx;15e6)P{)`!3qOuIN9qUzcy*?rX`_^o5}n7$pwLed zZ&E@%g}KF}(wZVi#fg%Aiq~SN#v?$X#?`DBa)cYsoud>d59odtTL$t5S7~@43{bzY z=g85IEFvZ0aIyJ;&SxDTm$(BxeqJ)t}1#*tTyg>-FZNT4*P0-{+bH6`uu*MK)( zH!yW#=2{Z6j<)ALQt6Sd;ag$h?bOu}p&ImTVlB^c@u{(dIbJ&vaMQZ^6a#9H&RX|V zF*))A55>rT)os`ZxWkBoUu`oIPNSp}B5rv4a}@vb(NODp2n>@} zUGXt7DqX6st_pij|8~?Vs1d>Yc>{5(X;7{87`wq@5> zVYyW=aEYkOD0gggk-zZi6N{<^sC5JPu-(^`)H?FC;Mp3Ps+g$Ochr(|wO6(<1QG6lv~5 zC3me2Aa?9}0Lk>IZ*AB*hz;_r)&&{st#p!magFanK!5S6TN01|+K`O--B$-YI45~0 zzk}+?q{>tUd}V5QC?jRD-XJB;$bE`7&Jum_`gF7_Q!}CeWpSqUCwgv({kXm92Gg7( zL7Q8KP@G309tvz%tWG-}7T^Pp!yu%O8sGaS^8*YLmG_X`9}dIifbE6Pa}g8$o$5Yi z1t<%E(WsWIt<4h9^M%iU4rRAA>~#tS-8Z^YyaR4_U#%a0%Y20@XQ>293e|goesl6x zjWg^ZDYhXl=QEsdb8%Is#5Do@oop_8>_fr%>2E+9|@b<5ql2 zlihxfOTpfv?nK`ejijswDq_h-Mcr{%aPU{058>N0ZdofTA2nIZx^iw1Sg5nRr5b|< zeScyf_kuR32(*sqgnj6xzTG$czfKDnC|wHL)2X*|aCPTz^Y-v3Il2M6_Xbc& zVQI`ymoPd@;a|*OgrZcWfkBNf>$#b-h*;5qZAK-M1&{n00~r;xPXbuXFrl~t^rJe| z&f?-P;I3Zg688^67KA-~bNz4BMb7pB(0oL;d7db5`v8Y@Y1p*al+*s{oAoA4g+4^l z(c-#+bXWp&q2Xes(H@vogoH2`K~EBrYy^hg&c&(xdz-8^d|q)U(qAb3KOO;h>etwY z&MFsi|Kb~Y#K@8XAEws6l@R`jJwp%H%&%xd)oiA&@hvM31`cWAzBv$17zA#06Zp4m zL&Nd@y8y`7Io(1y8i`Im-HUoNnY~jzU2KmyZswt@yufL9AQ!_G&eu&2w!uJc95$oDpy2)Vu=O z7{X_2aaPWyBHoPuH0~RbVJB|!4+szt@y;d3=ZQMC` zh>wIEs{)=$))-D%^)aR*TxPpKRkOgGS%0kyn`$sE%K6$R(y%eD-tDnfJkP;6{rpBi zMxhy98aHH4Dj)0VU&Kif*ZLg#@(cVc+rPGCGqTtmAjhbB1mngBO& zK7dHT34l#gXat2#()M~on1tbrK`q7ImWy9?4%fh#DxF5R%NJJPN2S-LqPYR+D zRo@>4GprZZIvbdni8MTtMOeB5+s}QQQX$13l>olCUh7r}gMJrbiS2MyUP9V*J{2mP z=o`xDLZtHUfLT~yx*LE1bK6-foo2DL7vVe}W^<%M*g07+nv3Q=4vPPPWRv9I7Nq8F}QhgT{ zZw7d2X&zhrJH9lAst|fEI1DX8n2Ug{QMs{$o>!SF z)QC^RZ5T`DeY0*kls2b$tG-$n#R&MHrhT1i>mj?RvUOe4IYMI&?VhC>+-S%~)Klm! zi)Omn+@baPAe6vLvaH{2G4Gx73_@@9uTR}fi|Zz6pS{!YtJ;}#zSNd@WoaI0VXOuM zSKZ=%ChDCL^~rkSF`Q=zrH-~<6E-M@Isod+oRuo;e*(LxI;X43bweu1-b1eSJS|#K zTKOKx`?2M7^sCOX(aw-*AU2DsWrz-LgQ5L}Sz`pR9a%P8AkDwz_-OXwQ5QD-Mfp74 zYrt*nN4YMv>C5f_20{klX`*i^?8Ubi3A)SL&;P6ishC*Yx zm~=8epB~itLDzmq5na6k^`J6eus|slsi2$}CJIHt1tIg=I+PEd zIZ^RWt>aB0C;V-!Wa2~Wv_kyb=>n%qqjT*hi{_o;%;-4OH%?~gHtGURZulm}<-u+{ zk$aZZTP>BO9c_D|Ua9gdaTG=I8(C^(<*{%$rA46(Ze{hCm+(}#mm4QBpc;s>N#2*X zGAGXTDebHUP^NJqXwhOKdt~B0}pfMF4w;8K8<>{~00YAQb3eaEt4Sin-Z+hDRfS9y$czjLU!LHy~b&!K6($ z)`Rme5XBx%gcK>B$*W&f5{MU8f&RzrSPi<4`B?Wnqw?pWC5W1wp8 z+mIV=tV5Da#{j39QPqJjT=k!b$mB7NE;Bld{GEFx_9pKY!H~SSY}mdB*=@N-op%CX zH@-U)bSanWvAUQ%aaK1Q(!OgvaaVt1S3yHH!xzj(VbY1?=#wK$;1e#Y#wGq~+ZB2~ z$2<%oWzUl9=zX?+D<^G~Ez&u#_*QK6ALc%iArTh5YmZDaep_j#)gBHWdMWvjXKe=@ z&Y7MJ{qW1LnA7mKkeWTY;8$3@d#a6<3|NcV)7z>hs4+d@saiaKWm?Y>J1*yLi#+k& z5yBI#zmjk>uWAR|6cph-2^xpSl>mmQpG8L0bUiTydTcX)4k;s>1k_m@qii!aJzZAepJ62bw2S8Bh`Ticbnh=?9Gk6-yGN4BaBWeYgzD)GZjOF zdCpfG(u^63z7kFwj+Z6T);z3p-t zp`4W{Yzo;2c6tBkT4nv=c!9{IcjygbZTR-45#e?Ij002|GzPmvP2{Q(p8DE{fA z@Wpo*_R2-_ke# zro(Rkt#;iXmtbf0$lP;8pK8(HPt{rP-FKR6!tBvmGF#B;M_#vh!h8!$Hw3*0yAEkS zS>{mk^_bCVJ*~+D&heHXWTPCwz$wH*CLPj^sI2a?x-j5l`g7XpAaj^fjG@W$u%FOl zI=^Hu%^9YgLwr2BNU&y-#Sh2j;8+hOcICdva>mf(36F?*J5wP;yG76XXnRkwrXizP z(w~RkD!W5lNvGpuHHRF@3oV*zvW}G6i+ao&bi=@h%b9F}-QyK_ z9qR{3@%=A2!g^5}`m;2mRSOL#bwUoZpA&`a7Hzqi3*!qnc&Dh`OcDa{l-A^b*0bHx z+`z|+6COjG%0 zU>*b_^L%GRoPzRtzy`KalAxZSc-1NB&8Z0T3E(Zz7h+f~#L56>cp*CqDCM*s^f*JjB^)+W z4~Smit*Z=s#yqtQsOsJY((&#BQhqJF$x!D>uY%Y3t6)0!ms1r^``r+`-ehVrD9@P= zdMEc+$}M)~Fw0x!RZ}O+f^|KD>5Gyk|_lIXnwzQ0XdnA;XugeyVQ zP4o!^S;Q7T85|c!Z0A#+O#N3hQQwaTHNXsqKyeW270}7; z;dwKiXIK<~Cm{^2RQS8(M4x;IksJV+0O0fD0~7C zX9`~Ka9A(g((HPIG&-p2$ya{B2x=$z>7iEV(!)hNp&3#9?>a4Phz z(oX3y?9u=5Gyq2+sML)G1P9W|H%77TO|ZrW{K( zM63U0^we1if2}}uAKzAy_XRAbA`>M{R-cBfK^U0Lhc#LPKMlSbFL4@9Icy z@ti-6Cz6HBhG6o$8&+w&>XZ>58y2|(Fu7{^T^w_lK^2C#BtY2o1iu34YdJs@K`}L+ z*31?lA`PM!TLqOfVZ{I!l~G$m)qI$E_s=I^aZ3-^Eq_o|2%r>L096Uqz;)rtz0Av; zvUex1n-IZ+1pdnxU^(9(7AO#QGI0OO6a*V^fy<*Gc#W^E-jjZKBxwdFRTO#@fOfm8WSL5OvOPmHWvAz)?S42P%%zljgUT(|B?loHbQ<%Ehm zb9TFKw0_oB+*R554&=ST=a0_1eEe)3CC9I|gmS5Aq7zbyD%jwi`*U8WxejPlbgc2X zbPre?n_V&p<}qD05Y<1va}@`~q#dfm9)xzIgHe4)8N3X!e{&-h_Z~+W`CQgj`Q6Fl z13*fWbIseolKvC|EYu@lqu-S?=%RugR` z4u5reccER~){n57WzE52fLPVF`4mBaqa3RZDVWVXxoBeQRIWdqUhBEeQb2PWbBFt% zwMd;xBB&W9_JWC$QGo9T_qYMbL`SnC9+`0O9FB=J;qm;=K@~Kaaay6;-Bs-e+`b%N?oSqXn_f z&k^j0>_4Y8RR0#;dlj=FA0IXeUHq8c3dS@E`z9sjZ?dHAQ@8XTr`tXDIA$0gXO8aBIgkH#(m&2<2taB|Jov$|}K&-!1utoK|3FvsW z9;+oF=BswZE#qu9jOTr&7A0a9Yc9-k`=Q2b43OO*4{fg>v_)}ov@SnhkimH9#n@kx zT0RN5>GF#C;p>X*bo>@ZA(LmR=Z)02yRVu+%;FTkO+g}vd|39_(9DlU6#%;^SG+1a z*RmDj=9;fDd8t~oKoy2kjJ1*qppD6y|K&0r*>V`O?02I1V}J&F5#@{&pFZOL`*9p z&R9XzG}=KWXIn4`@IOloXJ$bTQT9o^i=IA;wJipWtgtHug@p8egojbq)<5pCm zAw1;VVZ$y1P1()cCADm;F_Ij+$I{TJEt}ZOYnD}e)h1ckXEaogL1fd^yKu>!WL=mH z`c63@5*BABGlB^A0eEPkGkC$T9aZ~I6m%xqE;poMx47cc4@3c7ZRYu(|M&k-kYJM) z>NF%Kjzk15X|KZx``!HjN@^)CdHV`9oTv742TWS8p9 z&3Z_10*whc^X+xbxj{PBkT>1nufoSsOz$+FJ}p@@yHGfDYv@m-&M8Q7(HQ;V_1DLn zKF=d5HF~c5ewG3o=%FEPlVQ2#89WI*`bGGx)Ia|EW6V1{;JWWDRSqMq3wglZ`=5Un z%YWaM|4*Oz^50h(ehcz$1}RcbllN%9R2~d!P;n)oCJ8{KmH>sF-*{$<7^=Syy z$4a1Ri$LR?0s|962GwRz;WQO>L);1|^}G6DSpjmY0||pDHc1>v`kR3w9xhix&)0D?G|Gzg83vx_f*OjAqDB`i0h{{Rx6&z_rdX81aYQq6b_X-ejz!FziZl#lv?Y$25x*f3o99>@?jE(bU& zDp&w5Fl^<<+zGJByais3gqwU0)CpyxPttR3_?WHOA9xI4>T`K-h>@BHz^FkboF+bu z0$J{2SoDs1B)cbY+$fzae*Ma?83yJ`tok)(G9D3m}5Z$9rOj=0`WFp3NRL zJ4-*z2~v;n7kPxkbs3O2j#v|xFe3VcJQGSKfh3<_+{PX)O^riSK?W>MaEGeGAi(56 zb>ILpv)*Txn)Nol!uwOz7JxaEBMR*fm?%I#qub~UNKAgG=E8$|S&{{b6;LddW246I z_m!EB`2sfqf~4L8(1~O9O^cQGd%i)(_h?(%g!2!JT8dnvX>z5`+{l)rB7f>MGWZAd zXx%v)omLYt@$;IgJ|qLZGrh*Bf$n;Fd3HdnM|wVMHSd~__yjQzjQOI3_LCK`63XP` z1)!4)+Is-3;Sh6%a*zdK<}U}YP-8$U?>eO^2k>eE4t9&000n_+UVe~bew|@h$qkq) z;0ZzUPW=a?O?a_ULui2KQSjQh(M1GuAT_Ria-9X}RX{TUkKxeL`5Y1Yf3hN|Z?|VW!&EjxlDkp~PwpISpx&)<&i@Gvw3~ z#U?T$q;jfeGRAY=|9zh4)&Ir+^Bnf`f6+T1Z@BN@?|1#K>wCH}OA<3NICGih$nB3R zgN2(I;!?~I)IrrPgzZ;_ygeir;b9I$#9W4m4dA)|47>b2L5Ods+aNpI|FcOk1-1yn zIRYJ)X%TI3{bq1I)frhOQM--)Y92i$VTRZP0=xJyS80Ah+zj_E8Ga%elD{pts z67D#ajjMeNIt}JNCQp?g*m~Nao&Fj{?VK5)1;B^$Z> zK*q&bJ^}DsOCAShE16v`0?Iypf_Gl2LzZJo6pAzb`iIp6&4%b8IXjr_8}X93(EQ}; zOJL4ZK-J~Lxfbpta?{M)&6q=L5-&h6ZA^0E9hzy|V5<7l3?PC2eFZQFq;KS_5Ej;L zcCdS9$qoHgqQ?&{gg(k%E?qSd^j1ZgCTy2p%4T6*#`iBP18PLd>gkq1>m*mUN<(CO z3_wX3eF5&aDj<^(%NVA76^b;ObA1fkk~TL1Kr+=AHYXXAiln4$h{^ZF@-k?CxvrZa zdWs}fPi;iV>`rguEvS!zFnv4B0PXUW$rtDKw0{1sD7wyy8&_lU32GH_nXY22MAy^W!{EJ=2I0~dz9n%dD_2mmd$_%1A zEK`+Ut(S!9rq*rPWla`Lkn_EozhE^O_oB=mf#3|@Y^XpkZIcR-f3LZp5_1_zmVs-6 z9(x;dzH+#2J6XZSj_`CWihu3X1nuMpqHS}b>d|{}4K(jado1v%7P5uA%#i?};E^)wNL70i zCb~5+Q8+Dn`GKsC69K}nv9ObozsiH-6>#LOph24~9!x7T)blg@&RrKvSN{3xA)7?r zc^}Zp*lGKn5{<5mGkAgy(s$Vp;OCfXJpCn}Kdc`ALQ0$|L)_ z3GSWAzRY!Y(|d}4EqlT{Lcs7U=iPVHoRDZQhqL+5v9&1flC_8LNQ`ZDI6pDWhsBCh ze^X-VUR+N-g}tcRIH)6*dz2i4-*NF|zLy1uw;^=`m!Dpz@rW0Zc4u>-MKp=@UW>i? zO`~`_e#;j`jHSEF&+guc3I$Xv+uU_?9PfI$+dVTBbQtRx^7>wJst7YI@s`OGmNNw_ zCcx_X7Z#8#YB_*+p<^_yGkoG8!@F1Fv=2nNbtutfh9#%L=2)wIq5^VF`3_VICg^iYsx%ILG zJo_zlo~0|zIa=^F zZK7@gaL#9>f4B2)q=GiZ7u8^2HyN566-7PulgM^sD8EP8*LhSod+~m&OtjjSJFB% zmD+mrP{+Q&J#*E19+(nZ0iK`XEhy{ZKR!Fpj9)Cfr(({f$B%0mEjvY?J3K7kuHg`U zG;!KQUyd=?;}mY?kvPZjpF$^gZ2mbbTab;u!DvbtCX$~=Q5j7q#x@rjgoymhq@$Nn zF*K1z>8s2z!ZVVbcBCM4Qs3wGyA}Ki$iLB0esURWAn||Ol#s3DB%iLSbr?`F8Z98^ zj*CNAvS;H|0JhgOu(s)a`jR_wC$+Kj<822tyZB~OiIv5PgK703S zh1N$R6C-Du-2U9;nIV^)G`No2G{-K@K@Hs7{L(VLp?>mFwdi3Fsd7xYS~#6&;aeTC zH=JAidlLcU?Q&;@icW@_n+8QzewU-)cCKF0t(4Z#S8B0dGYh_wg$=#4W#ib|hFgJa z+(P)(?!^O5C7qvr?i9X`RaTYWub8eles0oDMlSjqdMmw~kUxNH*_z+Z-x%^~=<1aP z02XSxTjO$Nw8JmE)R3$+3-y-8y1z!G@%t?JK`>$H2RF};%v;jhGZW_UdKnl)B-bk{|viKg~9VlPB#j8Yzx572Y)|@Y-qgQuc4&3-X)IskIy058SI(lCvKh&3` z9-2EhW~Co-gU|X-ahE~#QG5v_OQ#J{O{%Z+94ibU1u^tPB(^Brhg zah4Tv#$l-yA^jEElt1uvjna?&#krUGTK~>Uo9`m#wldX5Kg@L2ATkp5^EGHaX_>EI zfMJRFg;#2UQvU2STHmagHO3P7kKYus3F426UE1EmZ!>2nFhbNISFC$&i55N=FH-%G z3huqGN7e1JLHKo44YLJeYe!NqklQ&{&}D?HPm?t{pPTZjN9+1kjzE zeci`qfcKYK|nNTH^d<}%a>kyvYUISzK$YZJF6^p@R|9H zT3!|~uw0>M50Y7Q>mJO#&53a#$qTT1g+bP+ZK;P@wym~G!89EG1WtN&pwg!F9|FzO zlb~5QV4JK|-Iq#I8w6@Vs5DY(X;cUBtiWbX= zdSWK!cRry7tz}+ZYx4c|xTe)g&aLyup&ftwtV&%_9z7W5=|9sT5fu?r;7K``U@aly zt7uQ*#9`>Bm}y}*IEA5HGQ`-YjAFfOiY6O2kN9WE% zP|2#|ZKknut!j5xkVPF=5`#Kg$*ye*J0Q~n?Ku*8xY=2+!(tiJ5p5mOZsJq(9Fz$1 zSBx1qG>k5qx$7R>Pe_E4wD=U3<p_LQW+d9Zc~B}=AqTj&F1S#jXG@Q7rM{P zJEw@jEVTnci#I)cGFhzJCk_jk2&zaaus)8V!wCc8gt=OPnf>W0_Na628gyG3Asl+1 z4KEQTZlXRdM=R#m-W}@*L(U6)04FpT3`0>=e{IbleJ?cH5jHRUUc$8b;)82luxI1rLDwv9AR*GJ8G|p8=-gKO|9{ zBOs#nGPM`RO>xEL&~{tR?vJ??mAO^Hn|~l2lR*OAG^y@AM3IQ`r-2D*RuaKM8C!>1 z0(%h%tEC)S;(ZqWRk~OIg}V>daVz*FRo`a?_DO>3*dKfUYe%Rpj3enEP|imB(us#) zzy@u=$eiCrv~-eUQ12tzdSx#CVhL(#URMM9hS=J*ht>UX$)7k&r zD5fbZ{iPd>&S^e4dghS zVitiVv4}6w+`F^MHQ(wOq{3y!u?FUQy!Z3NYPw79ox98^Tcg4XSLu@c?g3`joEV#5 zg?(w}p2t%^`hqHJ~Zb}raKGe zd&b(+X6I`y;~m6#<_boKMwOfeS8{^#QRj9IpgqJ9iv3h&Pz zQ1<2A=9Ck0xJjywR$DUE9Ng)c8>?>MpJzyv-)#|_GwhV{x~Fhi^ZJQ1XVd%M z%uJisoMzoG2k0yHBW<}E`8&v7TpI{r!cWI$WVKn5k`w$!ws5+Q>>k6?FeFD3RfV4A zG2gbu+?1!dwp9|z2AFNTb5KqZF*jU_#d!jPI%Y}qRHcT&HLyJE_oe5(C~tjRP=iZX zquRI+2yQddH>8NvUS>LC4`t z9j=`C`hqB+zX~F(WX$}0CDC2%QW!+#)khM1o~h5E1tIOv4|%HzW`fw z>r(HzY2V=Gap1(7WdL~}fxLmR)M;NTvDc%vT4sNN-7X+I4(YOGhuI$B;k!Lq3A{A8 zF3SMgd-rE8`?&2lfbds81-1sd0tdi|%VeH^sjfU*0h|H5^6WM1NDrwsMxoOYu>V_! zoP`-IqV5;JA(^0z>&rH2**hI?oFGOb;Vx#{-)>oq=w1BQB~@Wch>!!RRridmqnC7E z2{*k$0WWlJ1=}cFi=854UZMyT$DZ(LAB1-~*ZQwL`2R4{{oisCzdp-ff&Q^4x(PBe z@*c={1Yjrp|Aza2-3fmum-+Qj|C7&Dz!l~7_3ZymAM^Nn-oKvruXoDVI{Z)S@c+^0 yg1%Omf4>SdO@U!#X(?!6cnW@yLpsalGT&m``n%76It#y%adq~<+;lp0;XeRWd3RU< literal 72976 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

C_({x&HAd044W_Z5ON}9InTlXgpn*fr0 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

-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 diff --git a/docs/swagger.json b/docs/swagger.json index 5ab8c04..0914d0d 100644 --- a/docs/swagger.json +++ b/docs/swagger.json @@ -36,20 +36,28 @@ "Bash Scripts" ], "summary": "List all bash scripts", + "parameters": [ + { + "type": "string", + "description": "Filter by group name", + "name": "group", + "in": "query" + } + ], "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { - "$ref": "#/definitions/models.BashScriptResponse" + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.BashScriptResponse" } } }, "500": { "description": "Internal Server Error", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } } } @@ -78,7 +86,7 @@ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/models.BashScriptCreate" + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.BashScriptCreate" } } ], @@ -86,19 +94,19 @@ "201": { "description": "Created", "schema": { - "$ref": "#/definitions/models.BashScriptResponse" + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.BashScriptResponse" } }, "400": { "description": "Bad Request", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } } } @@ -129,7 +137,64 @@ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/models.ScriptExecution" + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.ScriptExecution" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.ScriptResult" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/internal_server.ErrorResponse" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/internal_server.ErrorResponse" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/internal_server.ErrorResponse" + } + } + } + } + }, + "/bash-scripts/execute/stream": { + "post": { + "security": [ + { + "BasicAuth": [] + } + ], + "description": "Execute a stored bash script locally or remotely with real-time output streaming via SSE", + "consumes": [ + "application/json" + ], + "produces": [ + "text/event-stream" + ], + "tags": [ + "Bash Scripts" + ], + "summary": "Execute a bash script with streaming output", + "parameters": [ + { + "description": "Script execution request", + "name": "execution", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.ScriptExecution" } } ], @@ -137,25 +202,62 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/models.ScriptResult" + "$ref": "#/definitions/internal_server.StreamMessage" } }, "400": { "description": "Bad Request", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } }, "404": { "description": "Not Found", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/internal_server.ErrorResponse" + } + } + } + } + }, + "/bash-scripts/groups": { + "get": { + "security": [ + { + "BasicAuth": [] + } + ], + "description": "Get a list of all distinct group names for bash scripts", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Bash Scripts" + ], + "summary": "List all bash script groups", + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "array", + "items": { + "type": "string" + } } }, "500": { "description": "Internal Server Error", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } } } @@ -199,19 +301,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/models.BashScriptResponse" + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.BashScriptResponse" } }, "400": { "description": "Bad Request", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } }, "404": { "description": "Not Found", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } } } @@ -247,7 +349,7 @@ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/models.BashScriptUpdate" + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.BashScriptUpdate" } } ], @@ -255,19 +357,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/models.BashScriptResponse" + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.BashScriptResponse" } }, "400": { "description": "Bad Request", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } } } @@ -305,13 +407,13 @@ "400": { "description": "Bad Request", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } } } @@ -350,26 +452,26 @@ "schema": { "type": "array", "items": { - "$ref": "#/definitions/models.ScriptPresetResponse" + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.ScriptPresetResponse" } } }, "400": { "description": "Bad Request", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } }, "404": { "description": "Not Found", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } } } @@ -400,7 +502,7 @@ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/models.CommandExecution" + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.CommandExecution" } } ], @@ -408,25 +510,25 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/models.CommandResult" + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.CommandResult" } }, "400": { "description": "Bad Request", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } }, "404": { "description": "Not Found", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } } } @@ -456,6 +558,12 @@ "description": "Show actual values instead of masked values", "name": "show_values", "in": "query" + }, + { + "type": "string", + "description": "Filter by group name", + "name": "group", + "in": "query" } ], "responses": { @@ -464,14 +572,14 @@ "schema": { "type": "array", "items": { - "$ref": "#/definitions/models.EnvVariableResponse" + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.EnvVariableResponse" } } }, "500": { "description": "Internal Server Error", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } } } @@ -500,7 +608,7 @@ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/models.EnvVariableCreate" + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.EnvVariableCreate" } } ], @@ -508,19 +616,56 @@ "201": { "description": "Created", "schema": { - "$ref": "#/definitions/models.EnvVariableResponse" + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.EnvVariableResponse" } }, "400": { "description": "Bad Request", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/internal_server.ErrorResponse" + } + } + } + } + }, + "/env-variables/groups": { + "get": { + "security": [ + { + "BasicAuth": [] + } + ], + "description": "Get a list of all distinct group names for environment variables", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Environment Variables" + ], + "summary": "List all environment variable groups", + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "array", + "items": { + "type": "string" + } } }, "500": { "description": "Internal Server Error", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } } } @@ -563,19 +708,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/models.EnvVariableResponse" + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.EnvVariableResponse" } }, "400": { "description": "Bad Request", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } }, "404": { "description": "Not Found", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } } } @@ -611,7 +756,7 @@ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/models.EnvVariableUpdate" + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.EnvVariableUpdate" } } ], @@ -619,19 +764,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/models.EnvVariableResponse" + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.EnvVariableResponse" } }, "400": { "description": "Bad Request", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } } } @@ -669,13 +814,13 @@ "400": { "description": "Bad Request", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } } } @@ -720,14 +865,14 @@ "schema": { "type": "array", "items": { - "$ref": "#/definitions/models.CommandHistory" + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.CommandHistory" } } }, "500": { "description": "Internal Server Error", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } } } @@ -764,19 +909,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/models.CommandHistory" + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.CommandHistory" } }, "400": { "description": "Bad Request", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } }, "404": { "description": "Not Found", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } } } @@ -800,20 +945,28 @@ "SSH Keys" ], "summary": "List all SSH keys", + "parameters": [ + { + "type": "string", + "description": "Filter by group name", + "name": "group", + "in": "query" + } + ], "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { - "$ref": "#/definitions/models.SSHKey" + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.SSHKey" } } }, "500": { "description": "Internal Server Error", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } } } @@ -842,7 +995,7 @@ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/models.SSHKeyCreate" + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.SSHKeyCreate" } } ], @@ -850,19 +1003,56 @@ "201": { "description": "Created", "schema": { - "$ref": "#/definitions/models.SSHKey" + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.SSHKey" } }, "400": { "description": "Bad Request", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" + } + } + } + } + }, + "/keys/groups": { + "get": { + "security": [ + { + "BasicAuth": [] + } + ], + "description": "Get a list of all distinct group names for SSH keys", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "SSH Keys" + ], + "summary": "List all SSH key groups", + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/internal_server.ErrorResponse" } } } @@ -899,19 +1089,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/models.SSHKey" + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.SSHKey" } }, "400": { "description": "Bad Request", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } }, "404": { "description": "Not Found", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } } } @@ -947,7 +1137,7 @@ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/models.SSHKeyUpdate" + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.SSHKeyUpdate" } } ], @@ -955,19 +1145,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/models.SSHKey" + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.SSHKey" } }, "400": { "description": "Bad Request", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } } } @@ -1005,13 +1195,13 @@ "400": { "description": "Bad Request", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } } } @@ -1041,14 +1231,14 @@ "schema": { "type": "array", "items": { - "$ref": "#/definitions/models.LocalUser" + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.LocalUser" } } }, "500": { "description": "Internal Server Error", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } } } @@ -1077,7 +1267,7 @@ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/models.LocalUserCreate" + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.LocalUserCreate" } } ], @@ -1085,19 +1275,19 @@ "201": { "description": "Created", "schema": { - "$ref": "#/definitions/models.LocalUser" + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.LocalUser" } }, "400": { "description": "Bad Request", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } } } @@ -1134,19 +1324,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/models.LocalUser" + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.LocalUser" } }, "400": { "description": "Bad Request", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } }, "404": { "description": "Not Found", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } } } @@ -1182,7 +1372,7 @@ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/models.LocalUserUpdate" + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.LocalUserUpdate" } } ], @@ -1190,19 +1380,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/models.LocalUser" + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.LocalUser" } }, "400": { "description": "Bad Request", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } } } @@ -1240,13 +1430,13 @@ "400": { "description": "Bad Request", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } } } @@ -1276,14 +1466,14 @@ "schema": { "type": "array", "items": { - "$ref": "#/definitions/models.SavedCommand" + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.SavedCommand" } } }, "500": { "description": "Internal Server Error", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } } } @@ -1312,7 +1502,7 @@ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/models.SavedCommandCreate" + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.SavedCommandCreate" } } ], @@ -1320,19 +1510,19 @@ "201": { "description": "Created", "schema": { - "$ref": "#/definitions/models.SavedCommand" + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.SavedCommand" } }, "400": { "description": "Bad Request", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } } } @@ -1369,19 +1559,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/models.SavedCommand" + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.SavedCommand" } }, "400": { "description": "Bad Request", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } }, "404": { "description": "Not Found", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } } } @@ -1417,7 +1607,7 @@ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/models.SavedCommandUpdate" + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.SavedCommandUpdate" } } ], @@ -1425,19 +1615,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/models.SavedCommand" + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.SavedCommand" } }, "400": { "description": "Bad Request", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } } } @@ -1475,13 +1665,13 @@ "400": { "description": "Bad Request", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } } } @@ -1511,14 +1701,14 @@ "schema": { "type": "array", "items": { - "$ref": "#/definitions/models.ScriptPresetResponse" + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.ScriptPresetResponse" } } }, "500": { "description": "Internal Server Error", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } } } @@ -1547,7 +1737,7 @@ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/models.ScriptPresetCreate" + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.ScriptPresetCreate" } } ], @@ -1555,19 +1745,19 @@ "201": { "description": "Created", "schema": { - "$ref": "#/definitions/models.ScriptPresetResponse" + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.ScriptPresetResponse" } }, "400": { "description": "Bad Request", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } } } @@ -1604,19 +1794,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/models.ScriptPresetResponse" + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.ScriptPresetResponse" } }, "400": { "description": "Bad Request", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } }, "404": { "description": "Not Found", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } } } @@ -1652,7 +1842,7 @@ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/models.ScriptPresetUpdate" + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.ScriptPresetUpdate" } } ], @@ -1660,19 +1850,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/models.ScriptPresetResponse" + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.ScriptPresetResponse" } }, "400": { "description": "Bad Request", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } } } @@ -1710,13 +1900,13 @@ "400": { "description": "Bad Request", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } } } @@ -1740,20 +1930,28 @@ "Servers" ], "summary": "List all servers", + "parameters": [ + { + "type": "string", + "description": "Filter by group name", + "name": "group", + "in": "query" + } + ], "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { - "$ref": "#/definitions/models.Server" + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.Server" } } }, "500": { "description": "Internal Server Error", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } } } @@ -1782,7 +1980,7 @@ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/models.ServerCreate" + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.ServerCreate" } } ], @@ -1790,19 +1988,56 @@ "201": { "description": "Created", "schema": { - "$ref": "#/definitions/models.Server" + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.Server" } }, "400": { "description": "Bad Request", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/internal_server.ErrorResponse" + } + } + } + } + }, + "/servers/groups": { + "get": { + "security": [ + { + "BasicAuth": [] + } + ], + "description": "Get a list of all distinct group names for servers", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Servers" + ], + "summary": "List all server groups", + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "array", + "items": { + "type": "string" + } } }, "500": { "description": "Internal Server Error", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } } } @@ -1839,19 +2074,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/models.Server" + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.Server" } }, "400": { "description": "Bad Request", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } }, "404": { "description": "Not Found", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } } } @@ -1887,7 +2122,7 @@ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/models.ServerUpdate" + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.ServerUpdate" } } ], @@ -1895,19 +2130,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/models.Server" + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.Server" } }, "400": { "description": "Bad Request", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } } } @@ -1945,13 +2180,13 @@ "400": { "description": "Bad Request", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } } } @@ -1979,13 +2214,13 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/server.CurrentUserResponse" + "$ref": "#/definitions/internal_server.CurrentUserResponse" } }, "500": { "description": "Internal Server Error", "schema": { - "$ref": "#/definitions/server.ErrorResponse" + "$ref": "#/definitions/internal_server.ErrorResponse" } } } @@ -2015,81 +2250,714 @@ "schema": { "type": "array", "items": { - "$ref": "#/definitions/server.ShellInfo" + "$ref": "#/definitions/internal_server.ShellInfo" } } } } } - } - }, - "definitions": { - "models.BashScriptCreate": { - "type": "object", - "required": [ - "content", - "name" - ], - "properties": { - "content": { - "type": "string" - }, - "description": { - "type": "string" - }, - "filename": { - "type": "string" - }, - "name": { - "type": "string" - } - } - }, - "models.BashScriptResponse": { - "type": "object", - "properties": { - "content": { - "description": "Only included when specifically requested", - "type": "string" - }, - "created_at": { - "type": "string" - }, - "description": { - "type": "string" - }, - "filename": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "name": { - "type": "string" - }, - "updated_at": { - "type": "string" - } - } }, - "models.BashScriptUpdate": { - "type": "object", - "properties": { - "content": { - "type": "string" - }, - "description": { - "type": "string" - }, - "filename": { - "type": "string" + "/vault/bash-scripts": { + "get": { + "security": [ + { + "BasicAuth": [] + } + ], + "description": "Retrieve all bash scripts stored in Vault", + "produces": [ + "application/json" + ], + "tags": [ + "Vault" + ], + "summary": "List bash scripts from Vault", + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_vault.BashScript" + } + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/internal_server.ErrorResponse" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/internal_server.ErrorResponse" + } + } + } + }, + "post": { + "security": [ + { + "BasicAuth": [] + } + ], + "description": "Create a new bash script in HashiCorp Vault storage", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Vault" + ], + "summary": "Store bash script in Vault", + "parameters": [ + { + "description": "Bash script data", + "name": "script", + "in": "body", + "required": true, + "schema": { + "type": "object" + } + } + ], + "responses": { + "201": { + "description": "Created script info with source field", + "schema": { + "type": "object", + "additionalProperties": true + } + }, + "400": { + "description": "Invalid request or Vault not configured", + "schema": { + "type": "string" + } + }, + "500": { + "description": "Failed to store script", + "schema": { + "type": "string" + } + } + } + } + }, + "/vault/config": { + "get": { + "security": [ + { + "BasicAuth": [] + } + ], + "description": "Retrieve the current Vault configuration (token is never returned)", + "produces": [ + "application/json" + ], + "tags": [ + "Vault" + ], + "summary": "Get Vault configuration", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.VaultConfigResponse" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/internal_server.ErrorResponse" + } + } + } + }, + "post": { + "security": [ + { + "BasicAuth": [] + } + ], + "description": "Configure or update the Vault connection settings", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Vault" + ], + "summary": "Create or update Vault configuration", + "parameters": [ + { + "description": "Vault configuration", + "name": "config", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.VaultConfigCreate" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.VaultConfigResponse" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/internal_server.ErrorResponse" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/internal_server.ErrorResponse" + } + } + } + }, + "delete": { + "security": [ + { + "BasicAuth": [] + } + ], + "description": "Remove the Vault configuration", + "tags": [ + "Vault" + ], + "summary": "Delete Vault configuration", + "responses": { + "204": { + "description": "No Content" + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/internal_server.ErrorResponse" + } + } + } + } + }, + "/vault/env-variables": { + "get": { + "security": [ + { + "BasicAuth": [] + } + ], + "description": "Retrieve all environment variables stored in Vault", + "produces": [ + "application/json" + ], + "tags": [ + "Vault" + ], + "summary": "List environment variables from Vault", + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_vault.EnvVariable" + } + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/internal_server.ErrorResponse" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/internal_server.ErrorResponse" + } + } + } + }, + "post": { + "security": [ + { + "BasicAuth": [] + } + ], + "description": "Store a new environment variable in Vault", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Vault" + ], + "summary": "Create environment variable in Vault", + "parameters": [ + { + "description": "Environment Variable", + "name": "envVar", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "description": { + "type": "string" + }, + "group": { + "type": "string" + }, + "name": { + "type": "string" + }, + "value": { + "type": "string" + } + } + } + } + ], + "responses": { + "201": { + "description": "Created", + "schema": { + "type": "object", + "properties": { + "description": { + "type": "string" + }, + "group": { + "type": "string" + }, + "name": { + "type": "string" + }, + "source": { + "type": "string" + } + } + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/internal_server.ErrorResponse" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/internal_server.ErrorResponse" + } + } + } + } + }, + "/vault/servers": { + "get": { + "security": [ + { + "BasicAuth": [] + } + ], + "description": "Retrieve all server configurations stored in Vault", + "produces": [ + "application/json" + ], + "tags": [ + "Vault" + ], + "summary": "List servers from Vault", + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_vault.Server" + } + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/internal_server.ErrorResponse" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/internal_server.ErrorResponse" + } + } + } + }, + "post": { + "security": [ + { + "BasicAuth": [] + } + ], + "description": "Store a new server configuration in Vault", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Vault" + ], + "summary": "Create server in Vault", + "parameters": [ + { + "description": "Server", + "name": "server", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "group": { + "type": "string" + }, + "ip_address": { + "type": "string" + }, + "name": { + "type": "string" + }, + "port": { + "type": "integer" + }, + "username": { + "type": "string" + } + } + } + } + ], + "responses": { + "201": { + "description": "Created", + "schema": { + "type": "object", + "properties": { + "group": { + "type": "string" + }, + "ip_address": { + "type": "string" + }, + "name": { + "type": "string" + }, + "port": { + "type": "integer" + }, + "source": { + "type": "string" + }, + "username": { + "type": "string" + } + } + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/internal_server.ErrorResponse" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/internal_server.ErrorResponse" + } + } + } + } + }, + "/vault/ssh-keys": { + "get": { + "security": [ + { + "BasicAuth": [] + } + ], + "description": "Retrieve all SSH keys stored in Vault", + "produces": [ + "application/json" + ], + "tags": [ + "Vault" + ], + "summary": "List SSH keys from Vault", + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_vault.SSHKey" + } + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/internal_server.ErrorResponse" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/internal_server.ErrorResponse" + } + } + } + }, + "post": { + "security": [ + { + "BasicAuth": [] + } + ], + "description": "Store a new SSH key in Vault", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Vault" + ], + "summary": "Create SSH key in Vault", + "parameters": [ + { + "description": "SSH Key", + "name": "key", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "group": { + "type": "string" + }, + "name": { + "type": "string" + }, + "private_key": { + "type": "string" + } + } + } + } + ], + "responses": { + "201": { + "description": "Created", + "schema": { + "type": "object", + "properties": { + "created_at": { + "type": "string" + }, + "group": { + "type": "string" + }, + "name": { + "type": "string" + }, + "source": { + "type": "string" + } + } + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/internal_server.ErrorResponse" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/internal_server.ErrorResponse" + } + } + } + } + }, + "/vault/status": { + "get": { + "security": [ + { + "BasicAuth": [] + } + ], + "description": "Check the current Vault connection status", + "produces": [ + "application/json" + ], + "tags": [ + "Vault" + ], + "summary": "Get Vault connection status", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.VaultStatus" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/internal_server.ErrorResponse" + } + } + } + } + }, + "/vault/test": { + "post": { + "security": [ + { + "BasicAuth": [] + } + ], + "description": "Test the connection to Vault and initialize the secrets structure", + "produces": [ + "application/json" + ], + "tags": [ + "Vault" + ], + "summary": "Test Vault connection", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.VaultStatus" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/internal_server.ErrorResponse" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/internal_server.ErrorResponse" + } + } + } + } + } + }, + "definitions": { + "github_com_pozgo_web-cli_internal_models.BashScriptCreate": { + "type": "object", + "required": [ + "content", + "name" + ], + "properties": { + "content": { + "type": "string" + }, + "description": { + "type": "string" + }, + "filename": { + "type": "string" + }, + "group": { + "description": "Optional, defaults to \"default\"", + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "github_com_pozgo_web-cli_internal_models.BashScriptResponse": { + "type": "object", + "properties": { + "content": { + "description": "Only included when specifically requested", + "type": "string" + }, + "created_at": { + "type": "string" + }, + "description": { + "type": "string" + }, + "filename": { + "type": "string" + }, + "group": { + "description": "Group/category for organization", + "type": "string" + }, + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "source": { + "description": "\"sqlite\" or \"vault\"", + "type": "string" + }, + "updated_at": { + "type": "string" + } + } + }, + "github_com_pozgo_web-cli_internal_models.BashScriptUpdate": { + "type": "object", + "properties": { + "content": { + "type": "string" + }, + "description": { + "type": "string" + }, + "filename": { + "type": "string" + }, + "group": { + "type": "string" }, "name": { "type": "string" } } }, - "models.CommandExecution": { + "github_com_pozgo_web-cli_internal_models.CommandExecution": { "type": "object", "required": [ "command" @@ -2107,14 +2975,30 @@ "description": "Optional: save as template with this name", "type": "string" }, + "server_group": { + "description": "Server group for remote execution (Vault)", + "type": "string" + }, "server_id": { - "description": "Server ID for remote execution", + "description": "Server ID for remote execution (SQLite)", "type": "integer" }, + "server_name": { + "description": "Server name for remote execution (Vault)", + "type": "string" + }, + "ssh_key_group": { + "description": "SSH key group for remote execution (Vault)", + "type": "string" + }, "ssh_key_id": { - "description": "SSH key ID for remote execution", + "description": "SSH key ID for remote execution (SQLite)", "type": "integer" }, + "ssh_key_name": { + "description": "SSH key name for remote execution (Vault)", + "type": "string" + }, "ssh_password": { "description": "SSH password (for remote, if key auth fails)", "type": "string" @@ -2129,7 +3013,7 @@ } } }, - "models.CommandHistory": { + "github_com_pozgo_web-cli_internal_models.CommandHistory": { "type": "object", "properties": { "command": { @@ -2162,7 +3046,7 @@ } } }, - "models.CommandResult": { + "github_com_pozgo_web-cli_internal_models.CommandResult": { "type": "object", "properties": { "command": { @@ -2186,7 +3070,7 @@ } } }, - "models.EnvVariableCreate": { + "github_com_pozgo_web-cli_internal_models.EnvVariableCreate": { "type": "object", "required": [ "name", @@ -2196,6 +3080,10 @@ "description": { "type": "string" }, + "group": { + "description": "Optional, defaults to \"default\"", + "type": "string" + }, "name": { "type": "string" }, @@ -2204,7 +3092,7 @@ } } }, - "models.EnvVariableResponse": { + "github_com_pozgo_web-cli_internal_models.EnvVariableResponse": { "type": "object", "properties": { "created_at": { @@ -2213,12 +3101,20 @@ "description": { "type": "string" }, + "group": { + "description": "Group/category for organization", + "type": "string" + }, "id": { "type": "integer" }, "name": { "type": "string" }, + "source": { + "description": "\"sqlite\" or \"vault\"", + "type": "string" + }, "updated_at": { "type": "string" }, @@ -2228,12 +3124,15 @@ } } }, - "models.EnvVariableUpdate": { + "github_com_pozgo_web-cli_internal_models.EnvVariableUpdate": { "type": "object", "properties": { "description": { "type": "string" }, + "group": { + "type": "string" + }, "name": { "type": "string" }, @@ -2242,7 +3141,7 @@ } } }, - "models.LocalUser": { + "github_com_pozgo_web-cli_internal_models.LocalUser": { "type": "object", "properties": { "created_at": { @@ -2260,7 +3159,7 @@ } } }, - "models.LocalUserCreate": { + "github_com_pozgo_web-cli_internal_models.LocalUserCreate": { "type": "object", "required": [ "name" @@ -2272,7 +3171,7 @@ } } }, - "models.LocalUserUpdate": { + "github_com_pozgo_web-cli_internal_models.LocalUserUpdate": { "type": "object", "properties": { "name": { @@ -2281,12 +3180,16 @@ } } }, - "models.SSHKey": { + "github_com_pozgo_web-cli_internal_models.SSHKey": { "type": "object", "properties": { "created_at": { "type": "string" }, + "group": { + "description": "Group/category for organization", + "type": "string" + }, "id": { "type": "integer" }, @@ -2297,18 +3200,26 @@ "description": "Decrypted value", "type": "string" }, + "source": { + "description": "\"sqlite\" or \"vault\"", + "type": "string" + }, "updated_at": { "type": "string" } } }, - "models.SSHKeyCreate": { + "github_com_pozgo_web-cli_internal_models.SSHKeyCreate": { "type": "object", "required": [ "name", "private_key" ], "properties": { + "group": { + "description": "Optional, defaults to \"default\"", + "type": "string" + }, "name": { "type": "string" }, @@ -2317,9 +3228,12 @@ } } }, - "models.SSHKeyUpdate": { + "github_com_pozgo_web-cli_internal_models.SSHKeyUpdate": { "type": "object", "properties": { + "group": { + "type": "string" + }, "name": { "type": "string" }, @@ -2328,7 +3242,7 @@ } } }, - "models.SavedCommand": { + "github_com_pozgo_web-cli_internal_models.SavedCommand": { "type": "object", "properties": { "command": { @@ -2370,7 +3284,7 @@ } } }, - "models.SavedCommandCreate": { + "github_com_pozgo_web-cli_internal_models.SavedCommandCreate": { "type": "object", "required": [ "command", @@ -2404,7 +3318,7 @@ } } }, - "models.SavedCommandUpdate": { + "github_com_pozgo_web-cli_internal_models.SavedCommandUpdate": { "type": "object", "properties": { "command": { @@ -2430,19 +3344,30 @@ } } }, - "models.ScriptExecution": { + "github_com_pozgo_web-cli_internal_models.ScriptExecution": { "type": "object", - "required": [ - "script_id" - ], "properties": { + "env_var_groups": { + "description": "Groups of env vars to include (Vault, paired with EnvVarNames)", + "type": "array", + "items": { + "type": "string" + } + }, "env_var_ids": { - "description": "Specific env var IDs to include", + "description": "Specific env var IDs to include (SQLite)", "type": "array", "items": { "type": "integer" } }, + "env_var_names": { + "description": "Names of env vars to include (Vault)", + "type": "array", + "items": { + "type": "string" + } + }, "include_env_vars": { "description": "Deprecated: use EnvVarIDs instead", "type": "boolean" @@ -2451,18 +3376,42 @@ "description": "True if remote execution", "type": "boolean" }, + "script_group": { + "description": "Script group for execution (Vault)", + "type": "string" + }, "script_id": { - "description": "ID of the script to execute", + "description": "ID of the script to execute (SQLite)", "type": "integer" }, + "script_name": { + "description": "Name of the script to execute (Vault)", + "type": "string" + }, + "server_group": { + "description": "Server group for remote execution (Vault)", + "type": "string" + }, "server_id": { - "description": "Server ID for remote execution", + "description": "Server ID for remote execution (SQLite)", "type": "integer" }, + "server_name": { + "description": "Server name for remote execution (Vault)", + "type": "string" + }, + "ssh_key_group": { + "description": "SSH key group for remote execution (Vault)", + "type": "string" + }, "ssh_key_id": { - "description": "SSH key ID for remote execution", + "description": "SSH key ID for remote execution (SQLite)", "type": "integer" }, + "ssh_key_name": { + "description": "SSH key name for remote execution (Vault)", + "type": "string" + }, "ssh_password": { "description": "SSH password (for remote, if key auth fails)", "type": "string" @@ -2477,7 +3426,7 @@ } } }, - "models.ScriptPresetCreate": { + "github_com_pozgo_web-cli_internal_models.ScriptPresetCreate": { "type": "object", "required": [ "name", @@ -2513,7 +3462,7 @@ } } }, - "models.ScriptPresetResponse": { + "github_com_pozgo_web-cli_internal_models.ScriptPresetResponse": { "type": "object", "properties": { "created_at": { @@ -2554,7 +3503,7 @@ } } }, - "models.ScriptPresetUpdate": { + "github_com_pozgo_web-cli_internal_models.ScriptPresetUpdate": { "type": "object", "properties": { "description": { @@ -2586,7 +3535,7 @@ } } }, - "models.ScriptResult": { + "github_com_pozgo_web-cli_internal_models.ScriptResult": { "type": "object", "properties": { "env_vars_injected": { @@ -2618,12 +3567,16 @@ } } }, - "models.Server": { + "github_com_pozgo_web-cli_internal_models.Server": { "type": "object", "properties": { "created_at": { "type": "string" }, + "group": { + "description": "Group/category for organization", + "type": "string" + }, "id": { "type": "integer" }, @@ -2639,6 +3592,10 @@ "description": "SSH port (default: 22)", "type": "integer" }, + "source": { + "description": "\"sqlite\" or \"vault\"", + "type": "string" + }, "updated_at": { "type": "string" }, @@ -2648,9 +3605,13 @@ } } }, - "models.ServerCreate": { + "github_com_pozgo_web-cli_internal_models.ServerCreate": { "type": "object", "properties": { + "group": { + "description": "Optional, defaults to \"default\"", + "type": "string" + }, "ip_address": { "type": "string" }, @@ -2667,9 +3628,162 @@ } } }, - "models.ServerUpdate": { + "github_com_pozgo_web-cli_internal_models.ServerUpdate": { + "type": "object", + "properties": { + "group": { + "type": "string" + }, + "ip_address": { + "type": "string" + }, + "name": { + "type": "string" + }, + "port": { + "type": "integer" + }, + "username": { + "type": "string" + } + } + }, + "github_com_pozgo_web-cli_internal_models.VaultConfigCreate": { + "type": "object", + "properties": { + "address": { + "type": "string" + }, + "enabled": { + "type": "boolean" + }, + "mount_path": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "token": { + "type": "string" + } + } + }, + "github_com_pozgo_web-cli_internal_models.VaultConfigResponse": { + "type": "object", + "properties": { + "address": { + "type": "string" + }, + "created_at": { + "type": "string" + }, + "enabled": { + "type": "boolean" + }, + "has_token": { + "description": "Indicates if a token is configured", + "type": "boolean" + }, + "id": { + "type": "integer" + }, + "mount_path": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "updated_at": { + "type": "string" + } + } + }, + "github_com_pozgo_web-cli_internal_models.VaultStatus": { + "type": "object", + "properties": { + "address": { + "type": "string" + }, + "configured": { + "description": "Whether Vault is configured", + "type": "boolean" + }, + "connected": { + "description": "Whether connection test passed", + "type": "boolean" + }, + "enabled": { + "description": "Whether Vault is enabled", + "type": "boolean" + }, + "error": { + "type": "string" + }, + "vault_sealed": { + "type": "boolean" + } + } + }, + "github_com_pozgo_web-cli_internal_vault.BashScript": { + "type": "object", + "properties": { + "content": { + "type": "string" + }, + "description": { + "type": "string" + }, + "filename": { + "type": "string" + }, + "group": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "github_com_pozgo_web-cli_internal_vault.EnvVariable": { + "type": "object", + "properties": { + "description": { + "type": "string" + }, + "group": { + "type": "string" + }, + "name": { + "type": "string" + }, + "value": { + "type": "string" + } + } + }, + "github_com_pozgo_web-cli_internal_vault.SSHKey": { + "type": "object", + "properties": { + "created_at": { + "type": "string" + }, + "group": { + "type": "string" + }, + "name": { + "type": "string" + }, + "private_key": { + "type": "string" + } + } + }, + "github_com_pozgo_web-cli_internal_vault.Server": { "type": "object", "properties": { + "group": { + "type": "string" + }, "ip_address": { "type": "string" }, @@ -2684,7 +3798,7 @@ } } }, - "server.CurrentUserResponse": { + "internal_server.CurrentUserResponse": { "description": "Current system user information", "type": "object", "properties": { @@ -2710,7 +3824,7 @@ } } }, - "server.ErrorResponse": { + "internal_server.ErrorResponse": { "description": "Error response returned by the API", "type": "object", "properties": { @@ -2720,7 +3834,7 @@ } } }, - "server.ShellInfo": { + "internal_server.ShellInfo": { "description": "Information about an available shell", "type": "object", "properties": { @@ -2733,6 +3847,27 @@ "example": "/bin/bash" } } + }, + "internal_server.StreamMessage": { + "type": "object", + "properties": { + "data": { + "description": "output chunk or error message", + "type": "string" + }, + "result": { + "description": "final result", + "allOf": [ + { + "$ref": "#/definitions/github_com_pozgo_web-cli_internal_models.ScriptResult" + } + ] + }, + "type": { + "description": "\"output\", \"result\", \"error\"", + "type": "string" + } + } } }, "securityDefinitions": { diff --git a/docs/swagger.yaml b/docs/swagger.yaml index 0c5b5ea..07906ae 100644 --- a/docs/swagger.yaml +++ b/docs/swagger.yaml @@ -1,6 +1,6 @@ basePath: /api definitions: - models.BashScriptCreate: + github_com_pozgo_web-cli_internal_models.BashScriptCreate: properties: content: type: string @@ -8,13 +8,16 @@ definitions: type: string filename: type: string + group: + description: Optional, defaults to "default" + type: string name: type: string required: - content - name type: object - models.BashScriptResponse: + github_com_pozgo_web-cli_internal_models.BashScriptResponse: properties: content: description: Only included when specifically requested @@ -25,14 +28,20 @@ definitions: type: string filename: type: string + group: + description: Group/category for organization + type: string id: type: integer name: type: string + source: + description: '"sqlite" or "vault"' + type: string updated_at: type: string type: object - models.BashScriptUpdate: + github_com_pozgo_web-cli_internal_models.BashScriptUpdate: properties: content: type: string @@ -40,10 +49,12 @@ definitions: type: string filename: type: string + group: + type: string name: type: string type: object - models.CommandExecution: + github_com_pozgo_web-cli_internal_models.CommandExecution: properties: command: description: Command to execute @@ -54,12 +65,24 @@ definitions: save_as: description: 'Optional: save as template with this name' type: string + server_group: + description: Server group for remote execution (Vault) + type: string server_id: - description: Server ID for remote execution + description: Server ID for remote execution (SQLite) type: integer + server_name: + description: Server name for remote execution (Vault) + type: string + ssh_key_group: + description: SSH key group for remote execution (Vault) + type: string ssh_key_id: - description: SSH key ID for remote execution + description: SSH key ID for remote execution (SQLite) type: integer + ssh_key_name: + description: SSH key name for remote execution (Vault) + type: string ssh_password: description: SSH password (for remote, if key auth fails) type: string @@ -72,7 +95,7 @@ definitions: required: - command type: object - models.CommandHistory: + github_com_pozgo_web-cli_internal_models.CommandHistory: properties: command: description: Decrypted value @@ -95,7 +118,7 @@ definitions: description: User who executed the command (for local commands) type: string type: object - models.CommandResult: + github_com_pozgo_web-cli_internal_models.CommandResult: properties: command: type: string @@ -111,10 +134,13 @@ definitions: user: type: string type: object - models.EnvVariableCreate: + github_com_pozgo_web-cli_internal_models.EnvVariableCreate: properties: description: type: string + group: + description: Optional, defaults to "default" + type: string name: type: string value: @@ -123,32 +149,40 @@ definitions: - name - value type: object - models.EnvVariableResponse: + github_com_pozgo_web-cli_internal_models.EnvVariableResponse: properties: created_at: type: string description: type: string + group: + description: Group/category for organization + type: string id: type: integer name: type: string + source: + description: '"sqlite" or "vault"' + type: string updated_at: type: string value: description: Will be masked unless explicitly requested type: string type: object - models.EnvVariableUpdate: + github_com_pozgo_web-cli_internal_models.EnvVariableUpdate: properties: description: type: string + group: + type: string name: type: string value: type: string type: object - models.LocalUser: + github_com_pozgo_web-cli_internal_models.LocalUser: properties: created_at: type: string @@ -160,7 +194,7 @@ definitions: updated_at: type: string type: object - models.LocalUserCreate: + github_com_pozgo_web-cli_internal_models.LocalUserCreate: properties: name: description: Unix username @@ -168,16 +202,19 @@ definitions: required: - name type: object - models.LocalUserUpdate: + github_com_pozgo_web-cli_internal_models.LocalUserUpdate: properties: name: description: Unix username type: string type: object - models.SSHKey: + github_com_pozgo_web-cli_internal_models.SSHKey: properties: created_at: type: string + group: + description: Group/category for organization + type: string id: type: integer name: @@ -185,11 +222,17 @@ definitions: private_key: description: Decrypted value type: string + source: + description: '"sqlite" or "vault"' + type: string updated_at: type: string type: object - models.SSHKeyCreate: + github_com_pozgo_web-cli_internal_models.SSHKeyCreate: properties: + group: + description: Optional, defaults to "default" + type: string name: type: string private_key: @@ -198,14 +241,16 @@ definitions: - name - private_key type: object - models.SSHKeyUpdate: + github_com_pozgo_web-cli_internal_models.SSHKeyUpdate: properties: + group: + type: string name: type: string private_key: type: string type: object - models.SavedCommand: + github_com_pozgo_web-cli_internal_models.SavedCommand: properties: command: description: The actual command to execute @@ -235,7 +280,7 @@ definitions: description: 'User to run as (default: root)' type: string type: object - models.SavedCommandCreate: + github_com_pozgo_web-cli_internal_models.SavedCommandCreate: properties: command: type: string @@ -259,7 +304,7 @@ definitions: - command - name type: object - models.SavedCommandUpdate: + github_com_pozgo_web-cli_internal_models.SavedCommandUpdate: properties: command: type: string @@ -276,28 +321,56 @@ definitions: user: type: string type: object - models.ScriptExecution: + github_com_pozgo_web-cli_internal_models.ScriptExecution: properties: + env_var_groups: + description: Groups of env vars to include (Vault, paired with EnvVarNames) + items: + type: string + type: array env_var_ids: - description: Specific env var IDs to include + description: Specific env var IDs to include (SQLite) items: type: integer type: array + env_var_names: + description: Names of env vars to include (Vault) + items: + type: string + type: array include_env_vars: description: 'Deprecated: use EnvVarIDs instead' type: boolean is_remote: description: True if remote execution type: boolean + script_group: + description: Script group for execution (Vault) + type: string script_id: - description: ID of the script to execute + description: ID of the script to execute (SQLite) type: integer + script_name: + description: Name of the script to execute (Vault) + type: string + server_group: + description: Server group for remote execution (Vault) + type: string server_id: - description: Server ID for remote execution + description: Server ID for remote execution (SQLite) type: integer + server_name: + description: Server name for remote execution (Vault) + type: string + ssh_key_group: + description: SSH key group for remote execution (Vault) + type: string ssh_key_id: - description: SSH key ID for remote execution + description: SSH key ID for remote execution (SQLite) type: integer + ssh_key_name: + description: SSH key name for remote execution (Vault) + type: string ssh_password: description: SSH password (for remote, if key auth fails) type: string @@ -307,10 +380,8 @@ definitions: user: description: 'User to run as (default: root)' type: string - required: - - script_id type: object - models.ScriptPresetCreate: + github_com_pozgo_web-cli_internal_models.ScriptPresetCreate: properties: description: type: string @@ -334,7 +405,7 @@ definitions: - name - script_id type: object - models.ScriptPresetResponse: + github_com_pozgo_web-cli_internal_models.ScriptPresetResponse: properties: created_at: type: string @@ -361,7 +432,7 @@ definitions: user: type: string type: object - models.ScriptPresetUpdate: + github_com_pozgo_web-cli_internal_models.ScriptPresetUpdate: properties: description: type: string @@ -382,7 +453,7 @@ definitions: user: type: string type: object - models.ScriptResult: + github_com_pozgo_web-cli_internal_models.ScriptResult: properties: env_vars_injected: description: Number of env vars injected @@ -404,10 +475,13 @@ definitions: user: type: string type: object - models.Server: + github_com_pozgo_web-cli_internal_models.Server: properties: created_at: type: string + group: + description: Group/category for organization + type: string id: type: integer ip_address: @@ -419,14 +493,20 @@ definitions: port: description: 'SSH port (default: 22)' type: integer + source: + description: '"sqlite" or "vault"' + type: string updated_at: type: string username: description: SSH username for remote connections type: string type: object - models.ServerCreate: + github_com_pozgo_web-cli_internal_models.ServerCreate: properties: + group: + description: Optional, defaults to "default" + type: string ip_address: type: string name: @@ -438,8 +518,10 @@ definitions: description: SSH username for remote connections type: string type: object - models.ServerUpdate: + github_com_pozgo_web-cli_internal_models.ServerUpdate: properties: + group: + type: string ip_address: type: string name: @@ -449,7 +531,106 @@ definitions: username: type: string type: object - server.CurrentUserResponse: + github_com_pozgo_web-cli_internal_models.VaultConfigCreate: + properties: + address: + type: string + enabled: + type: boolean + mount_path: + type: string + namespace: + type: string + token: + type: string + type: object + github_com_pozgo_web-cli_internal_models.VaultConfigResponse: + properties: + address: + type: string + created_at: + type: string + enabled: + type: boolean + has_token: + description: Indicates if a token is configured + type: boolean + id: + type: integer + mount_path: + type: string + namespace: + type: string + updated_at: + type: string + type: object + github_com_pozgo_web-cli_internal_models.VaultStatus: + properties: + address: + type: string + configured: + description: Whether Vault is configured + type: boolean + connected: + description: Whether connection test passed + type: boolean + enabled: + description: Whether Vault is enabled + type: boolean + error: + type: string + vault_sealed: + type: boolean + type: object + github_com_pozgo_web-cli_internal_vault.BashScript: + properties: + content: + type: string + description: + type: string + filename: + type: string + group: + type: string + name: + type: string + type: object + github_com_pozgo_web-cli_internal_vault.EnvVariable: + properties: + description: + type: string + group: + type: string + name: + type: string + value: + type: string + type: object + github_com_pozgo_web-cli_internal_vault.SSHKey: + properties: + created_at: + type: string + group: + type: string + name: + type: string + private_key: + type: string + type: object + github_com_pozgo_web-cli_internal_vault.Server: + properties: + group: + type: string + ip_address: + type: string + name: + type: string + port: + type: integer + username: + type: string + type: object + internal_server.CurrentUserResponse: description: Current system user information properties: gid: @@ -468,14 +649,14 @@ definitions: example: root type: string type: object - server.ErrorResponse: + internal_server.ErrorResponse: description: Error response returned by the API properties: error: example: Invalid request body type: string type: object - server.ShellInfo: + internal_server.ShellInfo: description: Information about an available shell properties: name: @@ -485,6 +666,19 @@ definitions: example: /bin/bash type: string type: object + internal_server.StreamMessage: + properties: + data: + description: output chunk or error message + type: string + result: + allOf: + - $ref: '#/definitions/github_com_pozgo_web-cli_internal_models.ScriptResult' + description: final result + type: + description: '"output", "result", "error"' + type: string + type: object host: localhost:7777 info: contact: @@ -504,6 +698,11 @@ paths: consumes: - application/json description: Get a list of all bash scripts (without content by default) + parameters: + - description: Filter by group name + in: query + name: group + type: string produces: - application/json responses: @@ -511,12 +710,12 @@ paths: description: OK schema: items: - $ref: '#/definitions/models.BashScriptResponse' + $ref: '#/definitions/github_com_pozgo_web-cli_internal_models.BashScriptResponse' type: array "500": description: Internal Server Error schema: - $ref: '#/definitions/server.ErrorResponse' + $ref: '#/definitions/internal_server.ErrorResponse' security: - BasicAuth: [] summary: List all bash scripts @@ -532,22 +731,22 @@ paths: name: script required: true schema: - $ref: '#/definitions/models.BashScriptCreate' + $ref: '#/definitions/github_com_pozgo_web-cli_internal_models.BashScriptCreate' produces: - application/json responses: "201": description: Created schema: - $ref: '#/definitions/models.BashScriptResponse' + $ref: '#/definitions/github_com_pozgo_web-cli_internal_models.BashScriptResponse' "400": description: Bad Request schema: - $ref: '#/definitions/server.ErrorResponse' + $ref: '#/definitions/internal_server.ErrorResponse' "500": description: Internal Server Error schema: - $ref: '#/definitions/server.ErrorResponse' + $ref: '#/definitions/internal_server.ErrorResponse' security: - BasicAuth: [] summary: Create a bash script @@ -572,11 +771,11 @@ paths: "400": description: Bad Request schema: - $ref: '#/definitions/server.ErrorResponse' + $ref: '#/definitions/internal_server.ErrorResponse' "500": description: Internal Server Error schema: - $ref: '#/definitions/server.ErrorResponse' + $ref: '#/definitions/internal_server.ErrorResponse' security: - BasicAuth: [] summary: Delete a bash script @@ -603,15 +802,15 @@ paths: "200": description: OK schema: - $ref: '#/definitions/models.BashScriptResponse' + $ref: '#/definitions/github_com_pozgo_web-cli_internal_models.BashScriptResponse' "400": description: Bad Request schema: - $ref: '#/definitions/server.ErrorResponse' + $ref: '#/definitions/internal_server.ErrorResponse' "404": description: Not Found schema: - $ref: '#/definitions/server.ErrorResponse' + $ref: '#/definitions/internal_server.ErrorResponse' security: - BasicAuth: [] summary: Get a bash script by ID @@ -632,22 +831,22 @@ paths: name: script required: true schema: - $ref: '#/definitions/models.BashScriptUpdate' + $ref: '#/definitions/github_com_pozgo_web-cli_internal_models.BashScriptUpdate' produces: - application/json responses: "200": description: OK schema: - $ref: '#/definitions/models.BashScriptResponse' + $ref: '#/definitions/github_com_pozgo_web-cli_internal_models.BashScriptResponse' "400": description: Bad Request schema: - $ref: '#/definitions/server.ErrorResponse' + $ref: '#/definitions/internal_server.ErrorResponse' "500": description: Internal Server Error schema: - $ref: '#/definitions/server.ErrorResponse' + $ref: '#/definitions/internal_server.ErrorResponse' security: - BasicAuth: [] summary: Update a bash script @@ -671,20 +870,20 @@ paths: description: OK schema: items: - $ref: '#/definitions/models.ScriptPresetResponse' + $ref: '#/definitions/github_com_pozgo_web-cli_internal_models.ScriptPresetResponse' type: array "400": description: Bad Request schema: - $ref: '#/definitions/server.ErrorResponse' + $ref: '#/definitions/internal_server.ErrorResponse' "404": description: Not Found schema: - $ref: '#/definitions/server.ErrorResponse' + $ref: '#/definitions/internal_server.ErrorResponse' "500": description: Internal Server Error schema: - $ref: '#/definitions/server.ErrorResponse' + $ref: '#/definitions/internal_server.ErrorResponse' security: - BasicAuth: [] summary: Get presets for a script @@ -701,31 +900,91 @@ paths: name: execution required: true schema: - $ref: '#/definitions/models.ScriptExecution' + $ref: '#/definitions/github_com_pozgo_web-cli_internal_models.ScriptExecution' produces: - application/json responses: "200": description: OK schema: - $ref: '#/definitions/models.ScriptResult' + $ref: '#/definitions/github_com_pozgo_web-cli_internal_models.ScriptResult' "400": description: Bad Request schema: - $ref: '#/definitions/server.ErrorResponse' + $ref: '#/definitions/internal_server.ErrorResponse' "404": description: Not Found schema: - $ref: '#/definitions/server.ErrorResponse' + $ref: '#/definitions/internal_server.ErrorResponse' "500": description: Internal Server Error schema: - $ref: '#/definitions/server.ErrorResponse' + $ref: '#/definitions/internal_server.ErrorResponse' security: - BasicAuth: [] summary: Execute a bash script tags: - Bash Scripts + /bash-scripts/execute/stream: + post: + consumes: + - application/json + description: Execute a stored bash script locally or remotely with real-time + output streaming via SSE + parameters: + - description: Script execution request + in: body + name: execution + required: true + schema: + $ref: '#/definitions/github_com_pozgo_web-cli_internal_models.ScriptExecution' + produces: + - text/event-stream + responses: + "200": + description: OK + schema: + $ref: '#/definitions/internal_server.StreamMessage' + "400": + description: Bad Request + schema: + $ref: '#/definitions/internal_server.ErrorResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/internal_server.ErrorResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/internal_server.ErrorResponse' + security: + - BasicAuth: [] + summary: Execute a bash script with streaming output + tags: + - Bash Scripts + /bash-scripts/groups: + get: + consumes: + - application/json + description: Get a list of all distinct group names for bash scripts + produces: + - application/json + responses: + "200": + description: OK + schema: + items: + type: string + type: array + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/internal_server.ErrorResponse' + security: + - BasicAuth: [] + summary: List all bash script groups + tags: + - Bash Scripts /commands/execute: post: consumes: @@ -737,26 +996,26 @@ paths: name: command required: true schema: - $ref: '#/definitions/models.CommandExecution' + $ref: '#/definitions/github_com_pozgo_web-cli_internal_models.CommandExecution' produces: - application/json responses: "200": description: OK schema: - $ref: '#/definitions/models.CommandResult' + $ref: '#/definitions/github_com_pozgo_web-cli_internal_models.CommandResult' "400": description: Bad Request schema: - $ref: '#/definitions/server.ErrorResponse' + $ref: '#/definitions/internal_server.ErrorResponse' "404": description: Not Found schema: - $ref: '#/definitions/server.ErrorResponse' + $ref: '#/definitions/internal_server.ErrorResponse' "500": description: Internal Server Error schema: - $ref: '#/definitions/server.ErrorResponse' + $ref: '#/definitions/internal_server.ErrorResponse' security: - BasicAuth: [] summary: Execute a command @@ -772,6 +1031,10 @@ paths: in: query name: show_values type: boolean + - description: Filter by group name + in: query + name: group + type: string produces: - application/json responses: @@ -779,12 +1042,12 @@ paths: description: OK schema: items: - $ref: '#/definitions/models.EnvVariableResponse' + $ref: '#/definitions/github_com_pozgo_web-cli_internal_models.EnvVariableResponse' type: array "500": description: Internal Server Error schema: - $ref: '#/definitions/server.ErrorResponse' + $ref: '#/definitions/internal_server.ErrorResponse' security: - BasicAuth: [] summary: List all environment variables @@ -800,22 +1063,22 @@ paths: name: envvar required: true schema: - $ref: '#/definitions/models.EnvVariableCreate' + $ref: '#/definitions/github_com_pozgo_web-cli_internal_models.EnvVariableCreate' produces: - application/json responses: "201": description: Created schema: - $ref: '#/definitions/models.EnvVariableResponse' + $ref: '#/definitions/github_com_pozgo_web-cli_internal_models.EnvVariableResponse' "400": description: Bad Request schema: - $ref: '#/definitions/server.ErrorResponse' + $ref: '#/definitions/internal_server.ErrorResponse' "500": description: Internal Server Error schema: - $ref: '#/definitions/server.ErrorResponse' + $ref: '#/definitions/internal_server.ErrorResponse' security: - BasicAuth: [] summary: Create an environment variable @@ -840,11 +1103,11 @@ paths: "400": description: Bad Request schema: - $ref: '#/definitions/server.ErrorResponse' + $ref: '#/definitions/internal_server.ErrorResponse' "500": description: Internal Server Error schema: - $ref: '#/definitions/server.ErrorResponse' + $ref: '#/definitions/internal_server.ErrorResponse' security: - BasicAuth: [] summary: Delete an environment variable @@ -870,15 +1133,15 @@ paths: "200": description: OK schema: - $ref: '#/definitions/models.EnvVariableResponse' + $ref: '#/definitions/github_com_pozgo_web-cli_internal_models.EnvVariableResponse' "400": description: Bad Request schema: - $ref: '#/definitions/server.ErrorResponse' + $ref: '#/definitions/internal_server.ErrorResponse' "404": description: Not Found schema: - $ref: '#/definitions/server.ErrorResponse' + $ref: '#/definitions/internal_server.ErrorResponse' security: - BasicAuth: [] summary: Get an environment variable by ID @@ -899,27 +1162,50 @@ paths: name: envvar required: true schema: - $ref: '#/definitions/models.EnvVariableUpdate' + $ref: '#/definitions/github_com_pozgo_web-cli_internal_models.EnvVariableUpdate' produces: - application/json responses: "200": description: OK schema: - $ref: '#/definitions/models.EnvVariableResponse' + $ref: '#/definitions/github_com_pozgo_web-cli_internal_models.EnvVariableResponse' "400": description: Bad Request schema: - $ref: '#/definitions/server.ErrorResponse' + $ref: '#/definitions/internal_server.ErrorResponse' "500": description: Internal Server Error schema: - $ref: '#/definitions/server.ErrorResponse' + $ref: '#/definitions/internal_server.ErrorResponse' security: - BasicAuth: [] summary: Update an environment variable tags: - Environment Variables + /env-variables/groups: + get: + consumes: + - application/json + description: Get a list of all distinct group names for environment variables + produces: + - application/json + responses: + "200": + description: OK + schema: + items: + type: string + type: array + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/internal_server.ErrorResponse' + security: + - BasicAuth: [] + summary: List all environment variable groups + tags: + - Environment Variables /history: get: consumes: @@ -942,12 +1228,12 @@ paths: description: OK schema: items: - $ref: '#/definitions/models.CommandHistory' + $ref: '#/definitions/github_com_pozgo_web-cli_internal_models.CommandHistory' type: array "500": description: Internal Server Error schema: - $ref: '#/definitions/server.ErrorResponse' + $ref: '#/definitions/internal_server.ErrorResponse' security: - BasicAuth: [] summary: List command history @@ -970,15 +1256,15 @@ paths: "200": description: OK schema: - $ref: '#/definitions/models.CommandHistory' + $ref: '#/definitions/github_com_pozgo_web-cli_internal_models.CommandHistory' "400": description: Bad Request schema: - $ref: '#/definitions/server.ErrorResponse' + $ref: '#/definitions/internal_server.ErrorResponse' "404": description: Not Found schema: - $ref: '#/definitions/server.ErrorResponse' + $ref: '#/definitions/internal_server.ErrorResponse' security: - BasicAuth: [] summary: Get a command history entry by ID @@ -989,6 +1275,11 @@ paths: consumes: - application/json description: Get a list of all SSH keys stored in the system + parameters: + - description: Filter by group name + in: query + name: group + type: string produces: - application/json responses: @@ -996,12 +1287,12 @@ paths: description: OK schema: items: - $ref: '#/definitions/models.SSHKey' + $ref: '#/definitions/github_com_pozgo_web-cli_internal_models.SSHKey' type: array "500": description: Internal Server Error schema: - $ref: '#/definitions/server.ErrorResponse' + $ref: '#/definitions/internal_server.ErrorResponse' security: - BasicAuth: [] summary: List all SSH keys @@ -1017,22 +1308,22 @@ paths: name: key required: true schema: - $ref: '#/definitions/models.SSHKeyCreate' + $ref: '#/definitions/github_com_pozgo_web-cli_internal_models.SSHKeyCreate' produces: - application/json responses: "201": description: Created schema: - $ref: '#/definitions/models.SSHKey' + $ref: '#/definitions/github_com_pozgo_web-cli_internal_models.SSHKey' "400": description: Bad Request schema: - $ref: '#/definitions/server.ErrorResponse' + $ref: '#/definitions/internal_server.ErrorResponse' "500": description: Internal Server Error schema: - $ref: '#/definitions/server.ErrorResponse' + $ref: '#/definitions/internal_server.ErrorResponse' security: - BasicAuth: [] summary: Create a new SSH key @@ -1057,11 +1348,11 @@ paths: "400": description: Bad Request schema: - $ref: '#/definitions/server.ErrorResponse' + $ref: '#/definitions/internal_server.ErrorResponse' "500": description: Internal Server Error schema: - $ref: '#/definitions/server.ErrorResponse' + $ref: '#/definitions/internal_server.ErrorResponse' security: - BasicAuth: [] summary: Delete an SSH key @@ -1083,15 +1374,15 @@ paths: "200": description: OK schema: - $ref: '#/definitions/models.SSHKey' + $ref: '#/definitions/github_com_pozgo_web-cli_internal_models.SSHKey' "400": description: Bad Request schema: - $ref: '#/definitions/server.ErrorResponse' + $ref: '#/definitions/internal_server.ErrorResponse' "404": description: Not Found schema: - $ref: '#/definitions/server.ErrorResponse' + $ref: '#/definitions/internal_server.ErrorResponse' security: - BasicAuth: [] summary: Get an SSH key by ID @@ -1112,27 +1403,50 @@ paths: name: key required: true schema: - $ref: '#/definitions/models.SSHKeyUpdate' + $ref: '#/definitions/github_com_pozgo_web-cli_internal_models.SSHKeyUpdate' produces: - application/json responses: "200": description: OK schema: - $ref: '#/definitions/models.SSHKey' + $ref: '#/definitions/github_com_pozgo_web-cli_internal_models.SSHKey' "400": description: Bad Request schema: - $ref: '#/definitions/server.ErrorResponse' + $ref: '#/definitions/internal_server.ErrorResponse' "500": description: Internal Server Error schema: - $ref: '#/definitions/server.ErrorResponse' + $ref: '#/definitions/internal_server.ErrorResponse' security: - BasicAuth: [] summary: Update an SSH key tags: - SSH Keys + /keys/groups: + get: + consumes: + - application/json + description: Get a list of all distinct group names for SSH keys + produces: + - application/json + responses: + "200": + description: OK + schema: + items: + type: string + type: array + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/internal_server.ErrorResponse' + security: + - BasicAuth: [] + summary: List all SSH key groups + tags: + - SSH Keys /local-users: get: consumes: @@ -1145,12 +1459,12 @@ paths: description: OK schema: items: - $ref: '#/definitions/models.LocalUser' + $ref: '#/definitions/github_com_pozgo_web-cli_internal_models.LocalUser' type: array "500": description: Internal Server Error schema: - $ref: '#/definitions/server.ErrorResponse' + $ref: '#/definitions/internal_server.ErrorResponse' security: - BasicAuth: [] summary: List all local users @@ -1166,22 +1480,22 @@ paths: name: user required: true schema: - $ref: '#/definitions/models.LocalUserCreate' + $ref: '#/definitions/github_com_pozgo_web-cli_internal_models.LocalUserCreate' produces: - application/json responses: "201": description: Created schema: - $ref: '#/definitions/models.LocalUser' + $ref: '#/definitions/github_com_pozgo_web-cli_internal_models.LocalUser' "400": description: Bad Request schema: - $ref: '#/definitions/server.ErrorResponse' + $ref: '#/definitions/internal_server.ErrorResponse' "500": description: Internal Server Error schema: - $ref: '#/definitions/server.ErrorResponse' + $ref: '#/definitions/internal_server.ErrorResponse' security: - BasicAuth: [] summary: Create a local user @@ -1206,11 +1520,11 @@ paths: "400": description: Bad Request schema: - $ref: '#/definitions/server.ErrorResponse' + $ref: '#/definitions/internal_server.ErrorResponse' "500": description: Internal Server Error schema: - $ref: '#/definitions/server.ErrorResponse' + $ref: '#/definitions/internal_server.ErrorResponse' security: - BasicAuth: [] summary: Delete a local user @@ -1232,15 +1546,15 @@ paths: "200": description: OK schema: - $ref: '#/definitions/models.LocalUser' + $ref: '#/definitions/github_com_pozgo_web-cli_internal_models.LocalUser' "400": description: Bad Request schema: - $ref: '#/definitions/server.ErrorResponse' + $ref: '#/definitions/internal_server.ErrorResponse' "404": description: Not Found schema: - $ref: '#/definitions/server.ErrorResponse' + $ref: '#/definitions/internal_server.ErrorResponse' security: - BasicAuth: [] summary: Get a local user by ID @@ -1261,22 +1575,22 @@ paths: name: user required: true schema: - $ref: '#/definitions/models.LocalUserUpdate' + $ref: '#/definitions/github_com_pozgo_web-cli_internal_models.LocalUserUpdate' produces: - application/json responses: "200": description: OK schema: - $ref: '#/definitions/models.LocalUser' + $ref: '#/definitions/github_com_pozgo_web-cli_internal_models.LocalUser' "400": description: Bad Request schema: - $ref: '#/definitions/server.ErrorResponse' + $ref: '#/definitions/internal_server.ErrorResponse' "500": description: Internal Server Error schema: - $ref: '#/definitions/server.ErrorResponse' + $ref: '#/definitions/internal_server.ErrorResponse' security: - BasicAuth: [] summary: Update a local user @@ -1294,12 +1608,12 @@ paths: description: OK schema: items: - $ref: '#/definitions/models.SavedCommand' + $ref: '#/definitions/github_com_pozgo_web-cli_internal_models.SavedCommand' type: array "500": description: Internal Server Error schema: - $ref: '#/definitions/server.ErrorResponse' + $ref: '#/definitions/internal_server.ErrorResponse' security: - BasicAuth: [] summary: List all saved commands @@ -1315,22 +1629,22 @@ paths: name: command required: true schema: - $ref: '#/definitions/models.SavedCommandCreate' + $ref: '#/definitions/github_com_pozgo_web-cli_internal_models.SavedCommandCreate' produces: - application/json responses: "201": description: Created schema: - $ref: '#/definitions/models.SavedCommand' + $ref: '#/definitions/github_com_pozgo_web-cli_internal_models.SavedCommand' "400": description: Bad Request schema: - $ref: '#/definitions/server.ErrorResponse' + $ref: '#/definitions/internal_server.ErrorResponse' "500": description: Internal Server Error schema: - $ref: '#/definitions/server.ErrorResponse' + $ref: '#/definitions/internal_server.ErrorResponse' security: - BasicAuth: [] summary: Create a saved command @@ -1355,11 +1669,11 @@ paths: "400": description: Bad Request schema: - $ref: '#/definitions/server.ErrorResponse' + $ref: '#/definitions/internal_server.ErrorResponse' "500": description: Internal Server Error schema: - $ref: '#/definitions/server.ErrorResponse' + $ref: '#/definitions/internal_server.ErrorResponse' security: - BasicAuth: [] summary: Delete a saved command @@ -1381,15 +1695,15 @@ paths: "200": description: OK schema: - $ref: '#/definitions/models.SavedCommand' + $ref: '#/definitions/github_com_pozgo_web-cli_internal_models.SavedCommand' "400": description: Bad Request schema: - $ref: '#/definitions/server.ErrorResponse' + $ref: '#/definitions/internal_server.ErrorResponse' "404": description: Not Found schema: - $ref: '#/definitions/server.ErrorResponse' + $ref: '#/definitions/internal_server.ErrorResponse' security: - BasicAuth: [] summary: Get a saved command by ID @@ -1410,22 +1724,22 @@ paths: name: command required: true schema: - $ref: '#/definitions/models.SavedCommandUpdate' + $ref: '#/definitions/github_com_pozgo_web-cli_internal_models.SavedCommandUpdate' produces: - application/json responses: "200": description: OK schema: - $ref: '#/definitions/models.SavedCommand' + $ref: '#/definitions/github_com_pozgo_web-cli_internal_models.SavedCommand' "400": description: Bad Request schema: - $ref: '#/definitions/server.ErrorResponse' + $ref: '#/definitions/internal_server.ErrorResponse' "500": description: Internal Server Error schema: - $ref: '#/definitions/server.ErrorResponse' + $ref: '#/definitions/internal_server.ErrorResponse' security: - BasicAuth: [] summary: Update a saved command @@ -1443,12 +1757,12 @@ paths: description: OK schema: items: - $ref: '#/definitions/models.ScriptPresetResponse' + $ref: '#/definitions/github_com_pozgo_web-cli_internal_models.ScriptPresetResponse' type: array "500": description: Internal Server Error schema: - $ref: '#/definitions/server.ErrorResponse' + $ref: '#/definitions/internal_server.ErrorResponse' security: - BasicAuth: [] summary: List all script presets @@ -1464,22 +1778,22 @@ paths: name: preset required: true schema: - $ref: '#/definitions/models.ScriptPresetCreate' + $ref: '#/definitions/github_com_pozgo_web-cli_internal_models.ScriptPresetCreate' produces: - application/json responses: "201": description: Created schema: - $ref: '#/definitions/models.ScriptPresetResponse' + $ref: '#/definitions/github_com_pozgo_web-cli_internal_models.ScriptPresetResponse' "400": description: Bad Request schema: - $ref: '#/definitions/server.ErrorResponse' + $ref: '#/definitions/internal_server.ErrorResponse' "500": description: Internal Server Error schema: - $ref: '#/definitions/server.ErrorResponse' + $ref: '#/definitions/internal_server.ErrorResponse' security: - BasicAuth: [] summary: Create a script preset @@ -1504,11 +1818,11 @@ paths: "400": description: Bad Request schema: - $ref: '#/definitions/server.ErrorResponse' + $ref: '#/definitions/internal_server.ErrorResponse' "500": description: Internal Server Error schema: - $ref: '#/definitions/server.ErrorResponse' + $ref: '#/definitions/internal_server.ErrorResponse' security: - BasicAuth: [] summary: Delete a script preset @@ -1530,15 +1844,15 @@ paths: "200": description: OK schema: - $ref: '#/definitions/models.ScriptPresetResponse' + $ref: '#/definitions/github_com_pozgo_web-cli_internal_models.ScriptPresetResponse' "400": description: Bad Request schema: - $ref: '#/definitions/server.ErrorResponse' + $ref: '#/definitions/internal_server.ErrorResponse' "404": description: Not Found schema: - $ref: '#/definitions/server.ErrorResponse' + $ref: '#/definitions/internal_server.ErrorResponse' security: - BasicAuth: [] summary: Get a script preset by ID @@ -1559,22 +1873,22 @@ paths: name: preset required: true schema: - $ref: '#/definitions/models.ScriptPresetUpdate' + $ref: '#/definitions/github_com_pozgo_web-cli_internal_models.ScriptPresetUpdate' produces: - application/json responses: "200": description: OK schema: - $ref: '#/definitions/models.ScriptPresetResponse' + $ref: '#/definitions/github_com_pozgo_web-cli_internal_models.ScriptPresetResponse' "400": description: Bad Request schema: - $ref: '#/definitions/server.ErrorResponse' + $ref: '#/definitions/internal_server.ErrorResponse' "500": description: Internal Server Error schema: - $ref: '#/definitions/server.ErrorResponse' + $ref: '#/definitions/internal_server.ErrorResponse' security: - BasicAuth: [] summary: Update a script preset @@ -1585,6 +1899,11 @@ paths: consumes: - application/json description: Get a list of all remote servers configured in the system + parameters: + - description: Filter by group name + in: query + name: group + type: string produces: - application/json responses: @@ -1592,12 +1911,12 @@ paths: description: OK schema: items: - $ref: '#/definitions/models.Server' + $ref: '#/definitions/github_com_pozgo_web-cli_internal_models.Server' type: array "500": description: Internal Server Error schema: - $ref: '#/definitions/server.ErrorResponse' + $ref: '#/definitions/internal_server.ErrorResponse' security: - BasicAuth: [] summary: List all servers @@ -1613,22 +1932,22 @@ paths: name: server required: true schema: - $ref: '#/definitions/models.ServerCreate' + $ref: '#/definitions/github_com_pozgo_web-cli_internal_models.ServerCreate' produces: - application/json responses: "201": description: Created schema: - $ref: '#/definitions/models.Server' + $ref: '#/definitions/github_com_pozgo_web-cli_internal_models.Server' "400": description: Bad Request schema: - $ref: '#/definitions/server.ErrorResponse' + $ref: '#/definitions/internal_server.ErrorResponse' "500": description: Internal Server Error schema: - $ref: '#/definitions/server.ErrorResponse' + $ref: '#/definitions/internal_server.ErrorResponse' security: - BasicAuth: [] summary: Create a new server @@ -1653,11 +1972,11 @@ paths: "400": description: Bad Request schema: - $ref: '#/definitions/server.ErrorResponse' + $ref: '#/definitions/internal_server.ErrorResponse' "500": description: Internal Server Error schema: - $ref: '#/definitions/server.ErrorResponse' + $ref: '#/definitions/internal_server.ErrorResponse' security: - BasicAuth: [] summary: Delete a server @@ -1679,15 +1998,15 @@ paths: "200": description: OK schema: - $ref: '#/definitions/models.Server' + $ref: '#/definitions/github_com_pozgo_web-cli_internal_models.Server' "400": description: Bad Request schema: - $ref: '#/definitions/server.ErrorResponse' + $ref: '#/definitions/internal_server.ErrorResponse' "404": description: Not Found schema: - $ref: '#/definitions/server.ErrorResponse' + $ref: '#/definitions/internal_server.ErrorResponse' security: - BasicAuth: [] summary: Get a server by ID @@ -1708,27 +2027,50 @@ paths: name: server required: true schema: - $ref: '#/definitions/models.ServerUpdate' + $ref: '#/definitions/github_com_pozgo_web-cli_internal_models.ServerUpdate' produces: - application/json responses: "200": description: OK schema: - $ref: '#/definitions/models.Server' + $ref: '#/definitions/github_com_pozgo_web-cli_internal_models.Server' "400": description: Bad Request schema: - $ref: '#/definitions/server.ErrorResponse' + $ref: '#/definitions/internal_server.ErrorResponse' "500": description: Internal Server Error schema: - $ref: '#/definitions/server.ErrorResponse' + $ref: '#/definitions/internal_server.ErrorResponse' security: - BasicAuth: [] summary: Update a server tags: - Servers + /servers/groups: + get: + consumes: + - application/json + description: Get a list of all distinct group names for servers + produces: + - application/json + responses: + "200": + description: OK + schema: + items: + type: string + type: array + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/internal_server.ErrorResponse' + security: + - BasicAuth: [] + summary: List all server groups + tags: + - Servers /system/current-user: get: consumes: @@ -1740,11 +2082,11 @@ paths: "200": description: OK schema: - $ref: '#/definitions/server.CurrentUserResponse' + $ref: '#/definitions/internal_server.CurrentUserResponse' "500": description: Internal Server Error schema: - $ref: '#/definitions/server.ErrorResponse' + $ref: '#/definitions/internal_server.ErrorResponse' security: - BasicAuth: [] summary: Get current system user @@ -1762,13 +2104,402 @@ paths: description: OK schema: items: - $ref: '#/definitions/server.ShellInfo' + $ref: '#/definitions/internal_server.ShellInfo' type: array security: - BasicAuth: [] summary: List available shells tags: - System + /vault/bash-scripts: + get: + description: Retrieve all bash scripts stored in Vault + produces: + - application/json + responses: + "200": + description: OK + schema: + items: + $ref: '#/definitions/github_com_pozgo_web-cli_internal_vault.BashScript' + type: array + "400": + description: Bad Request + schema: + $ref: '#/definitions/internal_server.ErrorResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/internal_server.ErrorResponse' + security: + - BasicAuth: [] + summary: List bash scripts from Vault + tags: + - Vault + post: + consumes: + - application/json + description: Create a new bash script in HashiCorp Vault storage + parameters: + - description: Bash script data + in: body + name: script + required: true + schema: + type: object + produces: + - application/json + responses: + "201": + description: Created script info with source field + schema: + additionalProperties: true + type: object + "400": + description: Invalid request or Vault not configured + schema: + type: string + "500": + description: Failed to store script + schema: + type: string + security: + - BasicAuth: [] + summary: Store bash script in Vault + tags: + - Vault + /vault/config: + delete: + description: Remove the Vault configuration + responses: + "204": + description: No Content + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/internal_server.ErrorResponse' + security: + - BasicAuth: [] + summary: Delete Vault configuration + tags: + - Vault + get: + description: Retrieve the current Vault configuration (token is never returned) + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/github_com_pozgo_web-cli_internal_models.VaultConfigResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/internal_server.ErrorResponse' + security: + - BasicAuth: [] + summary: Get Vault configuration + tags: + - Vault + post: + consumes: + - application/json + description: Configure or update the Vault connection settings + parameters: + - description: Vault configuration + in: body + name: config + required: true + schema: + $ref: '#/definitions/github_com_pozgo_web-cli_internal_models.VaultConfigCreate' + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/github_com_pozgo_web-cli_internal_models.VaultConfigResponse' + "400": + description: Bad Request + schema: + $ref: '#/definitions/internal_server.ErrorResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/internal_server.ErrorResponse' + security: + - BasicAuth: [] + summary: Create or update Vault configuration + tags: + - Vault + /vault/env-variables: + get: + description: Retrieve all environment variables stored in Vault + produces: + - application/json + responses: + "200": + description: OK + schema: + items: + $ref: '#/definitions/github_com_pozgo_web-cli_internal_vault.EnvVariable' + type: array + "400": + description: Bad Request + schema: + $ref: '#/definitions/internal_server.ErrorResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/internal_server.ErrorResponse' + security: + - BasicAuth: [] + summary: List environment variables from Vault + tags: + - Vault + post: + consumes: + - application/json + description: Store a new environment variable in Vault + parameters: + - description: Environment Variable + in: body + name: envVar + required: true + schema: + properties: + description: + type: string + group: + type: string + name: + type: string + value: + type: string + type: object + produces: + - application/json + responses: + "201": + description: Created + schema: + properties: + description: + type: string + group: + type: string + name: + type: string + source: + type: string + type: object + "400": + description: Bad Request + schema: + $ref: '#/definitions/internal_server.ErrorResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/internal_server.ErrorResponse' + security: + - BasicAuth: [] + summary: Create environment variable in Vault + tags: + - Vault + /vault/servers: + get: + description: Retrieve all server configurations stored in Vault + produces: + - application/json + responses: + "200": + description: OK + schema: + items: + $ref: '#/definitions/github_com_pozgo_web-cli_internal_vault.Server' + type: array + "400": + description: Bad Request + schema: + $ref: '#/definitions/internal_server.ErrorResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/internal_server.ErrorResponse' + security: + - BasicAuth: [] + summary: List servers from Vault + tags: + - Vault + post: + consumes: + - application/json + description: Store a new server configuration in Vault + parameters: + - description: Server + in: body + name: server + required: true + schema: + properties: + group: + type: string + ip_address: + type: string + name: + type: string + port: + type: integer + username: + type: string + type: object + produces: + - application/json + responses: + "201": + description: Created + schema: + properties: + group: + type: string + ip_address: + type: string + name: + type: string + port: + type: integer + source: + type: string + username: + type: string + type: object + "400": + description: Bad Request + schema: + $ref: '#/definitions/internal_server.ErrorResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/internal_server.ErrorResponse' + security: + - BasicAuth: [] + summary: Create server in Vault + tags: + - Vault + /vault/ssh-keys: + get: + description: Retrieve all SSH keys stored in Vault + produces: + - application/json + responses: + "200": + description: OK + schema: + items: + $ref: '#/definitions/github_com_pozgo_web-cli_internal_vault.SSHKey' + type: array + "400": + description: Bad Request + schema: + $ref: '#/definitions/internal_server.ErrorResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/internal_server.ErrorResponse' + security: + - BasicAuth: [] + summary: List SSH keys from Vault + tags: + - Vault + post: + consumes: + - application/json + description: Store a new SSH key in Vault + parameters: + - description: SSH Key + in: body + name: key + required: true + schema: + properties: + group: + type: string + name: + type: string + private_key: + type: string + type: object + produces: + - application/json + responses: + "201": + description: Created + schema: + properties: + created_at: + type: string + group: + type: string + name: + type: string + source: + type: string + type: object + "400": + description: Bad Request + schema: + $ref: '#/definitions/internal_server.ErrorResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/internal_server.ErrorResponse' + security: + - BasicAuth: [] + summary: Create SSH key in Vault + tags: + - Vault + /vault/status: + get: + description: Check the current Vault connection status + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/github_com_pozgo_web-cli_internal_models.VaultStatus' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/internal_server.ErrorResponse' + security: + - BasicAuth: [] + summary: Get Vault connection status + tags: + - Vault + /vault/test: + post: + description: Test the connection to Vault and initialize the secrets structure + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/github_com_pozgo_web-cli_internal_models.VaultStatus' + "400": + description: Bad Request + schema: + $ref: '#/definitions/internal_server.ErrorResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/internal_server.ErrorResponse' + security: + - BasicAuth: [] + summary: Test Vault connection + tags: + - Vault securityDefinitions: BasicAuth: type: basic diff --git a/frontend/src/components/AddKeyDialog.jsx b/frontend/src/components/AddKeyDialog.jsx index f0e9940..d6be1a6 100644 --- a/frontend/src/components/AddKeyDialog.jsx +++ b/frontend/src/components/AddKeyDialog.jsx @@ -9,6 +9,8 @@ import { Alert, Box, } from '@mui/material'; +import StorageSelector from './shared/StorageSelector'; +import GroupInput from './shared/GroupInput'; /** * AddKeyDialog component - dialog for adding new SSH keys @@ -20,6 +22,8 @@ import { const AddKeyDialog = ({ open, onClose, onKeyAdded }) => { const [name, setName] = useState(''); const [privateKey, setPrivateKey] = useState(''); + const [group, setGroup] = useState('default'); + const [storage, setStorage] = useState('local'); const [error, setError] = useState(null); const [loading, setLoading] = useState(false); @@ -42,7 +46,10 @@ const AddKeyDialog = ({ open, onClose, onKeyAdded }) => { setLoading(true); setError(null); - const response = await fetch('/api/keys', { + // Choose API endpoint based on storage selection + const endpoint = storage === 'vault' ? '/api/vault/ssh-keys' : '/api/keys'; + + const response = await fetch(endpoint, { method: 'POST', headers: { 'Content-Type': 'application/json', @@ -50,6 +57,7 @@ const AddKeyDialog = ({ open, onClose, onKeyAdded }) => { body: JSON.stringify({ name: name.trim(), private_key: privateKey, // Don't trim - SSH keys need their newlines preserved + group: group.trim() || 'default', }), }); @@ -61,6 +69,8 @@ const AddKeyDialog = ({ open, onClose, onKeyAdded }) => { // Success - reset form and notify parent setName(''); setPrivateKey(''); + setGroup('default'); + setStorage('local'); setError(null); onKeyAdded(); } catch (err) { @@ -75,6 +85,8 @@ const AddKeyDialog = ({ open, onClose, onKeyAdded }) => { if (!loading) { setName(''); setPrivateKey(''); + setGroup('default'); + setStorage('local'); setError(null); onClose(); } @@ -129,6 +141,22 @@ b3BlbnNzaC1rZXktdjEAAAAABG5vbmUA..." }} /> + + + + + + Security Note: Private keys are encrypted with AES-256-GCM before storage. Never share your private keys. diff --git a/frontend/src/components/AddServerDialog.jsx b/frontend/src/components/AddServerDialog.jsx index 7a609f3..f947e6c 100644 --- a/frontend/src/components/AddServerDialog.jsx +++ b/frontend/src/components/AddServerDialog.jsx @@ -9,6 +9,8 @@ import { Alert, Box, } from '@mui/material'; +import StorageSelector from './shared/StorageSelector'; +import GroupInput from './shared/GroupInput'; /** * AddServerDialog component - dialog for adding new servers @@ -22,6 +24,8 @@ const AddServerDialog = ({ open, onClose, onServerAdded }) => { const [ipAddress, setIPAddress] = useState(''); const [port, setPort] = useState('22'); const [username, setUsername] = useState('root'); + const [group, setGroup] = useState('default'); + const [storage, setStorage] = useState('local'); const [error, setError] = useState(null); const [loading, setLoading] = useState(false); @@ -67,7 +71,10 @@ const AddServerDialog = ({ open, onClose, onServerAdded }) => { setLoading(true); setError(null); - const response = await fetch('/api/servers', { + // Choose API endpoint based on storage selection + const endpoint = storage === 'vault' ? '/api/vault/servers' : '/api/servers'; + + const response = await fetch(endpoint, { method: 'POST', headers: { 'Content-Type': 'application/json', @@ -77,6 +84,7 @@ const AddServerDialog = ({ open, onClose, onServerAdded }) => { ip_address: ipAddress.trim() || undefined, port: portNum, username: username.trim() || 'root', + group: group.trim() || 'default', }), }); @@ -90,6 +98,8 @@ const AddServerDialog = ({ open, onClose, onServerAdded }) => { setIPAddress(''); setPort('22'); setUsername('root'); + setGroup('default'); + setStorage('local'); setError(null); onServerAdded(); } catch (err) { @@ -106,6 +116,8 @@ const AddServerDialog = ({ open, onClose, onServerAdded }) => { setIPAddress(''); setPort('22'); setUsername('root'); + setGroup('default'); + setStorage('local'); setError(null); onClose(); } @@ -179,6 +191,22 @@ const AddServerDialog = ({ open, onClose, onServerAdded }) => { disabled={loading} /> + + + + + + Note: At least one of Server Name or IP Address must be provided. Server names must follow hostname conventions (no spaces). diff --git a/frontend/src/components/AdminPanel.jsx b/frontend/src/components/AdminPanel.jsx index 28c2617..87017fa 100644 --- a/frontend/src/components/AdminPanel.jsx +++ b/frontend/src/components/AdminPanel.jsx @@ -1,4 +1,4 @@ -import React, { useState, useEffect } from 'react'; +import React, { useState, useEffect, Component } from 'react'; import { Container, Typography, @@ -18,25 +18,59 @@ import { Tab, } from '@mui/material'; import { Add, Delete, Edit, ArrowBack } from '@mui/icons-material'; -import { useNavigate } from 'react-router-dom'; +import { useNavigate, useLocation } from 'react-router-dom'; import AddKeyDialog from './AddKeyDialog'; import EditKeyDialog from './EditKeyDialog'; import ServerList from './ServerList'; import LocalUserList from './LocalUserList'; import EnvVariableList from './EnvVariableList'; +import VaultSettings from './VaultSettings'; +import SourceChip from './shared/SourceChip'; +import GroupSelector from './shared/GroupSelector'; + +/** + * Error Boundary for VaultSettings + */ +class VaultErrorBoundary extends Component { + constructor(props) { + super(props); + this.state = { hasError: false, error: null }; + } + + static getDerivedStateFromError(error) { + return { hasError: true, error }; + } + + componentDidCatch(error, errorInfo) { + console.error('VaultSettings error:', error, errorInfo); + } + + render() { + if (this.state.hasError) { + return ( + + Error loading Vault Settings: {this.state.error?.message || 'Unknown error'} + + ); + } + return this.props.children; + } +} /** * AdminPanel component - displays and manages SSH keys and servers */ const AdminPanel = () => { const navigate = useNavigate(); - const [tabValue, setTabValue] = useState(0); + const location = useLocation(); + const [tabValue, setTabValue] = useState(location.state?.tab || 0); const [keys, setKeys] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const [openDialog, setOpenDialog] = useState(false); const [openEditDialog, setOpenEditDialog] = useState(false); const [selectedKey, setSelectedKey] = useState(null); + const [selectedGroup, setSelectedGroup] = useState('all'); // Handle tab change const handleTabChange = (event, newValue) => { @@ -48,7 +82,10 @@ const AdminPanel = () => { try { setLoading(true); setError(null); - const response = await fetch('/api/keys'); + const url = selectedGroup === 'all' + ? '/api/keys' + : `/api/keys?group=${encodeURIComponent(selectedGroup)}`; + const response = await fetch(url); if (!response.ok) { throw new Error('Failed to fetch SSH keys'); @@ -63,10 +100,17 @@ const AdminPanel = () => { } }; - // Load keys on component mount + // Update tab when navigating with state (e.g., from VaultIcon) + useEffect(() => { + if (location.state?.tab !== undefined) { + setTabValue(location.state.tab); + } + }, [location.state]); + + // Load keys on component mount or when group changes useEffect(() => { fetchKeys(); - }, []); + }, [selectedGroup]); // Handle key deletion const handleDelete = async (id) => { @@ -130,6 +174,7 @@ const AdminPanel = () => { + @@ -139,13 +184,20 @@ const AdminPanel = () => { SSH Key Management - + + + + {error && ( @@ -171,13 +223,15 @@ const AdminPanel = () => { Name Private Key + Group + Source Created At Actions {keys.map((key) => ( - + {key.name} { {key.private_key} + {key.group || 'default'} + + + {new Date(key.created_at).toLocaleString()} @@ -202,6 +260,8 @@ const AdminPanel = () => { onClick={() => handleEdit(key)} aria-label="edit" sx={{ mr: 1 }} + disabled={key.source === 'vault'} + title={key.source === 'vault' ? 'Vault items cannot be edited here' : 'Edit'} > @@ -209,6 +269,8 @@ const AdminPanel = () => { color="error" onClick={() => handleDelete(key.id)} aria-label="delete" + disabled={key.source === 'vault'} + title={key.source === 'vault' ? 'Vault items cannot be deleted here' : 'Delete'} > @@ -227,6 +289,12 @@ const AdminPanel = () => { {tabValue === 2 && } {tabValue === 3 && } + + {tabValue === 4 && ( + + + + )} { const [name, setName] = useState(''); const [privateKey, setPrivateKey] = useState(''); + const [group, setGroup] = useState('default'); const [error, setError] = useState(null); const [loading, setLoading] = useState(false); @@ -29,6 +30,7 @@ const EditKeyDialog = ({ open, onClose, onKeyUpdated, keyData }) => { if (keyData) { setName(keyData.name || ''); setPrivateKey(keyData.private_key || ''); + setGroup(keyData.group || 'default'); } }, [keyData]); @@ -59,6 +61,7 @@ const EditKeyDialog = ({ open, onClose, onKeyUpdated, keyData }) => { body: JSON.stringify({ name: name.trim(), private_key: privateKey, // Don't trim - SSH keys need their newlines preserved + group: group.trim() || 'default', }), }); @@ -134,6 +137,19 @@ b3BlbnNzaC1rZXktdjEAAAAABG5vbmUA..." }} /> + setGroup(e.target.value)} + placeholder="default" + helperText="Group for organizing SSH keys (default: default)" + disabled={loading} + /> + Security Note: Private keys are encrypted with AES-256-GCM before storage. This will replace the existing key. diff --git a/frontend/src/components/EditServerDialog.jsx b/frontend/src/components/EditServerDialog.jsx index 82599bd..55d96b3 100644 --- a/frontend/src/components/EditServerDialog.jsx +++ b/frontend/src/components/EditServerDialog.jsx @@ -23,6 +23,7 @@ const EditServerDialog = ({ open, onClose, onServerUpdated, serverData }) => { const [ipAddress, setIPAddress] = useState(''); const [port, setPort] = useState('22'); const [username, setUsername] = useState('root'); + const [group, setGroup] = useState('default'); const [error, setError] = useState(null); const [loading, setLoading] = useState(false); @@ -33,6 +34,7 @@ const EditServerDialog = ({ open, onClose, onServerUpdated, serverData }) => { setIPAddress(serverData.ip_address || ''); setPort(serverData.port ? String(serverData.port) : '22'); setUsername(serverData.username || 'root'); + setGroup(serverData.group || 'default'); } }, [serverData]); @@ -88,6 +90,7 @@ const EditServerDialog = ({ open, onClose, onServerUpdated, serverData }) => { ip_address: ipAddress.trim() || undefined, port: portNum, username: username.trim() || 'root', + group: group.trim() || 'default', }), }); @@ -182,6 +185,19 @@ const EditServerDialog = ({ open, onClose, onServerUpdated, serverData }) => { disabled={loading} /> + setGroup(e.target.value)} + placeholder="default" + helperText="Group for organizing servers (default: default)" + disabled={loading} + /> + Note: At least one of Server Name or IP Address must be provided. Server names must follow hostname conventions (no spaces). diff --git a/frontend/src/components/EnvVariableList.jsx b/frontend/src/components/EnvVariableList.jsx index 16b75f7..5f3a15f 100644 --- a/frontend/src/components/EnvVariableList.jsx +++ b/frontend/src/components/EnvVariableList.jsx @@ -22,6 +22,10 @@ import { Tooltip, } from '@mui/material'; import { Add, Delete, Edit, Visibility, VisibilityOff, ContentCopy } from '@mui/icons-material'; +import SourceChip from './shared/SourceChip'; +import GroupSelector from './shared/GroupSelector'; +import StorageSelector from './shared/StorageSelector'; +import GroupInput from './shared/GroupInput'; /** * EnvVariableList component - displays and manages encrypted environment variables @@ -38,15 +42,21 @@ const EnvVariableList = () => { name: '', value: '', description: '', + group: 'default', + storage: 'local', }); const [showFormValue, setShowFormValue] = useState(false); + const [selectedGroup, setSelectedGroup] = useState('all'); // Fetch environment variables from API const fetchEnvVars = async () => { try { setLoading(true); setError(null); - const response = await fetch('/api/env-variables'); + const url = selectedGroup === 'all' + ? '/api/env-variables' + : `/api/env-variables?group=${encodeURIComponent(selectedGroup)}`; + const response = await fetch(url); if (!response.ok) { throw new Error('Failed to fetch environment variables'); @@ -76,10 +86,10 @@ const EnvVariableList = () => { } }; - // Load env vars on component mount + // Load env vars on component mount or when group changes useEffect(() => { fetchEnvVars(); - }, []); + }, [selectedGroup]); // Toggle value visibility for a specific variable const handleToggleVisibility = async (id) => { @@ -140,6 +150,7 @@ const EnvVariableList = () => { name: envVar.name, value: value || '', description: envVar.description || '', + group: envVar.group || 'default', }); setShowFormValue(false); setOpenDialog(true); @@ -152,6 +163,8 @@ const EnvVariableList = () => { name: '', value: '', description: '', + group: 'default', + storage: 'local', }); setShowFormValue(false); setOpenDialog(true); @@ -165,17 +178,25 @@ const EnvVariableList = () => { } try { + // Choose base API endpoint based on storage selection (only for new env vars) + const baseEndpoint = !editingVar && formData.storage === 'vault' + ? '/api/vault/env-variables' + : '/api/env-variables'; + const url = editingVar ? `/api/env-variables/${editingVar.id}` - : '/api/env-variables'; + : baseEndpoint; const method = editingVar ? 'PUT' : 'POST'; + // Don't send storage field to the API + const { storage, ...dataToSend } = formData; + const response = await fetch(url, { method, headers: { 'Content-Type': 'application/json', }, - body: JSON.stringify(formData), + body: JSON.stringify(dataToSend), }); if (!response.ok) { @@ -198,13 +219,20 @@ const EnvVariableList = () => { Environment Variables - + + + + {error && ( @@ -241,13 +269,15 @@ const EnvVariableList = () => { Name Value Description + Group + Source Created At Actions {envVars.map((envVar) => ( - + { {envVar.description || '-'} + {envVar.group || 'default'} + + + {new Date(envVar.created_at).toLocaleString()} @@ -299,6 +333,8 @@ const EnvVariableList = () => { onClick={() => handleEdit(envVar)} aria-label="edit" sx={{ mr: 1 }} + disabled={envVar.source === 'vault'} + title={envVar.source === 'vault' ? 'Vault items cannot be edited here' : 'Edit'} > @@ -306,6 +342,8 @@ const EnvVariableList = () => { color="error" onClick={() => handleDelete(envVar.id)} aria-label="delete" + disabled={envVar.source === 'vault'} + title={envVar.source === 'vault' ? 'Vault items cannot be deleted here' : 'Delete'} > @@ -371,6 +409,20 @@ const EnvVariableList = () => { placeholder="Brief description of this variable" sx={{ mb: 2 }} /> + setFormData({ ...formData, group: value })} + resourceType="env-variables" + helperText="Select an existing group or type a new one" + /> + {!editingVar && ( + + setFormData({ ...formData, storage: value })} + /> + + )} diff --git a/frontend/src/components/Header.jsx b/frontend/src/components/Header.jsx index 2e0a347..cbec7e0 100644 --- a/frontend/src/components/Header.jsx +++ b/frontend/src/components/Header.jsx @@ -1,9 +1,10 @@ -import React from 'react'; +import React, { useState, useEffect, useCallback } from 'react'; import { AppBar, Toolbar, Typography, Box, IconButton, Tooltip } from '@mui/material'; import { Terminal, Api } from '@mui/icons-material'; import GitHubIcon from '@mui/icons-material/GitHub'; import { useNavigate } from 'react-router-dom'; import ThemeToggle from './ThemeToggle'; +import VaultIcon from './shared/VaultIcon'; /** * Header component - displays the application header with logo and theme toggle @@ -22,7 +23,6 @@ const Header = ({ mode, toggleTheme }) => { display: 'flex', alignItems: 'center', cursor: 'pointer', - flexGrow: 1, '&:hover': { opacity: 0.8, }, @@ -34,6 +34,8 @@ const Header = ({ mode, toggleTheme }) => { Web CLI + + { if (response.ok) { const data = await response.json(); setEnvVars(data || []); - // Select all by default - setSelectedEnvVarIds((data || []).map(v => v.id)); + // Select all by default - use name for Vault items, ID for SQLite items + setSelectedEnvVarIds((data || []).map(v => v.source === 'vault' ? v.name : v.id)); } } catch (err) { console.error('Failed to fetch env vars:', err); @@ -271,13 +271,49 @@ const LocalScripts = () => { setSuccess(null); setOutput(''); + // Find the selected script object to determine its source + const selectedScriptObj = scripts.find(s => + (s.source === 'vault' ? s.name === selectedScriptId : s.id === parseInt(selectedScriptId, 10)) + ); + const payload = { - script_id: parseInt(selectedScriptId, 10), user: user || 'root', is_remote: false, - env_var_ids: selectedEnvVarIds, }; + // For script: use name for Vault items, ID for SQLite items + if (selectedScriptObj) { + if (selectedScriptObj.source === 'vault') { + payload.script_name = selectedScriptObj.name; + payload.script_group = selectedScriptObj.group || 'default'; + } else { + payload.script_id = selectedScriptObj.id; + } + } + + // For env vars: separate SQLite IDs from Vault names (with groups) + const sqliteEnvVarIds = []; + const vaultEnvVarNames = []; + const vaultEnvVarGroups = []; + selectedEnvVarIds.forEach(id => { + const envVar = envVars.find(v => v.id === id || v.name === id); + if (envVar) { + if (envVar.source === 'vault') { + vaultEnvVarNames.push(envVar.name); + vaultEnvVarGroups.push(envVar.group || 'default'); + } else if (envVar.id) { + sqliteEnvVarIds.push(envVar.id); + } + } + }); + if (sqliteEnvVarIds.length > 0) { + payload.env_var_ids = sqliteEnvVarIds; + } + if (vaultEnvVarNames.length > 0) { + payload.env_var_names = vaultEnvVarNames; + payload.env_var_groups = vaultEnvVarGroups; + } + if (password) { payload.sudo_password = password; } @@ -417,12 +453,21 @@ const LocalScripts = () => { Choose a script... {scripts.map((script) => ( - - - - {script.name} - {script.filename && ( - + + + + + {script.name} + {script.filename && ( + + )} + + {script.source && ( + script.source === 'vault' ? ( + } label="Vault" size="small" variant="outlined" color="secondary" sx={{ fontWeight: 500, height: 20, '& .MuiChip-label': { px: 0.75 } }} /> + ) : ( + } label="Local" size="small" variant="outlined" sx={{ fontWeight: 500, height: 20, '& .MuiChip-label': { px: 0.75 } }} /> + ) )} @@ -465,35 +510,47 @@ const LocalScripts = () => { ) : selected.length === envVars.length ? ( ) : ( - selected.map((id) => { - const envVar = envVars.find(v => v.id === id); + selected.map((val) => { + const envVar = envVars.find(v => (v.source === 'vault' ? v.name === val : v.id === val)); return envVar ? ( - + ) : null; }) )} )} > - {envVars.map((envVar) => ( - - - - {envVar.name} - {envVar.description && ( - - {envVar.description} - - )} - - - ))} + {envVars.map((envVar) => { + const envVarValue = envVar.source === 'vault' ? envVar.name : envVar.id; + return ( + + + + + {envVar.name} + {envVar.description && ( + + {envVar.description} + + )} + + {envVar.source && ( + envVar.source === 'vault' ? ( + } label="Vault" size="small" variant="outlined" color="secondary" sx={{ fontWeight: 500, height: 20, '& .MuiChip-label': { px: 0.75 } }} /> + ) : ( + } label="Local" size="small" variant="outlined" sx={{ fontWeight: 500, height: 20, '& .MuiChip-label': { px: 0.75 } }} /> + ) + )} + + + ); + })} diff --git a/frontend/src/components/ScriptList.jsx b/frontend/src/components/ScriptList.jsx index 1a35ff2..04d5ead 100644 --- a/frontend/src/components/ScriptList.jsx +++ b/frontend/src/components/ScriptList.jsx @@ -22,6 +22,10 @@ import { Chip, } from '@mui/material'; import { Add, Delete, Edit, Code, Upload, ContentCopy } from '@mui/icons-material'; +import SourceChip from './shared/SourceChip'; +import GroupSelector from './shared/GroupSelector'; +import StorageSelector from './shared/StorageSelector'; +import GroupInput from './shared/GroupInput'; /** * ScriptList component - displays and manages bash scripts stored in the database @@ -38,14 +42,20 @@ const ScriptList = () => { description: '', content: '', filename: '', + group: 'default', + storage: 'local', }); + const [selectedGroup, setSelectedGroup] = useState('all'); // Fetch scripts from API const fetchScripts = async () => { try { setLoading(true); setError(null); - const response = await fetch('/api/bash-scripts'); + const url = selectedGroup === 'all' + ? '/api/bash-scripts' + : `/api/bash-scripts?group=${encodeURIComponent(selectedGroup)}`; + const response = await fetch(url); if (!response.ok) { throw new Error('Failed to fetch scripts'); @@ -75,10 +85,10 @@ const ScriptList = () => { } }; - // Load scripts on component mount + // Load scripts on component mount or when group changes useEffect(() => { fetchScripts(); - }, []); + }, [selectedGroup]); // Handle file upload const handleFileUpload = (event) => { @@ -140,6 +150,7 @@ const ScriptList = () => { description: fullScript.description || '', content: fullScript.content || '', filename: fullScript.filename || '', + group: fullScript.group || 'default', }); setOpenDialog(true); } @@ -153,6 +164,8 @@ const ScriptList = () => { description: '', content: '', filename: '', + group: 'default', + storage: 'local', }); setOpenDialog(true); }; @@ -165,17 +178,25 @@ const ScriptList = () => { } try { + // Choose base API endpoint based on storage selection (only for new scripts) + const baseEndpoint = !editingScript && formData.storage === 'vault' + ? '/api/vault/bash-scripts' + : '/api/bash-scripts'; + const url = editingScript ? `/api/bash-scripts/${editingScript.id}` - : '/api/bash-scripts'; + : baseEndpoint; const method = editingScript ? 'PUT' : 'POST'; + // Don't send storage field to the API + const { storage, ...dataToSend } = formData; + const response = await fetch(url, { method, headers: { 'Content-Type': 'application/json', }, - body: JSON.stringify(formData), + body: JSON.stringify(dataToSend), }); if (!response.ok) { @@ -207,13 +228,20 @@ const ScriptList = () => { Bash Scripts - + + + + {error && ( @@ -250,13 +278,15 @@ const ScriptList = () => { Name Filename Description + Group + Source Created At Actions {scripts.map((script) => ( - + @@ -276,6 +306,10 @@ const ScriptList = () => { )} {script.description || '-'} + {script.group || 'default'} + + + {new Date(script.created_at).toLocaleString()} @@ -294,6 +328,8 @@ const ScriptList = () => { onClick={() => handleEdit(script)} aria-label="edit" sx={{ mr: 1 }} + disabled={script.source === 'vault'} + title={script.source === 'vault' ? 'Vault items cannot be edited here' : 'Edit'} > @@ -301,6 +337,8 @@ const ScriptList = () => { color="error" onClick={() => handleDelete(script.id)} aria-label="delete" + disabled={script.source === 'vault'} + title={script.source === 'vault' ? 'Vault items cannot be deleted here' : 'Delete'} > @@ -340,6 +378,20 @@ const ScriptList = () => { placeholder="Brief description of what this script does" sx={{ mb: 2 }} /> + setFormData({ ...formData, group: value })} + resourceType="bash-scripts" + helperText="Select an existing group or type a new one" + /> + {!editingScript && ( + + setFormData({ ...formData, storage: value })} + /> + + )} { const [openDialog, setOpenDialog] = useState(false); const [openEditDialog, setOpenEditDialog] = useState(false); const [selectedServer, setSelectedServer] = useState(null); + const [selectedGroup, setSelectedGroup] = useState('all'); // Fetch servers from API const fetchServers = async () => { try { setLoading(true); setError(null); - const response = await fetch('/api/servers'); + const url = selectedGroup === 'all' + ? '/api/servers' + : `/api/servers?group=${encodeURIComponent(selectedGroup)}`; + const response = await fetch(url); if (!response.ok) { throw new Error('Failed to fetch servers'); @@ -49,10 +55,10 @@ const ServerList = () => { } }; - // Load servers on component mount + // Load servers on component mount or when group changes useEffect(() => { fetchServers(); - }, []); + }, [selectedGroup]); // Handle server deletion const handleDelete = async (id) => { @@ -101,13 +107,20 @@ const ServerList = () => { Server Management - + + + + {error && ( @@ -135,17 +148,23 @@ const ServerList = () => { IP Address / Hostname Port Username + Group + Source Created At Actions {servers.map((server) => ( - + {server.name || '-'} {server.ip_address || '-'} {server.port || 22} {server.username || 'root'} + {server.group || 'default'} + + + {new Date(server.created_at).toLocaleString()} @@ -155,6 +174,8 @@ const ServerList = () => { onClick={() => handleEdit(server)} aria-label="edit" sx={{ mr: 1 }} + disabled={server.source === 'vault'} + title={server.source === 'vault' ? 'Vault items cannot be edited here' : 'Edit'} > @@ -162,6 +183,8 @@ const ServerList = () => { color="error" onClick={() => handleDelete(server.id)} aria-label="delete" + disabled={server.source === 'vault'} + title={server.source === 'vault' ? 'Vault items cannot be deleted here' : 'Delete'} > diff --git a/frontend/src/components/Terminal.jsx b/frontend/src/components/Terminal.jsx index a74eea4..67f7bdd 100644 --- a/frontend/src/components/Terminal.jsx +++ b/frontend/src/components/Terminal.jsx @@ -10,6 +10,9 @@ import { InputLabel, Select, MenuItem, + ListItemIcon, + ListItemText, + Chip, } from '@mui/material'; import { ArrowBack, @@ -17,6 +20,8 @@ import { FullscreenExit, Refresh, VpnKey, + Storage, + Lock, } from '@mui/icons-material'; import { useNavigate } from 'react-router-dom'; import { TerminalProvider, useTerminal } from '../context/TerminalContext'; @@ -60,10 +65,22 @@ const TerminalContent = () => { const fetchSshKeys = async () => { try { + // /api/keys already returns merged local + vault keys with source field const response = await fetch('/api/keys'); if (response.ok) { const data = await response.json(); - setSshKeys(data || []); + const keysWithCompositeId = (data || []).map((key) => { + // Determine source: vault keys have source="vault", local have source="sqlite" or no source + const isVault = key.source === 'vault'; + // Create composite ID: vault keys use name (no numeric id), local keys use id + const compositeId = isVault ? `vault:${key.name}` : `local:${key.id}`; + return { + ...key, + source: isVault ? 'vault' : 'local', + compositeId, + }; + }); + setSshKeys(keysWithCompositeId); } } catch (err) { console.error('Failed to fetch SSH keys:', err); @@ -103,7 +120,8 @@ const TerminalContent = () => { // Handle SSH key change for active tab const handleSshKeyChange = (e) => { if (activeTab) { - updateTabConfig(activeTab.id, { sshKeyId: e.target.value }); + const compositeId = e.target.value; + updateTabConfig(activeTab.id, { sshKeyId: compositeId }); // Trigger reconnect window.dispatchEvent( new CustomEvent('terminal-reconnect', { detail: { tabId: activeTab.id } }) @@ -111,6 +129,12 @@ const TerminalContent = () => { } }; + // Helper to get the selected key object from composite ID + const getSelectedKey = (compositeId) => { + if (!compositeId) return null; + return sshKeys.find((k) => k.compositeId === compositeId); + }; + // Handle reconnect for active tab const handleReconnect = () => { if (activeTab) { @@ -170,24 +194,46 @@ const TerminalContent = () => { {/* SSH Key selector for active tab */} - + SSH Key @@ -250,10 +296,42 @@ const TerminalContent = () => { Disconnected )} - - Tabs: {tabs.length}/{maxTabs} | Shell: {activeTab?.shell || 'bash'} - {activeTab?.sshKeyId && - ` | SSH Key: ${sshKeys.find((k) => k.id === activeTab.sshKeyId)?.name || 'Selected'}`} + + + Tabs: {tabs.length}/{maxTabs} + | + Shell: {activeTab?.shell || 'bash'} + {activeTab?.sshKeyId && (() => { + const selectedKey = getSelectedKey(activeTab.sshKeyId); + return selectedKey ? ( + <> + | + + + {selectedKey.name} + {selectedKey.source === 'vault' ? ( + } + label="Vault" + size="small" + variant="outlined" + color="secondary" + sx={{ height: 20, '& .MuiChip-label': { px: 0.5, fontSize: '0.7rem' } }} + /> + ) : ( + } + label="Local" + size="small" + variant="outlined" + sx={{ height: 20, '& .MuiChip-label': { px: 0.5, fontSize: '0.7rem' } }} + /> + )} + + + ) : null; + })()} + diff --git a/frontend/src/components/TerminalPane.jsx b/frontend/src/components/TerminalPane.jsx index 66be98e..d6b1cb1 100644 --- a/frontend/src/components/TerminalPane.jsx +++ b/frontend/src/components/TerminalPane.jsx @@ -59,8 +59,19 @@ const TerminalPane = ({ // Build WebSocket URL const protocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:'; let wsUrl = `${protocol}//${window.location.host}/api/terminal/ws?shell=${encodeURIComponent(currentShell)}`; + + // Handle composite SSH key ID (format: "source:id" e.g., "local:123" or "vault:keyname") if (currentSshKeyId) { - wsUrl += `&sshKeyId=${encodeURIComponent(currentSshKeyId)}`; + const colonIndex = currentSshKeyId.indexOf(':'); + if (colonIndex > 0) { + const source = currentSshKeyId.substring(0, colonIndex); + const keyIdentifier = currentSshKeyId.substring(colonIndex + 1); + wsUrl += `&sshKeyId=${encodeURIComponent(keyIdentifier)}`; + wsUrl += `&sshKeySource=${encodeURIComponent(source)}`; + } else { + // Fallback for legacy format (just the ID) + wsUrl += `&sshKeyId=${encodeURIComponent(currentSshKeyId)}`; + } } xterm.write('\r\n\x1b[33mConnecting to terminal...\x1b[0m\r\n'); diff --git a/frontend/src/components/VaultSettings.jsx b/frontend/src/components/VaultSettings.jsx new file mode 100644 index 0000000..5b26b99 --- /dev/null +++ b/frontend/src/components/VaultSettings.jsx @@ -0,0 +1,581 @@ +import React, { useState, useEffect } from 'react'; +import { + Typography, + Box, + Button, + Paper, + TextField, + Alert, + CircularProgress, + Switch, + FormControlLabel, + Chip, + Divider, + Card, + CardContent, + Grid, + InputAdornment, + IconButton, + Tooltip, + Collapse, +} from '@mui/material'; +import { + Save, + Delete, + CheckCircle, + Error as ErrorIcon, + Refresh, + Visibility, + VisibilityOff, + Info, + Storage, + VpnKey, + Dns, + Code, + Settings, +} from '@mui/icons-material'; + +/** + * VaultSettings component - HashiCorp Vault integration configuration + */ +const VaultSettings = () => { + const [config, setConfig] = useState({ + address: '', + token: '', + namespace: '', + mount_path: 'secret', + enabled: false, + }); + const [status, setStatus] = useState(null); + const [loading, setLoading] = useState(true); + const [saving, setSaving] = useState(false); + const [testing, setTesting] = useState(false); + const [error, setError] = useState(null); + const [success, setSuccess] = useState(null); + const [showToken, setShowToken] = useState(false); + const [hasExistingToken, setHasExistingToken] = useState(false); + const [showAdvanced, setShowAdvanced] = useState(false); + const [vaultData, setVaultData] = useState({ + sshKeys: [], + servers: [], + envVars: [], + scripts: [], + }); + const [loadingVaultData, setLoadingVaultData] = useState(false); + + // Fetch current Vault configuration + const fetchConfig = async () => { + try { + setLoading(true); + setError(null); + const response = await fetch('/api/vault/config'); + + if (!response.ok) { + // 404 is expected when no config exists yet + if (response.status === 404) { + setLoading(false); + return; + } + throw new Error('Failed to fetch Vault configuration'); + } + + const text = await response.text(); + if (!text) { + setLoading(false); + return; + } + + const data = JSON.parse(text); + if (data && data.id) { + setConfig({ + address: data.address || '', + token: '', // Token is never returned + namespace: data.namespace || '', + mount_path: data.mount_path || 'secret', + enabled: data.enabled || false, + }); + setHasExistingToken(data.has_token || false); + } + } catch (err) { + console.error('VaultSettings fetchConfig error:', err); + setError(err.message); + } finally { + setLoading(false); + } + }; + + // Fetch Vault connection status + const fetchStatus = async () => { + try { + const response = await fetch('/api/vault/status'); + if (response.ok) { + const text = await response.text(); + if (text) { + const data = JSON.parse(text); + setStatus(data); + } + } + } catch (err) { + console.error('Failed to fetch Vault status:', err); + } + }; + + // Fetch Vault data (keys, servers, etc.) + const fetchVaultData = async () => { + if (!status?.connected) return; + + setLoadingVaultData(true); + try { + const [keysRes, serversRes, envRes, scriptsRes] = await Promise.all([ + fetch('/api/vault/ssh-keys').catch(() => ({ ok: false })), + fetch('/api/vault/servers').catch(() => ({ ok: false })), + fetch('/api/vault/env-variables').catch(() => ({ ok: false })), + fetch('/api/vault/scripts').catch(() => ({ ok: false })), + ]); + + // Parse responses, ensuring we always get arrays (API might return null) + const parseResponse = async (res) => { + if (!res.ok) return []; + try { + const data = await res.json(); + return Array.isArray(data) ? data : []; + } catch { + return []; + } + }; + + const sshKeys = await parseResponse(keysRes); + const servers = await parseResponse(serversRes); + const envVars = await parseResponse(envRes); + const scripts = await parseResponse(scriptsRes); + + setVaultData({ sshKeys, servers, envVars, scripts }); + } catch (err) { + console.error('Failed to fetch Vault data:', err); + } finally { + setLoadingVaultData(false); + } + }; + + // Load config and status on mount + useEffect(() => { + fetchConfig(); + fetchStatus(); + }, []); + + // Fetch Vault data when connected + useEffect(() => { + if (status?.connected) { + fetchVaultData(); + } + }, [status?.connected]); + + // Handle form input changes + const handleChange = (field) => (event) => { + const value = field === 'enabled' ? event.target.checked : event.target.value; + setConfig((prev) => ({ ...prev, [field]: value })); + }; + + // Save Vault configuration + const handleSave = async () => { + try { + setSaving(true); + setError(null); + setSuccess(null); + + // Validate + if (!config.address) { + throw new Error('Vault address is required'); + } + + if (!hasExistingToken && !config.token) { + throw new Error('Vault token is required'); + } + + const response = await fetch('/api/vault/config', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify(config), + }); + + if (!response.ok) { + const text = await response.text(); + throw new Error(text || 'Failed to save configuration'); + } + + setSuccess('Vault configuration saved successfully'); + setHasExistingToken(true); + setConfig((prev) => ({ ...prev, token: '' })); // Clear token from form + fetchStatus(); + } catch (err) { + setError(err.message); + } finally { + setSaving(false); + } + }; + + // Test Vault connection + const handleTestConnection = async () => { + try { + setTesting(true); + setError(null); + setSuccess(null); + + const response = await fetch('/api/vault/test', { + method: 'POST', + }); + + if (!response.ok) { + throw new Error('Failed to test connection'); + } + + const result = await response.json(); + setStatus(result); + + if (result.connected) { + setSuccess('Connection successful!'); + fetchVaultData(); + } else { + setError(result.error || 'Connection failed'); + } + } catch (err) { + setError(err.message); + } finally { + setTesting(false); + } + }; + + // Delete Vault configuration + const handleDelete = async () => { + if (!window.confirm('Are you sure you want to remove the Vault configuration?')) { + return; + } + + try { + setError(null); + setSuccess(null); + + const response = await fetch('/api/vault/config', { + method: 'DELETE', + }); + + if (!response.ok) { + throw new Error('Failed to delete configuration'); + } + + setConfig({ + address: '', + token: '', + namespace: '', + mount_path: 'secret', + enabled: false, + }); + setHasExistingToken(false); + setStatus(null); + setVaultData({ sshKeys: [], servers: [], envVars: [], scripts: [] }); + setSuccess('Vault configuration removed'); + } catch (err) { + setError(err.message); + } + }; + + if (loading) { + return ( + + + + ); + } + + return ( + + + HashiCorp Vault Integration + + + {error && ( + setError(null)}> + {error} + + )} + + {success && ( + setSuccess(null)}> + {success} + + )} + + {/* Connection Status */} + {status && ( + + + Status: + {status.connected ? ( + } + label="Connected" + color="success" + variant="outlined" + /> + ) : status.configured ? ( + } + label={status.enabled ? 'Disconnected' : 'Disabled'} + color={status.enabled ? 'error' : 'default'} + variant="outlined" + /> + ) : ( + + )} + {status.vault_sealed && ( + + )} + + + + + {status.error && ( + + {status.error} + + )} + + )} + + {/* Configuration Form */} + + + + + + setShowToken(!showToken)} + edge="end" + > + {showToken ? : } + + + ), + }} + /> + + + + + + + + + + + + + } + label="Enable Vault Integration" + /> + + + + + + + {hasExistingToken && ( + + )} + + + + + {/* Vault Data Overview */} + {status?.connected && ( + + + Vault Secrets Overview + + + {loadingVaultData ? ( + + + + ) : ( + + + + + + + + {vaultData.sshKeys.length} + + + + SSH Keys + + + + + + + + + + + + {vaultData.servers.length} + + + + Servers + + + + + + + + + + + + {vaultData.envVars.length} + + + + Env Variables + + + + + + + + + + + + {vaultData.scripts.length} + + + + Scripts + + + + + + )} + + + + }> + + Secrets stored in Vault will appear alongside your local SQLite data. + Look for the badge + in SSH Keys, Servers, and Environment Variables lists. + + + + )} + + {/* Setup Instructions */} + {!status?.configured && ( + + + Getting Started with Vault + + + To use HashiCorp Vault integration, you need: + + +

    +
  1. A running HashiCorp Vault server (v1.0+)
  2. +
  3. KV v2 secrets engine enabled
  4. +
  5. A token with read/list permissions for secret/data/web-cli/*
  6. +
+ + + See the documentation for detailed setup instructions and Vault policy examples. + + + )} + + ); +}; + +export default VaultSettings; diff --git a/frontend/src/components/shared/GroupInput.jsx b/frontend/src/components/shared/GroupInput.jsx new file mode 100644 index 0000000..f010ec3 --- /dev/null +++ b/frontend/src/components/shared/GroupInput.jsx @@ -0,0 +1,198 @@ +import React, { useState, useEffect } from 'react'; +import { + Autocomplete, + TextField, + CircularProgress, + Box, + Chip, + createFilterOptions, +} from '@mui/material'; +import { Folder, Add } from '@mui/icons-material'; + +const filter = createFilterOptions(); + +/** + * GroupInput component - autocomplete input for selecting or creating groups + * Allows selecting from existing groups or typing a new group name + * + * @param {Object} props + * @param {string} props.value - Current group value + * @param {function} props.onChange - Callback when group changes + * @param {string} props.resourceType - The resource type to fetch groups from ('servers', 'keys', 'env-variables', 'bash-scripts') + * @param {boolean} props.disabled - Whether the input is disabled + * @param {string} props.helperText - Helper text to display + * @param {string} props.label - Label for the input + */ +const GroupInput = ({ + value = 'default', + onChange, + resourceType = 'servers', + disabled = false, + helperText = 'Select an existing group or type a new one', + label = 'Group', +}) => { + const [groups, setGroups] = useState([]); + const [loading, setLoading] = useState(true); + const [inputValue, setInputValue] = useState(''); + + // Fetch groups from all resource types to get a comprehensive list + const fetchAllGroups = async () => { + try { + setLoading(true); + const resourceTypes = ['servers', 'keys', 'env-variables', 'bash-scripts']; + + const results = await Promise.all( + resourceTypes.map(async (type) => { + try { + const response = await fetch(`/api/${type}/groups`); + if (response.ok) { + return await response.json(); + } + return []; + } catch { + return []; + } + }) + ); + + // Combine and deduplicate groups from all resource types + const allGroups = [...new Set(results.flat())].filter(Boolean).sort(); + + // Ensure 'default' is always in the list + if (!allGroups.includes('default')) { + allGroups.unshift('default'); + } + + setGroups(allGroups); + } catch (err) { + console.error('Failed to fetch groups:', err); + setGroups(['default']); + } finally { + setLoading(false); + } + }; + + // Load groups on component mount + useEffect(() => { + fetchAllGroups(); + }, []); + + // Handle selection change + const handleChange = (event, newValue) => { + if (typeof newValue === 'string') { + // User typed and pressed enter + onChange(newValue); + } else if (newValue && newValue.inputValue) { + // User selected "Add new group" option + onChange(newValue.inputValue); + } else if (newValue) { + // User selected an existing option + onChange(newValue); + } else { + // Cleared + onChange('default'); + } + }; + + return ( + { + setInputValue(newInputValue); + }} + filterOptions={(options, params) => { + const filtered = filter(options, params); + + const { inputValue } = params; + // Suggest creating a new group if the input doesn't match any existing group + const isExisting = options.some( + (option) => inputValue.toLowerCase() === option.toLowerCase() + ); + if (inputValue !== '' && !isExisting) { + filtered.push({ + inputValue, + title: `Add "${inputValue}"`, + }); + } + + return filtered; + }} + selectOnFocus + clearOnBlur + handleHomeEndKeys + freeSolo + options={groups} + getOptionLabel={(option) => { + // Value selected with enter from the input + if (typeof option === 'string') { + return option; + } + // Add new option created dynamically + if (option.inputValue) { + return option.inputValue; + } + return option; + }} + renderOption={(props, option) => { + const { key, ...otherProps } = props; + if (typeof option === 'object' && option.inputValue) { + // "Add new group" option + return ( + + + {option.title} + + ); + } + // Existing group option + return ( + + + {option} + {option === 'default' && ( + + )} + + ); + }} + loading={loading} + disabled={disabled} + renderInput={(params) => ( + + {loading ? : null} + {params.InputProps.endAdornment} + + ), + }} + /> + )} + /> + ); +}; + +export default GroupInput; diff --git a/frontend/src/components/shared/GroupSelector.jsx b/frontend/src/components/shared/GroupSelector.jsx new file mode 100644 index 0000000..659d873 --- /dev/null +++ b/frontend/src/components/shared/GroupSelector.jsx @@ -0,0 +1,140 @@ +import React, { useState, useEffect } from 'react'; +import { + FormControl, + InputLabel, + Select, + MenuItem, + Chip, + Box, + CircularProgress, + Typography, +} from '@mui/material'; +import { Folder, FolderOpen } from '@mui/icons-material'; + +/** + * GroupSelector component - allows filtering resources by group + * @param {Object} props + * @param {string} props.resourceType - The resource type ('servers', 'keys', 'env-variables', 'bash-scripts') + * @param {string} props.selectedGroup - Currently selected group ('all' for all groups) + * @param {function} props.onGroupChange - Callback when group selection changes + * @param {string} props.size - Select size ('small' or 'medium'), default 'small' + * @param {boolean} props.showCount - Show count of groups, default false + */ +const GroupSelector = ({ + resourceType, + selectedGroup, + onGroupChange, + size = 'small', + showCount = false, +}) => { + const [groups, setGroups] = useState([]); + const [loading, setLoading] = useState(true); + const [error, setError] = useState(null); + + // Fetch groups from API + const fetchGroups = async () => { + try { + setLoading(true); + setError(null); + const response = await fetch(`/api/${resourceType}/groups`); + + if (!response.ok) { + throw new Error('Failed to fetch groups'); + } + + const data = await response.json(); + setGroups(data || []); + } catch (err) { + setError(err.message); + setGroups([]); + } finally { + setLoading(false); + } + }; + + // Load groups on component mount or when resourceType changes + useEffect(() => { + fetchGroups(); + }, [resourceType]); + + // Handle selection change + const handleChange = (event) => { + onGroupChange(event.target.value); + }; + + if (loading) { + return ( + + + + Loading groups... + + + ); + } + + if (error) { + return ( + + Failed to load groups + + ); + } + + // If no groups found, don't render the selector + if (groups.length === 0) { + return null; + } + + return ( + + + + + Group + + + + + ); +}; + +export default GroupSelector; diff --git a/frontend/src/components/shared/SourceChip.jsx b/frontend/src/components/shared/SourceChip.jsx new file mode 100644 index 0000000..a9b9eec --- /dev/null +++ b/frontend/src/components/shared/SourceChip.jsx @@ -0,0 +1,35 @@ +import React from 'react'; +import { Chip, Tooltip } from '@mui/material'; +import { Storage, Lock } from '@mui/icons-material'; + +/** + * SourceChip component - displays the data source (sqlite or vault) + * @param {Object} props + * @param {string} props.source - The data source ('sqlite' or 'vault') + * @param {string} props.size - Chip size ('small' or 'medium'), default 'small' + */ +const SourceChip = ({ source, size = 'small' }) => { + if (!source) return null; + + const isVault = source === 'vault'; + + return ( + + : } + label={isVault ? 'Vault' : 'Local'} + size={size} + variant="outlined" + color={isVault ? 'secondary' : 'default'} + sx={{ + fontWeight: 500, + '& .MuiChip-icon': { + fontSize: '1rem', + }, + }} + /> + + ); +}; + +export default SourceChip; diff --git a/frontend/src/components/shared/StorageSelector.jsx b/frontend/src/components/shared/StorageSelector.jsx new file mode 100644 index 0000000..9bb03e5 --- /dev/null +++ b/frontend/src/components/shared/StorageSelector.jsx @@ -0,0 +1,165 @@ +import React, { useState, useEffect } from 'react'; +import { + FormControl, + FormLabel, + RadioGroup, + FormControlLabel, + Radio, + Box, + Chip, + Typography, +} from '@mui/material'; +import { Storage, Cloud } from '@mui/icons-material'; + +/** + * Vault Logo SVG for the selector + */ +const VaultLogo = ({ size = 16 }) => ( + + + + + +); + +/** + * StorageSelector component - allows choosing between local SQLite and Vault storage + * Only shows Vault option when Vault is configured and connected + * + * @param {string} value - Current storage value ('local' or 'vault') + * @param {function} onChange - Callback when storage changes + * @param {boolean} disabled - Whether the selector is disabled + */ +const StorageSelector = ({ value = 'local', onChange, disabled = false }) => { + const [vaultStatus, setVaultStatus] = useState(null); + const [loading, setLoading] = useState(true); + + // Fetch Vault status to determine if Vault option should be available + useEffect(() => { + const fetchVaultStatus = async () => { + try { + const response = await fetch('/api/vault/status'); + if (response.ok) { + const data = await response.json(); + setVaultStatus(data); + } else { + setVaultStatus(null); + } + } catch (err) { + console.debug('Failed to fetch vault status:', err); + setVaultStatus(null); + } finally { + setLoading(false); + } + }; + + fetchVaultStatus(); + }, []); + + // Check if Vault is available (configured, enabled, and connected) + const isVaultAvailable = vaultStatus?.configured && vaultStatus?.enabled && vaultStatus?.connected; + + // If Vault is not available and current value is 'vault', reset to 'local' + useEffect(() => { + if (!loading && !isVaultAvailable && value === 'vault') { + onChange('local'); + } + }, [loading, isVaultAvailable, value, onChange]); + + // Don't show selector if Vault is not available - just use local storage + if (loading) { + return null; + } + + if (!isVaultAvailable) { + return null; + } + + return ( + + + Storage Location + + onChange(e.target.value)} + sx={{ gap: 2 }} + > + } + label={ + + + Local Database + + } + sx={{ + border: '1px solid', + borderColor: value === 'local' ? 'primary.main' : 'divider', + borderRadius: 1, + px: 2, + py: 0.5, + m: 0, + backgroundColor: value === 'local' ? 'action.selected' : 'transparent', + transition: 'all 0.2s ease', + '&:hover': { + borderColor: 'primary.main', + backgroundColor: 'action.hover', + }, + }} + /> + } + label={ + + + HashiCorp Vault + + + } + sx={{ + border: '1px solid', + borderColor: value === 'vault' ? 'primary.main' : 'divider', + borderRadius: 1, + px: 2, + py: 0.5, + m: 0, + backgroundColor: value === 'vault' ? 'action.selected' : 'transparent', + transition: 'all 0.2s ease', + '&:hover': { + borderColor: 'primary.main', + backgroundColor: 'action.hover', + }, + }} + /> + + + ); +}; + +export default StorageSelector; diff --git a/frontend/src/components/shared/VaultIcon.jsx b/frontend/src/components/shared/VaultIcon.jsx new file mode 100644 index 0000000..8111025 --- /dev/null +++ b/frontend/src/components/shared/VaultIcon.jsx @@ -0,0 +1,142 @@ +import React, { useState, useEffect, useCallback } from 'react'; +import { Box, Tooltip, Typography, Chip } from '@mui/material'; +import { useNavigate } from 'react-router-dom'; + +/** + * HashiCorp Vault Logo SVG + * Simplified filled vault logo for better visibility + */ +const VaultLogo = ({ color = 'currentColor', size = 20 }) => ( + + {/* Outer hexagon outline */} + + {/* Middle hexagon */} + + {/* Inner filled hexagon */} + + +); + +/** + * VaultIcon component - displays Vault connection status in header + * Only visible when Vault is configured in admin panel + * Shows green when connected, red when disconnected, orange when sealed + */ +const VaultIcon = ({ sx = {} }) => { + const navigate = useNavigate(); + const [vaultStatus, setVaultStatus] = useState(null); + + // Fetch Vault status + const fetchVaultStatus = useCallback(async () => { + try { + const response = await fetch('/api/vault/status'); + if (response.ok) { + const data = await response.json(); + setVaultStatus(data); + } else { + setVaultStatus(null); + } + } catch (err) { + // Silently fail - Vault might not be configured + console.debug('Failed to fetch vault status:', err); + setVaultStatus(null); + } + }, []); + + // Initial fetch and periodic refresh + useEffect(() => { + fetchVaultStatus(); + // Refresh every 30 seconds + const interval = setInterval(fetchVaultStatus, 30000); + return () => clearInterval(interval); + }, [fetchVaultStatus]); + + // Don't render if Vault is not configured + if (!vaultStatus || !vaultStatus.configured) { + return null; + } + + // Determine status color, text, and tooltip + const getStatusProps = () => { + if (!vaultStatus.enabled) { + return { + color: '#9e9e9e', // grey + statusText: 'Disabled', + tooltip: 'Vault integration is disabled', + }; + } + + if (vaultStatus.vault_sealed) { + return { + color: '#ff9800', // orange/warning + statusText: 'Sealed', + tooltip: 'Vault is sealed - secrets are inaccessible', + }; + } + + if (vaultStatus.connected) { + return { + color: '#4caf50', // green/success + statusText: 'Connected', + tooltip: `Vault connected: ${vaultStatus.address || 'HashiCorp Vault'}`, + }; + } + + return { + color: '#f44336', // red/error + statusText: 'Disconnected', + tooltip: vaultStatus.error || 'Unable to connect to Vault', + }; + }; + + const { color, statusText, tooltip } = getStatusProps(); + + return ( + + } + label={statusText} + size="small" + onClick={() => navigate('/admin', { state: { tab: 4 } })} + sx={{ + cursor: 'pointer', + backgroundColor: 'transparent', + border: `1px solid ${color}`, + color: color, + fontWeight: 500, + fontSize: '0.75rem', + height: 28, + transition: 'all 0.2s ease', + '& .MuiChip-icon': { + color: color, + marginLeft: '8px', + }, + '&:hover': { + backgroundColor: `${color}20`, + transform: 'scale(1.02)', + }, + ...sx, + }} + /> + + ); +}; + +export default VaultIcon; diff --git a/go.mod b/go.mod index 6fa6cf7..b2130c2 100644 --- a/go.mod +++ b/go.mod @@ -11,10 +11,12 @@ require ( require ( github.com/KyleBanks/depth v1.2.1 // indirect + github.com/cenkalti/backoff/v4 v4.3.0 // indirect github.com/cpuguy83/go-md2man/v2 v2.0.7 // indirect github.com/creack/pty v1.1.21 // indirect github.com/dustin/go-humanize v1.0.1 // indirect github.com/fsnotify/fsnotify v1.9.0 // indirect + github.com/go-jose/go-jose/v4 v4.1.1 // indirect github.com/go-openapi/jsonpointer v0.22.4 // indirect github.com/go-openapi/jsonreference v0.21.4 // indirect github.com/go-openapi/spec v0.22.2 // indirect @@ -29,13 +31,26 @@ require ( github.com/go-viper/mapstructure/v2 v2.4.0 // indirect github.com/google/uuid v1.6.0 // indirect github.com/gorilla/websocket v1.5.3 // indirect + github.com/hashicorp/errwrap v1.1.0 // indirect + github.com/hashicorp/go-cleanhttp v0.5.2 // indirect + github.com/hashicorp/go-multierror v1.1.1 // indirect + github.com/hashicorp/go-retryablehttp v0.7.8 // indirect + github.com/hashicorp/go-rootcerts v1.0.2 // indirect + github.com/hashicorp/go-secure-stdlib/parseutil v0.2.0 // indirect + github.com/hashicorp/go-secure-stdlib/strutil v0.1.2 // indirect + github.com/hashicorp/go-sockaddr v1.0.7 // indirect + github.com/hashicorp/hcl v1.0.1-vault-7 // indirect + github.com/hashicorp/vault/api v1.22.0 // indirect github.com/josharian/intern v1.0.0 // indirect github.com/mailru/easyjson v0.9.1 // indirect github.com/mattn/go-isatty v0.0.20 // indirect + github.com/mitchellh/go-homedir v1.1.0 // indirect + github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/ncruces/go-strftime v0.1.9 // indirect github.com/pelletier/go-toml/v2 v2.2.4 // indirect github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect + github.com/ryanuber/go-glob v1.0.0 // indirect github.com/sagikazarmark/locafero v0.11.0 // indirect github.com/shurcooL/sanitized_anchor_name v1.0.0 // indirect github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8 // indirect @@ -57,6 +72,7 @@ require ( golang.org/x/sync v0.19.0 // indirect golang.org/x/sys v0.39.0 // indirect golang.org/x/text v0.32.0 // indirect + golang.org/x/time v0.12.0 // indirect golang.org/x/tools v0.40.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect modernc.org/libc v1.66.10 // indirect diff --git a/go.sum b/go.sum index 99db067..3f929df 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,7 @@ github.com/KyleBanks/depth v1.2.1 h1:5h8fQADFrWtarTdtDudMmGsC7GPbOAu6RVB3ffsVFHc= github.com/KyleBanks/depth v1.2.1/go.mod h1:jzSb9d0L43HxTQfT+oSA1EEp2q+ne2uh6XgeJcm8brE= +github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8= +github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= github.com/cpuguy83/go-md2man/v2 v2.0.7 h1:zbFlGlXEAKlwXpmvle3d8Oe3YnkKIK4xSRTd3sHPnBo= github.com/cpuguy83/go-md2man/v2 v2.0.7/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g= github.com/creack/pty v1.1.21 h1:1/QdRyBaHHJP61QkWMXlOIBfsgdDeeKfK8SYVUWJKf0= @@ -9,6 +11,8 @@ github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkp github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S9k= github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0= +github.com/go-jose/go-jose/v4 v4.1.1 h1:JYhSgy4mXXzAdF3nUx3ygx347LRXJRrpgyU3adRmkAI= +github.com/go-jose/go-jose/v4 v4.1.1/go.mod h1:BdsZGqgdO3b6tTc6LSE56wcDbMMLuPsw5d4ZD5f94kA= github.com/go-openapi/jsonpointer v0.22.4 h1:dZtK82WlNpVLDW2jlA1YCiVJFVqkED1MegOUy9kR5T4= github.com/go-openapi/jsonpointer v0.22.4/go.mod h1:elX9+UgznpFhgBuaMQ7iu4lvvX1nvNsesQ3oxmYTw80= github.com/go-openapi/jsonreference v0.21.4 h1:24qaE2y9bx/q3uRK/qN+TDwbok1NhbSmGjjySRCHtC8= @@ -41,6 +45,27 @@ github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY= github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ= github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg= github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= +github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= +github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= +github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= +github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= +github.com/hashicorp/go-retryablehttp v0.7.8 h1:ylXZWnqa7Lhqpk0L1P1LzDtGcCR0rPVUrx/c8Unxc48= +github.com/hashicorp/go-retryablehttp v0.7.8/go.mod h1:rjiScheydd+CxvumBsIrFKlx3iS0jrZ7LvzFGFmuKbw= +github.com/hashicorp/go-rootcerts v1.0.2 h1:jzhAVGtqPKbwpyCPELlgNWhE1znq+qwJtW5Oi2viEzc= +github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= +github.com/hashicorp/go-secure-stdlib/parseutil v0.2.0 h1:U+kC2dOhMFQctRfhK0gRctKAPTloZdMU5ZJxaesJ/VM= +github.com/hashicorp/go-secure-stdlib/parseutil v0.2.0/go.mod h1:Ll013mhdmsVDuoIXVfBtvgGJsXDYkTw1kooNcoCXuE0= +github.com/hashicorp/go-secure-stdlib/strutil v0.1.2 h1:kes8mmyCpxJsI7FTwtzRqEy9CdjCtrXrXGuOpxEA7Ts= +github.com/hashicorp/go-secure-stdlib/strutil v0.1.2/go.mod h1:Gou2R9+il93BqX25LAKCLuM+y9U2T4hlwvT1yprcna4= +github.com/hashicorp/go-sockaddr v1.0.7 h1:G+pTkSO01HpR5qCxg7lxfsFEZaG+C0VssTy/9dbT+Fw= +github.com/hashicorp/go-sockaddr v1.0.7/go.mod h1:FZQbEYa1pxkQ7WLpyXJ6cbjpT8q0YgQaK/JakXqGyWw= +github.com/hashicorp/hcl v1.0.1-vault-7 h1:ag5OxFVy3QYTFTJODRzTKVZ6xvdfLLCA1cy/Y6xGI0I= +github.com/hashicorp/hcl v1.0.1-vault-7/go.mod h1:XYhtn6ijBSAj6n4YqAaf7RBPS4I06AItNorpy+MoQNM= +github.com/hashicorp/vault/api v1.22.0 h1:+HYFquE35/B74fHoIeXlZIP2YADVboaPjaSicHEZiH0= +github.com/hashicorp/vault/api v1.22.0/go.mod h1:IUZA2cDvr4Ok3+NtK2Oq/r+lJeXkeCrHRmqdyWfpmGM= github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= @@ -48,6 +73,10 @@ github.com/mailru/easyjson v0.9.1 h1:LbtsOm5WAswyWbvTEOqhypdPeZzHavpZx96/n553mR8 github.com/mailru/easyjson v0.9.1/go.mod h1:1+xMtQp2MRNVL/V1bOzuP3aP8VNwRW55fQUto+XFtTU= github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= +github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= +github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/ncruces/go-strftime v0.1.9 h1:bY0MQC28UADQmHmaF5dgpLmImcShSi2kHU9XLdhx/f4= github.com/ncruces/go-strftime v0.1.9/go.mod h1:Fwc5htZGVVkseilnfgOVb9mKy6w1naJmn9CehxcKcls= github.com/pelletier/go-toml/v2 v2.2.4 h1:mye9XuhQ6gvn5h28+VilKrrPoQVanw5PMw/TB0t5Ec4= @@ -59,6 +88,8 @@ github.com/rs/cors v1.10.1 h1:L0uuZVXIKlI1SShY2nhFfo44TYvDPQ1w4oFkUJNfhyo= github.com/rs/cors v1.10.1/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/ryanuber/go-glob v1.0.0 h1:iQh3xXAumdQ+4Ufa5b25cRpC5TYKlno6hsv6Cb3pkBk= +github.com/ryanuber/go-glob v1.0.0/go.mod h1:807d1WSdnB0XRJzKNil9Om6lcp/3a0v4qIHxIXzX/Yc= github.com/sagikazarmark/locafero v0.11.0 h1:1iurJgmM9G3PA/I+wWYIOw/5SyBtxapeHDcg+AAIFXc= github.com/sagikazarmark/locafero v0.11.0/go.mod h1:nVIGvgyzw595SUSUE6tvCp3YYTeHs15MvlmU87WwIik= github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo= @@ -140,6 +171,8 @@ golang.org/x/text v0.28.0 h1:rhazDwis8INMIwQ4tpjLDzUhx6RlXqZNPEM0huQojng= golang.org/x/text v0.28.0/go.mod h1:U8nCwOR8jO/marOQ0QbDiOngZVEBB7MAiitBuMjXiNU= golang.org/x/text v0.32.0 h1:ZD01bjUt1FQ9WJ0ClOL5vxgxOI/sVCNgX1YtKwcY0mU= golang.org/x/text v0.32.0/go.mod h1:o/rUWzghvpD5TXrTIBuJU77MTaN0ljMWE47kxGJQ7jY= +golang.org/x/time v0.12.0 h1:ScB/8o8olJvc+CQPWrK3fPZNfh7qgwCrY0zJmoEQLSE= +golang.org/x/time v0.12.0/go.mod h1:CDIdPxbZBQxdj6cxyCIdrNogrJKMJ7pr37NYpMcMDSg= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= diff --git a/internal/audit/audit.go b/internal/audit/audit.go new file mode 100644 index 0000000..c9b6f90 --- /dev/null +++ b/internal/audit/audit.go @@ -0,0 +1,302 @@ +package audit + +import ( + "encoding/json" + "log" + "net/http" + "os" + "sync" + "time" +) + +// EventType represents the type of audited event +type EventType string + +const ( + EventTypeCommandExecution EventType = "COMMAND_EXECUTION" + EventTypeScriptExecution EventType = "SCRIPT_EXECUTION" + EventTypeSSHConnection EventType = "SSH_CONNECTION" + EventTypeTerminalSession EventType = "TERMINAL_SESSION" + EventTypeConfigChange EventType = "CONFIG_CHANGE" + EventTypeAuthAttempt EventType = "AUTH_ATTEMPT" +) + +// EventOutcome represents the result of an audited event +type EventOutcome string + +const ( + OutcomeSuccess EventOutcome = "SUCCESS" + OutcomeFailure EventOutcome = "FAILURE" + OutcomeDenied EventOutcome = "DENIED" +) + +// AuditEvent represents a single audit log entry +type AuditEvent struct { + Timestamp time.Time `json:"timestamp"` + EventType EventType `json:"event_type"` + Outcome EventOutcome `json:"outcome"` + Actor string `json:"actor"` // Username or "anonymous" + SourceIP string `json:"source_ip"` // Client IP address + Target string `json:"target"` // What was acted upon (e.g., server name, script name) + Command string `json:"command,omitempty"` + User string `json:"user,omitempty"` // Execution user (e.g., root, ubuntu) + Server string `json:"server,omitempty"` // Target server for remote commands + ExitCode *int `json:"exit_code,omitempty"` // Command exit code + Duration int64 `json:"duration_ms,omitempty"` // Execution duration in milliseconds + ErrorMsg string `json:"error,omitempty"` // Error message if failed + Metadata map[string]string `json:"metadata,omitempty"` // Additional context +} + +// Logger handles audit logging +type Logger struct { + mu sync.Mutex + enabled bool + file *os.File + filePath string +} + +var ( + defaultLogger *Logger + once sync.Once +) + +// Initialize creates or returns the singleton audit logger +func Initialize(filePath string) (*Logger, error) { + var initErr error + once.Do(func() { + logger := &Logger{ + enabled: filePath != "", + filePath: filePath, + } + + if filePath != "" { + file, err := os.OpenFile(filePath, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0600) + if err != nil { + initErr = err + log.Printf("Warning: Failed to open audit log file %s: %v", filePath, err) + logger.enabled = false + } else { + logger.file = file + } + } + + defaultLogger = logger + }) + + return defaultLogger, initErr +} + +// GetLogger returns the default audit logger +func GetLogger() *Logger { + if defaultLogger == nil { + // Return a disabled logger if not initialized + return &Logger{enabled: false} + } + return defaultLogger +} + +// Close closes the audit log file +func (l *Logger) Close() error { + l.mu.Lock() + defer l.mu.Unlock() + + if l.file != nil { + return l.file.Close() + } + return nil +} + +// Log writes an audit event +func (l *Logger) Log(event *AuditEvent) { + if !l.enabled || l.file == nil { + return + } + + // Ensure timestamp is set + if event.Timestamp.IsZero() { + event.Timestamp = time.Now().UTC() + } + + l.mu.Lock() + defer l.mu.Unlock() + + data, err := json.Marshal(event) + if err != nil { + log.Printf("Warning: Failed to marshal audit event: %v", err) + return + } + + // Append newline for JSONL format + data = append(data, '\n') + + if _, err := l.file.Write(data); err != nil { + log.Printf("Warning: Failed to write audit event: %v", err) + } +} + +// LogCommandExecution logs a command execution event +func (l *Logger) LogCommandExecution(r *http.Request, command, user, server string, exitCode int, durationMs int64, err error) { + event := &AuditEvent{ + EventType: EventTypeCommandExecution, + Actor: getActorFromRequest(r), + SourceIP: getClientIP(r), + Target: server, + Command: sanitizeCommand(command), + User: user, + Server: server, + ExitCode: &exitCode, + Duration: durationMs, + } + + if err != nil { + event.Outcome = OutcomeFailure + event.ErrorMsg = err.Error() + } else if exitCode != 0 { + event.Outcome = OutcomeFailure + } else { + event.Outcome = OutcomeSuccess + } + + l.Log(event) +} + +// LogScriptExecution logs a script execution event +func (l *Logger) LogScriptExecution(r *http.Request, scriptName, user, server string, exitCode int, durationMs int64, err error) { + event := &AuditEvent{ + EventType: EventTypeScriptExecution, + Actor: getActorFromRequest(r), + SourceIP: getClientIP(r), + Target: scriptName, + User: user, + Server: server, + ExitCode: &exitCode, + Duration: durationMs, + } + + if err != nil { + event.Outcome = OutcomeFailure + event.ErrorMsg = err.Error() + } else if exitCode != 0 { + event.Outcome = OutcomeFailure + } else { + event.Outcome = OutcomeSuccess + } + + l.Log(event) +} + +// LogTerminalSession logs a terminal session start/end +func (l *Logger) LogTerminalSession(r *http.Request, server, user string, outcome EventOutcome, metadata map[string]string) { + event := &AuditEvent{ + EventType: EventTypeTerminalSession, + Outcome: outcome, + Actor: getActorFromRequest(r), + SourceIP: getClientIP(r), + Target: server, + User: user, + Server: server, + Metadata: metadata, + } + + l.Log(event) +} + +// LogAuthAttempt logs an authentication attempt +func (l *Logger) LogAuthAttempt(r *http.Request, outcome EventOutcome, method string) { + event := &AuditEvent{ + EventType: EventTypeAuthAttempt, + Outcome: outcome, + Actor: getActorFromRequest(r), + SourceIP: getClientIP(r), + Target: r.URL.Path, + Metadata: map[string]string{ + "method": method, + }, + } + + l.Log(event) +} + +// LogConfigChange logs a configuration change +func (l *Logger) LogConfigChange(r *http.Request, configType, action string, outcome EventOutcome) { + event := &AuditEvent{ + EventType: EventTypeConfigChange, + Outcome: outcome, + Actor: getActorFromRequest(r), + SourceIP: getClientIP(r), + Target: configType, + Metadata: map[string]string{ + "action": action, + }, + } + + l.Log(event) +} + +// getActorFromRequest extracts the actor (username) from the request +func getActorFromRequest(r *http.Request) string { + if r == nil { + return "system" + } + + // Check for basic auth username + if username, _, ok := r.BasicAuth(); ok && username != "" { + return username + } + + // Check for custom header (if using token-based auth) + if actor := r.Header.Get("X-Auth-User"); actor != "" { + return actor + } + + return "anonymous" +} + +// getClientIP extracts the client IP from the request +func getClientIP(r *http.Request) string { + if r == nil { + return "" + } + + // Check X-Forwarded-For header first (for proxied requests) + if xff := r.Header.Get("X-Forwarded-For"); xff != "" { + // Take the first IP in the chain + for i := 0; i < len(xff); i++ { + if xff[i] == ',' { + return xff[:i] + } + } + return xff + } + + // Check X-Real-IP header + if xri := r.Header.Get("X-Real-IP"); xri != "" { + return xri + } + + // Fall back to RemoteAddr + remoteAddr := r.RemoteAddr + // Strip port if present + for i := len(remoteAddr) - 1; i >= 0; i-- { + if remoteAddr[i] == ':' { + return remoteAddr[:i] + } + if remoteAddr[i] == ']' { + // IPv6 address with brackets + break + } + } + + return remoteAddr +} + +// sanitizeCommand removes potentially sensitive data from commands +// This is a basic implementation - extend as needed +func sanitizeCommand(cmd string) string { + // For audit purposes, we log the command but could add sanitization + // to remove obvious passwords or tokens if needed + if len(cmd) > 1000 { + return cmd[:1000] + "...[truncated]" + } + return cmd +} diff --git a/internal/config/config.go b/internal/config/config.go index 851ceee..5e0d2d1 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -8,6 +8,7 @@ import ( "path/filepath" "strconv" "sync" + "time" "github.com/spf13/viper" ) @@ -27,6 +28,65 @@ type Config struct { TLSCertPath string // Path to TLS certificate file (enables HTTPS) TLSKeyPath string // Path to TLS private key file RequireHTTPS bool // Require HTTPS when auth is enabled (reject HTTP requests) + + // Timeout configurations (all in seconds) + ReadTimeout int // HTTP server read timeout (default: 30) + WriteTimeout int // HTTP server write timeout (default: 600 for streaming) + IdleTimeout int // HTTP server idle timeout (default: 60) + VaultTimeout int // Vault operation timeout (default: 30) + CommandTimeout int // Command execution timeout (default: 300) + SSHConnectTimeout int // SSH connection timeout (default: 30) + + // Audit logging + AuditLogPath string // Path to audit log file (empty to disable) +} + +// GetReadTimeout returns the read timeout as a time.Duration +func (c *Config) GetReadTimeout() time.Duration { + if c.ReadTimeout <= 0 { + return 30 * time.Second + } + return time.Duration(c.ReadTimeout) * time.Second +} + +// GetWriteTimeout returns the write timeout as a time.Duration +func (c *Config) GetWriteTimeout() time.Duration { + if c.WriteTimeout <= 0 { + return 10 * time.Minute // Default for streaming + } + return time.Duration(c.WriteTimeout) * time.Second +} + +// GetIdleTimeout returns the idle timeout as a time.Duration +func (c *Config) GetIdleTimeout() time.Duration { + if c.IdleTimeout <= 0 { + return 60 * time.Second + } + return time.Duration(c.IdleTimeout) * time.Second +} + +// GetVaultTimeout returns the Vault timeout as a time.Duration +func (c *Config) GetVaultTimeout() time.Duration { + if c.VaultTimeout <= 0 { + return 30 * time.Second + } + return time.Duration(c.VaultTimeout) * time.Second +} + +// GetCommandTimeout returns the command execution timeout as a time.Duration +func (c *Config) GetCommandTimeout() time.Duration { + if c.CommandTimeout <= 0 { + return 5 * time.Minute + } + return time.Duration(c.CommandTimeout) * time.Second +} + +// GetSSHConnectTimeout returns the SSH connection timeout as a time.Duration +func (c *Config) GetSSHConnectTimeout() time.Duration { + if c.SSHConnectTimeout <= 0 { + return 30 * time.Second + } + return time.Duration(c.SSHConnectTimeout) * time.Second } // Load parses command-line flags and environment variables to load configuration @@ -43,6 +103,15 @@ func Load() *Config { v.SetDefault("tls_key_path", "") v.SetDefault("require_https", false) + // Timeout defaults (in seconds) + v.SetDefault("read_timeout", 30) + v.SetDefault("write_timeout", 600) // 10 minutes for streaming + v.SetDefault("idle_timeout", 60) + v.SetDefault("vault_timeout", 30) + v.SetDefault("command_timeout", 300) // 5 minutes + v.SetDefault("ssh_connect_timeout", 30) + v.SetDefault("audit_log_path", "") // Empty to disable audit logging + // Enable environment variable support v.SetEnvPrefix("WEBCLI") // Environment variables will be WEBCLI_PORT, WEBCLI_HOST, etc. v.AutomaticEnv() @@ -57,6 +126,17 @@ func Load() *Config { v.BindEnv("tls_key_path", "TLS_KEY_PATH", "WEBCLI_TLS_KEY_PATH") v.BindEnv("require_https", "REQUIRE_HTTPS", "WEBCLI_REQUIRE_HTTPS") + // Timeout environment variables + v.BindEnv("read_timeout", "READ_TIMEOUT", "WEBCLI_READ_TIMEOUT") + v.BindEnv("write_timeout", "WRITE_TIMEOUT", "WEBCLI_WRITE_TIMEOUT") + v.BindEnv("idle_timeout", "IDLE_TIMEOUT", "WEBCLI_IDLE_TIMEOUT") + v.BindEnv("vault_timeout", "VAULT_TIMEOUT", "WEBCLI_VAULT_TIMEOUT") + v.BindEnv("command_timeout", "COMMAND_TIMEOUT", "WEBCLI_COMMAND_TIMEOUT") + v.BindEnv("ssh_connect_timeout", "SSH_CONNECT_TIMEOUT", "WEBCLI_SSH_CONNECT_TIMEOUT") + + // Audit logging + v.BindEnv("audit_log_path", "AUDIT_LOG_PATH", "WEBCLI_AUDIT_LOG_PATH") + // Config file support (optional) v.SetConfigName("config") // config.yaml, config.json, config.toml v.SetConfigType("yaml") // default to yaml @@ -128,6 +208,17 @@ func Load() *Config { TLSCertPath: v.GetString("tls_cert_path"), TLSKeyPath: v.GetString("tls_key_path"), RequireHTTPS: v.GetBool("require_https"), + + // Timeout values + ReadTimeout: v.GetInt("read_timeout"), + WriteTimeout: v.GetInt("write_timeout"), + IdleTimeout: v.GetInt("idle_timeout"), + VaultTimeout: v.GetInt("vault_timeout"), + CommandTimeout: v.GetInt("command_timeout"), + SSHConnectTimeout: v.GetInt("ssh_connect_timeout"), + + // Audit logging + AuditLogPath: v.GetString("audit_log_path"), } } diff --git a/internal/database/database_test.go b/internal/database/database_test.go index b2b7f66..736993f 100644 --- a/internal/database/database_test.go +++ b/internal/database/database_test.go @@ -70,8 +70,8 @@ func TestDatabaseCreation(t *testing.T) { t.Fatalf("Failed to get version: %v", err) } - if version != 14 { - t.Errorf("Expected schema version 14, got %d", version) + if version != 15 { + t.Errorf("Expected schema version 15, got %d", version) } // Verify all tables exist @@ -84,6 +84,7 @@ func TestDatabaseCreation(t *testing.T) { "local_users", "env_variables", "bash_scripts", + "vault_config", } for _, table := range tables { diff --git a/internal/database/migrations.go b/internal/database/migrations.go index 2f2051f..3d44512 100644 --- a/internal/database/migrations.go +++ b/internal/database/migrations.go @@ -199,6 +199,37 @@ var migrations = []Migration{ CREATE INDEX IF NOT EXISTS idx_script_presets_script_id ON script_presets(script_id); `, }, + { + Version: 15, + Description: "Create vault_config table for HashiCorp Vault integration", + SQL: ` + CREATE TABLE IF NOT EXISTS vault_config ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + address TEXT NOT NULL, + token_encrypted BLOB NOT NULL, + namespace TEXT, + mount_path TEXT NOT NULL DEFAULT 'secret', + enabled INTEGER NOT NULL DEFAULT 1, + created_at DATETIME NOT NULL, + updated_at DATETIME NOT NULL + ); + `, + }, + { + Version: 16, + Description: "Add group_name column to resource tables for grouping/categorization", + SQL: ` + ALTER TABLE servers ADD COLUMN group_name TEXT NOT NULL DEFAULT 'default'; + ALTER TABLE ssh_keys ADD COLUMN group_name TEXT NOT NULL DEFAULT 'default'; + ALTER TABLE env_variables ADD COLUMN group_name TEXT NOT NULL DEFAULT 'default'; + ALTER TABLE bash_scripts ADD COLUMN group_name TEXT NOT NULL DEFAULT 'default'; + + CREATE INDEX IF NOT EXISTS idx_servers_group ON servers(group_name); + CREATE INDEX IF NOT EXISTS idx_ssh_keys_group ON ssh_keys(group_name); + CREATE INDEX IF NOT EXISTS idx_env_variables_group ON env_variables(group_name); + CREATE INDEX IF NOT EXISTS idx_bash_scripts_group ON bash_scripts(group_name); + `, + }, } // runMigrations executes all pending migrations diff --git a/internal/middleware/auth.go b/internal/middleware/auth.go index 81eb7a5..bcbf85b 100644 --- a/internal/middleware/auth.go +++ b/internal/middleware/auth.go @@ -2,11 +2,15 @@ package middleware import ( "crypto/subtle" + "errors" "net/http" "os" "strings" ) +// ErrAuthMisconfigured is returned when authentication is enabled but credentials are missing +var ErrAuthMisconfigured = errors.New("authentication is enabled but no credentials are configured: set AUTH_USERNAME and AUTH_PASSWORD, or AUTH_API_TOKEN") + // AuthConfig holds authentication configuration type AuthConfig struct { Enabled bool @@ -29,6 +33,24 @@ func LoadAuthConfig() *AuthConfig { } } +// Validate checks if the authentication configuration is valid +// Returns an error if auth is enabled but no credentials are configured +func (c *AuthConfig) Validate() error { + if !c.Enabled { + return nil // Auth disabled, no validation needed + } + + // When auth is enabled, at least one auth method must be configured + hasBasicAuth := c.Username != "" && c.Password != "" + hasAPIToken := c.APIToken != "" + + if !hasBasicAuth && !hasAPIToken { + return ErrAuthMisconfigured + } + + return nil +} + // BasicAuth provides HTTP Basic Authentication middleware func BasicAuth(config *AuthConfig) func(http.Handler) http.Handler { return func(next http.Handler) http.Handler { diff --git a/internal/models/bash_script.go b/internal/models/bash_script.go index 2db20a9..0706cb3 100644 --- a/internal/models/bash_script.go +++ b/internal/models/bash_script.go @@ -6,10 +6,12 @@ import "time" // Script content is encrypted at rest using AES-256-GCM type BashScript struct { ID int64 `json:"id"` - Name string `json:"name"` // Display name for the script - Description string `json:"description"` // Optional description - Content string `json:"content"` // Script content (encrypted in DB) - Filename string `json:"filename"` // Original filename if uploaded + Name string `json:"name"` // Display name for the script + Description string `json:"description"` // Optional description + Content string `json:"content"` // Script content (encrypted in DB) + Filename string `json:"filename"` // Original filename if uploaded + Group string `json:"group"` // Group/category for organization + Source string `json:"source,omitempty"` // "sqlite" or "vault" CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` } @@ -20,6 +22,7 @@ type BashScriptCreate struct { Description string `json:"description,omitempty"` Content string `json:"content" validate:"required"` Filename string `json:"filename,omitempty"` + Group string `json:"group"` // Optional, defaults to "default" } // BashScriptUpdate represents the data that can be updated for a bash script @@ -28,6 +31,7 @@ type BashScriptUpdate struct { Description string `json:"description,omitempty"` Content string `json:"content,omitempty"` Filename string `json:"filename,omitempty"` + Group string `json:"group,omitempty"` } // BashScriptResponse is the API response format @@ -37,6 +41,8 @@ type BashScriptResponse struct { Description string `json:"description"` Content string `json:"content,omitempty"` // Only included when specifically requested Filename string `json:"filename"` + Group string `json:"group"` // Group/category for organization + Source string `json:"source,omitempty"` // "sqlite" or "vault" CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` } @@ -54,6 +60,8 @@ func (s *BashScript) ToResponse(includeContent bool) *BashScriptResponse { Description: s.Description, Content: content, Filename: s.Filename, + Group: s.Group, + Source: s.Source, CreatedAt: s.CreatedAt, UpdatedAt: s.UpdatedAt, } diff --git a/internal/models/env_variable.go b/internal/models/env_variable.go index 62186fe..d273b7e 100644 --- a/internal/models/env_variable.go +++ b/internal/models/env_variable.go @@ -6,9 +6,11 @@ import "time" // Values are encrypted at rest using AES-256-GCM type EnvVariable struct { ID int64 `json:"id"` - Name string `json:"name"` // Environment variable name (e.g., API_KEY) - Value string `json:"value"` // Decrypted value (encrypted in DB) - Description string `json:"description"` // Optional description + Name string `json:"name"` // Environment variable name (e.g., API_KEY) + Value string `json:"value"` // Decrypted value (encrypted in DB) + Description string `json:"description"` // Optional description + Group string `json:"group"` // Group/category for organization + Source string `json:"source,omitempty"` // "sqlite" or "vault" CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` } @@ -18,6 +20,7 @@ type EnvVariableCreate struct { Name string `json:"name" validate:"required"` Value string `json:"value" validate:"required"` Description string `json:"description,omitempty"` + Group string `json:"group"` // Optional, defaults to "default" } // EnvVariableUpdate represents the data that can be updated for an environment variable @@ -25,14 +28,17 @@ type EnvVariableUpdate struct { Name string `json:"name,omitempty"` Value string `json:"value,omitempty"` Description string `json:"description,omitempty"` + Group string `json:"group,omitempty"` } // EnvVariableResponse is the API response format (value masked by default) type EnvVariableResponse struct { ID int64 `json:"id"` Name string `json:"name"` - Value string `json:"value"` // Will be masked unless explicitly requested + Value string `json:"value"` // Will be masked unless explicitly requested Description string `json:"description"` + Group string `json:"group"` // Group/category for organization + Source string `json:"source,omitempty"` // "sqlite" or "vault" CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` } @@ -48,6 +54,8 @@ func (e *EnvVariable) ToResponse(showValue bool) *EnvVariableResponse { Name: e.Name, Value: value, Description: e.Description, + Group: e.Group, + Source: e.Source, CreatedAt: e.CreatedAt, UpdatedAt: e.UpdatedAt, } diff --git a/internal/models/saved_command.go b/internal/models/saved_command.go index 0161444..0d18370 100644 --- a/internal/models/saved_command.go +++ b/internal/models/saved_command.go @@ -47,8 +47,12 @@ type CommandExecution struct { SSHPassword string `json:"ssh_password,omitempty"` // SSH password (for remote, if key auth fails) SaveAs string `json:"save_as,omitempty"` // Optional: save as template with this name IsRemote bool `json:"is_remote"` // True if remote execution - ServerID *int64 `json:"server_id,omitempty"` // Server ID for remote execution - SSHKeyID *int64 `json:"ssh_key_id,omitempty"` // SSH key ID for remote execution + ServerID *int64 `json:"server_id,omitempty"` // Server ID for remote execution (SQLite) + ServerName string `json:"server_name,omitempty"` // Server name for remote execution (Vault) + ServerGroup string `json:"server_group,omitempty"` // Server group for remote execution (Vault) + SSHKeyID *int64 `json:"ssh_key_id,omitempty"` // SSH key ID for remote execution (SQLite) + SSHKeyName string `json:"ssh_key_name,omitempty"` // SSH key name for remote execution (Vault) + SSHKeyGroup string `json:"ssh_key_group,omitempty"` // SSH key group for remote execution (Vault) } // CommandResult represents the result of a command execution @@ -63,15 +67,23 @@ type CommandResult struct { // ScriptExecution represents a request to execute a stored bash script type ScriptExecution struct { - ScriptID int64 `json:"script_id" validate:"required"` // ID of the script to execute - User string `json:"user"` // User to run as (default: root) - SudoPassword string `json:"sudo_password,omitempty"` // Sudo password (required when user != current for local) - SSHPassword string `json:"ssh_password,omitempty"` // SSH password (for remote, if key auth fails) - IsRemote bool `json:"is_remote"` // True if remote execution - ServerID *int64 `json:"server_id,omitempty"` // Server ID for remote execution - SSHKeyID *int64 `json:"ssh_key_id,omitempty"` // SSH key ID for remote execution - IncludeEnvVars bool `json:"include_env_vars"` // Deprecated: use EnvVarIDs instead - EnvVarIDs []int64 `json:"env_var_ids,omitempty"` // Specific env var IDs to include + ScriptID int64 `json:"script_id,omitempty"` // ID of the script to execute (SQLite) + ScriptName string `json:"script_name,omitempty"` // Name of the script to execute (Vault) + ScriptGroup string `json:"script_group,omitempty"` // Script group for execution (Vault) + User string `json:"user"` // User to run as (default: root) + SudoPassword string `json:"sudo_password,omitempty"` // Sudo password (required when user != current for local) + SSHPassword string `json:"ssh_password,omitempty"` // SSH password (for remote, if key auth fails) + IsRemote bool `json:"is_remote"` // True if remote execution + ServerID *int64 `json:"server_id,omitempty"` // Server ID for remote execution (SQLite) + ServerName string `json:"server_name,omitempty"` // Server name for remote execution (Vault) + ServerGroup string `json:"server_group,omitempty"` // Server group for remote execution (Vault) + SSHKeyID *int64 `json:"ssh_key_id,omitempty"` // SSH key ID for remote execution (SQLite) + SSHKeyName string `json:"ssh_key_name,omitempty"` // SSH key name for remote execution (Vault) + SSHKeyGroup string `json:"ssh_key_group,omitempty"` // SSH key group for remote execution (Vault) + IncludeEnvVars bool `json:"include_env_vars"` // Deprecated: use EnvVarIDs instead + EnvVarIDs []int64 `json:"env_var_ids,omitempty"` // Specific env var IDs to include (SQLite) + EnvVarNames []string `json:"env_var_names,omitempty"` // Names of env vars to include (Vault) + EnvVarGroups []string `json:"env_var_groups,omitempty"` // Groups of env vars to include (Vault, paired with EnvVarNames) } // ScriptResult represents the result of a script execution diff --git a/internal/models/server.go b/internal/models/server.go index 4a65076..7298c70 100644 --- a/internal/models/server.go +++ b/internal/models/server.go @@ -10,6 +10,8 @@ type Server struct { IPAddress string `json:"ip_address,omitempty"` // IP address Port int `json:"port"` // SSH port (default: 22) Username string `json:"username"` // SSH username for remote connections + Group string `json:"group"` // Group/category for organization + Source string `json:"source,omitempty"` // "sqlite" or "vault" CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` } @@ -21,6 +23,7 @@ type ServerCreate struct { IPAddress string `json:"ip_address,omitempty"` Port int `json:"port"` // Optional, defaults to 22 if not provided Username string `json:"username"` // SSH username for remote connections + Group string `json:"group"` // Optional, defaults to "default" } // ServerUpdate represents the data that can be updated for a server @@ -29,4 +32,5 @@ type ServerUpdate struct { IPAddress string `json:"ip_address,omitempty"` Port int `json:"port,omitempty"` Username string `json:"username,omitempty"` + Group string `json:"group,omitempty"` } diff --git a/internal/models/ssh_key.go b/internal/models/ssh_key.go index 65a31f6..6c8b748 100644 --- a/internal/models/ssh_key.go +++ b/internal/models/ssh_key.go @@ -6,7 +6,9 @@ import "time" type SSHKey struct { ID int64 `json:"id"` Name string `json:"name"` - PrivateKey string `json:"private_key"` // Decrypted value + PrivateKey string `json:"private_key"` // Decrypted value + Group string `json:"group"` // Group/category for organization + Source string `json:"source,omitempty"` // "sqlite" or "vault" CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` } @@ -15,10 +17,12 @@ type SSHKey struct { type SSHKeyCreate struct { Name string `json:"name" validate:"required"` PrivateKey string `json:"private_key" validate:"required"` + Group string `json:"group"` // Optional, defaults to "default" } // SSHKeyUpdate represents the data that can be updated for an SSH key type SSHKeyUpdate struct { Name string `json:"name,omitempty"` PrivateKey string `json:"private_key,omitempty"` + Group string `json:"group,omitempty"` } diff --git a/internal/models/vault_config.go b/internal/models/vault_config.go new file mode 100644 index 0000000..02a05a3 --- /dev/null +++ b/internal/models/vault_config.go @@ -0,0 +1,60 @@ +package models + +import "time" + +// VaultConfig represents the HashiCorp Vault configuration +type VaultConfig struct { + ID int64 `json:"id"` + Address string `json:"address"` // Vault server address (e.g., https://vault.example.com:8200) + Token string `json:"token,omitempty"` // Vault token (decrypted, not included in responses) + Namespace string `json:"namespace,omitempty"` // Optional Vault namespace + MountPath string `json:"mount_path"` // KV secrets engine mount path (default: "secret") + Enabled bool `json:"enabled"` // Whether Vault integration is enabled + CreatedAt time.Time `json:"created_at"` + UpdatedAt time.Time `json:"updated_at"` +} + +// VaultConfigCreate represents the data needed to create/update Vault configuration +type VaultConfigCreate struct { + Address string `json:"address"` + Token string `json:"token"` + Namespace string `json:"namespace,omitempty"` + MountPath string `json:"mount_path,omitempty"` + Enabled bool `json:"enabled"` +} + +// VaultConfigResponse is the API response format (token masked) +type VaultConfigResponse struct { + ID int64 `json:"id"` + Address string `json:"address"` + Namespace string `json:"namespace,omitempty"` + MountPath string `json:"mount_path"` + Enabled bool `json:"enabled"` + HasToken bool `json:"has_token"` // Indicates if a token is configured + CreatedAt time.Time `json:"created_at"` + UpdatedAt time.Time `json:"updated_at"` +} + +// ToResponse converts VaultConfig to a safe response (without token) +func (v *VaultConfig) ToResponse() VaultConfigResponse { + return VaultConfigResponse{ + ID: v.ID, + Address: v.Address, + Namespace: v.Namespace, + MountPath: v.MountPath, + Enabled: v.Enabled, + HasToken: v.Token != "", + CreatedAt: v.CreatedAt, + UpdatedAt: v.UpdatedAt, + } +} + +// VaultStatus represents the current Vault connection status +type VaultStatus struct { + Configured bool `json:"configured"` // Whether Vault is configured + Enabled bool `json:"enabled"` // Whether Vault is enabled + Connected bool `json:"connected"` // Whether connection test passed + Address string `json:"address,omitempty"` + Error string `json:"error,omitempty"` + VaultSealed bool `json:"vault_sealed,omitempty"` +} diff --git a/internal/repository/bash_script_repository.go b/internal/repository/bash_script_repository.go index 79ccf4c..56d7ec8 100644 --- a/internal/repository/bash_script_repository.go +++ b/internal/repository/bash_script_repository.go @@ -29,6 +29,12 @@ func (r *BashScriptRepository) Create(script *models.BashScriptCreate) (*models. return nil, fmt.Errorf("content is required") } + // Default group to "default" if not provided + group := script.Group + if group == "" { + group = "default" + } + // Encrypt the content encryptedContent, err := database.Encrypt(script.Content) if err != nil { @@ -38,11 +44,12 @@ func (r *BashScriptRepository) Create(script *models.BashScriptCreate) (*models. now := time.Now().UTC() result, err := r.db.GetConnection().Exec( - "INSERT INTO bash_scripts (name, description, content_encrypted, filename, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?)", + "INSERT INTO bash_scripts (name, description, content_encrypted, filename, group_name, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?)", script.Name, script.Description, encryptedContent, script.Filename, + group, now, now, ) @@ -61,6 +68,7 @@ func (r *BashScriptRepository) Create(script *models.BashScriptCreate) (*models. Description: script.Description, Content: script.Content, // Return unencrypted content Filename: script.Filename, + Group: group, CreatedAt: now, UpdatedAt: now, }, nil @@ -73,9 +81,9 @@ func (r *BashScriptRepository) GetByID(id int64) (*models.BashScript, error) { var description, filename sql.NullString err := r.db.GetConnection().QueryRow( - "SELECT id, name, description, content_encrypted, filename, created_at, updated_at FROM bash_scripts WHERE id = ?", + "SELECT id, name, description, content_encrypted, filename, group_name, created_at, updated_at FROM bash_scripts WHERE id = ?", id, - ).Scan(&script.ID, &script.Name, &description, &encryptedContent, &filename, &script.CreatedAt, &script.UpdatedAt) + ).Scan(&script.ID, &script.Name, &description, &encryptedContent, &filename, &script.Group, &script.CreatedAt, &script.UpdatedAt) if err == sql.ErrNoRows { return nil, fmt.Errorf("bash script not found") @@ -105,7 +113,53 @@ func (r *BashScriptRepository) GetByID(id int64) (*models.BashScript, error) { // GetAll retrieves all bash scripts (without content for listing) func (r *BashScriptRepository) GetAll() ([]*models.BashScript, error) { rows, err := r.db.GetConnection().Query( - "SELECT id, name, description, content_encrypted, filename, created_at, updated_at FROM bash_scripts ORDER BY name ASC", + "SELECT id, name, description, content_encrypted, filename, group_name, created_at, updated_at FROM bash_scripts ORDER BY group_name ASC, name ASC", + ) + if err != nil { + return nil, fmt.Errorf("failed to query bash scripts: %w", err) + } + defer rows.Close() + + var scripts []*models.BashScript + for rows.Next() { + var script models.BashScript + var encryptedContent []byte + var description, filename sql.NullString + + if err := rows.Scan(&script.ID, &script.Name, &description, &encryptedContent, &filename, &script.Group, &script.CreatedAt, &script.UpdatedAt); err != nil { + return nil, fmt.Errorf("failed to scan bash script: %w", err) + } + + // Handle nullable fields + if description.Valid { + script.Description = description.String + } + if filename.Valid { + script.Filename = filename.String + } + + // Decrypt the content + decryptedContent, err := database.Decrypt(encryptedContent) + if err != nil { + return nil, fmt.Errorf("failed to decrypt content: %w", err) + } + script.Content = decryptedContent + + scripts = append(scripts, &script) + } + + if err := rows.Err(); err != nil { + return nil, fmt.Errorf("error iterating bash scripts: %w", err) + } + + return scripts, nil +} + +// GetByGroup retrieves all bash scripts in a specific group +func (r *BashScriptRepository) GetByGroup(group string) ([]*models.BashScript, error) { + rows, err := r.db.GetConnection().Query( + "SELECT id, name, description, content_encrypted, filename, group_name, created_at, updated_at FROM bash_scripts WHERE group_name = ? ORDER BY name ASC", + group, ) if err != nil { return nil, fmt.Errorf("failed to query bash scripts: %w", err) @@ -118,7 +172,7 @@ func (r *BashScriptRepository) GetAll() ([]*models.BashScript, error) { var encryptedContent []byte var description, filename sql.NullString - if err := rows.Scan(&script.ID, &script.Name, &description, &encryptedContent, &filename, &script.CreatedAt, &script.UpdatedAt); err != nil { + if err := rows.Scan(&script.ID, &script.Name, &description, &encryptedContent, &filename, &script.Group, &script.CreatedAt, &script.UpdatedAt); err != nil { return nil, fmt.Errorf("failed to scan bash script: %w", err) } @@ -147,6 +201,32 @@ func (r *BashScriptRepository) GetAll() ([]*models.BashScript, error) { return scripts, nil } +// GetGroups retrieves all distinct group names +func (r *BashScriptRepository) GetGroups() ([]string, error) { + rows, err := r.db.GetConnection().Query( + "SELECT DISTINCT group_name FROM bash_scripts ORDER BY group_name ASC", + ) + if err != nil { + return nil, fmt.Errorf("failed to query groups: %w", err) + } + defer rows.Close() + + var groups []string + for rows.Next() { + var group string + if err := rows.Scan(&group); err != nil { + return nil, fmt.Errorf("failed to scan group: %w", err) + } + groups = append(groups, group) + } + + if err := rows.Err(); err != nil { + return nil, fmt.Errorf("error iterating groups: %w", err) + } + + return groups, nil +} + // Update updates an existing bash script func (r *BashScriptRepository) Update(id int64, update *models.BashScriptUpdate) (*models.BashScript, error) { // Get existing script @@ -173,6 +253,10 @@ func (r *BashScriptRepository) Update(id int64, update *models.BashScriptUpdate) existing.Filename = update.Filename } + if update.Group != "" { + existing.Group = update.Group + } + existing.UpdatedAt = time.Now().UTC() // Encrypt the content @@ -182,11 +266,12 @@ func (r *BashScriptRepository) Update(id int64, update *models.BashScriptUpdate) } _, err = r.db.GetConnection().Exec( - "UPDATE bash_scripts SET name = ?, description = ?, content_encrypted = ?, filename = ?, updated_at = ? WHERE id = ?", + "UPDATE bash_scripts SET name = ?, description = ?, content_encrypted = ?, filename = ?, group_name = ?, updated_at = ? WHERE id = ?", existing.Name, existing.Description, encryptedContent, existing.Filename, + existing.Group, existing.UpdatedAt, id, ) @@ -223,9 +308,9 @@ func (r *BashScriptRepository) GetByName(name string) (*models.BashScript, error var description, filename sql.NullString err := r.db.GetConnection().QueryRow( - "SELECT id, name, description, content_encrypted, filename, created_at, updated_at FROM bash_scripts WHERE name = ?", + "SELECT id, name, description, content_encrypted, filename, group_name, created_at, updated_at FROM bash_scripts WHERE name = ?", name, - ).Scan(&script.ID, &script.Name, &description, &encryptedContent, &filename, &script.CreatedAt, &script.UpdatedAt) + ).Scan(&script.ID, &script.Name, &description, &encryptedContent, &filename, &script.Group, &script.CreatedAt, &script.UpdatedAt) if err == sql.ErrNoRows { return nil, fmt.Errorf("bash script not found") diff --git a/internal/repository/env_variable_repository.go b/internal/repository/env_variable_repository.go index 471ddbd..5b3fe0e 100644 --- a/internal/repository/env_variable_repository.go +++ b/internal/repository/env_variable_repository.go @@ -29,6 +29,12 @@ func (r *EnvVariableRepository) Create(envVar *models.EnvVariableCreate) (*model return nil, fmt.Errorf("value is required") } + // Default group to "default" if not provided + group := envVar.Group + if group == "" { + group = "default" + } + // Encrypt the value encryptedValue, err := database.Encrypt(envVar.Value) if err != nil { @@ -38,10 +44,11 @@ func (r *EnvVariableRepository) Create(envVar *models.EnvVariableCreate) (*model now := time.Now().UTC() result, err := r.db.GetConnection().Exec( - "INSERT INTO env_variables (name, value_encrypted, description, created_at, updated_at) VALUES (?, ?, ?, ?, ?)", + "INSERT INTO env_variables (name, value_encrypted, description, group_name, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?)", envVar.Name, encryptedValue, envVar.Description, + group, now, now, ) @@ -59,6 +66,7 @@ func (r *EnvVariableRepository) Create(envVar *models.EnvVariableCreate) (*model Name: envVar.Name, Value: envVar.Value, // Return unencrypted value Description: envVar.Description, + Group: group, CreatedAt: now, UpdatedAt: now, }, nil @@ -70,9 +78,9 @@ func (r *EnvVariableRepository) GetByID(id int64) (*models.EnvVariable, error) { var encryptedValue []byte err := r.db.GetConnection().QueryRow( - "SELECT id, name, value_encrypted, description, created_at, updated_at FROM env_variables WHERE id = ?", + "SELECT id, name, value_encrypted, description, group_name, created_at, updated_at FROM env_variables WHERE id = ?", id, - ).Scan(&envVar.ID, &envVar.Name, &encryptedValue, &envVar.Description, &envVar.CreatedAt, &envVar.UpdatedAt) + ).Scan(&envVar.ID, &envVar.Name, &encryptedValue, &envVar.Description, &envVar.Group, &envVar.CreatedAt, &envVar.UpdatedAt) if err == sql.ErrNoRows { return nil, fmt.Errorf("environment variable not found") @@ -97,9 +105,9 @@ func (r *EnvVariableRepository) GetByName(name string) (*models.EnvVariable, err var encryptedValue []byte err := r.db.GetConnection().QueryRow( - "SELECT id, name, value_encrypted, description, created_at, updated_at FROM env_variables WHERE name = ?", + "SELECT id, name, value_encrypted, description, group_name, created_at, updated_at FROM env_variables WHERE name = ?", name, - ).Scan(&envVar.ID, &envVar.Name, &encryptedValue, &envVar.Description, &envVar.CreatedAt, &envVar.UpdatedAt) + ).Scan(&envVar.ID, &envVar.Name, &encryptedValue, &envVar.Description, &envVar.Group, &envVar.CreatedAt, &envVar.UpdatedAt) if err == sql.ErrNoRows { return nil, fmt.Errorf("environment variable not found") @@ -121,7 +129,7 @@ func (r *EnvVariableRepository) GetByName(name string) (*models.EnvVariable, err // GetAll retrieves all environment variables func (r *EnvVariableRepository) GetAll() ([]*models.EnvVariable, error) { rows, err := r.db.GetConnection().Query( - "SELECT id, name, value_encrypted, description, created_at, updated_at FROM env_variables ORDER BY name ASC", + "SELECT id, name, value_encrypted, description, group_name, created_at, updated_at FROM env_variables ORDER BY group_name ASC, name ASC", ) if err != nil { return nil, fmt.Errorf("failed to query environment variables: %w", err) @@ -133,7 +141,7 @@ func (r *EnvVariableRepository) GetAll() ([]*models.EnvVariable, error) { var envVar models.EnvVariable var encryptedValue []byte - if err := rows.Scan(&envVar.ID, &envVar.Name, &encryptedValue, &envVar.Description, &envVar.CreatedAt, &envVar.UpdatedAt); err != nil { + if err := rows.Scan(&envVar.ID, &envVar.Name, &encryptedValue, &envVar.Description, &envVar.Group, &envVar.CreatedAt, &envVar.UpdatedAt); err != nil { return nil, fmt.Errorf("failed to scan environment variable: %w", err) } @@ -154,6 +162,69 @@ func (r *EnvVariableRepository) GetAll() ([]*models.EnvVariable, error) { return envVars, nil } +// GetByGroup retrieves all environment variables in a specific group +func (r *EnvVariableRepository) GetByGroup(group string) ([]*models.EnvVariable, error) { + rows, err := r.db.GetConnection().Query( + "SELECT id, name, value_encrypted, description, group_name, created_at, updated_at FROM env_variables WHERE group_name = ? ORDER BY name ASC", + group, + ) + if err != nil { + return nil, fmt.Errorf("failed to query environment variables: %w", err) + } + defer rows.Close() + + var envVars []*models.EnvVariable + for rows.Next() { + var envVar models.EnvVariable + var encryptedValue []byte + + if err := rows.Scan(&envVar.ID, &envVar.Name, &encryptedValue, &envVar.Description, &envVar.Group, &envVar.CreatedAt, &envVar.UpdatedAt); err != nil { + return nil, fmt.Errorf("failed to scan environment variable: %w", err) + } + + // Decrypt the value + decryptedValue, err := database.Decrypt(encryptedValue) + if err != nil { + return nil, fmt.Errorf("failed to decrypt value: %w", err) + } + envVar.Value = decryptedValue + + envVars = append(envVars, &envVar) + } + + if err := rows.Err(); err != nil { + return nil, fmt.Errorf("error iterating environment variables: %w", err) + } + + return envVars, nil +} + +// GetGroups retrieves all distinct group names +func (r *EnvVariableRepository) GetGroups() ([]string, error) { + rows, err := r.db.GetConnection().Query( + "SELECT DISTINCT group_name FROM env_variables ORDER BY group_name ASC", + ) + if err != nil { + return nil, fmt.Errorf("failed to query groups: %w", err) + } + defer rows.Close() + + var groups []string + for rows.Next() { + var group string + if err := rows.Scan(&group); err != nil { + return nil, fmt.Errorf("failed to scan group: %w", err) + } + groups = append(groups, group) + } + + if err := rows.Err(); err != nil { + return nil, fmt.Errorf("error iterating groups: %w", err) + } + + return groups, nil +} + // Update updates an existing environment variable func (r *EnvVariableRepository) Update(id int64, update *models.EnvVariableUpdate) (*models.EnvVariable, error) { // Get existing variable @@ -176,6 +247,10 @@ func (r *EnvVariableRepository) Update(id int64, update *models.EnvVariableUpdat existing.Description = update.Description } + if update.Group != "" { + existing.Group = update.Group + } + existing.UpdatedAt = time.Now().UTC() // Encrypt the value @@ -185,10 +260,11 @@ func (r *EnvVariableRepository) Update(id int64, update *models.EnvVariableUpdat } _, err = r.db.GetConnection().Exec( - "UPDATE env_variables SET name = ?, value_encrypted = ?, description = ?, updated_at = ? WHERE id = ?", + "UPDATE env_variables SET name = ?, value_encrypted = ?, description = ?, group_name = ?, updated_at = ? WHERE id = ?", existing.Name, encryptedValue, existing.Description, + existing.Group, existing.UpdatedAt, id, ) diff --git a/internal/repository/server_repository.go b/internal/repository/server_repository.go index e141a2f..4b8e4ae 100644 --- a/internal/repository/server_repository.go +++ b/internal/repository/server_repository.go @@ -38,14 +38,21 @@ func (r *ServerRepository) Create(server *models.ServerCreate) (*models.Server, username = "root" } + // Default group to "default" if not provided + group := server.Group + if group == "" { + group = "default" + } + now := time.Now().UTC() result, err := r.db.GetConnection().Exec( - "INSERT INTO servers (name, ip_address, port, username, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?)", + "INSERT INTO servers (name, ip_address, port, username, group_name, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?)", nullString(server.Name), nullString(server.IPAddress), port, username, + group, now, now, ) @@ -64,6 +71,7 @@ func (r *ServerRepository) Create(server *models.ServerCreate) (*models.Server, IPAddress: server.IPAddress, Port: port, Username: username, + Group: group, CreatedAt: now, UpdatedAt: now, }, nil @@ -75,9 +83,9 @@ func (r *ServerRepository) GetByID(id int64) (*models.Server, error) { var name, ipAddress sql.NullString err := r.db.GetConnection().QueryRow( - "SELECT id, name, ip_address, port, username, created_at, updated_at FROM servers WHERE id = ?", + "SELECT id, name, ip_address, port, username, group_name, created_at, updated_at FROM servers WHERE id = ?", id, - ).Scan(&server.ID, &name, &ipAddress, &server.Port, &server.Username, &server.CreatedAt, &server.UpdatedAt) + ).Scan(&server.ID, &name, &ipAddress, &server.Port, &server.Username, &server.Group, &server.CreatedAt, &server.UpdatedAt) if err == sql.ErrNoRows { return nil, fmt.Errorf("server not found") @@ -95,7 +103,39 @@ func (r *ServerRepository) GetByID(id int64) (*models.Server, error) { // GetAll retrieves all servers func (r *ServerRepository) GetAll() ([]*models.Server, error) { rows, err := r.db.GetConnection().Query( - "SELECT id, name, ip_address, port, username, created_at, updated_at FROM servers ORDER BY created_at DESC", + "SELECT id, name, ip_address, port, username, group_name, created_at, updated_at FROM servers ORDER BY group_name ASC, created_at DESC", + ) + if err != nil { + return nil, fmt.Errorf("failed to query servers: %w", err) + } + defer rows.Close() + + var servers []*models.Server + for rows.Next() { + var server models.Server + var name, ipAddress sql.NullString + + if err := rows.Scan(&server.ID, &name, &ipAddress, &server.Port, &server.Username, &server.Group, &server.CreatedAt, &server.UpdatedAt); err != nil { + return nil, fmt.Errorf("failed to scan server: %w", err) + } + + server.Name = name.String + server.IPAddress = ipAddress.String + servers = append(servers, &server) + } + + if err := rows.Err(); err != nil { + return nil, fmt.Errorf("error iterating servers: %w", err) + } + + return servers, nil +} + +// GetByGroup retrieves all servers in a specific group +func (r *ServerRepository) GetByGroup(group string) ([]*models.Server, error) { + rows, err := r.db.GetConnection().Query( + "SELECT id, name, ip_address, port, username, group_name, created_at, updated_at FROM servers WHERE group_name = ? ORDER BY created_at DESC", + group, ) if err != nil { return nil, fmt.Errorf("failed to query servers: %w", err) @@ -107,7 +147,7 @@ func (r *ServerRepository) GetAll() ([]*models.Server, error) { var server models.Server var name, ipAddress sql.NullString - if err := rows.Scan(&server.ID, &name, &ipAddress, &server.Port, &server.Username, &server.CreatedAt, &server.UpdatedAt); err != nil { + if err := rows.Scan(&server.ID, &name, &ipAddress, &server.Port, &server.Username, &server.Group, &server.CreatedAt, &server.UpdatedAt); err != nil { return nil, fmt.Errorf("failed to scan server: %w", err) } @@ -123,6 +163,32 @@ func (r *ServerRepository) GetAll() ([]*models.Server, error) { return servers, nil } +// GetGroups retrieves all distinct group names +func (r *ServerRepository) GetGroups() ([]string, error) { + rows, err := r.db.GetConnection().Query( + "SELECT DISTINCT group_name FROM servers ORDER BY group_name ASC", + ) + if err != nil { + return nil, fmt.Errorf("failed to query groups: %w", err) + } + defer rows.Close() + + var groups []string + for rows.Next() { + var group string + if err := rows.Scan(&group); err != nil { + return nil, fmt.Errorf("failed to scan group: %w", err) + } + groups = append(groups, group) + } + + if err := rows.Err(); err != nil { + return nil, fmt.Errorf("error iterating groups: %w", err) + } + + return groups, nil +} + // Update updates an existing server func (r *ServerRepository) Update(id int64, update *models.ServerUpdate) (*models.Server, error) { // Get existing server @@ -148,6 +214,10 @@ func (r *ServerRepository) Update(id int64, update *models.ServerUpdate) (*model existing.Username = update.Username } + if update.Group != "" { + existing.Group = update.Group + } + // Validate that at least one field is set after update if existing.Name == "" && existing.IPAddress == "" { return nil, fmt.Errorf("at least one of name or ip_address must be provided") @@ -166,11 +236,12 @@ func (r *ServerRepository) Update(id int64, update *models.ServerUpdate) (*model existing.UpdatedAt = time.Now().UTC() _, err = r.db.GetConnection().Exec( - "UPDATE servers SET name = ?, ip_address = ?, port = ?, username = ?, updated_at = ? WHERE id = ?", + "UPDATE servers SET name = ?, ip_address = ?, port = ?, username = ?, group_name = ?, updated_at = ? WHERE id = ?", nullString(existing.Name), nullString(existing.IPAddress), existing.Port, existing.Username, + existing.Group, existing.UpdatedAt, id, ) diff --git a/internal/repository/ssh_key_repository.go b/internal/repository/ssh_key_repository.go index b49c746..77f1096 100644 --- a/internal/repository/ssh_key_repository.go +++ b/internal/repository/ssh_key_repository.go @@ -27,12 +27,19 @@ func (r *SSHKeyRepository) Create(key *models.SSHKeyCreate) (*models.SSHKey, err return nil, fmt.Errorf("failed to encrypt private key: %w", err) } + // Default group to "default" if not provided + group := key.Group + if group == "" { + group = "default" + } + now := time.Now().UTC() result, err := r.db.GetConnection().Exec( - "INSERT INTO ssh_keys (name, private_key_encrypted, created_at, updated_at) VALUES (?, ?, ?, ?)", + "INSERT INTO ssh_keys (name, private_key_encrypted, group_name, created_at, updated_at) VALUES (?, ?, ?, ?, ?)", key.Name, encryptedKey, + group, now, now, ) @@ -49,6 +56,7 @@ func (r *SSHKeyRepository) Create(key *models.SSHKeyCreate) (*models.SSHKey, err ID: id, Name: key.Name, PrivateKey: key.PrivateKey, + Group: group, CreatedAt: now, UpdatedAt: now, }, nil @@ -60,9 +68,9 @@ func (r *SSHKeyRepository) GetByID(id int64) (*models.SSHKey, error) { var encryptedKey []byte err := r.db.GetConnection().QueryRow( - "SELECT id, name, private_key_encrypted, created_at, updated_at FROM ssh_keys WHERE id = ?", + "SELECT id, name, private_key_encrypted, group_name, created_at, updated_at FROM ssh_keys WHERE id = ?", id, - ).Scan(&key.ID, &key.Name, &encryptedKey, &key.CreatedAt, &key.UpdatedAt) + ).Scan(&key.ID, &key.Name, &encryptedKey, &key.Group, &key.CreatedAt, &key.UpdatedAt) if err == sql.ErrNoRows { return nil, fmt.Errorf("SSH key not found") @@ -84,7 +92,7 @@ func (r *SSHKeyRepository) GetByID(id int64) (*models.SSHKey, error) { // GetAll retrieves all SSH keys func (r *SSHKeyRepository) GetAll() ([]*models.SSHKey, error) { rows, err := r.db.GetConnection().Query( - "SELECT id, name, private_key_encrypted, created_at, updated_at FROM ssh_keys ORDER BY created_at DESC", + "SELECT id, name, private_key_encrypted, group_name, created_at, updated_at FROM ssh_keys ORDER BY group_name ASC, created_at DESC", ) if err != nil { return nil, fmt.Errorf("failed to query SSH keys: %w", err) @@ -96,7 +104,7 @@ func (r *SSHKeyRepository) GetAll() ([]*models.SSHKey, error) { var key models.SSHKey var encryptedKey []byte - if err := rows.Scan(&key.ID, &key.Name, &encryptedKey, &key.CreatedAt, &key.UpdatedAt); err != nil { + if err := rows.Scan(&key.ID, &key.Name, &encryptedKey, &key.Group, &key.CreatedAt, &key.UpdatedAt); err != nil { return nil, fmt.Errorf("failed to scan SSH key: %w", err) } @@ -117,6 +125,69 @@ func (r *SSHKeyRepository) GetAll() ([]*models.SSHKey, error) { return keys, nil } +// GetByGroup retrieves all SSH keys in a specific group +func (r *SSHKeyRepository) GetByGroup(group string) ([]*models.SSHKey, error) { + rows, err := r.db.GetConnection().Query( + "SELECT id, name, private_key_encrypted, group_name, created_at, updated_at FROM ssh_keys WHERE group_name = ? ORDER BY created_at DESC", + group, + ) + if err != nil { + return nil, fmt.Errorf("failed to query SSH keys: %w", err) + } + defer rows.Close() + + var keys []*models.SSHKey + for rows.Next() { + var key models.SSHKey + var encryptedKey []byte + + if err := rows.Scan(&key.ID, &key.Name, &encryptedKey, &key.Group, &key.CreatedAt, &key.UpdatedAt); err != nil { + return nil, fmt.Errorf("failed to scan SSH key: %w", err) + } + + // Decrypt the private key + decryptedKey, err := database.Decrypt(encryptedKey) + if err != nil { + return nil, fmt.Errorf("failed to decrypt private key: %w", err) + } + + key.PrivateKey = decryptedKey + keys = append(keys, &key) + } + + if err := rows.Err(); err != nil { + return nil, fmt.Errorf("error iterating SSH keys: %w", err) + } + + return keys, nil +} + +// GetGroups retrieves all distinct group names +func (r *SSHKeyRepository) GetGroups() ([]string, error) { + rows, err := r.db.GetConnection().Query( + "SELECT DISTINCT group_name FROM ssh_keys ORDER BY group_name ASC", + ) + if err != nil { + return nil, fmt.Errorf("failed to query groups: %w", err) + } + defer rows.Close() + + var groups []string + for rows.Next() { + var group string + if err := rows.Scan(&group); err != nil { + return nil, fmt.Errorf("failed to scan group: %w", err) + } + groups = append(groups, group) + } + + if err := rows.Err(); err != nil { + return nil, fmt.Errorf("error iterating groups: %w", err) + } + + return groups, nil +} + // Update updates an existing SSH key func (r *SSHKeyRepository) Update(id int64, update *models.SSHKeyUpdate) (*models.SSHKey, error) { // Get existing key @@ -134,6 +205,10 @@ func (r *SSHKeyRepository) Update(id int64, update *models.SSHKeyUpdate) (*model existing.PrivateKey = update.PrivateKey } + if update.Group != "" { + existing.Group = update.Group + } + // Encrypt the private key encryptedKey, err := database.Encrypt(existing.PrivateKey) if err != nil { @@ -143,9 +218,10 @@ func (r *SSHKeyRepository) Update(id int64, update *models.SSHKeyUpdate) (*model existing.UpdatedAt = time.Now().UTC() _, err = r.db.GetConnection().Exec( - "UPDATE ssh_keys SET name = ?, private_key_encrypted = ?, updated_at = ? WHERE id = ?", + "UPDATE ssh_keys SET name = ?, private_key_encrypted = ?, group_name = ?, updated_at = ? WHERE id = ?", existing.Name, encryptedKey, + existing.Group, existing.UpdatedAt, id, ) diff --git a/internal/repository/vault_config_repository.go b/internal/repository/vault_config_repository.go new file mode 100644 index 0000000..6570ffa --- /dev/null +++ b/internal/repository/vault_config_repository.go @@ -0,0 +1,192 @@ +package repository + +import ( + "database/sql" + "fmt" + "time" + + "github.com/pozgo/web-cli/internal/database" + "github.com/pozgo/web-cli/internal/models" +) + +// VaultConfigRepository handles Vault configuration database operations +type VaultConfigRepository struct { + db *sql.DB +} + +// NewVaultConfigRepository creates a new VaultConfigRepository +func NewVaultConfigRepository(db *database.DB) *VaultConfigRepository { + return &VaultConfigRepository{db: db.GetConnection()} +} + +// Get retrieves the Vault configuration (there should only be one) +func (r *VaultConfigRepository) Get() (*models.VaultConfig, error) { + query := ` + SELECT id, address, token_encrypted, namespace, mount_path, enabled, created_at, updated_at + FROM vault_config + LIMIT 1 + ` + + var cfg models.VaultConfig + var tokenEncrypted []byte + var namespace sql.NullString + + err := r.db.QueryRow(query).Scan( + &cfg.ID, + &cfg.Address, + &tokenEncrypted, + &namespace, + &cfg.MountPath, + &cfg.Enabled, + &cfg.CreatedAt, + &cfg.UpdatedAt, + ) + + if err == sql.ErrNoRows { + return nil, nil // No configuration exists + } + if err != nil { + return nil, fmt.Errorf("failed to get vault config: %w", err) + } + + // Decrypt token + if len(tokenEncrypted) > 0 { + decrypted, err := database.Decrypt(tokenEncrypted) + if err != nil { + return nil, fmt.Errorf("failed to decrypt vault token: %w", err) + } + cfg.Token = decrypted + } + + if namespace.Valid { + cfg.Namespace = namespace.String + } + + return &cfg, nil +} + +// CreateOrUpdate creates or updates the Vault configuration +func (r *VaultConfigRepository) CreateOrUpdate(create *models.VaultConfigCreate) (*models.VaultConfig, error) { + // Check if config exists + existing, err := r.Get() + if err != nil { + return nil, err + } + + // Encrypt token + tokenEncrypted, err := database.Encrypt(create.Token) + if err != nil { + return nil, fmt.Errorf("failed to encrypt vault token: %w", err) + } + + mountPath := create.MountPath + if mountPath == "" { + mountPath = "secret" + } + + now := time.Now().UTC() + + if existing == nil { + // Create new config + query := ` + INSERT INTO vault_config (address, token_encrypted, namespace, mount_path, enabled, created_at, updated_at) + VALUES (?, ?, ?, ?, ?, ?, ?) + ` + + result, err := r.db.Exec(query, + create.Address, + tokenEncrypted, + nullString(create.Namespace), + mountPath, + create.Enabled, + now, + now, + ) + if err != nil { + return nil, fmt.Errorf("failed to create vault config: %w", err) + } + + id, _ := result.LastInsertId() + return &models.VaultConfig{ + ID: id, + Address: create.Address, + Token: create.Token, + Namespace: create.Namespace, + MountPath: mountPath, + Enabled: create.Enabled, + CreatedAt: now, + UpdatedAt: now, + }, nil + } + + // Update existing config + query := ` + UPDATE vault_config + SET address = ?, token_encrypted = ?, namespace = ?, mount_path = ?, enabled = ?, updated_at = ? + WHERE id = ? + ` + + _, err = r.db.Exec(query, + create.Address, + tokenEncrypted, + nullString(create.Namespace), + mountPath, + create.Enabled, + now, + existing.ID, + ) + if err != nil { + return nil, fmt.Errorf("failed to update vault config: %w", err) + } + + return &models.VaultConfig{ + ID: existing.ID, + Address: create.Address, + Token: create.Token, + Namespace: create.Namespace, + MountPath: mountPath, + Enabled: create.Enabled, + CreatedAt: existing.CreatedAt, + UpdatedAt: now, + }, nil +} + +// UpdateToken updates only the Vault token +func (r *VaultConfigRepository) UpdateToken(token string) error { + tokenEncrypted, err := database.Encrypt(token) + if err != nil { + return fmt.Errorf("failed to encrypt vault token: %w", err) + } + + query := `UPDATE vault_config SET token_encrypted = ?, updated_at = ?` + _, err = r.db.Exec(query, tokenEncrypted, time.Now().UTC()) + if err != nil { + return fmt.Errorf("failed to update vault token: %w", err) + } + + return nil +} + +// SetEnabled enables or disables Vault integration +func (r *VaultConfigRepository) SetEnabled(enabled bool) error { + query := `UPDATE vault_config SET enabled = ?, updated_at = ?` + _, err := r.db.Exec(query, enabled, time.Now().UTC()) + if err != nil { + return fmt.Errorf("failed to update vault enabled status: %w", err) + } + + return nil +} + +// Delete removes the Vault configuration +func (r *VaultConfigRepository) Delete() error { + query := `DELETE FROM vault_config` + _, err := r.db.Exec(query) + if err != nil { + return fmt.Errorf("failed to delete vault config: %w", err) + } + + return nil +} + +// Note: nullString is defined in server_repository.go diff --git a/internal/server/handlers.go b/internal/server/handlers.go index 0dc3dd6..3c6e54c 100644 --- a/internal/server/handlers.go +++ b/internal/server/handlers.go @@ -12,6 +12,7 @@ import ( "strings" "github.com/gorilla/mux" + "github.com/pozgo/web-cli/internal/audit" "github.com/pozgo/web-cli/internal/executor" "github.com/pozgo/web-cli/internal/models" "github.com/pozgo/web-cli/internal/repository" @@ -49,19 +50,42 @@ type CurrentUserResponse struct { // @Success 200 {array} models.SSHKey // @Failure 500 {object} ErrorResponse // @Security BasicAuth +// @Param group query string false "Filter by group name" // @Router /keys [get] func (s *Server) handleListSSHKeys(w http.ResponseWriter, r *http.Request) { repo := repository.NewSSHKeyRepository(s.db) + group := r.URL.Query().Get("group") - keys, err := repo.GetAll() + var keys []*models.SSHKey + var err error + + if group != "" { + keys, err = repo.GetByGroup(group) + } else { + keys, err = repo.GetAll() + } if err != nil { log.Printf("Error fetching SSH keys: %v", err) http.Error(w, "Failed to fetch SSH keys", http.StatusInternalServerError) return } + // Merge with Vault keys if available + allKeys := s.mergeSSHKeysWithVault(r.Context(), keys) + + // Filter Vault keys by group if specified + if group != "" { + filtered := make([]*models.SSHKey, 0) + for _, k := range allKeys { + if k.Group == group || (k.Group == "" && group == "default") { + filtered = append(filtered, k) + } + } + allKeys = filtered + } + w.Header().Set("Content-Type", "application/json") - json.NewEncoder(w).Encode(keys) + json.NewEncoder(w).Encode(allKeys) } // handleCreateSSHKey godoc @@ -235,19 +259,42 @@ func (s *Server) handleDeleteSSHKey(w http.ResponseWriter, r *http.Request) { // @Success 200 {array} models.Server // @Failure 500 {object} ErrorResponse // @Security BasicAuth +// @Param group query string false "Filter by group name" // @Router /servers [get] func (s *Server) handleListServers(w http.ResponseWriter, r *http.Request) { repo := repository.NewServerRepository(s.db) + group := r.URL.Query().Get("group") + + var servers []*models.Server + var err error - servers, err := repo.GetAll() + if group != "" { + servers, err = repo.GetByGroup(group) + } else { + servers, err = repo.GetAll() + } if err != nil { log.Printf("Error fetching servers: %v", err) http.Error(w, "Failed to fetch servers", http.StatusInternalServerError) return } + // Merge with Vault servers if available + allServers := s.mergeServersWithVault(r.Context(), servers) + + // Filter Vault servers by group if specified + if group != "" { + filtered := make([]*models.Server, 0) + for _, srv := range allServers { + if srv.Group == group || (srv.Group == "" && group == "default") { + filtered = append(filtered, srv) + } + } + allServers = filtered + } + w.Header().Set("Content-Type", "application/json") - json.NewEncoder(w).Encode(servers) + json.NewEncoder(w).Encode(allServers) } // handleCreateServer godoc @@ -479,31 +526,63 @@ func (s *Server) handleExecuteCommand(w http.ResponseWriter, r *http.Request) { if exec.IsRemote { // Remote execution via SSH - if exec.ServerID == nil { - http.Error(w, "Server ID is required for remote execution", http.StatusBadRequest) - return - } + var server *models.Server + var err error - // Get server details - serverRepo := repository.NewServerRepository(s.db) - server, err := serverRepo.GetByID(*exec.ServerID) - if err != nil { - log.Printf("Error fetching server: %v", err) - http.Error(w, "Server not found", http.StatusNotFound) + // Get server details - support both ID (SQLite) and Name (Vault) + if exec.ServerID != nil && *exec.ServerID > 0 { + serverRepo := repository.NewServerRepository(s.db) + server, err = serverRepo.GetByID(*exec.ServerID) + if err != nil { + log.Printf("Error fetching server by ID: %v", err) + http.Error(w, "Server not found", http.StatusNotFound) + return + } + } else if exec.ServerName != "" { + // Try to find server by name from Vault + server, err = s.getServerByNameFromVault(r.Context(), exec.ServerGroup, exec.ServerName) + if err != nil { + log.Printf("Error fetching server from Vault: %v", err) + http.Error(w, "Server not found in Vault", http.StatusNotFound) + return + } + if server == nil { + http.Error(w, "Server not found in Vault", http.StatusNotFound) + return + } + } else { + http.Error(w, "Server ID or Server Name is required for remote execution", http.StatusBadRequest) return } - // Get SSH key if provided + // Get SSH key if provided - support both ID (SQLite) and Name (Vault) var privateKey string - if exec.SSHKeyID != nil { + if exec.SSHKeyID != nil && *exec.SSHKeyID > 0 { keyRepo := repository.NewSSHKeyRepository(s.db) key, err := keyRepo.GetByID(*exec.SSHKeyID) if err != nil { - log.Printf("Error fetching SSH key: %v", err) + log.Printf("Error fetching SSH key by ID: %v", err) http.Error(w, "SSH key not found", http.StatusNotFound) return } privateKey = key.PrivateKey + } else if exec.SSHKeyName != "" { + // Try to find SSH key by name from Vault + key, err := s.getSSHKeyByNameFromVault(r.Context(), exec.SSHKeyGroup, exec.SSHKeyName) + if err != nil { + log.Printf("Error fetching SSH key from Vault: %v", err) + http.Error(w, "SSH key not found in Vault", http.StatusNotFound) + return + } + if key == nil { + http.Error(w, fmt.Sprintf("SSH key '%s' not found in Vault", exec.SSHKeyName), http.StatusNotFound) + return + } + if key.PrivateKey == "" { + http.Error(w, fmt.Sprintf("SSH key '%s' has no private key data in Vault", exec.SSHKeyName), http.StatusBadRequest) + return + } + privateKey = key.PrivateKey } // Set server name for history @@ -545,6 +624,9 @@ func (s *Server) handleExecuteCommand(w http.ResponseWriter, r *http.Request) { // Don't fail the request, just log the error } + // Audit log the command execution + audit.GetLogger().LogCommandExecution(r, exec.Command, exec.User, serverName, exitCode, result.ExecutionTime, result.Error) + // Save as template if requested if exec.SaveAs != "" { savedCmdRepo := repository.NewSavedCommandRepository(s.db) @@ -974,7 +1056,7 @@ func (s *Server) handleUpdateLocalUser(w http.ResponseWriter, r *http.Request) { user, err := repo.Update(id, &userUpdate) if err != nil { log.Printf("Error updating local user: %v", err) - http.Error(w, err.Error(), http.StatusBadRequest) + http.Error(w, "Failed to update local user", http.StatusBadRequest) return } @@ -1095,26 +1177,49 @@ func (s *Server) handleListAvailableShells(w http.ResponseWriter, r *http.Reques // @Accept json // @Produce json // @Param show_values query bool false "Show actual values instead of masked values" +// @Param group query string false "Filter by group name" // @Success 200 {array} models.EnvVariableResponse // @Failure 500 {object} ErrorResponse // @Security BasicAuth // @Router /env-variables [get] func (s *Server) handleListEnvVariables(w http.ResponseWriter, r *http.Request) { repo := repository.NewEnvVariableRepository(s.db) + group := r.URL.Query().Get("group") + + var envVars []*models.EnvVariable + var err error - envVars, err := repo.GetAll() + if group != "" { + envVars, err = repo.GetByGroup(group) + } else { + envVars, err = repo.GetAll() + } if err != nil { log.Printf("Error fetching environment variables: %v", err) http.Error(w, "Failed to fetch environment variables", http.StatusInternalServerError) return } + // Merge with Vault env variables if available + allEnvVars := s.mergeEnvVariablesWithVault(r.Context(), envVars) + + // Filter Vault env vars by group if specified + if group != "" { + filtered := make([]*models.EnvVariable, 0) + for _, ev := range allEnvVars { + if ev.Group == group || (ev.Group == "" && group == "default") { + filtered = append(filtered, ev) + } + } + allEnvVars = filtered + } + // Check if full values are requested (for internal use) showValues := r.URL.Query().Get("show_values") == "true" // Convert to response format with masked values - responses := make([]*models.EnvVariableResponse, len(envVars)) - for i, envVar := range envVars { + responses := make([]*models.EnvVariableResponse, len(allEnvVars)) + for i, envVar := range allEnvVars { responses[i] = envVar.ToResponse(showValues) } @@ -1304,20 +1409,43 @@ func (s *Server) handleDeleteEnvVariable(w http.ResponseWriter, r *http.Request) // @Tags Bash Scripts // @Accept json // @Produce json +// @Param group query string false "Filter by group name" // @Success 200 {array} models.BashScriptResponse // @Failure 500 {object} ErrorResponse // @Security BasicAuth // @Router /bash-scripts [get] func (s *Server) handleListBashScripts(w http.ResponseWriter, r *http.Request) { repo := repository.NewBashScriptRepository(s.db) + group := r.URL.Query().Get("group") - scripts, err := repo.GetAll() + var scripts []*models.BashScript + var err error + + if group != "" { + scripts, err = repo.GetByGroup(group) + } else { + scripts, err = repo.GetAll() + } if err != nil { log.Printf("Error fetching bash scripts: %v", err) http.Error(w, "Failed to fetch bash scripts", http.StatusInternalServerError) return } + // Merge with Vault scripts + scripts = s.mergeScriptsWithVault(r.Context(), scripts) + + // Filter Vault scripts by group if specified + if group != "" { + filtered := make([]*models.BashScript, 0) + for _, s := range scripts { + if s.Group == group || (s.Group == "" && group == "default") { + filtered = append(filtered, s) + } + } + scripts = filtered + } + // Convert to response format (without content for listing) responses := models.BashScriptsToList(scripts) @@ -1533,9 +1661,9 @@ func (s *Server) handleExecuteScript(w http.ResponseWriter, r *http.Request) { return } - // Validate input - if exec.ScriptID == 0 { - http.Error(w, "Script ID is required", http.StatusBadRequest) + // Validate input - either ScriptID or ScriptName must be provided + if exec.ScriptID == 0 && exec.ScriptName == "" { + http.Error(w, "Script ID or Script Name is required", http.StatusBadRequest) return } @@ -1547,13 +1675,28 @@ func (s *Server) handleExecuteScript(w http.ResponseWriter, r *http.Request) { return } - // Fetch the script - scriptRepo := repository.NewBashScriptRepository(s.db) - script, err := scriptRepo.GetByID(exec.ScriptID) - if err != nil { - log.Printf("Error fetching script: %v", err) - http.Error(w, "Script not found", http.StatusNotFound) - return + // Fetch the script - support both ID (SQLite) and Name (Vault) + var script *models.BashScript + var err error + if exec.ScriptID > 0 { + scriptRepo := repository.NewBashScriptRepository(s.db) + script, err = scriptRepo.GetByID(exec.ScriptID) + if err != nil { + log.Printf("Error fetching script by ID: %v", err) + http.Error(w, "Script not found", http.StatusNotFound) + return + } + } else if exec.ScriptName != "" { + script, err = s.getScriptByNameFromVault(r.Context(), exec.ScriptGroup, exec.ScriptName) + if err != nil { + log.Printf("Error fetching script from Vault: %v", err) + http.Error(w, "Script not found in Vault", http.StatusNotFound) + return + } + if script == nil { + http.Error(w, "Script not found in Vault", http.StatusNotFound) + return + } } // Build the script content with optional env vars @@ -1564,8 +1707,8 @@ func (s *Server) handleExecuteScript(w http.ResponseWriter, r *http.Request) { // Priority: EnvVarIDs (specific selection) > IncludeEnvVars (all) > none envRepo := repository.NewEnvVariableRepository(s.db) - if len(exec.EnvVarIDs) > 0 { - // Fetch specific environment variables by ID + if len(exec.EnvVarIDs) > 0 || len(exec.EnvVarNames) > 0 { + // Fetch specific environment variables by ID (SQLite) for _, envVarID := range exec.EnvVarIDs { envVar, err := envRepo.GetByID(envVarID) if err != nil { @@ -1577,6 +1720,26 @@ func (s *Server) handleExecuteScript(w http.ResponseWriter, r *http.Request) { scriptContent.WriteString(fmt.Sprintf("export %s='%s'\n", envVar.Name, escapedValue)) envVarsCount++ } + // Fetch specific environment variables by Name (Vault) + for i, envVarName := range exec.EnvVarNames { + // Get group from EnvVarGroups if available, otherwise use default + envVarGroup := "default" + if i < len(exec.EnvVarGroups) { + envVarGroup = exec.EnvVarGroups[i] + } + envVar, err := s.getEnvVariableByNameFromVault(r.Context(), envVarGroup, envVarName) + if err != nil { + log.Printf("Warning: env variable '%s' not found in Vault: %v", envVarName, err) + continue + } + if envVar == nil { + log.Printf("Warning: env variable '%s' not found in Vault", envVarName) + continue + } + escapedValue := strings.ReplaceAll(envVar.Value, "'", "'\\''") + scriptContent.WriteString(fmt.Sprintf("export %s='%s'\n", envVar.Name, escapedValue)) + envVarsCount++ + } } else if exec.IncludeEnvVars { // Backwards compatibility: fetch all environment variables envVars, err := envRepo.GetAll() @@ -1605,31 +1768,60 @@ func (s *Server) handleExecuteScript(w http.ResponseWriter, r *http.Request) { if exec.IsRemote { // Remote execution via SSH - if exec.ServerID == nil { - http.Error(w, "Server ID is required for remote execution", http.StatusBadRequest) - return - } + var server *models.Server - // Get server details - serverRepo := repository.NewServerRepository(s.db) - server, err := serverRepo.GetByID(*exec.ServerID) - if err != nil { - log.Printf("Error fetching server: %v", err) - http.Error(w, "Server not found", http.StatusNotFound) + // Get server details - support both ID (SQLite) and Name (Vault) + if exec.ServerID != nil && *exec.ServerID > 0 { + serverRepo := repository.NewServerRepository(s.db) + server, err = serverRepo.GetByID(*exec.ServerID) + if err != nil { + log.Printf("Error fetching server by ID: %v", err) + http.Error(w, "Server not found", http.StatusNotFound) + return + } + } else if exec.ServerName != "" { + server, err = s.getServerByNameFromVault(r.Context(), exec.ServerGroup, exec.ServerName) + if err != nil { + log.Printf("Error fetching server from Vault: %v", err) + http.Error(w, "Server not found in Vault", http.StatusNotFound) + return + } + if server == nil { + http.Error(w, "Server not found in Vault", http.StatusNotFound) + return + } + } else { + http.Error(w, "Server ID or Server Name is required for remote execution", http.StatusBadRequest) return } - // Get SSH key if provided + // Get SSH key if provided - support both ID (SQLite) and Name (Vault) var privateKey string - if exec.SSHKeyID != nil { + if exec.SSHKeyID != nil && *exec.SSHKeyID > 0 { keyRepo := repository.NewSSHKeyRepository(s.db) key, err := keyRepo.GetByID(*exec.SSHKeyID) if err != nil { - log.Printf("Error fetching SSH key: %v", err) + log.Printf("Error fetching SSH key by ID: %v", err) http.Error(w, "SSH key not found", http.StatusNotFound) return } privateKey = key.PrivateKey + } else if exec.SSHKeyName != "" { + key, err := s.getSSHKeyByNameFromVault(r.Context(), exec.SSHKeyGroup, exec.SSHKeyName) + if err != nil { + log.Printf("Error fetching SSH key from Vault: %v", err) + http.Error(w, "SSH key not found in Vault", http.StatusNotFound) + return + } + if key == nil { + http.Error(w, fmt.Sprintf("SSH key '%s' not found in Vault", exec.SSHKeyName), http.StatusNotFound) + return + } + if key.PrivateKey == "" { + http.Error(w, fmt.Sprintf("SSH key '%s' has no private key data in Vault", exec.SSHKeyName), http.StatusBadRequest) + return + } + privateKey = key.PrivateKey } // Set server name for response @@ -1658,7 +1850,7 @@ func (s *Server) handleExecuteScript(w http.ResponseWriter, r *http.Request) { // Store in command history exitCode := result.ExitCode historyRepo := repository.NewCommandHistoryRepository(s.db) - _, err = historyRepo.Create(&models.CommandHistoryCreate{ + _, histErr := historyRepo.Create(&models.CommandHistoryCreate{ Command: fmt.Sprintf("[Script: %s] %s", script.Name, script.Content[:min(100, len(script.Content))]), Output: result.Output, ExitCode: &exitCode, @@ -1666,10 +1858,13 @@ func (s *Server) handleExecuteScript(w http.ResponseWriter, r *http.Request) { User: exec.User, ExecutionTimeMs: result.ExecutionTime, }) - if err != nil { - log.Printf("Warning: failed to save command history: %v", err) + if histErr != nil { + log.Printf("Warning: failed to save command history: %v", histErr) } + // Audit log the script execution + audit.GetLogger().LogScriptExecution(r, script.Name, exec.User, serverName, exitCode, result.ExecutionTime, result.Error) + // Return result - include error in output if present scriptOutput := result.Output if result.Error != nil && scriptOutput == "" { @@ -1717,9 +1912,9 @@ func (s *Server) handleExecuteScriptStream(w http.ResponseWriter, r *http.Reques return } - // Validate input - if exec.ScriptID == 0 { - http.Error(w, "Script ID is required", http.StatusBadRequest) + // Validate input - either ScriptID or ScriptName must be provided + if exec.ScriptID == 0 && exec.ScriptName == "" { + http.Error(w, "Script ID or Script Name is required", http.StatusBadRequest) return } @@ -1731,13 +1926,28 @@ func (s *Server) handleExecuteScriptStream(w http.ResponseWriter, r *http.Reques return } - // Fetch the script - scriptRepo := repository.NewBashScriptRepository(s.db) - script, err := scriptRepo.GetByID(exec.ScriptID) - if err != nil { - log.Printf("Error fetching script: %v", err) - http.Error(w, "Script not found", http.StatusNotFound) - return + // Fetch the script - support both ID (SQLite) and Name (Vault) + var script *models.BashScript + var err error + if exec.ScriptID > 0 { + scriptRepo := repository.NewBashScriptRepository(s.db) + script, err = scriptRepo.GetByID(exec.ScriptID) + if err != nil { + log.Printf("Error fetching script by ID: %v", err) + http.Error(w, "Script not found", http.StatusNotFound) + return + } + } else if exec.ScriptName != "" { + script, err = s.getScriptByNameFromVault(r.Context(), exec.ScriptGroup, exec.ScriptName) + if err != nil { + log.Printf("Error fetching script from Vault: %v", err) + http.Error(w, "Script not found in Vault", http.StatusNotFound) + return + } + if script == nil { + http.Error(w, "Script not found in Vault", http.StatusNotFound) + return + } } // Build the script content with optional env vars @@ -1747,7 +1957,8 @@ func (s *Server) handleExecuteScriptStream(w http.ResponseWriter, r *http.Reques // Determine which env vars to include envRepo := repository.NewEnvVariableRepository(s.db) - if len(exec.EnvVarIDs) > 0 { + if len(exec.EnvVarIDs) > 0 || len(exec.EnvVarNames) > 0 { + // Fetch specific environment variables by ID (SQLite) for _, envVarID := range exec.EnvVarIDs { envVar, err := envRepo.GetByID(envVarID) if err != nil { @@ -1758,6 +1969,26 @@ func (s *Server) handleExecuteScriptStream(w http.ResponseWriter, r *http.Reques scriptContent.WriteString(fmt.Sprintf("export %s='%s'\n", envVar.Name, escapedValue)) envVarsCount++ } + // Fetch specific environment variables by Name (Vault) + for i, envVarName := range exec.EnvVarNames { + // Get group from EnvVarGroups if available, otherwise use default + envVarGroup := "default" + if i < len(exec.EnvVarGroups) { + envVarGroup = exec.EnvVarGroups[i] + } + envVar, err := s.getEnvVariableByNameFromVault(r.Context(), envVarGroup, envVarName) + if err != nil { + log.Printf("Warning: env variable '%s' not found in Vault: %v", envVarName, err) + continue + } + if envVar == nil { + log.Printf("Warning: env variable '%s' not found in Vault", envVarName) + continue + } + escapedValue := strings.ReplaceAll(envVar.Value, "'", "'\\''") + scriptContent.WriteString(fmt.Sprintf("export %s='%s'\n", envVar.Name, escapedValue)) + envVarsCount++ + } } else if exec.IncludeEnvVars { envVars, err := envRepo.GetAll() if err != nil { @@ -1796,29 +2027,60 @@ func (s *Server) handleExecuteScriptStream(w http.ResponseWriter, r *http.Reques if exec.IsRemote { // Remote execution via SSH with streaming - if exec.ServerID == nil { - sendSSE(w, flusher, "error", "Server ID is required for remote execution") - return - } + var server *models.Server - serverRepo := repository.NewServerRepository(s.db) - server, err := serverRepo.GetByID(*exec.ServerID) - if err != nil { - log.Printf("Error fetching server: %v", err) - sendSSE(w, flusher, "error", "Server not found") + // Get server details - support both ID (SQLite) and Name (Vault) + if exec.ServerID != nil && *exec.ServerID > 0 { + serverRepo := repository.NewServerRepository(s.db) + server, err = serverRepo.GetByID(*exec.ServerID) + if err != nil { + log.Printf("Error fetching server by ID: %v", err) + sendSSE(w, flusher, "error", "Server not found") + return + } + } else if exec.ServerName != "" { + server, err = s.getServerByNameFromVault(r.Context(), exec.ServerGroup, exec.ServerName) + if err != nil { + log.Printf("Error fetching server from Vault: %v", err) + sendSSE(w, flusher, "error", "Server not found in Vault") + return + } + if server == nil { + sendSSE(w, flusher, "error", "Server not found in Vault") + return + } + } else { + sendSSE(w, flusher, "error", "Server ID or Server Name is required for remote execution") return } + // Get SSH key if provided - support both ID (SQLite) and Name (Vault) var privateKey string - if exec.SSHKeyID != nil { + if exec.SSHKeyID != nil && *exec.SSHKeyID > 0 { keyRepo := repository.NewSSHKeyRepository(s.db) key, err := keyRepo.GetByID(*exec.SSHKeyID) if err != nil { - log.Printf("Error fetching SSH key: %v", err) + log.Printf("Error fetching SSH key by ID: %v", err) sendSSE(w, flusher, "error", "SSH key not found") return } privateKey = key.PrivateKey + } else if exec.SSHKeyName != "" { + key, err := s.getSSHKeyByNameFromVault(r.Context(), exec.SSHKeyGroup, exec.SSHKeyName) + if err != nil { + log.Printf("Error fetching SSH key from Vault: %v", err) + sendSSE(w, flusher, "error", "SSH key not found in Vault") + return + } + if key == nil { + sendSSE(w, flusher, "error", fmt.Sprintf("SSH key '%s' not found in Vault", exec.SSHKeyName)) + return + } + if key.PrivateKey == "" { + sendSSE(w, flusher, "error", fmt.Sprintf("SSH key '%s' has no private key data in Vault", exec.SSHKeyName)) + return + } + privateKey = key.PrivateKey } if server.Name != "" { @@ -1866,6 +2128,9 @@ func (s *Server) handleExecuteScriptStream(w http.ResponseWriter, r *http.Reques log.Printf("Warning: failed to save command history: %v", err) } + // Audit log the script execution + audit.GetLogger().LogScriptExecution(r, script.Name, exec.User, serverName, exitCode, result.ExecutionTime, result.Error) + // Send final result scriptResult := models.ScriptResult{ ScriptID: script.ID, @@ -1909,6 +2174,9 @@ func (s *Server) handleExecuteScriptStream(w http.ResponseWriter, r *http.Reques log.Printf("Warning: failed to save command history: %v", err) } + // Audit log the script execution + audit.GetLogger().LogScriptExecution(r, script.Name, exec.User, serverName, exitCode, result.ExecutionTime, result.Error) + // Send final result scriptOutput := result.Output if result.Error != nil && scriptOutput == "" { @@ -2262,3 +2530,168 @@ func (s *Server) handleGetScriptPresetsByScript(w http.ResponseWriter, r *http.R w.Header().Set("Content-Type", "application/json") json.NewEncoder(w).Encode(responses) } + +// handleListSSHKeyGroups godoc +// @Summary List all SSH key groups +// @Description Get a list of all distinct group names for SSH keys +// @Tags SSH Keys +// @Accept json +// @Produce json +// @Success 200 {array} string +// @Failure 500 {object} ErrorResponse +// @Security BasicAuth +// @Router /keys/groups [get] +func (s *Server) handleListSSHKeyGroups(w http.ResponseWriter, r *http.Request) { + repo := repository.NewSSHKeyRepository(s.db) + + groups, err := repo.GetGroups() + if err != nil { + log.Printf("Error fetching SSH key groups: %v", err) + http.Error(w, "Failed to fetch groups", http.StatusInternalServerError) + return + } + + // Merge with Vault groups if available + client := s.getVaultClientIfEnabled() + if client != nil { + vaultGroups, err := client.ListSSHKeyGroups(r.Context()) + if err == nil { + // Add Vault groups that don't exist in SQLite + groupSet := make(map[string]bool) + for _, g := range groups { + groupSet[g] = true + } + for _, g := range vaultGroups { + if !groupSet[g] { + groups = append(groups, g) + } + } + } + } + + w.Header().Set("Content-Type", "application/json") + json.NewEncoder(w).Encode(groups) +} + +// handleListServerGroups godoc +// @Summary List all server groups +// @Description Get a list of all distinct group names for servers +// @Tags Servers +// @Accept json +// @Produce json +// @Success 200 {array} string +// @Failure 500 {object} ErrorResponse +// @Security BasicAuth +// @Router /servers/groups [get] +func (s *Server) handleListServerGroups(w http.ResponseWriter, r *http.Request) { + repo := repository.NewServerRepository(s.db) + + groups, err := repo.GetGroups() + if err != nil { + log.Printf("Error fetching server groups: %v", err) + http.Error(w, "Failed to fetch groups", http.StatusInternalServerError) + return + } + + // Merge with Vault groups if available + client := s.getVaultClientIfEnabled() + if client != nil { + vaultGroups, err := client.ListServerGroups(r.Context()) + if err == nil { + groupSet := make(map[string]bool) + for _, g := range groups { + groupSet[g] = true + } + for _, g := range vaultGroups { + if !groupSet[g] { + groups = append(groups, g) + } + } + } + } + + w.Header().Set("Content-Type", "application/json") + json.NewEncoder(w).Encode(groups) +} + +// handleListEnvVariableGroups godoc +// @Summary List all environment variable groups +// @Description Get a list of all distinct group names for environment variables +// @Tags Environment Variables +// @Accept json +// @Produce json +// @Success 200 {array} string +// @Failure 500 {object} ErrorResponse +// @Security BasicAuth +// @Router /env-variables/groups [get] +func (s *Server) handleListEnvVariableGroups(w http.ResponseWriter, r *http.Request) { + repo := repository.NewEnvVariableRepository(s.db) + + groups, err := repo.GetGroups() + if err != nil { + log.Printf("Error fetching environment variable groups: %v", err) + http.Error(w, "Failed to fetch groups", http.StatusInternalServerError) + return + } + + // Merge with Vault groups if available + client := s.getVaultClientIfEnabled() + if client != nil { + vaultGroups, err := client.ListEnvVariableGroups(r.Context()) + if err == nil { + groupSet := make(map[string]bool) + for _, g := range groups { + groupSet[g] = true + } + for _, g := range vaultGroups { + if !groupSet[g] { + groups = append(groups, g) + } + } + } + } + + w.Header().Set("Content-Type", "application/json") + json.NewEncoder(w).Encode(groups) +} + +// handleListBashScriptGroups godoc +// @Summary List all bash script groups +// @Description Get a list of all distinct group names for bash scripts +// @Tags Bash Scripts +// @Accept json +// @Produce json +// @Success 200 {array} string +// @Failure 500 {object} ErrorResponse +// @Security BasicAuth +// @Router /bash-scripts/groups [get] +func (s *Server) handleListBashScriptGroups(w http.ResponseWriter, r *http.Request) { + repo := repository.NewBashScriptRepository(s.db) + + groups, err := repo.GetGroups() + if err != nil { + log.Printf("Error fetching bash script groups: %v", err) + http.Error(w, "Failed to fetch groups", http.StatusInternalServerError) + return + } + + // Merge with Vault groups if available + client := s.getVaultClientIfEnabled() + if client != nil { + vaultGroups, err := client.ListBashScriptGroups(r.Context()) + if err == nil { + groupSet := make(map[string]bool) + for _, g := range groups { + groupSet[g] = true + } + for _, g := range vaultGroups { + if !groupSet[g] { + groups = append(groups, g) + } + } + } + } + + w.Header().Set("Content-Type", "application/json") + json.NewEncoder(w).Encode(groups) +} diff --git a/internal/server/handlers_terminal.go b/internal/server/handlers_terminal.go index 892ca01..98db977 100644 --- a/internal/server/handlers_terminal.go +++ b/internal/server/handlers_terminal.go @@ -1,9 +1,11 @@ package server import ( + "context" "log" "net/http" "strconv" + "time" "github.com/gorilla/websocket" "github.com/pozgo/web-cli/internal/repository" @@ -46,13 +48,47 @@ func (s *Server) handleTerminalWebSocket(w http.ResponseWriter, r *http.Request) // Check if SSH key is requested var sshPrivateKey string - if sshKeyIDStr := r.URL.Query().Get("sshKeyId"); sshKeyIDStr != "" { - sshKeyID, err := strconv.ParseInt(sshKeyIDStr, 10, 64) - if err == nil { - repo := repository.NewSSHKeyRepository(s.db) - key, err := repo.GetByID(sshKeyID) + sshKeyID := r.URL.Query().Get("sshKeyId") + sshKeySource := r.URL.Query().Get("sshKeySource") + + if sshKeyID != "" { + if sshKeySource == "vault" { + // Fetch SSH key from Vault by name + client, err := s.getVaultClient() + if err == nil { + ctx, cancel := context.WithTimeout(r.Context(), 10*time.Second) + defer cancel() + // Try to get key from default group first, then try without group + key, err := client.GetSSHKey(ctx, "default", sshKeyID) + if err != nil || key == nil { + // Try listing all groups and searching + groups, _ := client.ListSSHKeyGroups(ctx) + for _, group := range groups { + key, err = client.GetSSHKey(ctx, group, sshKeyID) + if err == nil && key != nil { + break + } + } + } + if key != nil { + sshPrivateKey = key.PrivateKey + log.Printf("Loaded SSH key '%s' from Vault", sshKeyID) + } else { + log.Printf("Failed to find SSH key '%s' in Vault", sshKeyID) + } + } else { + log.Printf("Failed to get Vault client for SSH key: %v", err) + } + } else { + // Fetch SSH key from local database by ID + keyID, err := strconv.ParseInt(sshKeyID, 10, 64) if err == nil { - sshPrivateKey = key.PrivateKey + repo := repository.NewSSHKeyRepository(s.db) + key, err := repo.GetByID(keyID) + if err == nil { + sshPrivateKey = key.PrivateKey + log.Printf("Loaded SSH key ID %d from local database", keyID) + } } } } diff --git a/internal/server/handlers_vault.go b/internal/server/handlers_vault.go new file mode 100644 index 0000000..d7a3698 --- /dev/null +++ b/internal/server/handlers_vault.go @@ -0,0 +1,815 @@ +package server + +import ( + "context" + "encoding/json" + "log" + "net/http" + "time" + + "github.com/pozgo/web-cli/internal/models" + "github.com/pozgo/web-cli/internal/repository" + "github.com/pozgo/web-cli/internal/vault" +) + +// handleGetVaultConfig godoc +// @Summary Get Vault configuration +// @Description Retrieve the current Vault configuration (token is never returned) +// @Tags Vault +// @Produce json +// @Success 200 {object} models.VaultConfigResponse +// @Failure 500 {object} ErrorResponse +// @Security BasicAuth +// @Router /vault/config [get] +func (s *Server) handleGetVaultConfig(w http.ResponseWriter, r *http.Request) { + repo := repository.NewVaultConfigRepository(s.db) + cfg, err := repo.Get() + if err != nil { + log.Printf("Error getting vault config: %v", err) + http.Error(w, "Failed to get vault configuration", http.StatusInternalServerError) + return + } + + if cfg == nil { + // Return empty response if not configured + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(http.StatusOK) + json.NewEncoder(w).Encode(models.VaultConfigResponse{}) + return + } + + w.Header().Set("Content-Type", "application/json") + json.NewEncoder(w).Encode(cfg.ToResponse()) +} + +// handleCreateOrUpdateVaultConfig godoc +// @Summary Create or update Vault configuration +// @Description Configure or update the Vault connection settings +// @Tags Vault +// @Accept json +// @Produce json +// @Param config body models.VaultConfigCreate true "Vault configuration" +// @Success 200 {object} models.VaultConfigResponse +// @Failure 400 {object} ErrorResponse +// @Failure 500 {object} ErrorResponse +// @Security BasicAuth +// @Router /vault/config [post] +func (s *Server) handleCreateOrUpdateVaultConfig(w http.ResponseWriter, r *http.Request) { + var create models.VaultConfigCreate + if err := json.NewDecoder(r.Body).Decode(&create); err != nil { + http.Error(w, "Invalid request body", http.StatusBadRequest) + return + } + + // Validate required fields + if create.Address == "" { + http.Error(w, "Vault address is required", http.StatusBadRequest) + return + } + + if create.Token == "" { + // If no token provided, check if we're updating existing config + repo := repository.NewVaultConfigRepository(s.db) + existing, _ := repo.Get() + if existing == nil || existing.Token == "" { + http.Error(w, "Vault token is required", http.StatusBadRequest) + return + } + // Use existing token + create.Token = existing.Token + } + + // Set default mount path + if create.MountPath == "" { + create.MountPath = "secret" + } + + repo := repository.NewVaultConfigRepository(s.db) + cfg, err := repo.CreateOrUpdate(&create) + if err != nil { + log.Printf("Error saving vault config: %v", err) + http.Error(w, "Failed to save vault configuration", http.StatusInternalServerError) + return + } + + // If Vault is enabled, initialize the structure automatically + if cfg.Enabled { + go func() { + vaultCfg := &vault.Config{ + Address: cfg.Address, + Token: cfg.Token, + Namespace: cfg.Namespace, + MountPath: cfg.MountPath, + } + + client, err := vault.NewClient(vaultCfg) + if err != nil { + log.Printf("Warning: Failed to create Vault client for structure initialization: %v", err) + return + } + + ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) + defer cancel() + + if err := client.InitializeStructure(ctx); err != nil { + log.Printf("Warning: Failed to initialize Vault structure: %v", err) + } + }() + } + + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(http.StatusOK) + json.NewEncoder(w).Encode(cfg.ToResponse()) +} + +// handleDeleteVaultConfig godoc +// @Summary Delete Vault configuration +// @Description Remove the Vault configuration +// @Tags Vault +// @Success 204 "No Content" +// @Failure 500 {object} ErrorResponse +// @Security BasicAuth +// @Router /vault/config [delete] +func (s *Server) handleDeleteVaultConfig(w http.ResponseWriter, r *http.Request) { + repo := repository.NewVaultConfigRepository(s.db) + if err := repo.Delete(); err != nil { + log.Printf("Error deleting vault config: %v", err) + http.Error(w, "Failed to delete vault configuration", http.StatusInternalServerError) + return + } + + w.WriteHeader(http.StatusNoContent) +} + +// handleTestVaultConnection godoc +// @Summary Test Vault connection +// @Description Test the connection to Vault and initialize the secrets structure +// @Tags Vault +// @Produce json +// @Success 200 {object} models.VaultStatus +// @Failure 400 {object} ErrorResponse +// @Failure 500 {object} ErrorResponse +// @Security BasicAuth +// @Router /vault/test [post] +func (s *Server) handleTestVaultConnection(w http.ResponseWriter, r *http.Request) { + repo := repository.NewVaultConfigRepository(s.db) + cfg, err := repo.Get() + if err != nil { + log.Printf("Error getting vault config: %v", err) + http.Error(w, "Failed to get vault configuration", http.StatusInternalServerError) + return + } + + if cfg == nil { + http.Error(w, "Vault is not configured", http.StatusBadRequest) + return + } + + // Create Vault client + vaultCfg := &vault.Config{ + Address: cfg.Address, + Token: cfg.Token, + Namespace: cfg.Namespace, + MountPath: cfg.MountPath, + } + + client, err := vault.NewClient(vaultCfg) + if err != nil { + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(http.StatusOK) + json.NewEncoder(w).Encode(models.VaultStatus{ + Configured: true, + Enabled: cfg.Enabled, + Connected: false, + Address: cfg.Address, + Error: err.Error(), + }) + return + } + + // Test connection with timeout + ctx, cancel := context.WithTimeout(r.Context(), 10*time.Second) + defer cancel() + + if err := client.TestConnection(ctx); err != nil { + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(http.StatusOK) + json.NewEncoder(w).Encode(models.VaultStatus{ + Configured: true, + Enabled: cfg.Enabled, + Connected: false, + Address: cfg.Address, + Error: err.Error(), + }) + return + } + + // Connection successful - initialize structure in background + go func() { + initCtx, initCancel := context.WithTimeout(context.Background(), 30*time.Second) + defer initCancel() + + if err := client.InitializeStructure(initCtx); err != nil { + log.Printf("Warning: Failed to initialize Vault structure: %v", err) + } + }() + + // Check health status + var vaultSealed bool + health, err := client.GetHealth(ctx) + if err == nil && health != nil { + vaultSealed = health.Sealed + } + + w.Header().Set("Content-Type", "application/json") + json.NewEncoder(w).Encode(models.VaultStatus{ + Configured: true, + Enabled: cfg.Enabled, + Connected: true, + Address: cfg.Address, + VaultSealed: vaultSealed, + }) +} + +// handleGetVaultStatus godoc +// @Summary Get Vault connection status +// @Description Check the current Vault connection status +// @Tags Vault +// @Produce json +// @Success 200 {object} models.VaultStatus +// @Failure 500 {object} ErrorResponse +// @Security BasicAuth +// @Router /vault/status [get] +func (s *Server) handleGetVaultStatus(w http.ResponseWriter, r *http.Request) { + repo := repository.NewVaultConfigRepository(s.db) + cfg, err := repo.Get() + if err != nil { + log.Printf("Error getting vault config: %v", err) + http.Error(w, "Failed to get vault configuration", http.StatusInternalServerError) + return + } + + if cfg == nil { + w.Header().Set("Content-Type", "application/json") + json.NewEncoder(w).Encode(models.VaultStatus{ + Configured: false, + Enabled: false, + Connected: false, + }) + return + } + + status := models.VaultStatus{ + Configured: true, + Enabled: cfg.Enabled, + Connected: false, + Address: cfg.Address, + } + + // Only test connection if enabled + if cfg.Enabled { + vaultCfg := &vault.Config{ + Address: cfg.Address, + Token: cfg.Token, + Namespace: cfg.Namespace, + MountPath: cfg.MountPath, + } + + client, err := vault.NewClient(vaultCfg) + if err != nil { + status.Error = err.Error() + } else { + ctx, cancel := context.WithTimeout(r.Context(), 5*time.Second) + defer cancel() + + if err := client.TestConnection(ctx); err != nil { + status.Error = err.Error() + } else { + status.Connected = true + + // Check health + health, err := client.GetHealth(ctx) + if err == nil && health != nil { + status.VaultSealed = health.Sealed + } + } + } + } + + w.Header().Set("Content-Type", "application/json") + json.NewEncoder(w).Encode(status) +} + +// handleListVaultSSHKeys godoc +// @Summary List SSH keys from Vault +// @Description Retrieve all SSH keys stored in Vault +// @Tags Vault +// @Produce json +// @Success 200 {array} vault.SSHKey +// @Failure 400 {object} ErrorResponse +// @Failure 500 {object} ErrorResponse +// @Security BasicAuth +// @Router /vault/ssh-keys [get] +func (s *Server) handleListVaultSSHKeys(w http.ResponseWriter, r *http.Request) { + client, err := s.getVaultClient() + if err != nil { + log.Printf("Error getting vault client: %v", err) + http.Error(w, sanitizeVaultError(err), http.StatusBadRequest) + return + } + + ctx, cancel := context.WithTimeout(r.Context(), 30*time.Second) + defer cancel() + + keys, err := client.ListSSHKeys(ctx) + if err != nil { + log.Printf("Error listing vault SSH keys: %v", err) + http.Error(w, "Failed to list SSH keys from Vault", http.StatusInternalServerError) + return + } + + w.Header().Set("Content-Type", "application/json") + json.NewEncoder(w).Encode(keys) +} + +// handleListVaultServers godoc +// @Summary List servers from Vault +// @Description Retrieve all server configurations stored in Vault +// @Tags Vault +// @Produce json +// @Success 200 {array} vault.Server +// @Failure 400 {object} ErrorResponse +// @Failure 500 {object} ErrorResponse +// @Security BasicAuth +// @Router /vault/servers [get] +func (s *Server) handleListVaultServers(w http.ResponseWriter, r *http.Request) { + client, err := s.getVaultClient() + if err != nil { + http.Error(w, sanitizeVaultError(err), http.StatusBadRequest) + return + } + + ctx, cancel := context.WithTimeout(r.Context(), 30*time.Second) + defer cancel() + + servers, err := client.ListServers(ctx) + if err != nil { + log.Printf("Error listing vault servers: %v", err) + http.Error(w, "Failed to list servers from Vault", http.StatusInternalServerError) + return + } + + w.Header().Set("Content-Type", "application/json") + json.NewEncoder(w).Encode(servers) +} + +// handleListVaultEnvVariables godoc +// @Summary List environment variables from Vault +// @Description Retrieve all environment variables stored in Vault +// @Tags Vault +// @Produce json +// @Success 200 {array} vault.EnvVariable +// @Failure 400 {object} ErrorResponse +// @Failure 500 {object} ErrorResponse +// @Security BasicAuth +// @Router /vault/env-variables [get] +func (s *Server) handleListVaultEnvVariables(w http.ResponseWriter, r *http.Request) { + client, err := s.getVaultClient() + if err != nil { + http.Error(w, sanitizeVaultError(err), http.StatusBadRequest) + return + } + + ctx, cancel := context.WithTimeout(r.Context(), 30*time.Second) + defer cancel() + + vars, err := client.ListEnvVariables(ctx) + if err != nil { + log.Printf("Error listing vault env variables: %v", err) + http.Error(w, "Failed to list environment variables from Vault", http.StatusInternalServerError) + return + } + + w.Header().Set("Content-Type", "application/json") + json.NewEncoder(w).Encode(vars) +} + +// handleListVaultScripts godoc +// @Summary List bash scripts from Vault +// @Description Retrieve all bash scripts stored in Vault +// @Tags Vault +// @Produce json +// @Success 200 {array} vault.BashScript +// @Failure 400 {object} ErrorResponse +// @Failure 500 {object} ErrorResponse +// @Security BasicAuth +// @Router /vault/bash-scripts [get] +func (s *Server) handleListVaultScripts(w http.ResponseWriter, r *http.Request) { + client, err := s.getVaultClient() + if err != nil { + http.Error(w, sanitizeVaultError(err), http.StatusBadRequest) + return + } + + ctx, cancel := context.WithTimeout(r.Context(), 30*time.Second) + defer cancel() + + scripts, err := client.ListBashScripts(ctx) + if err != nil { + log.Printf("Error listing vault scripts: %v", err) + http.Error(w, "Failed to list scripts from Vault", http.StatusInternalServerError) + return + } + + w.Header().Set("Content-Type", "application/json") + json.NewEncoder(w).Encode(scripts) +} + +// getVaultClient creates a Vault client from stored configuration +func (s *Server) getVaultClient() (*vault.Client, error) { + repo := repository.NewVaultConfigRepository(s.db) + cfg, err := repo.Get() + if err != nil { + return nil, err + } + + if cfg == nil { + return nil, &VaultNotConfiguredError{} + } + + if !cfg.Enabled { + return nil, &VaultDisabledError{} + } + + vaultCfg := &vault.Config{ + Address: cfg.Address, + Token: cfg.Token, + Namespace: cfg.Namespace, + MountPath: cfg.MountPath, + } + + return vault.NewClient(vaultCfg) +} + +// VaultNotConfiguredError is returned when Vault is not configured +type VaultNotConfiguredError struct{} + +func (e *VaultNotConfiguredError) Error() string { + return "Vault is not configured" +} + +// VaultDisabledError is returned when Vault is disabled +type VaultDisabledError struct{} + +func (e *VaultDisabledError) Error() string { + return "Vault integration is disabled" +} + +// sanitizeVaultError returns a safe error message for API responses +// This prevents leaking internal details like IP addresses, paths, or stack traces +func sanitizeVaultError(err error) string { + if err == nil { + return "Unknown error" + } + + // Check for known safe error types + switch err.(type) { + case *VaultNotConfiguredError: + return err.Error() + case *VaultDisabledError: + return err.Error() + } + + // Check error message for safe patterns + errMsg := err.Error() + + // Safe messages that can be returned directly + safeMessages := []string{ + "Vault is not configured", + "Vault integration is disabled", + "vault address is required", + "vault token is required", + "vault config is nil", + } + + for _, safe := range safeMessages { + if errMsg == safe { + return errMsg + } + } + + // For validation errors, return them (they don't contain sensitive info) + if containsAny(errMsg, []string{ + "invalid secret type", + "invalid group name", + "invalid secret name", + "invalid vault address", + "cannot be empty", + "cannot contain", + "too long", + }) { + return errMsg + } + + // Generic message for all other errors to prevent information leakage + return "Vault operation failed" +} + +// containsAny checks if the string contains any of the substrings +func containsAny(s string, substrs []string) bool { + for _, substr := range substrs { + if len(s) >= len(substr) { + for i := 0; i <= len(s)-len(substr); i++ { + if s[i:i+len(substr)] == substr { + return true + } + } + } + } + return false +} + +// handleCreateVaultSSHKey godoc +// @Summary Create SSH key in Vault +// @Description Store a new SSH key in Vault +// @Tags Vault +// @Accept json +// @Produce json +// @Param key body object{name=string,private_key=string,group=string} true "SSH Key" +// @Success 201 {object} object{name=string,group=string,created_at=string,source=string} +// @Failure 400 {object} ErrorResponse +// @Failure 500 {object} ErrorResponse +// @Security BasicAuth +// @Router /vault/ssh-keys [post] +func (s *Server) handleCreateVaultSSHKey(w http.ResponseWriter, r *http.Request) { + client, err := s.getVaultClient() + if err != nil { + http.Error(w, sanitizeVaultError(err), http.StatusBadRequest) + return + } + + var req struct { + Name string `json:"name"` + PrivateKey string `json:"private_key"` + Group string `json:"group"` + } + + if err := json.NewDecoder(r.Body).Decode(&req); err != nil { + http.Error(w, "Invalid request body", http.StatusBadRequest) + return + } + + if req.Name == "" || req.PrivateKey == "" { + http.Error(w, "Name and private_key are required", http.StatusBadRequest) + return + } + + if req.Group == "" { + req.Group = "default" + } + + ctx, cancel := context.WithTimeout(r.Context(), 30*time.Second) + defer cancel() + + key := &vault.SSHKey{ + Name: req.Name, + PrivateKey: req.PrivateKey, + Group: req.Group, + CreatedAt: time.Now(), + } + + if err := client.SaveSSHKey(ctx, key); err != nil { + log.Printf("Error saving SSH key to Vault: %v", err) + http.Error(w, "Failed to save SSH key to Vault", http.StatusInternalServerError) + return + } + + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(http.StatusCreated) + json.NewEncoder(w).Encode(map[string]interface{}{ + "name": key.Name, + "group": key.Group, + "created_at": key.CreatedAt, + "source": "vault", + }) +} + +// handleCreateVaultServer godoc +// @Summary Create server in Vault +// @Description Store a new server configuration in Vault +// @Tags Vault +// @Accept json +// @Produce json +// @Param server body object{name=string,ip_address=string,port=int,username=string,group=string} true "Server" +// @Success 201 {object} object{name=string,ip_address=string,port=int,username=string,group=string,source=string} +// @Failure 400 {object} ErrorResponse +// @Failure 500 {object} ErrorResponse +// @Security BasicAuth +// @Router /vault/servers [post] +func (s *Server) handleCreateVaultServer(w http.ResponseWriter, r *http.Request) { + client, err := s.getVaultClient() + if err != nil { + http.Error(w, sanitizeVaultError(err), http.StatusBadRequest) + return + } + + var req struct { + Name string `json:"name"` + IPAddress string `json:"ip_address"` + Port int `json:"port"` + Username string `json:"username"` + Group string `json:"group"` + } + + if err := json.NewDecoder(r.Body).Decode(&req); err != nil { + http.Error(w, "Invalid request body", http.StatusBadRequest) + return + } + + // At least one of name or ip_address is required + if req.Name == "" && req.IPAddress == "" { + http.Error(w, "At least one of name or ip_address is required", http.StatusBadRequest) + return + } + + // Use name as identifier, fallback to ip_address + identifier := req.Name + if identifier == "" { + identifier = req.IPAddress + } + + if req.Group == "" { + req.Group = "default" + } + + if req.Port == 0 { + req.Port = 22 + } + + if req.Username == "" { + req.Username = "root" + } + + ctx, cancel := context.WithTimeout(r.Context(), 30*time.Second) + defer cancel() + + srv := &vault.Server{ + Name: identifier, + IPAddress: req.IPAddress, + Port: req.Port, + Username: req.Username, + Group: req.Group, + } + + if err := client.SaveServer(ctx, srv); err != nil { + log.Printf("Error saving server to Vault: %v", err) + http.Error(w, "Failed to save server to Vault", http.StatusInternalServerError) + return + } + + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(http.StatusCreated) + json.NewEncoder(w).Encode(map[string]interface{}{ + "name": srv.Name, + "ip_address": srv.IPAddress, + "port": srv.Port, + "username": srv.Username, + "group": srv.Group, + "source": "vault", + }) +} + +// handleCreateVaultEnvVariable godoc +// @Summary Create environment variable in Vault +// @Description Store a new environment variable in Vault +// @Tags Vault +// @Accept json +// @Produce json +// @Param envVar body object{name=string,value=string,description=string,group=string} true "Environment Variable" +// @Success 201 {object} object{name=string,description=string,group=string,source=string} +// @Failure 400 {object} ErrorResponse +// @Failure 500 {object} ErrorResponse +// @Security BasicAuth +// @Router /vault/env-variables [post] +func (s *Server) handleCreateVaultEnvVariable(w http.ResponseWriter, r *http.Request) { + client, err := s.getVaultClient() + if err != nil { + http.Error(w, sanitizeVaultError(err), http.StatusBadRequest) + return + } + + var req struct { + Name string `json:"name"` + Value string `json:"value"` + Description string `json:"description"` + Group string `json:"group"` + } + + if err := json.NewDecoder(r.Body).Decode(&req); err != nil { + http.Error(w, "Invalid request body", http.StatusBadRequest) + return + } + + if req.Name == "" || req.Value == "" { + http.Error(w, "Name and value are required", http.StatusBadRequest) + return + } + + if req.Group == "" { + req.Group = "default" + } + + ctx, cancel := context.WithTimeout(r.Context(), 30*time.Second) + defer cancel() + + envVar := &vault.EnvVariable{ + Name: req.Name, + Value: req.Value, + Description: req.Description, + Group: req.Group, + } + + if err := client.SaveEnvVariable(ctx, envVar); err != nil { + log.Printf("Error saving env variable to Vault: %v", err) + http.Error(w, "Failed to save environment variable to Vault", http.StatusInternalServerError) + return + } + + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(http.StatusCreated) + json.NewEncoder(w).Encode(map[string]interface{}{ + "name": envVar.Name, + "description": envVar.Description, + "group": envVar.Group, + "source": "vault", + }) +} + +// handleCreateVaultScript godoc +// @Summary Store bash script in Vault +// @Description Create a new bash script in HashiCorp Vault storage +// @Tags Vault +// @Accept json +// @Produce json +// @Param script body object true "Bash script data" example({"name":"deploy-script","description":"Production deployment script","content":"#!/bin/bash\necho 'Deploying...'","filename":"deploy.sh","group":"production"}) +// @Success 201 {object} map[string]interface{} "Created script info with source field" +// @Failure 400 {string} string "Invalid request or Vault not configured" +// @Failure 500 {string} string "Failed to store script" +// @Security BasicAuth +// @Router /vault/bash-scripts [post] +func (s *Server) handleCreateVaultScript(w http.ResponseWriter, r *http.Request) { + client, err := s.getVaultClient() + if err != nil { + http.Error(w, sanitizeVaultError(err), http.StatusBadRequest) + return + } + + var req struct { + Name string `json:"name"` + Description string `json:"description"` + Content string `json:"content"` + Filename string `json:"filename"` + Group string `json:"group"` + } + + if err := json.NewDecoder(r.Body).Decode(&req); err != nil { + http.Error(w, "Invalid request body", http.StatusBadRequest) + return + } + + if req.Name == "" || req.Content == "" { + http.Error(w, "Name and content are required", http.StatusBadRequest) + return + } + + if req.Group == "" { + req.Group = "default" + } + + ctx, cancel := context.WithTimeout(r.Context(), 30*time.Second) + defer cancel() + + script := &vault.BashScript{ + Name: req.Name, + Description: req.Description, + Content: req.Content, + Filename: req.Filename, + Group: req.Group, + } + + if err := client.SaveBashScript(ctx, script); err != nil { + log.Printf("Error saving script to Vault: %v", err) + http.Error(w, "Failed to save script to Vault", http.StatusInternalServerError) + return + } + + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(http.StatusCreated) + json.NewEncoder(w).Encode(map[string]interface{}{ + "name": script.Name, + "description": script.Description, + "filename": script.Filename, + "group": script.Group, + "source": "vault", + }) +} diff --git a/internal/server/server.go b/internal/server/server.go index cbbe97c..0bab424 100644 --- a/internal/server/server.go +++ b/internal/server/server.go @@ -8,7 +8,6 @@ import ( "os" "path/filepath" "strings" - "time" "github.com/gorilla/mux" "github.com/pozgo/web-cli/internal/config" @@ -29,7 +28,14 @@ type Server struct { } // New creates a new Server instance -func New(cfg *config.Config, db *database.DB) *Server { +// Returns an error if critical configuration validation fails (e.g., auth misconfigured) +func New(cfg *config.Config, db *database.DB) (*Server, error) { + // Validate authentication configuration at startup + authConfig := middleware.LoadAuthConfig() + if err := authConfig.Validate(); err != nil { + return nil, err + } + s := &Server{ config: cfg, router: mux.NewRouter(), @@ -38,7 +44,7 @@ func New(cfg *config.Config, db *database.DB) *Server { s.setupRoutes() - return s + return s, nil } // setupRoutes configures all HTTP routes @@ -58,6 +64,7 @@ func (s *Server) setupRoutes() { // SSH Keys endpoints api.HandleFunc("/keys", s.handleListSSHKeys).Methods("GET") api.HandleFunc("/keys", s.handleCreateSSHKey).Methods("POST") + api.HandleFunc("/keys/groups", s.handleListSSHKeyGroups).Methods("GET") api.HandleFunc("/keys/{id}", s.handleGetSSHKey).Methods("GET") api.HandleFunc("/keys/{id}", s.handleUpdateSSHKey).Methods("PUT") api.HandleFunc("/keys/{id}", s.handleDeleteSSHKey).Methods("DELETE") @@ -65,6 +72,7 @@ func (s *Server) setupRoutes() { // Servers endpoints api.HandleFunc("/servers", s.handleListServers).Methods("GET") api.HandleFunc("/servers", s.handleCreateServer).Methods("POST") + api.HandleFunc("/servers/groups", s.handleListServerGroups).Methods("GET") api.HandleFunc("/servers/{id}", s.handleGetServer).Methods("GET") api.HandleFunc("/servers/{id}", s.handleUpdateServer).Methods("PUT") api.HandleFunc("/servers/{id}", s.handleDeleteServer).Methods("DELETE") @@ -97,6 +105,7 @@ func (s *Server) setupRoutes() { // Environment variables endpoints api.HandleFunc("/env-variables", s.handleListEnvVariables).Methods("GET") api.HandleFunc("/env-variables", s.handleCreateEnvVariable).Methods("POST") + api.HandleFunc("/env-variables/groups", s.handleListEnvVariableGroups).Methods("GET") api.HandleFunc("/env-variables/{id}", s.handleGetEnvVariable).Methods("GET") api.HandleFunc("/env-variables/{id}", s.handleUpdateEnvVariable).Methods("PUT") api.HandleFunc("/env-variables/{id}", s.handleDeleteEnvVariable).Methods("DELETE") @@ -104,20 +113,37 @@ func (s *Server) setupRoutes() { // Bash scripts endpoints api.HandleFunc("/bash-scripts", s.handleListBashScripts).Methods("GET") api.HandleFunc("/bash-scripts", s.handleCreateBashScript).Methods("POST") + api.HandleFunc("/bash-scripts/groups", s.handleListBashScriptGroups).Methods("GET") + api.HandleFunc("/bash-scripts/execute", s.handleExecuteScript).Methods("POST") + api.HandleFunc("/bash-scripts/execute/stream", s.handleExecuteScriptStream).Methods("POST") api.HandleFunc("/bash-scripts/{id}", s.handleGetBashScript).Methods("GET") api.HandleFunc("/bash-scripts/{id}", s.handleUpdateBashScript).Methods("PUT") api.HandleFunc("/bash-scripts/{id}", s.handleDeleteBashScript).Methods("DELETE") - api.HandleFunc("/bash-scripts/execute", s.handleExecuteScript).Methods("POST") - api.HandleFunc("/bash-scripts/execute/stream", s.handleExecuteScriptStream).Methods("POST") api.HandleFunc("/bash-scripts/{id}/presets", s.handleGetScriptPresetsByScript).Methods("GET") - // Script preset endpoints + // Script preset endpoints api.HandleFunc("/script-presets", s.handleListScriptPresets).Methods("GET") api.HandleFunc("/script-presets", s.handleCreateScriptPreset).Methods("POST") api.HandleFunc("/script-presets/{id}", s.handleGetScriptPreset).Methods("GET") api.HandleFunc("/script-presets/{id}", s.handleUpdateScriptPreset).Methods("PUT") api.HandleFunc("/script-presets/{id}", s.handleDeleteScriptPreset).Methods("DELETE") + // Vault integration endpoints + api.HandleFunc("/vault/config", s.handleGetVaultConfig).Methods("GET") + api.HandleFunc("/vault/config", s.handleCreateOrUpdateVaultConfig).Methods("POST") + api.HandleFunc("/vault/config", s.handleDeleteVaultConfig).Methods("DELETE") + api.HandleFunc("/vault/test", s.handleTestVaultConnection).Methods("POST") + api.HandleFunc("/vault/status", s.handleGetVaultStatus).Methods("GET") + api.HandleFunc("/vault/ssh-keys", s.handleListVaultSSHKeys).Methods("GET") + api.HandleFunc("/vault/ssh-keys", s.handleCreateVaultSSHKey).Methods("POST") + api.HandleFunc("/vault/servers", s.handleListVaultServers).Methods("GET") + api.HandleFunc("/vault/servers", s.handleCreateVaultServer).Methods("POST") + api.HandleFunc("/vault/env-variables", s.handleListVaultEnvVariables).Methods("GET") + api.HandleFunc("/vault/env-variables", s.handleCreateVaultEnvVariable).Methods("POST") + api.HandleFunc("/vault/bash-scripts", s.handleListVaultScripts).Methods("GET") + api.HandleFunc("/vault/bash-scripts", s.handleCreateVaultScript).Methods("POST") + api.HandleFunc("/vault/scripts", s.handleListVaultScripts).Methods("GET") // Backward compatibility + // Terminal WebSocket endpoint (for interactive shell) api.HandleFunc("/terminal/ws", s.handleTerminalWebSocket) @@ -281,9 +307,9 @@ func (s *Server) Start() error { server := &http.Server{ Addr: addr, Handler: handler, - ReadTimeout: 30 * time.Second, - WriteTimeout: 10 * time.Minute, // Allow long-running script streams - IdleTimeout: 60 * time.Second, + ReadTimeout: s.config.GetReadTimeout(), + WriteTimeout: s.config.GetWriteTimeout(), + IdleTimeout: s.config.GetIdleTimeout(), } // Start with TLS if configured diff --git a/internal/server/vault_helpers.go b/internal/server/vault_helpers.go new file mode 100644 index 0000000..07bfc01 --- /dev/null +++ b/internal/server/vault_helpers.go @@ -0,0 +1,340 @@ +package server + +import ( + "context" + "log" + "time" + + "github.com/pozgo/web-cli/internal/models" + "github.com/pozgo/web-cli/internal/repository" + "github.com/pozgo/web-cli/internal/vault" +) + +// getVaultClientIfEnabled returns a Vault client if Vault is configured and enabled +// Returns nil if Vault is not available (no error) +func (s *Server) getVaultClientIfEnabled() *vault.Client { + repo := repository.NewVaultConfigRepository(s.db) + cfg, err := repo.Get() + if err != nil || cfg == nil || !cfg.Enabled { + return nil + } + + vaultCfg := &vault.Config{ + Address: cfg.Address, + Token: cfg.Token, + Namespace: cfg.Namespace, + MountPath: cfg.MountPath, + } + + client, err := vault.NewClient(vaultCfg) + if err != nil { + log.Printf("Warning: Failed to create Vault client: %v", err) + return nil + } + + return client +} + +// mergeSSHKeysWithVault combines SQLite SSH keys with Vault SSH keys +func (s *Server) mergeSSHKeysWithVault(ctx context.Context, sqliteKeys []*models.SSHKey) []*models.SSHKey { + // Mark SQLite keys + for _, k := range sqliteKeys { + k.Source = "sqlite" + } + + // Try to get Vault client + client := s.getVaultClientIfEnabled() + if client == nil { + return sqliteKeys + } + + // Set timeout for Vault operations + ctx, cancel := context.WithTimeout(ctx, 10*time.Second) + defer cancel() + + // Get keys from Vault + vaultKeys, err := client.ListSSHKeys(ctx) + if err != nil { + log.Printf("Warning: Failed to list Vault SSH keys: %v", err) + return sqliteKeys + } + + // Convert Vault keys to models and append + allKeys := make([]*models.SSHKey, 0, len(sqliteKeys)+len(vaultKeys)) + allKeys = append(allKeys, sqliteKeys...) + + for _, vk := range vaultKeys { + allKeys = append(allKeys, &models.SSHKey{ + ID: 0, // Vault keys don't have numeric IDs + Name: vk.Name, + PrivateKey: vk.PrivateKey, + Group: vk.Group, + Source: "vault", + CreatedAt: vk.CreatedAt, + UpdatedAt: vk.CreatedAt, + }) + } + + return allKeys +} + +// mergeServersWithVault combines SQLite servers with Vault servers +func (s *Server) mergeServersWithVault(ctx context.Context, sqliteServers []*models.Server) []*models.Server { + // Mark SQLite servers + for _, srv := range sqliteServers { + srv.Source = "sqlite" + } + + // Try to get Vault client + client := s.getVaultClientIfEnabled() + if client == nil { + return sqliteServers + } + + // Set timeout for Vault operations + ctx, cancel := context.WithTimeout(ctx, 10*time.Second) + defer cancel() + + // Get servers from Vault + vaultServers, err := client.ListServers(ctx) + if err != nil { + log.Printf("Warning: Failed to list Vault servers: %v", err) + return sqliteServers + } + + // Convert Vault servers to models and append + allServers := make([]*models.Server, 0, len(sqliteServers)+len(vaultServers)) + allServers = append(allServers, sqliteServers...) + + now := time.Now() + for _, vs := range vaultServers { + allServers = append(allServers, &models.Server{ + ID: 0, // Vault servers don't have numeric IDs + Name: vs.Name, + IPAddress: vs.IPAddress, + Port: vs.Port, + Username: vs.Username, + Group: vs.Group, + Source: "vault", + CreatedAt: now, + UpdatedAt: now, + }) + } + + return allServers +} + +// mergeEnvVariablesWithVault combines SQLite env variables with Vault env variables +func (s *Server) mergeEnvVariablesWithVault(ctx context.Context, sqliteVars []*models.EnvVariable) []*models.EnvVariable { + // Mark SQLite vars + for _, v := range sqliteVars { + v.Source = "sqlite" + } + + // Try to get Vault client + client := s.getVaultClientIfEnabled() + if client == nil { + return sqliteVars + } + + // Set timeout for Vault operations + ctx, cancel := context.WithTimeout(ctx, 10*time.Second) + defer cancel() + + // Get env vars from Vault + vaultVars, err := client.ListEnvVariables(ctx) + if err != nil { + log.Printf("Warning: Failed to list Vault env variables: %v", err) + return sqliteVars + } + + // Convert Vault vars to models and append + allVars := make([]*models.EnvVariable, 0, len(sqliteVars)+len(vaultVars)) + allVars = append(allVars, sqliteVars...) + + now := time.Now() + for _, vv := range vaultVars { + allVars = append(allVars, &models.EnvVariable{ + ID: 0, // Vault vars don't have numeric IDs + Name: vv.Name, + Value: vv.Value, + Description: vv.Description, + Group: vv.Group, + Source: "vault", + CreatedAt: now, + UpdatedAt: now, + }) + } + + return allVars +} + +// getSSHKeyByNameFromVault retrieves an SSH key from Vault by name and group +func (s *Server) getSSHKeyByNameFromVault(ctx context.Context, group, name string) (*models.SSHKey, error) { + client := s.getVaultClientIfEnabled() + if client == nil { + return nil, nil + } + + ctx, cancel := context.WithTimeout(ctx, 10*time.Second) + defer cancel() + + vk, err := client.GetSSHKey(ctx, group, name) + if err != nil { + return nil, err + } + if vk == nil { + return nil, nil + } + + return &models.SSHKey{ + ID: 0, + Name: vk.Name, + PrivateKey: vk.PrivateKey, + Group: vk.Group, + Source: "vault", + CreatedAt: vk.CreatedAt, + UpdatedAt: vk.CreatedAt, + }, nil +} + +// getServerByNameFromVault retrieves a server from Vault by name and group +func (s *Server) getServerByNameFromVault(ctx context.Context, group, name string) (*models.Server, error) { + client := s.getVaultClientIfEnabled() + if client == nil { + return nil, nil + } + + ctx, cancel := context.WithTimeout(ctx, 10*time.Second) + defer cancel() + + vs, err := client.GetServer(ctx, group, name) + if err != nil { + return nil, err + } + if vs == nil { + return nil, nil + } + + now := time.Now() + return &models.Server{ + ID: 0, + Name: vs.Name, + IPAddress: vs.IPAddress, + Port: vs.Port, + Username: vs.Username, + Group: vs.Group, + Source: "vault", + CreatedAt: now, + UpdatedAt: now, + }, nil +} + +// getEnvVariableByNameFromVault retrieves an env variable from Vault by name and group +func (s *Server) getEnvVariableByNameFromVault(ctx context.Context, group, name string) (*models.EnvVariable, error) { + client := s.getVaultClientIfEnabled() + if client == nil { + return nil, nil + } + + ctx, cancel := context.WithTimeout(ctx, 10*time.Second) + defer cancel() + + vv, err := client.GetEnvVariable(ctx, group, name) + if err != nil { + return nil, err + } + if vv == nil { + return nil, nil + } + + now := time.Now() + return &models.EnvVariable{ + ID: 0, + Name: vv.Name, + Value: vv.Value, + Description: vv.Description, + Group: vv.Group, + Source: "vault", + CreatedAt: now, + UpdatedAt: now, + }, nil +} + +// mergeScriptsWithVault combines SQLite scripts with Vault scripts +func (s *Server) mergeScriptsWithVault(ctx context.Context, sqliteScripts []*models.BashScript) []*models.BashScript { + // Mark SQLite scripts + for _, script := range sqliteScripts { + script.Source = "sqlite" + } + + // Try to get Vault client + client := s.getVaultClientIfEnabled() + if client == nil { + return sqliteScripts + } + + // Set timeout for Vault operations + ctx, cancel := context.WithTimeout(ctx, 10*time.Second) + defer cancel() + + // Get scripts from Vault + vaultScripts, err := client.ListBashScripts(ctx) + if err != nil { + log.Printf("Warning: Failed to list Vault scripts: %v", err) + return sqliteScripts + } + + // Convert Vault scripts to models and append + allScripts := make([]*models.BashScript, 0, len(sqliteScripts)+len(vaultScripts)) + allScripts = append(allScripts, sqliteScripts...) + + now := time.Now() + for _, vs := range vaultScripts { + allScripts = append(allScripts, &models.BashScript{ + ID: 0, // Vault scripts don't have numeric IDs + Name: vs.Name, + Description: vs.Description, + Content: vs.Content, + Filename: vs.Filename, + Group: vs.Group, + Source: "vault", + CreatedAt: now, + UpdatedAt: now, + }) + } + + return allScripts +} + +// getScriptByNameFromVault retrieves a script from Vault by name and group +func (s *Server) getScriptByNameFromVault(ctx context.Context, group, name string) (*models.BashScript, error) { + client := s.getVaultClientIfEnabled() + if client == nil { + return nil, nil + } + + ctx, cancel := context.WithTimeout(ctx, 10*time.Second) + defer cancel() + + vs, err := client.GetBashScript(ctx, group, name) + if err != nil { + return nil, err + } + if vs == nil { + return nil, nil + } + + now := time.Now() + return &models.BashScript{ + ID: 0, + Name: vs.Name, + Description: vs.Description, + Content: vs.Content, + Filename: vs.Filename, + Group: vs.Group, + Source: "vault", + CreatedAt: now, + UpdatedAt: now, + }, nil +} diff --git a/internal/validation/validators.go b/internal/validation/validators.go index 5cfc9ae..f86f8cf 100644 --- a/internal/validation/validators.go +++ b/internal/validation/validators.go @@ -3,6 +3,7 @@ package validation import ( "fmt" "net" + "net/url" "regexp" "strings" @@ -251,3 +252,221 @@ func ValidateCommand(command string) error { return nil } + +// ValidateVaultAddress validates a Vault server address to prevent SSRF attacks +// Only allows HTTPS URLs with valid public hostnames/IPs +func ValidateVaultAddress(address string) error { + if address == "" { + return fmt.Errorf("vault address cannot be empty") + } + + // Parse the URL + parsedURL, err := url.Parse(address) + if err != nil { + return fmt.Errorf("invalid vault address URL: %w", err) + } + + // Require HTTP or HTTPS scheme + if parsedURL.Scheme != "https" && parsedURL.Scheme != "http" { + return fmt.Errorf("vault address must use http or https scheme") + } + + // Get the hostname + hostname := parsedURL.Hostname() + if hostname == "" { + return fmt.Errorf("vault address must include a hostname") + } + + // Check for dangerous endpoints (SSRF protection) + // We allow private IPs for self-hosted Vault but block cloud metadata endpoints + if ip := net.ParseIP(hostname); ip != nil { + // Block link-local addresses (169.254.x.x) which include cloud metadata endpoints + if ip.IsLinkLocalUnicast() || ip.IsLinkLocalMulticast() { + return fmt.Errorf("vault address cannot be a link-local address (potential metadata endpoint)") + } + // Block unspecified addresses (0.0.0.0) + if ip.IsUnspecified() { + return fmt.Errorf("vault address cannot be an unspecified address") + } + } else { + // It's a hostname, validate format + if err := ValidateHostname(hostname); err != nil { + return fmt.Errorf("invalid vault hostname: %w", err) + } + + // Block cloud metadata hostnames that could be used for SSRF + lowercaseHost := strings.ToLower(hostname) + blockedHosts := []string{ + "metadata.google.internal", + "metadata.goog", + "metadata", + "instance-data", + } + for _, blocked := range blockedHosts { + if lowercaseHost == blocked || strings.HasSuffix(lowercaseHost, "."+blocked) { + return fmt.Errorf("vault address hostname is not allowed: %s", hostname) + } + } + } + + // Validate port if specified + if portStr := parsedURL.Port(); portStr != "" { + // Port is already validated by url.Parse, but verify it's reasonable + var port int + if _, err := fmt.Sscanf(portStr, "%d", &port); err == nil { + if err := ValidatePort(port); err != nil { + return fmt.Errorf("invalid vault port: %w", err) + } + } + } + + return nil +} + +// isPrivateOrReservedIP checks if an IP address is private, loopback, or reserved +func isPrivateOrReservedIP(ip net.IP) bool { + // Check for loopback (127.0.0.0/8, ::1) + if ip.IsLoopback() { + return true + } + + // Check for private ranges + if ip.IsPrivate() { + return true + } + + // Check for link-local (169.254.0.0/16, fe80::/10) + if ip.IsLinkLocalUnicast() || ip.IsLinkLocalMulticast() { + return true + } + + // Check for other reserved ranges + // 0.0.0.0/8 - Current network + // 10.0.0.0/8 - Private (handled by IsPrivate) + // 100.64.0.0/10 - Carrier-grade NAT + // 172.16.0.0/12 - Private (handled by IsPrivate) + // 192.0.0.0/24 - IETF Protocol Assignments + // 192.0.2.0/24 - Documentation + // 192.168.0.0/16 - Private (handled by IsPrivate) + // 198.51.100.0/24 - Documentation + // 203.0.113.0/24 - Documentation + + ip4 := ip.To4() + if ip4 != nil { + // Carrier-grade NAT: 100.64.0.0/10 + if ip4[0] == 100 && ip4[1] >= 64 && ip4[1] <= 127 { + return true + } + // Current network: 0.0.0.0/8 + if ip4[0] == 0 { + return true + } + // IETF Protocol Assignments: 192.0.0.0/24 + if ip4[0] == 192 && ip4[1] == 0 && ip4[2] == 0 { + return true + } + } + + return false +} + +// ValidateVaultSecretPath validates a Vault secret path component to prevent path traversal +func ValidateVaultSecretPath(path string) error { + if path == "" { + return fmt.Errorf("vault path cannot be empty") + } + + // Check for path traversal sequences + if strings.Contains(path, "..") { + return fmt.Errorf("vault path cannot contain path traversal sequences (..)") + } + + // Check for absolute path indicators + if strings.HasPrefix(path, "/") { + return fmt.Errorf("vault path cannot start with /") + } + + // Check for backslashes (Windows-style paths) + if strings.Contains(path, "\\") { + return fmt.Errorf("vault path cannot contain backslashes") + } + + // Check for null bytes + if strings.Contains(path, "\x00") { + return fmt.Errorf("vault path cannot contain null characters") + } + + // Check for URL encoding that could be used to bypass filters + if strings.Contains(path, "%") { + return fmt.Errorf("vault path cannot contain URL-encoded characters") + } + + // Validate allowed characters (alphanumeric, dash, underscore, dot, forward slash) + validPathRegex := regexp.MustCompile(`^[a-zA-Z0-9._/-]+$`) + if !validPathRegex.MatchString(path) { + return fmt.Errorf("vault path contains invalid characters (allowed: alphanumeric, dash, underscore, dot, forward slash)") + } + + // Check for consecutive slashes + if strings.Contains(path, "//") { + return fmt.Errorf("vault path cannot contain consecutive slashes") + } + + // Limit path length + if len(path) > 512 { + return fmt.Errorf("vault path too long (max 512 characters)") + } + + return nil +} + +// ValidateVaultSecretName validates a Vault secret name to prevent path traversal +func ValidateVaultSecretName(name string) error { + if name == "" { + return fmt.Errorf("vault secret name cannot be empty") + } + + // Secret names should not contain path separators + if strings.Contains(name, "/") || strings.Contains(name, "\\") { + return fmt.Errorf("vault secret name cannot contain path separators") + } + + // Check for path traversal + if strings.Contains(name, "..") { + return fmt.Errorf("vault secret name cannot contain path traversal sequences") + } + + // Check for null bytes + if strings.Contains(name, "\x00") { + return fmt.Errorf("vault secret name cannot contain null characters") + } + + // Check for URL encoding + if strings.Contains(name, "%") { + return fmt.Errorf("vault secret name cannot contain URL-encoded characters") + } + + // Validate allowed characters + validNameRegex := regexp.MustCompile(`^[a-zA-Z0-9._-]+$`) + if !validNameRegex.MatchString(name) { + return fmt.Errorf("vault secret name contains invalid characters (allowed: alphanumeric, dash, underscore, dot)") + } + + // Limit name length + if len(name) > 255 { + return fmt.Errorf("vault secret name too long (max 255 characters)") + } + + return nil +} + +// ValidateVaultGroupName validates a Vault group name +func ValidateVaultGroupName(group string) error { + // Empty group is allowed (defaults to "default") + if group == "" { + return nil + } + + // Group names follow same rules as secret names + return ValidateVaultSecretName(group) +} diff --git a/internal/validation/validators_test.go b/internal/validation/validators_test.go index d499dab..e14c614 100644 --- a/internal/validation/validators_test.go +++ b/internal/validation/validators_test.go @@ -1,358 +1,308 @@ package validation import ( - "strings" "testing" ) -func TestValidateIPAddress(t *testing.T) { +func TestValidateVaultAddress(t *testing.T) { tests := []struct { name string - ip string + address string wantErr bool + errMsg string }{ - {"valid IPv4", "192.168.1.1", false}, - {"valid IPv4 localhost", "127.0.0.1", false}, - {"valid IPv6", "2001:0db8:85a3:0000:0000:8a2e:0370:7334", false}, - {"valid IPv6 short", "::1", false}, - {"empty string", "", true}, - {"invalid IPv4", "256.1.1.1", true}, - {"invalid format", "not-an-ip", true}, - {"hostname not IP", "example.com", true}, - } - - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - err := ValidateIPAddress(tt.ip) - if (err != nil) != tt.wantErr { - t.Errorf("ValidateIPAddress() error = %v, wantErr %v", err, tt.wantErr) - } - }) - } -} + // Valid addresses + { + name: "valid https public URL", + address: "https://vault.example.com:8200", + wantErr: false, + }, + { + name: "valid https with path", + address: "https://vault.example.com/v1", + wantErr: false, + }, + { + name: "valid http local development", + address: "http://localhost:8200", + wantErr: false, + }, + { + name: "valid https localhost", + address: "https://127.0.0.1:8200", + wantErr: false, + }, + { + name: "valid private IP 10.x.x.x", + address: "https://10.0.0.5:8200", + wantErr: false, + }, + { + name: "valid private IP 172.16.x.x", + address: "https://172.16.0.10:8200", + wantErr: false, + }, + { + name: "valid private IP 192.168.x.x", + address: "https://192.168.1.100:8200", + wantErr: false, + }, -func TestValidateHostname(t *testing.T) { - tests := []struct { - name string - hostname string - wantErr bool - }{ - {"valid simple hostname", "server1", false}, - {"valid FQDN", "mail.example.com", false}, - {"valid with dash", "my-server", false}, - {"valid with numbers", "server123", false}, - {"empty string", "", true}, - {"starts with dash", "-server", true}, - {"ends with dash", "server-", true}, - {"double dash", "my--server", false}, // Actually valid in RFC 1123 - {"too long", strings.Repeat("a", 254), true}, - {"invalid chars", "my_server", true}, // Underscore not allowed in hostname - {"valid subdomain", "api.v1.example.com", false}, - } - - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - err := ValidateHostname(tt.hostname) - if (err != nil) != tt.wantErr { - t.Errorf("ValidateHostname() error = %v, wantErr %v", err, tt.wantErr) - } - }) - } -} + // Invalid addresses - SSRF protection + { + name: "block link-local address 169.254.x.x", + address: "http://169.254.169.254/latest/meta-data", + wantErr: true, + errMsg: "link-local address", + }, + { + name: "block unspecified address 0.0.0.0", + address: "http://0.0.0.0:8200", + wantErr: true, + errMsg: "unspecified address", + }, + { + name: "block metadata.google.internal", + address: "http://metadata.google.internal/computeMetadata/v1/", + wantErr: true, + errMsg: "hostname is not allowed", + }, + { + name: "block metadata hostname", + address: "http://metadata/computeMetadata/v1/", + wantErr: true, + errMsg: "hostname is not allowed", + }, + { + name: "block instance-data hostname", + address: "http://instance-data/latest/meta-data", + wantErr: true, + errMsg: "hostname is not allowed", + }, -func TestValidateIPOrHostname(t *testing.T) { - tests := []struct { - name string - value string - wantErr bool - }{ - {"valid IP", "192.168.1.1", false}, - {"valid hostname", "example.com", false}, - {"valid IPv6", "::1", false}, - {"empty string", "", true}, - {"invalid both", "not_valid-256", true}, + // Invalid addresses - other validation + { + name: "empty address", + address: "", + wantErr: true, + errMsg: "cannot be empty", + }, + { + name: "invalid scheme ftp", + address: "ftp://vault.example.com", + wantErr: true, + errMsg: "must use http or https", + }, + { + name: "invalid scheme file", + address: "file:///etc/passwd", + wantErr: true, + errMsg: "must use http or https", + }, + { + name: "missing hostname", + address: "https:///path", + wantErr: true, + errMsg: "must include a hostname", + }, + { + name: "invalid port", + address: "https://vault.example.com:99999", + wantErr: true, + errMsg: "invalid vault port", + }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - err := ValidateIPOrHostname(tt.value) + err := ValidateVaultAddress(tt.address) if (err != nil) != tt.wantErr { - t.Errorf("ValidateIPOrHostname() error = %v, wantErr %v", err, tt.wantErr) + t.Errorf("ValidateVaultAddress(%q) error = %v, wantErr %v", tt.address, err, tt.wantErr) + return } - }) - } -} - -func TestValidatePort(t *testing.T) { - tests := []struct { - name string - port int - wantErr bool - }{ - {"valid port 22", 22, false}, - {"valid port 80", 80, false}, - {"valid port 443", 443, false}, - {"valid port 65535", 65535, false}, - {"valid port 1", 1, false}, - {"zero", 0, true}, - {"negative", -1, true}, - {"too large", 65536, true}, - } - - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - err := ValidatePort(tt.port) - if (err != nil) != tt.wantErr { - t.Errorf("ValidatePort() error = %v, wantErr %v", err, tt.wantErr) + if tt.wantErr && tt.errMsg != "" && err != nil { + if !contains(err.Error(), tt.errMsg) { + t.Errorf("ValidateVaultAddress(%q) error = %v, want error containing %q", tt.address, err, tt.errMsg) + } } }) } } -func TestValidateSSHPrivateKey(t *testing.T) { - // Note: Testing with actual SSH key parsing is complex - // We test the basic validation logic here +func TestValidateVaultSecretPath(t *testing.T) { tests := []struct { name string - key string + path string wantErr bool + errMsg string }{ - {"empty string", "", true}, - {"missing BEGIN header", "some random text", true}, - {"whitespace only", " \n\t ", true}, - // Real key validation happens in ssh.ParsePrivateKey - // which requires a properly formatted key - } - - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - err := ValidateSSHPrivateKey(tt.key) - if (err != nil) != tt.wantErr { - t.Errorf("ValidateSSHPrivateKey() error = %v, wantErr %v", err, tt.wantErr) - } - }) - } -} - -func TestValidateUsername(t *testing.T) { - tests := []struct { - name string - username string - wantErr bool - }{ - {"valid simple", "john", false}, - {"valid with underscore", "john_doe", false}, - {"valid with dash", "john-doe", false}, - {"valid with numbers", "user123", false}, - {"special case root", "root", false}, - {"special case current", "current", false}, - {"empty string", "", true}, - {"starts with number", "1john", true}, - {"too long", strings.Repeat("a", 33), true}, - {"uppercase", "John", true}, // Unix usernames are lowercase - {"with spaces", "john doe", true}, - {"special chars", "john@doe", true}, - } - - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - err := ValidateUsername(tt.username) - if (err != nil) != tt.wantErr { - t.Errorf("ValidateUsername() error = %v, wantErr %v", err, tt.wantErr) - } - }) - } -} - -func TestValidateCommandName(t *testing.T) { - tests := []struct { - name string - commandName string - wantErr bool - }{ - {"valid simple", "backup-db", false}, - {"valid with spaces", "My Command", false}, - {"valid special chars", "command-123_test", false}, - {"empty string", "", true}, - {"too long", strings.Repeat("a", 256), true}, - {"with null byte", "cmd\x00name", true}, - {"with newline", "cmd\nname", true}, - {"with carriage return", "cmd\rname", true}, - {"valid unicode", "备份数据库", false}, - } - - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - err := ValidateCommandName(tt.commandName) - if (err != nil) != tt.wantErr { - t.Errorf("ValidateCommandName() error = %v, wantErr %v", err, tt.wantErr) - } - }) - } -} + // Valid paths + { + name: "simple path", + path: "web-cli/ssh-keys", + wantErr: false, + }, + { + name: "path with underscores", + path: "web_cli/ssh_keys", + wantErr: false, + }, + { + name: "path with dashes", + path: "web-cli/ssh-keys/my-key", + wantErr: false, + }, + { + name: "path with dots", + path: "web-cli/config.json", + wantErr: false, + }, -func TestValidateEnvVarName(t *testing.T) { - tests := []struct { - name string - varName string - wantErr bool - }{ - {"valid simple", "MY_VAR", false}, - {"valid with numbers", "VAR123", false}, - {"valid starts with underscore", "_PRIVATE_VAR", false}, - {"valid lowercase", "my_var", false}, - {"valid mixed case", "MyVar", false}, - {"valid single letter", "A", false}, - {"valid single underscore", "_", false}, - {"empty string", "", true}, - {"starts with number", "1VAR", true}, - {"contains dash", "MY-VAR", true}, - {"contains space", "MY VAR", true}, - {"contains dot", "MY.VAR", true}, - {"contains special chars", "MY$VAR", true}, - {"too long", strings.Repeat("A", 256), true}, - {"common env var PATH", "PATH", false}, - {"common env var HOME", "HOME", false}, - {"common env var API_KEY", "API_KEY", false}, - {"common env var DATABASE_URL", "DATABASE_URL", false}, + // Invalid paths - path traversal + { + name: "path traversal with ..", + path: "../../../etc/passwd", + wantErr: true, + errMsg: "path traversal", + }, + { + name: "path traversal in middle", + path: "web-cli/../../../etc/passwd", + wantErr: true, + errMsg: "path traversal", + }, + { + name: "absolute path", + path: "/etc/passwd", + wantErr: true, + errMsg: "cannot start with /", + }, + { + name: "backslash path", + path: "web-cli\\ssh-keys", + wantErr: true, + errMsg: "cannot contain backslashes", + }, + { + name: "null byte", + path: "web-cli\x00/ssh-keys", + wantErr: true, + errMsg: "null characters", + }, + { + name: "URL encoded", + path: "web-cli%2Fssh-keys", + wantErr: true, + errMsg: "URL-encoded", + }, + { + name: "consecutive slashes", + path: "web-cli//ssh-keys", + wantErr: true, + errMsg: "consecutive slashes", + }, + { + name: "empty path", + path: "", + wantErr: true, + errMsg: "cannot be empty", + }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - err := ValidateEnvVarName(tt.varName) + err := ValidateVaultSecretPath(tt.path) if (err != nil) != tt.wantErr { - t.Errorf("ValidateEnvVarName() error = %v, wantErr %v", err, tt.wantErr) + t.Errorf("ValidateVaultSecretPath(%q) error = %v, wantErr %v", tt.path, err, tt.wantErr) + return } - }) - } -} - -func TestValidateEnvVarValue(t *testing.T) { - tests := []struct { - name string - value string - wantErr bool - }{ - {"valid simple", "my-value", false}, - {"valid with spaces", "my value with spaces", false}, - {"valid with special chars", "pass!@#$%^&*()", false}, - {"valid with newlines", "line1\nline2", false}, - {"valid JSON", `{"key": "value"}`, false}, - {"valid URL", "https://example.com/path?query=1", false}, - {"valid long string", strings.Repeat("a", 1000), false}, - {"empty string", "", true}, - {"contains null byte", "value\x00here", true}, - {"valid unicode", "密码123", false}, - {"valid base64", "SGVsbG8gV29ybGQh", false}, - } - - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - err := ValidateEnvVarValue(tt.value) - if (err != nil) != tt.wantErr { - t.Errorf("ValidateEnvVarValue() error = %v, wantErr %v", err, tt.wantErr) + if tt.wantErr && tt.errMsg != "" && err != nil { + if !contains(err.Error(), tt.errMsg) { + t.Errorf("ValidateVaultSecretPath(%q) error = %v, want error containing %q", tt.path, err, tt.errMsg) + } } }) } } -func TestValidateBashScriptName(t *testing.T) { +func TestValidateVaultSecretName(t *testing.T) { tests := []struct { name string - scriptName string + secretName string wantErr bool + errMsg string }{ - {"valid simple", "My Script", false}, - {"valid with dash", "backup-script", false}, - {"valid with underscore", "db_backup", false}, - {"valid with numbers", "script123", false}, - {"valid unicode", "备份脚本", false}, - {"valid long name", strings.Repeat("a", 255), false}, - {"empty string", "", true}, - {"too long", strings.Repeat("a", 256), true}, - {"contains null byte", "script\x00name", true}, - {"contains newline", "script\nname", true}, - {"contains carriage return", "script\rname", true}, - } - - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - err := ValidateBashScriptName(tt.scriptName) - if (err != nil) != tt.wantErr { - t.Errorf("ValidateBashScriptName() error = %v, wantErr %v", err, tt.wantErr) - } - }) - } -} - -func TestValidateBashScriptContent(t *testing.T) { - tests := []struct { - name string - content string - wantErr bool - }{ - {"valid simple", "#!/bin/bash\necho hello", false}, - {"valid multiline", "#!/bin/bash\necho hello\necho world", false}, - {"valid with comments", "#!/bin/bash\n# This is a comment\necho hello", false}, - {"valid with variables", "#!/bin/bash\nNAME=\"World\"\necho \"Hello $NAME\"", false}, - {"valid long script", strings.Repeat("echo hello\n", 1000), false}, - {"empty string", "", true}, - {"contains null byte", "echo hello\x00world", true}, - {"valid without shebang", "echo hello", false}, - {"valid complex script", `#!/bin/bash -set -euo pipefail - -if [ "$#" -lt 1 ]; then - echo "Usage: $0 " - exit 1 -fi + // Valid names + { + name: "simple name", + secretName: "my-secret", + wantErr: false, + }, + { + name: "name with underscores", + secretName: "my_secret_key", + wantErr: false, + }, + { + name: "name with dots", + secretName: "config.json", + wantErr: false, + }, -for i in "$@"; do - echo "Processing: $i" -done -`, false}, + // Invalid names + { + name: "path separator forward slash", + secretName: "path/to/secret", + wantErr: true, + errMsg: "path separators", + }, + { + name: "path separator backslash", + secretName: "path\\to\\secret", + wantErr: true, + errMsg: "path separators", + }, + { + name: "path traversal", + secretName: "..", + wantErr: true, + errMsg: "path traversal", + }, + { + name: "empty name", + secretName: "", + wantErr: true, + errMsg: "cannot be empty", + }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - err := ValidateBashScriptContent(tt.content) + err := ValidateVaultSecretName(tt.secretName) if (err != nil) != tt.wantErr { - t.Errorf("ValidateBashScriptContent() error = %v, wantErr %v", err, tt.wantErr) + t.Errorf("ValidateVaultSecretName(%q) error = %v, wantErr %v", tt.secretName, err, tt.wantErr) + return + } + if tt.wantErr && tt.errMsg != "" && err != nil { + if !contains(err.Error(), tt.errMsg) { + t.Errorf("ValidateVaultSecretName(%q) error = %v, want error containing %q", tt.secretName, err, tt.errMsg) + } } }) } } -func TestValidateBashScriptFilename(t *testing.T) { - tests := []struct { - name string - filename string - wantErr bool - }{ - {"valid simple", "script.sh", false}, - {"valid with dash", "my-script.sh", false}, - {"valid with underscore", "my_script.sh", false}, - {"valid bash extension", "script.bash", false}, - {"valid no extension", "script", false}, - {"empty string", "", false}, // Filename is optional - {"too long", strings.Repeat("a", 256), true}, - {"path traversal", "../script.sh", true}, - {"absolute path", "/etc/script.sh", true}, - {"windows path", "C:\\script.sh", true}, - {"contains asterisk", "script*.sh", true}, - {"contains question mark", "script?.sh", true}, - {"contains quotes", "script\".sh", true}, - {"contains pipe", "script|.sh", true}, - {"contains null byte", "script\x00.sh", true}, - {"contains newline", "script\n.sh", true}, - } +// contains checks if substr is contained in s +func contains(s, substr string) bool { + return len(s) >= len(substr) && (s == substr || len(substr) == 0 || + (len(s) > 0 && len(substr) > 0 && findSubstr(s, substr))) +} - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - err := ValidateBashScriptFilename(tt.filename) - if (err != nil) != tt.wantErr { - t.Errorf("ValidateBashScriptFilename() error = %v, wantErr %v", err, tt.wantErr) - } - }) +func findSubstr(s, substr string) bool { + for i := 0; i <= len(s)-len(substr); i++ { + if s[i:i+len(substr)] == substr { + return true + } } + return false } diff --git a/internal/vault/client.go b/internal/vault/client.go new file mode 100644 index 0000000..12d1329 --- /dev/null +++ b/internal/vault/client.go @@ -0,0 +1,856 @@ +package vault + +import ( + "context" + "fmt" + "strings" + "time" + + "github.com/hashicorp/vault/api" + "github.com/pozgo/web-cli/internal/validation" +) + +// Client wraps the Vault API client with convenience methods +type Client struct { + client *api.Client + mountPath string +} + +// Config holds the configuration for connecting to Vault +type Config struct { + Address string `json:"address"` + Token string `json:"token"` + Namespace string `json:"namespace,omitempty"` + MountPath string `json:"mount_path"` +} + +// NewClient creates a new Vault client with the given configuration +func NewClient(cfg *Config) (*Client, error) { + if cfg == nil { + return nil, fmt.Errorf("vault config is nil") + } + + if cfg.Address == "" { + return nil, fmt.Errorf("vault address is required") + } + + // Validate Vault address to prevent SSRF attacks + if err := validation.ValidateVaultAddress(cfg.Address); err != nil { + return nil, fmt.Errorf("invalid vault address: %w", err) + } + + if cfg.Token == "" { + return nil, fmt.Errorf("vault token is required") + } + + vaultCfg := api.DefaultConfig() + vaultCfg.Address = cfg.Address + + client, err := api.NewClient(vaultCfg) + if err != nil { + return nil, fmt.Errorf("failed to create vault client: %w", err) + } + + client.SetToken(cfg.Token) + + if cfg.Namespace != "" { + client.SetNamespace(cfg.Namespace) + } + + mountPath := cfg.MountPath + if mountPath == "" { + mountPath = "secret" + } + + return &Client{ + client: client, + mountPath: mountPath, + }, nil +} + +// TestConnection verifies the Vault connection and token validity +func (c *Client) TestConnection(ctx context.Context) error { + // Try to look up the token to verify it's valid + _, err := c.client.Auth().Token().LookupSelfWithContext(ctx) + if err != nil { + return fmt.Errorf("vault connection test failed: %w", err) + } + return nil +} + +// InitializeStructure creates the web-cli directory structure in Vault +// This ensures paths exist for listing operations +func (c *Client) InitializeStructure(ctx context.Context) error { + // Create a .initialized marker in each path to ensure the paths exist + // This makes listing work even for empty paths + paths := []string{"ssh-keys", "servers", "env", "scripts"} + + for _, secretType := range paths { + // Check if default group already has entries + secrets, err := c.ListSecrets(ctx, secretType, "default") + if err != nil { + // If list fails with actual error, try to create anyway + continue + } + + // If path is empty, create .initialized marker + if len(secrets) == 0 { + data := map[string]interface{}{ + "initialized": true, + "created_at": time.Now().Format(time.RFC3339), + } + // Ignore errors - token may not have write permission + _ = c.WriteSecret(ctx, secretType, "default", ".initialized", data) + } + } + + return nil +} + +// GetHealth returns the Vault server health status +func (c *Client) GetHealth(ctx context.Context) (*api.HealthResponse, error) { + return c.client.Sys().HealthWithContext(ctx) +} + +// secretPath constructs the full path for a secret +// Path format: {mount}/data/{secretType}/{group}/{name} +// Example: web-cli/data/ssh-keys/production/my-key +func (c *Client) secretPath(secretType, group, name string) (string, error) { + if group == "" { + group = "default" + } + + // Validate path components to prevent path traversal + if err := validation.ValidateVaultSecretName(secretType); err != nil { + return "", fmt.Errorf("invalid secret type: %w", err) + } + if err := validation.ValidateVaultGroupName(group); err != nil { + return "", fmt.Errorf("invalid group name: %w", err) + } + if err := validation.ValidateVaultSecretName(name); err != nil { + return "", fmt.Errorf("invalid secret name: %w", err) + } + + return fmt.Sprintf("%s/data/%s/%s/%s", c.mountPath, secretType, group, name), nil +} + +// secretPathFlat constructs the path for backward compatibility (no group) +// Path format: {mount}/data/{secretType}/{name} +// Example: web-cli/data/ssh-keys/my-key +func (c *Client) secretPathFlat(secretType, name string) (string, error) { + // Validate path components to prevent path traversal + if err := validation.ValidateVaultSecretName(secretType); err != nil { + return "", fmt.Errorf("invalid secret type: %w", err) + } + if err := validation.ValidateVaultSecretName(name); err != nil { + return "", fmt.Errorf("invalid secret name: %w", err) + } + + return fmt.Sprintf("%s/data/%s/%s", c.mountPath, secretType, name), nil +} + +// metadataPath constructs the metadata path for listing a group +// Path format: {mount}/metadata/{secretType}/{group} +// Example: web-cli/metadata/ssh-keys/production +func (c *Client) metadataPath(secretType, group string) (string, error) { + // Validate path components to prevent path traversal + if err := validation.ValidateVaultSecretName(secretType); err != nil { + return "", fmt.Errorf("invalid secret type: %w", err) + } + if group != "" { + if err := validation.ValidateVaultGroupName(group); err != nil { + return "", fmt.Errorf("invalid group name: %w", err) + } + return fmt.Sprintf("%s/metadata/%s/%s", c.mountPath, secretType, group), nil + } + return fmt.Sprintf("%s/metadata/%s", c.mountPath, secretType), nil +} + +// metadataPathFlat constructs the metadata path for listing all groups +// Path format: {mount}/metadata/{secretType} +// Example: web-cli/metadata/ssh-keys +func (c *Client) metadataPathFlat(secretType string) (string, error) { + // Validate path components to prevent path traversal + if err := validation.ValidateVaultSecretName(secretType); err != nil { + return "", fmt.Errorf("invalid secret type: %w", err) + } + return fmt.Sprintf("%s/metadata/%s", c.mountPath, secretType), nil +} + +// ReadSecret reads a secret from Vault (with group support) +func (c *Client) ReadSecret(ctx context.Context, secretType, group, name string) (map[string]interface{}, error) { + path, err := c.secretPath(secretType, group, name) + if err != nil { + return nil, err + } + + secret, err := c.client.Logical().ReadWithContext(ctx, path) + if err != nil { + return nil, fmt.Errorf("failed to read secret %s/%s/%s: %w", secretType, group, name, err) + } + + if secret == nil || secret.Data == nil { + return nil, nil // Secret doesn't exist + } + + // KV v2 stores data under "data" key + data, ok := secret.Data["data"].(map[string]interface{}) + if !ok { + return nil, fmt.Errorf("unexpected secret format for %s/%s/%s", secretType, group, name) + } + + return data, nil +} + +// ReadSecretFlat reads a secret from Vault without group (backward compatibility) +func (c *Client) ReadSecretFlat(ctx context.Context, secretType, name string) (map[string]interface{}, error) { + path, err := c.secretPathFlat(secretType, name) + if err != nil { + return nil, err + } + + secret, err := c.client.Logical().ReadWithContext(ctx, path) + if err != nil { + return nil, fmt.Errorf("failed to read secret %s/%s: %w", secretType, name, err) + } + + if secret == nil || secret.Data == nil { + return nil, nil // Secret doesn't exist + } + + // KV v2 stores data under "data" key + data, ok := secret.Data["data"].(map[string]interface{}) + if !ok { + return nil, fmt.Errorf("unexpected secret format for %s/%s", secretType, name) + } + + return data, nil +} + +// WriteSecret writes a secret to Vault (with group support) +func (c *Client) WriteSecret(ctx context.Context, secretType, group, name string, data map[string]interface{}) error { + path, err := c.secretPath(secretType, group, name) + if err != nil { + return err + } + + // KV v2 requires data to be wrapped + wrappedData := map[string]interface{}{ + "data": data, + } + + _, err = c.client.Logical().WriteWithContext(ctx, path, wrappedData) + if err != nil { + return fmt.Errorf("failed to write secret %s/%s/%s: %w", secretType, group, name, err) + } + + return nil +} + +// WriteSecretFlat writes a secret to Vault without group (backward compatibility) +func (c *Client) WriteSecretFlat(ctx context.Context, secretType, name string, data map[string]interface{}) error { + path, err := c.secretPathFlat(secretType, name) + if err != nil { + return err + } + + // KV v2 requires data to be wrapped + wrappedData := map[string]interface{}{ + "data": data, + } + + _, err = c.client.Logical().WriteWithContext(ctx, path, wrappedData) + if err != nil { + return fmt.Errorf("failed to write secret %s/%s: %w", secretType, name, err) + } + + return nil +} + +// DeleteSecret deletes a secret from Vault (with group support) +func (c *Client) DeleteSecret(ctx context.Context, secretType, group, name string) error { + if group == "" { + group = "default" + } + + // Validate path components to prevent path traversal + if err := validation.ValidateVaultSecretName(secretType); err != nil { + return fmt.Errorf("invalid secret type: %w", err) + } + if err := validation.ValidateVaultGroupName(group); err != nil { + return fmt.Errorf("invalid group name: %w", err) + } + if err := validation.ValidateVaultSecretName(name); err != nil { + return fmt.Errorf("invalid secret name: %w", err) + } + + // For KV v2, we delete the metadata to permanently remove + metaPath := fmt.Sprintf("%s/metadata/%s/%s/%s", c.mountPath, secretType, group, name) + + _, err := c.client.Logical().DeleteWithContext(ctx, metaPath) + if err != nil { + return fmt.Errorf("failed to delete secret %s/%s/%s: %w", secretType, group, name, err) + } + + return nil +} + +// DeleteSecretFlat deletes a secret from Vault without group (backward compatibility) +func (c *Client) DeleteSecretFlat(ctx context.Context, secretType, name string) error { + // Validate path components to prevent path traversal + if err := validation.ValidateVaultSecretName(secretType); err != nil { + return fmt.Errorf("invalid secret type: %w", err) + } + if err := validation.ValidateVaultSecretName(name); err != nil { + return fmt.Errorf("invalid secret name: %w", err) + } + + // For KV v2, we delete the metadata to permanently remove + metaPath := fmt.Sprintf("%s/metadata/%s/%s", c.mountPath, secretType, name) + + _, err := c.client.Logical().DeleteWithContext(ctx, metaPath) + if err != nil { + return fmt.Errorf("failed to delete secret %s/%s: %w", secretType, name, err) + } + + return nil +} + +// ListSecrets lists all secrets of a given type (optionally filtered by group) +func (c *Client) ListSecrets(ctx context.Context, secretType, group string) ([]string, error) { + path, err := c.metadataPath(secretType, group) + if err != nil { + return nil, err + } + + secret, err := c.client.Logical().ListWithContext(ctx, path) + if err != nil { + // Check if it's a 403 (permission denied) or 404 (path doesn't exist) + // In both cases, return empty list - the path may not exist yet or + // the token may not have list permissions (but might have read/write) + if strings.Contains(err.Error(), "403") || strings.Contains(err.Error(), "404") || + strings.Contains(err.Error(), "permission denied") { + return []string{}, nil + } + return nil, fmt.Errorf("failed to list secrets for %s/%s: %w", secretType, group, err) + } + + if secret == nil || secret.Data == nil { + return []string{}, nil // No secrets + } + + keys, ok := secret.Data["keys"].([]interface{}) + if !ok { + return []string{}, nil + } + + result := make([]string, 0, len(keys)) + for _, k := range keys { + if s, ok := k.(string); ok { + // Skip directory entries (end with /) and internal .initialized marker + if !strings.HasSuffix(s, "/") && s != ".initialized" { + result = append(result, s) + } + } + } + + return result, nil +} + +// ListGroups lists all groups for a given secret type +func (c *Client) ListGroups(ctx context.Context, secretType string) ([]string, error) { + path, err := c.metadataPathFlat(secretType) + if err != nil { + return nil, err + } + + secret, err := c.client.Logical().ListWithContext(ctx, path) + if err != nil { + if strings.Contains(err.Error(), "403") || strings.Contains(err.Error(), "404") || + strings.Contains(err.Error(), "permission denied") { + return []string{}, nil + } + return nil, fmt.Errorf("failed to list groups for %s: %w", secretType, err) + } + + if secret == nil || secret.Data == nil { + return []string{}, nil + } + + keys, ok := secret.Data["keys"].([]interface{}) + if !ok { + return []string{}, nil + } + + result := make([]string, 0, len(keys)) + for _, k := range keys { + if s, ok := k.(string); ok { + // Groups are directories (end with /) + if strings.HasSuffix(s, "/") { + result = append(result, strings.TrimSuffix(s, "/")) + } + } + } + + return result, nil +} + +// SSHKey represents an SSH key stored in Vault +type SSHKey struct { + Name string `json:"name"` + PrivateKey string `json:"private_key"` + Group string `json:"group"` + CreatedAt time.Time `json:"created_at"` +} + +// ListSSHKeys returns all SSH keys from Vault (across all groups) +func (c *Client) ListSSHKeys(ctx context.Context) ([]SSHKey, error) { + groups, err := c.ListGroups(ctx, "ssh-keys") + if err != nil { + return nil, err + } + + // If no groups exist, check default group + if len(groups) == 0 { + groups = []string{"default"} + } + + var keys []SSHKey + for _, group := range groups { + groupKeys, err := c.ListSSHKeysByGroup(ctx, group) + if err != nil { + continue + } + keys = append(keys, groupKeys...) + } + + return keys, nil +} + +// ListSSHKeysByGroup returns all SSH keys in a specific group +func (c *Client) ListSSHKeysByGroup(ctx context.Context, group string) ([]SSHKey, error) { + names, err := c.ListSecrets(ctx, "ssh-keys", group) + if err != nil { + return nil, err + } + + keys := make([]SSHKey, 0, len(names)) + for _, name := range names { + key, err := c.GetSSHKey(ctx, group, name) + if err != nil { + continue // Skip keys that can't be read + } + if key != nil { + keys = append(keys, *key) + } + } + + return keys, nil +} + +// GetSSHKey retrieves a specific SSH key from Vault +func (c *Client) GetSSHKey(ctx context.Context, group, name string) (*SSHKey, error) { + if group == "" { + group = "default" + } + data, err := c.ReadSecret(ctx, "ssh-keys", group, name) + if err != nil { + return nil, err + } + if data == nil { + return nil, nil + } + + key := &SSHKey{Name: name, Group: group} + + // Try standard field name first, then fall back to checking all string values + if pk, ok := data["private_key"].(string); ok { + key.PrivateKey = pk + } else { + // Flexible parsing: find any string value that looks like a private key + for _, v := range data { + if s, ok := v.(string); ok && strings.Contains(s, "PRIVATE KEY") { + key.PrivateKey = s + break + } + } + } + + if ca, ok := data["created_at"].(string); ok { + if t, err := time.Parse(time.RFC3339, ca); err == nil { + key.CreatedAt = t + } + } + + return key, nil +} + +// SaveSSHKey saves an SSH key to Vault +func (c *Client) SaveSSHKey(ctx context.Context, key *SSHKey) error { + if key.Group == "" { + key.Group = "default" + } + data := map[string]interface{}{ + "private_key": key.PrivateKey, + "created_at": key.CreatedAt.Format(time.RFC3339), + } + return c.WriteSecret(ctx, "ssh-keys", key.Group, key.Name, data) +} + +// DeleteSSHKey deletes an SSH key from Vault +func (c *Client) DeleteSSHKey(ctx context.Context, group, name string) error { + if group == "" { + group = "default" + } + return c.DeleteSecret(ctx, "ssh-keys", group, name) +} + +// ListSSHKeyGroups returns all groups for SSH keys +func (c *Client) ListSSHKeyGroups(ctx context.Context) ([]string, error) { + return c.ListGroups(ctx, "ssh-keys") +} + +// Server represents a server configuration stored in Vault +type Server struct { + Name string `json:"name"` + IPAddress string `json:"ip_address"` + Port int `json:"port"` + Username string `json:"username"` + Group string `json:"group"` +} + +// ListServers returns all servers from Vault (across all groups) +func (c *Client) ListServers(ctx context.Context) ([]Server, error) { + groups, err := c.ListGroups(ctx, "servers") + if err != nil { + return nil, err + } + + // If no groups exist, check default group + if len(groups) == 0 { + groups = []string{"default"} + } + + var servers []Server + for _, group := range groups { + groupServers, err := c.ListServersByGroup(ctx, group) + if err != nil { + continue + } + servers = append(servers, groupServers...) + } + + return servers, nil +} + +// ListServersByGroup returns all servers in a specific group +func (c *Client) ListServersByGroup(ctx context.Context, group string) ([]Server, error) { + names, err := c.ListSecrets(ctx, "servers", group) + if err != nil { + return nil, err + } + + servers := make([]Server, 0, len(names)) + for _, name := range names { + srv, err := c.GetServer(ctx, group, name) + if err != nil { + continue + } + if srv != nil { + servers = append(servers, *srv) + } + } + + return servers, nil +} + +// GetServer retrieves a specific server from Vault +func (c *Client) GetServer(ctx context.Context, group, name string) (*Server, error) { + if group == "" { + group = "default" + } + data, err := c.ReadSecret(ctx, "servers", group, name) + if err != nil { + return nil, err + } + if data == nil { + return nil, nil + } + + srv := &Server{Name: name, Group: group} + + // Try standard field names first + if ip, ok := data["ip_address"].(string); ok { + srv.IPAddress = ip + } else if ip, ok := data["ip"].(string); ok { + srv.IPAddress = ip + } else if ip, ok := data["host"].(string); ok { + srv.IPAddress = ip + } else if ip, ok := data["address"].(string); ok { + srv.IPAddress = ip + } else { + // Flexible parsing: find any string value that looks like an IP or hostname + for _, v := range data { + if s, ok := v.(string); ok && s != "" { + srv.IPAddress = s + break + } + } + } + + if port, ok := data["port"].(float64); ok { + srv.Port = int(port) + } else if port, ok := data["port"].(int); ok { + srv.Port = port + } else { + srv.Port = 22 // Default port + } + + if user, ok := data["username"].(string); ok { + srv.Username = user + } else if user, ok := data["user"].(string); ok { + srv.Username = user + } + + return srv, nil +} + +// SaveServer saves a server to Vault +func (c *Client) SaveServer(ctx context.Context, srv *Server) error { + if srv.Group == "" { + srv.Group = "default" + } + data := map[string]interface{}{ + "ip_address": srv.IPAddress, + "port": srv.Port, + "username": srv.Username, + } + return c.WriteSecret(ctx, "servers", srv.Group, srv.Name, data) +} + +// DeleteServer deletes a server from Vault +func (c *Client) DeleteServer(ctx context.Context, group, name string) error { + if group == "" { + group = "default" + } + return c.DeleteSecret(ctx, "servers", group, name) +} + +// ListServerGroups returns all groups for servers +func (c *Client) ListServerGroups(ctx context.Context) ([]string, error) { + return c.ListGroups(ctx, "servers") +} + +// EnvVariable represents an environment variable stored in Vault +type EnvVariable struct { + Name string `json:"name"` + Value string `json:"value"` + Description string `json:"description"` + Group string `json:"group"` +} + +// ListEnvVariables returns all environment variables from Vault (across all groups) +func (c *Client) ListEnvVariables(ctx context.Context) ([]EnvVariable, error) { + groups, err := c.ListGroups(ctx, "env") + if err != nil { + return nil, err + } + + // If no groups exist, check default group + if len(groups) == 0 { + groups = []string{"default"} + } + + var vars []EnvVariable + for _, group := range groups { + groupVars, err := c.ListEnvVariablesByGroup(ctx, group) + if err != nil { + continue + } + vars = append(vars, groupVars...) + } + + return vars, nil +} + +// ListEnvVariablesByGroup returns all environment variables in a specific group +func (c *Client) ListEnvVariablesByGroup(ctx context.Context, group string) ([]EnvVariable, error) { + names, err := c.ListSecrets(ctx, "env", group) + if err != nil { + return nil, err + } + + vars := make([]EnvVariable, 0, len(names)) + for _, name := range names { + v, err := c.GetEnvVariable(ctx, group, name) + if err != nil { + continue + } + if v != nil { + vars = append(vars, *v) + } + } + + return vars, nil +} + +// GetEnvVariable retrieves a specific environment variable from Vault +func (c *Client) GetEnvVariable(ctx context.Context, group, name string) (*EnvVariable, error) { + if group == "" { + group = "default" + } + data, err := c.ReadSecret(ctx, "env", group, name) + if err != nil { + return nil, err + } + if data == nil { + return nil, nil + } + + v := &EnvVariable{Name: name, Group: group} + + if val, ok := data["value"].(string); ok { + v.Value = val + } + + if desc, ok := data["description"].(string); ok { + v.Description = desc + } + + return v, nil +} + +// SaveEnvVariable saves an environment variable to Vault +func (c *Client) SaveEnvVariable(ctx context.Context, v *EnvVariable) error { + if v.Group == "" { + v.Group = "default" + } + data := map[string]interface{}{ + "value": v.Value, + "description": v.Description, + } + return c.WriteSecret(ctx, "env", v.Group, v.Name, data) +} + +// DeleteEnvVariable deletes an environment variable from Vault +func (c *Client) DeleteEnvVariable(ctx context.Context, group, name string) error { + if group == "" { + group = "default" + } + return c.DeleteSecret(ctx, "env", group, name) +} + +// ListEnvVariableGroups returns all groups for environment variables +func (c *Client) ListEnvVariableGroups(ctx context.Context) ([]string, error) { + return c.ListGroups(ctx, "env") +} + +// BashScript represents a bash script stored in Vault +type BashScript struct { + Name string `json:"name"` + Description string `json:"description"` + Content string `json:"content"` + Filename string `json:"filename"` + Group string `json:"group"` +} + +// ListBashScripts returns all bash scripts from Vault (across all groups) +func (c *Client) ListBashScripts(ctx context.Context) ([]BashScript, error) { + groups, err := c.ListGroups(ctx, "scripts") + if err != nil { + return nil, err + } + + // If no groups exist, check default group + if len(groups) == 0 { + groups = []string{"default"} + } + + var scripts []BashScript + for _, group := range groups { + groupScripts, err := c.ListBashScriptsByGroup(ctx, group) + if err != nil { + continue + } + scripts = append(scripts, groupScripts...) + } + + return scripts, nil +} + +// ListBashScriptsByGroup returns all bash scripts in a specific group +func (c *Client) ListBashScriptsByGroup(ctx context.Context, group string) ([]BashScript, error) { + names, err := c.ListSecrets(ctx, "scripts", group) + if err != nil { + return nil, err + } + + scripts := make([]BashScript, 0, len(names)) + for _, name := range names { + s, err := c.GetBashScript(ctx, group, name) + if err != nil { + continue + } + if s != nil { + scripts = append(scripts, *s) + } + } + + return scripts, nil +} + +// GetBashScript retrieves a specific bash script from Vault +func (c *Client) GetBashScript(ctx context.Context, group, name string) (*BashScript, error) { + if group == "" { + group = "default" + } + data, err := c.ReadSecret(ctx, "scripts", group, name) + if err != nil { + return nil, err + } + if data == nil { + return nil, nil + } + + s := &BashScript{Name: name, Group: group} + + if content, ok := data["content"].(string); ok { + s.Content = content + } + + if desc, ok := data["description"].(string); ok { + s.Description = desc + } + + if fn, ok := data["filename"].(string); ok { + s.Filename = fn + } + + return s, nil +} + +// SaveBashScript saves a bash script to Vault +func (c *Client) SaveBashScript(ctx context.Context, s *BashScript) error { + if s.Group == "" { + s.Group = "default" + } + data := map[string]interface{}{ + "content": s.Content, + "description": s.Description, + "filename": s.Filename, + } + return c.WriteSecret(ctx, "scripts", s.Group, s.Name, data) +} + +// DeleteBashScript deletes a bash script from Vault +func (c *Client) DeleteBashScript(ctx context.Context, group, name string) error { + if group == "" { + group = "default" + } + return c.DeleteSecret(ctx, "scripts", group, name) +} + +// ListBashScriptGroups returns all groups for bash scripts +func (c *Client) ListBashScriptGroups(ctx context.Context) ([]string, error) { + return c.ListGroups(ctx, "scripts") +} diff --git a/manage.sh b/manage.sh index e64b6a7..59cbf89 100755 --- a/manage.sh +++ b/manage.sh @@ -2,7 +2,8 @@ # Management script for web-cli # Usage: -# ./manage.sh start - Start the server +# ./manage.sh start - Start the server (with auth) +# ./manage.sh dev - Start the server WITHOUT auth (dev mode) # ./manage.sh stop - Stop the server # ./manage.sh restart - Restart the server # ./manage.sh status - Check if server is running @@ -35,8 +36,11 @@ is_running() { return 1 } -# Function to start the server +# Function to start the server (with optional auth) +# Usage: start [noauth] start() { + local noauth="${1:-}" + if is_running; then echo -e "${YELLOW}Server is already running (PID: $(cat $PID_FILE))${NC}" exit 1 @@ -50,26 +54,48 @@ start() { exit 1 fi - # Generate random password for testing - echo -e "${YELLOW}Generating test credentials...${NC}" - - # Check if openssl is available - if command -v openssl &> /dev/null; then - AUTH_PASSWORD=$(openssl rand -base64 16) + if [ "$noauth" = "noauth" ]; then + # Start without authentication (dev mode) + export AUTH_ENABLED=false + echo -e "${YELLOW}Starting in DEV MODE (no authentication)${NC}" + + # Start the server in background without auth + ./$APP_NAME & + PID=$! + echo $PID > "$PID_FILE" + + sleep 1 + + if is_running; then + echo -e "${GREEN}$APP_NAME started successfully (PID: $PID)${NC}" + echo -e "${GREEN}Access the application at http://localhost:$PORT${NC}" + echo -e "${RED}WARNING: Authentication is DISABLED${NC}" + else + echo -e "${RED}Failed to start $APP_NAME${NC}" + rm -f "$PID_FILE" + exit 1 + fi else - # Fallback to simple random generation - AUTH_PASSWORD="test-$(date +%s)-$(( RANDOM % 10000 ))" - fi - - AUTH_USERNAME="admin" - - # Export environment variables for authentication - export AUTH_ENABLED=true - export AUTH_USERNAME="$AUTH_USERNAME" - export AUTH_PASSWORD="$AUTH_PASSWORD" - - # Save credentials to file for reference - cat > .web-cli-credentials << EOF + # Generate random password for testing + echo -e "${YELLOW}Generating test credentials...${NC}" + + # Check if openssl is available + if command -v openssl &> /dev/null; then + AUTH_PASSWORD=$(openssl rand -base64 16) + else + # Fallback to simple random generation + AUTH_PASSWORD="test-$(date +%s)-$(( RANDOM % 10000 ))" + fi + + AUTH_USERNAME="admin" + + # Export environment variables for authentication + export AUTH_ENABLED=true + export AUTH_USERNAME="$AUTH_USERNAME" + export AUTH_PASSWORD="$AUTH_PASSWORD" + + # Save credentials to file for reference + cat > .web-cli-credentials << EOF # Web CLI Test Credentials # Generated: $(date) # ======================================== @@ -82,39 +108,45 @@ curl -u $AUTH_USERNAME:$AUTH_PASSWORD http://localhost:$PORT/api/health # Web Browser: Visit http://localhost:$PORT and login with the credentials above EOF - - echo "" - echo -e "${GREEN}========================================${NC}" - echo -e "${GREEN} Test Credentials (saved to .web-cli-credentials)${NC}" - echo -e "${GREEN}========================================${NC}" - echo -e "${YELLOW} Username: ${NC}$AUTH_USERNAME" - echo -e "${YELLOW} Password: ${NC}$AUTH_PASSWORD" - echo -e "${GREEN}========================================${NC}" - echo "" - - # Start the server in background with auth enabled - ./$APP_NAME & - PID=$! - echo $PID > "$PID_FILE" - - sleep 1 - if is_running; then - echo -e "${GREEN}$APP_NAME started successfully (PID: $PID)${NC}" - echo -e "${GREEN}Access the application at http://localhost:$PORT${NC}" - echo -e "${YELLOW}Authentication is ENABLED - use credentials above${NC}" echo "" - echo -e "${YELLOW}Quick test:${NC}" - echo -e " curl -u $AUTH_USERNAME:$AUTH_PASSWORD http://localhost:$PORT/api/health" + echo -e "${GREEN}========================================${NC}" + echo -e "${GREEN} Test Credentials (saved to .web-cli-credentials)${NC}" + echo -e "${GREEN}========================================${NC}" + echo -e "${YELLOW} Username: ${NC}$AUTH_USERNAME" + echo -e "${YELLOW} Password: ${NC}$AUTH_PASSWORD" + echo -e "${GREEN}========================================${NC}" echo "" - else - echo -e "${RED}Failed to start $APP_NAME${NC}" - rm -f "$PID_FILE" - rm -f .web-cli-credentials - exit 1 + + # Start the server in background with auth enabled + ./$APP_NAME & + PID=$! + echo $PID > "$PID_FILE" + + sleep 1 + + if is_running; then + echo -e "${GREEN}$APP_NAME started successfully (PID: $PID)${NC}" + echo -e "${GREEN}Access the application at http://localhost:$PORT${NC}" + echo -e "${YELLOW}Authentication is ENABLED - use credentials above${NC}" + echo "" + echo -e "${YELLOW}Quick test:${NC}" + echo -e " curl -u $AUTH_USERNAME:$AUTH_PASSWORD http://localhost:$PORT/api/health" + echo "" + else + echo -e "${RED}Failed to start $APP_NAME${NC}" + rm -f "$PID_FILE" + rm -f .web-cli-credentials + exit 1 + fi fi } +# Function to start in dev mode (no auth) +dev() { + start noauth +} + # Function to stop the server stop() { if ! is_running; then @@ -218,6 +250,9 @@ case "${1:-}" in start) start ;; + dev) + dev + ;; stop) stop ;; @@ -234,10 +269,11 @@ case "${1:-}" in reset_data ;; *) - echo "Usage: $0 {start|stop|restart|status|fresh|reset}" + echo "Usage: $0 {start|stop|restart|status|fresh|reset|dev}" echo "" echo "Commands:" - echo " start - Start the server" + echo " start - Start the server (with authentication)" + echo " dev - Start the server WITHOUT authentication (dev mode)" echo " stop - Stop the server" echo " restart - Restart the server" echo " status - Check if server is running" diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..5cceb3f --- /dev/null +++ b/package-lock.json @@ -0,0 +1,1221 @@ +{ + "name": "web-cli", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "devDependencies": { + "puppeteer": "^24.35.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.28.6.tgz", + "integrity": "sha512-JYgintcMjRiCvS8mMECzaEn+m3PfoQiyqukOMCCVQtoJGYJw8j/8LBJEiqkHLkfwCcs74E3pbAUFNg7d9VNJ+Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.28.5", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@puppeteer/browsers": { + "version": "2.11.1", + "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.11.1.tgz", + "integrity": "sha512-YmhAxs7XPuxN0j7LJloHpfD1ylhDuFmmwMvfy/+6nBSrETT2ycL53LrhgPtR+f+GcPSybQVuQ5inWWu5MrWCpA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "debug": "^4.4.3", + "extract-zip": "^2.0.1", + "progress": "^2.0.3", + "proxy-agent": "^6.5.0", + "semver": "^7.7.3", + "tar-fs": "^3.1.1", + "yargs": "^17.7.2" + }, + "bin": { + "browsers": "lib/cjs/main-cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@tootallnate/quickjs-emscripten": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz", + "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "25.0.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.0.9.tgz", + "integrity": "sha512-/rpCXHlCWeqClNBwUhDcusJxXYDjZTyE8v5oTO7WbL8eij2nKhUeU89/6xgjU7N4/Vh3He0BtyhJdQbDyhiXAw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "undici-types": "~7.16.0" + } + }, + "node_modules/@types/yauzl": { + "version": "2.10.3", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", + "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/ast-types": { + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz", + "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/b4a": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.7.3.tgz", + "integrity": "sha512-5Q2mfq2WfGuFp3uS//0s6baOJLMoVduPYVeNmDYxu5OUA1/cBfvr2RIS7vi62LdNj/urk1hfmj867I3qt6uZ7Q==", + "dev": true, + "license": "Apache-2.0", + "peerDependencies": { + "react-native-b4a": "*" + }, + "peerDependenciesMeta": { + "react-native-b4a": { + "optional": true + } + } + }, + "node_modules/bare-events": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.8.2.tgz", + "integrity": "sha512-riJjyv1/mHLIPX4RwiK+oW9/4c3TEUeORHKefKAKnZ5kyslbN+HXowtbaVEqt4IMUB7OXlfixcs6gsFeo/jhiQ==", + "dev": true, + "license": "Apache-2.0", + "peerDependencies": { + "bare-abort-controller": "*" + }, + "peerDependenciesMeta": { + "bare-abort-controller": { + "optional": true + } + } + }, + "node_modules/bare-fs": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.5.2.tgz", + "integrity": "sha512-veTnRzkb6aPHOvSKIOy60KzURfBdUflr5VReI+NSaPL6xf+XLdONQgZgpYvUuZLVQ8dCqxpBAudaOM1+KpAUxw==", + "dev": true, + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "bare-events": "^2.5.4", + "bare-path": "^3.0.0", + "bare-stream": "^2.6.4", + "bare-url": "^2.2.2", + "fast-fifo": "^1.3.2" + }, + "engines": { + "bare": ">=1.16.0" + }, + "peerDependencies": { + "bare-buffer": "*" + }, + "peerDependenciesMeta": { + "bare-buffer": { + "optional": true + } + } + }, + "node_modules/bare-os": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-3.6.2.tgz", + "integrity": "sha512-T+V1+1srU2qYNBmJCXZkUY5vQ0B4FSlL3QDROnKQYOqeiQR8UbjNHlPa+TIbM4cuidiN9GaTaOZgSEgsvPbh5A==", + "dev": true, + "license": "Apache-2.0", + "optional": true, + "engines": { + "bare": ">=1.14.0" + } + }, + "node_modules/bare-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-3.0.0.tgz", + "integrity": "sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==", + "dev": true, + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "bare-os": "^3.0.1" + } + }, + "node_modules/bare-stream": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.7.0.tgz", + "integrity": "sha512-oyXQNicV1y8nc2aKffH+BUHFRXmx6VrPzlnaEvMhram0nPBrKcEdcyBg5r08D0i8VxngHFAiVyn1QKXpSG0B8A==", + "dev": true, + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "streamx": "^2.21.0" + }, + "peerDependencies": { + "bare-buffer": "*", + "bare-events": "*" + }, + "peerDependenciesMeta": { + "bare-buffer": { + "optional": true + }, + "bare-events": { + "optional": true + } + } + }, + "node_modules/bare-url": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/bare-url/-/bare-url-2.3.2.tgz", + "integrity": "sha512-ZMq4gd9ngV5aTMa5p9+UfY0b3skwhHELaDkhEHetMdX0LRkW9kzaym4oo/Eh+Ghm0CCDuMTsRIGM/ytUc1ZYmw==", + "dev": true, + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "bare-path": "^3.0.0" + } + }, + "node_modules/basic-ftp": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.1.0.tgz", + "integrity": "sha512-RkaJzeJKDbaDWTIPiJwubyljaEPwpVWkm9Rt5h9Nd6h7tEXTJ3VB4qxdZBioV7JO5yLUaOKwz7vDOzlncUsegw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/chromium-bidi": { + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-12.0.1.tgz", + "integrity": "sha512-fGg+6jr0xjQhzpy5N4ErZxQ4wF7KLEvhGZXD6EgvZKDhu7iOhZXnZhcDxPJDcwTcrD48NPzOCo84RP2lv3Z+Cg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "mitt": "^3.0.1", + "zod": "^3.24.1" + }, + "peerDependencies": { + "devtools-protocol": "*" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/cosmiconfig": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", + "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", + "dev": true, + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.1", + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/data-uri-to-buffer": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz", + "integrity": "sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/degenerator": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz", + "integrity": "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ast-types": "^0.13.4", + "escodegen": "^2.1.0", + "esprima": "^4.0.1" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/devtools-protocol": { + "version": "0.0.1534754", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1534754.tgz", + "integrity": "sha512-26T91cV5dbOYnXdJi5qQHoTtUoNEqwkHcAyu/IKtjIAxiEqPMrDiRkDOPWVsGfNZGmlQVHQbZRSjD8sxagWVsQ==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/end-of-stream": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/error-ex": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", + "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/events-universal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/events-universal/-/events-universal-1.0.1.tgz", + "integrity": "sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "bare-events": "^2.7.0" + } + }, + "node_modules/extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + }, + "engines": { + "node": ">= 10.17.0" + }, + "optionalDependencies": { + "@types/yauzl": "^2.9.1" + } + }, + "node_modules/fast-fifo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", + "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "pend": "~1.2.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-uri": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.5.tgz", + "integrity": "sha512-b1O07XYq8eRuVzBNgJLstU6FYc1tS6wnMtF1I1D9lE8LxZSOGZ7LhxN54yPP6mGw5f2CkXY2BQUL9Fx41qvcIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "basic-ftp": "^5.0.2", + "data-uri-to-buffer": "^6.0.2", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ip-address": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.1.0.tgz", + "integrity": "sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true, + "license": "MIT" + }, + "node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/mitt": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", + "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", + "dev": true, + "license": "MIT" + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/netmask": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", + "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/pac-proxy-agent": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.2.0.tgz", + "integrity": "sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tootallnate/quickjs-emscripten": "^0.23.0", + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "get-uri": "^6.0.1", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.6", + "pac-resolver": "^7.0.1", + "socks-proxy-agent": "^8.0.5" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/pac-resolver": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.1.tgz", + "integrity": "sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==", + "dev": true, + "license": "MIT", + "dependencies": { + "degenerator": "^5.0.0", + "netmask": "^2.0.2" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "dev": true, + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/proxy-agent": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.5.0.tgz", + "integrity": "sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "http-proxy-agent": "^7.0.1", + "https-proxy-agent": "^7.0.6", + "lru-cache": "^7.14.1", + "pac-proxy-agent": "^7.1.0", + "proxy-from-env": "^1.1.0", + "socks-proxy-agent": "^8.0.5" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "dev": true, + "license": "MIT" + }, + "node_modules/pump": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz", + "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==", + "dev": true, + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/puppeteer": { + "version": "24.35.0", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-24.35.0.tgz", + "integrity": "sha512-sbjB5JnJ+3nwgSdRM/bqkFXqLxRz/vsz0GRIeTlCk+j+fGpqaF2dId9Qp25rXz9zfhqnN9s0krek1M/C2GDKtA==", + "dev": true, + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "@puppeteer/browsers": "2.11.1", + "chromium-bidi": "12.0.1", + "cosmiconfig": "^9.0.0", + "devtools-protocol": "0.0.1534754", + "puppeteer-core": "24.35.0", + "typed-query-selector": "^2.12.0" + }, + "bin": { + "puppeteer": "lib/cjs/puppeteer/node/cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/puppeteer-core": { + "version": "24.35.0", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-24.35.0.tgz", + "integrity": "sha512-vt1zc2ME0kHBn7ZDOqLvgvrYD5bqNv5y2ZNXzYnCv8DEtZGw/zKhljlrGuImxptZ4rq+QI9dFGrUIYqG4/IQzA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@puppeteer/browsers": "2.11.1", + "chromium-bidi": "12.0.1", + "debug": "^4.4.3", + "devtools-protocol": "0.0.1534754", + "typed-query-selector": "^2.12.0", + "webdriver-bidi-protocol": "0.3.10", + "ws": "^8.19.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks": { + "version": "2.8.7", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.7.tgz", + "integrity": "sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ip-address": "^10.0.1", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz", + "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "socks": "^2.8.3" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/streamx": { + "version": "2.23.0", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.23.0.tgz", + "integrity": "sha512-kn+e44esVfn2Fa/O0CPFcex27fjIL6MkVae0Mm6q+E6f0hWv578YCERbv+4m02cjxvDsPKLnmxral/rR6lBMAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "events-universal": "^1.0.0", + "fast-fifo": "^1.3.2", + "text-decoder": "^1.1.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tar-fs": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.1.1.tgz", + "integrity": "sha512-LZA0oaPOc2fVo82Txf3gw+AkEd38szODlptMYejQUhndHMLQ9M059uXR+AfS7DNo0NpINvSqDsvyaCrBVkptWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "pump": "^3.0.0", + "tar-stream": "^3.1.5" + }, + "optionalDependencies": { + "bare-fs": "^4.0.1", + "bare-path": "^3.0.0" + } + }, + "node_modules/tar-stream": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz", + "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "b4a": "^1.6.4", + "fast-fifo": "^1.2.0", + "streamx": "^2.15.0" + } + }, + "node_modules/text-decoder": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.3.tgz", + "integrity": "sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "b4a": "^1.6.4" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD" + }, + "node_modules/typed-query-selector": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/typed-query-selector/-/typed-query-selector-2.12.0.tgz", + "integrity": "sha512-SbklCd1F0EiZOyPiW192rrHZzZ5sBijB6xM+cpmrwDqObvdtunOHHIk9fCGsoK5JVIYXoyEp4iEdE3upFH3PAg==", + "dev": true, + "license": "MIT" + }, + "node_modules/undici-types": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", + "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/webdriver-bidi-protocol": { + "version": "0.3.10", + "resolved": "https://registry.npmjs.org/webdriver-bidi-protocol/-/webdriver-bidi-protocol-0.3.10.tgz", + "integrity": "sha512-5LAE43jAVLOhB/QqX4bwSiv0Hg1HBfMmOuwBSXHdvg4GMGu9Y0lIq7p4R/yySu6w74WmaR4GM4H9t2IwLW7hgw==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/ws": { + "version": "8.19.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.19.0.tgz", + "integrity": "sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "node_modules/zod": { + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..8ae434d --- /dev/null +++ b/package.json @@ -0,0 +1,5 @@ +{ + "devDependencies": { + "puppeteer": "^24.35.0" + } +} From c652fcc9013683fef66492c383b086d664fe16d9 Mon Sep 17 00:00:00 2001 From: Przemyslaw Ozgo Date: Mon, 19 Jan 2026 21:01:15 +0100 Subject: [PATCH 2/2] fmt and test fix --- internal/audit/audit.go | 26 +++++++++++------------ internal/database/database_test.go | 13 ++++++++++-- internal/models/env_variable.go | 2 +- internal/models/saved_command.go | 34 +++++++++++++++--------------- internal/server/server.go | 2 +- 5 files changed, 43 insertions(+), 34 deletions(-) diff --git a/internal/audit/audit.go b/internal/audit/audit.go index c9b6f90..4d7c710 100644 --- a/internal/audit/audit.go +++ b/internal/audit/audit.go @@ -32,19 +32,19 @@ const ( // AuditEvent represents a single audit log entry type AuditEvent struct { - Timestamp time.Time `json:"timestamp"` - EventType EventType `json:"event_type"` - Outcome EventOutcome `json:"outcome"` - Actor string `json:"actor"` // Username or "anonymous" - SourceIP string `json:"source_ip"` // Client IP address - Target string `json:"target"` // What was acted upon (e.g., server name, script name) - Command string `json:"command,omitempty"` - User string `json:"user,omitempty"` // Execution user (e.g., root, ubuntu) - Server string `json:"server,omitempty"` // Target server for remote commands - ExitCode *int `json:"exit_code,omitempty"` // Command exit code - Duration int64 `json:"duration_ms,omitempty"` // Execution duration in milliseconds - ErrorMsg string `json:"error,omitempty"` // Error message if failed - Metadata map[string]string `json:"metadata,omitempty"` // Additional context + Timestamp time.Time `json:"timestamp"` + EventType EventType `json:"event_type"` + Outcome EventOutcome `json:"outcome"` + Actor string `json:"actor"` // Username or "anonymous" + SourceIP string `json:"source_ip"` // Client IP address + Target string `json:"target"` // What was acted upon (e.g., server name, script name) + Command string `json:"command,omitempty"` + User string `json:"user,omitempty"` // Execution user (e.g., root, ubuntu) + Server string `json:"server,omitempty"` // Target server for remote commands + ExitCode *int `json:"exit_code,omitempty"` // Command exit code + Duration int64 `json:"duration_ms,omitempty"` // Execution duration in milliseconds + ErrorMsg string `json:"error,omitempty"` // Error message if failed + Metadata map[string]string `json:"metadata,omitempty"` // Additional context } // Logger handles audit logging diff --git a/internal/database/database_test.go b/internal/database/database_test.go index 736993f..8e68481 100644 --- a/internal/database/database_test.go +++ b/internal/database/database_test.go @@ -70,8 +70,8 @@ func TestDatabaseCreation(t *testing.T) { t.Fatalf("Failed to get version: %v", err) } - if version != 15 { - t.Errorf("Expected schema version 15, got %d", version) + if version != 16 { + t.Errorf("Expected schema version 16, got %d", version) } // Verify all tables exist @@ -146,6 +146,15 @@ func TestDatabaseCreation(t *testing.T) { t.Errorf("bash_scripts table should have %s column after migration 13", field) } } + + // Verify group_name column exists on resource tables (migration 16) + groupNameTables := []string{"servers", "ssh_keys", "env_variables", "bash_scripts"} + for _, table := range groupNameTables { + err = db.conn.QueryRow("SELECT name FROM pragma_table_info(?) WHERE name='group_name'", table).Scan(&columnName) + if err != nil { + t.Errorf("%s table should have group_name column after migration 16", table) + } + } } func TestDatabasePersistence(t *testing.T) { diff --git a/internal/models/env_variable.go b/internal/models/env_variable.go index d273b7e..12940b8 100644 --- a/internal/models/env_variable.go +++ b/internal/models/env_variable.go @@ -35,7 +35,7 @@ type EnvVariableUpdate struct { type EnvVariableResponse struct { ID int64 `json:"id"` Name string `json:"name"` - Value string `json:"value"` // Will be masked unless explicitly requested + Value string `json:"value"` // Will be masked unless explicitly requested Description string `json:"description"` Group string `json:"group"` // Group/category for organization Source string `json:"source,omitempty"` // "sqlite" or "vault" diff --git a/internal/models/saved_command.go b/internal/models/saved_command.go index 0d18370..1d4d76c 100644 --- a/internal/models/saved_command.go +++ b/internal/models/saved_command.go @@ -67,23 +67,23 @@ type CommandResult struct { // ScriptExecution represents a request to execute a stored bash script type ScriptExecution struct { - ScriptID int64 `json:"script_id,omitempty"` // ID of the script to execute (SQLite) - ScriptName string `json:"script_name,omitempty"` // Name of the script to execute (Vault) - ScriptGroup string `json:"script_group,omitempty"` // Script group for execution (Vault) - User string `json:"user"` // User to run as (default: root) - SudoPassword string `json:"sudo_password,omitempty"` // Sudo password (required when user != current for local) - SSHPassword string `json:"ssh_password,omitempty"` // SSH password (for remote, if key auth fails) - IsRemote bool `json:"is_remote"` // True if remote execution - ServerID *int64 `json:"server_id,omitempty"` // Server ID for remote execution (SQLite) - ServerName string `json:"server_name,omitempty"` // Server name for remote execution (Vault) - ServerGroup string `json:"server_group,omitempty"` // Server group for remote execution (Vault) - SSHKeyID *int64 `json:"ssh_key_id,omitempty"` // SSH key ID for remote execution (SQLite) - SSHKeyName string `json:"ssh_key_name,omitempty"` // SSH key name for remote execution (Vault) - SSHKeyGroup string `json:"ssh_key_group,omitempty"` // SSH key group for remote execution (Vault) - IncludeEnvVars bool `json:"include_env_vars"` // Deprecated: use EnvVarIDs instead - EnvVarIDs []int64 `json:"env_var_ids,omitempty"` // Specific env var IDs to include (SQLite) - EnvVarNames []string `json:"env_var_names,omitempty"` // Names of env vars to include (Vault) - EnvVarGroups []string `json:"env_var_groups,omitempty"` // Groups of env vars to include (Vault, paired with EnvVarNames) + ScriptID int64 `json:"script_id,omitempty"` // ID of the script to execute (SQLite) + ScriptName string `json:"script_name,omitempty"` // Name of the script to execute (Vault) + ScriptGroup string `json:"script_group,omitempty"` // Script group for execution (Vault) + User string `json:"user"` // User to run as (default: root) + SudoPassword string `json:"sudo_password,omitempty"` // Sudo password (required when user != current for local) + SSHPassword string `json:"ssh_password,omitempty"` // SSH password (for remote, if key auth fails) + IsRemote bool `json:"is_remote"` // True if remote execution + ServerID *int64 `json:"server_id,omitempty"` // Server ID for remote execution (SQLite) + ServerName string `json:"server_name,omitempty"` // Server name for remote execution (Vault) + ServerGroup string `json:"server_group,omitempty"` // Server group for remote execution (Vault) + SSHKeyID *int64 `json:"ssh_key_id,omitempty"` // SSH key ID for remote execution (SQLite) + SSHKeyName string `json:"ssh_key_name,omitempty"` // SSH key name for remote execution (Vault) + SSHKeyGroup string `json:"ssh_key_group,omitempty"` // SSH key group for remote execution (Vault) + IncludeEnvVars bool `json:"include_env_vars"` // Deprecated: use EnvVarIDs instead + EnvVarIDs []int64 `json:"env_var_ids,omitempty"` // Specific env var IDs to include (SQLite) + EnvVarNames []string `json:"env_var_names,omitempty"` // Names of env vars to include (Vault) + EnvVarGroups []string `json:"env_var_groups,omitempty"` // Groups of env vars to include (Vault, paired with EnvVarNames) } // ScriptResult represents the result of a script execution diff --git a/internal/server/server.go b/internal/server/server.go index 0bab424..60534c5 100644 --- a/internal/server/server.go +++ b/internal/server/server.go @@ -121,7 +121,7 @@ func (s *Server) setupRoutes() { api.HandleFunc("/bash-scripts/{id}", s.handleDeleteBashScript).Methods("DELETE") api.HandleFunc("/bash-scripts/{id}/presets", s.handleGetScriptPresetsByScript).Methods("GET") - // Script preset endpoints + // Script preset endpoints api.HandleFunc("/script-presets", s.handleListScriptPresets).Methods("GET") api.HandleFunc("/script-presets", s.handleCreateScriptPreset).Methods("POST") api.HandleFunc("/script-presets/{id}", s.handleGetScriptPreset).Methods("GET")

bd&NpIko|OLZ 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 literal 123082 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 z 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 diff --git a/docs/images/interactive-terminal-dropdown.png b/docs/images/interactive-terminal-dropdown.png new file mode 100644 index 0000000000000000000000000000000000000000..37992941482f240adc41250d2f81f00e5efc481f GIT binary patch literal 42316 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 L8}ss$mu~(W>^zk} literal 0 HcmV?d00001 diff --git a/docs/images/interactive-terminal.png b/docs/images/interactive-terminal.png index 0be6783ebc286d35f210d869fd829e66882344e2..40f0b32800ff0ff9ea4b45479273967f8bb55a2c 100644 GIT binary patch literal 35399 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 A!~g&Q literal 81954 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� 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/>6L!tk3n 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 Tg|frQE|HZ|ypt($|HXd+0Q|m^ literal 74780 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 diff --git a/docs/images/remote-commands.png b/docs/images/remote-commands.png index 9d1a9ae36eabfd083e4530d6a56d277c98bbf879..28a87004a2b35abe0fed709a3e6d34217505bb26 100644 GIT binary patch literal 48235 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