Skip to content

v.0.2.0

Choose a tag to compare

@pozgo pozgo released this 23 Dec 21:47
· 8 commits to main since this release
f08b780

Added

Interactive Terminal

  • Full browser-based terminal emulator powered by xterm.js with WebSocket backend
  • Real-time bidirectional communication between browser and server PTY
  • Support for multiple shells: Bash, Zsh, and Sh
  • Proper terminal emulation with dynamic resize support and 256-color mode
  • Shell selector dropdown to choose preferred shell
  • New dashboard card for quick access to Interactive Terminal
  • MesloLGM Nerd Font for optimal terminal rendering

SSH Key Integration in Terminal

  • SSH key selector dropdown in the Interactive Terminal page
  • Selected SSH keys are automatically injected into terminal sessions
  • SSH wrapper script automatically uses the selected key for all ssh commands
  • No need to manually specify -i flag when connecting to servers
  • Temporary key files are securely created with proper permissions (0600) and cleaned up on session close

Server Name Resolution

  • Automatic server alias resolution from Admin Panel servers
  • Servers added in Admin Panel are available as SSH hostname aliases in the terminal
  • Auto-generated SSH config includes hostname, port, and username from server settings
  • Example: Add server "prod" (IP: 10.0.0.5, user: deploy) → type ssh prod in terminal

Swagger API Documentation

  • Interactive API documentation via Swagger UI at /swagger/
  • Auto-generated from code annotations using swaggo/swag
  • Documents all 42+ REST endpoints with request/response examples
  • Includes authentication (BasicAuth, BearerAuth) support
  • Dark theme-compatible styling
  • Quick access via API icon in header navigation

Dynamic Shell Detection

  • Shell selector now only shows shells that are actually installed on the system
  • New /api/system/shells endpoint returns list of available shells
  • Prevents users from selecting unavailable shells (e.g., Zsh when not installed)

Docker Improvements

  • Added Zsh shell to Docker container

Fixed

SSH Key Storage

  • Fixed SSH key corruption when saving keys through the web interface
  • Removed .trim() from private key handling that was stripping essential newlines
  • SSH keys (RSA, ED25519, ECDSA) now work correctly without "error in libcrypto" or unexpected password prompts

Security

  • Removed debug logging that could expose sensitive SSH key information
  • SSH keys are written to temporary files with strict permissions (0600)
  • Temporary session directories are cleaned up when terminal sessions close
  • No sensitive data (key contents, paths, or identifiers) logged to console

New Files

  • frontend/src/components/Terminal.jsx - React terminal component with xterm.js
  • internal/terminal/terminal.go - Go PTY session management with SSH config generation
  • internal/server/handlers_terminal.go - WebSocket handler for terminal connections

Dependencies Added

  • @xterm/xterm - Terminal emulator for the browser
  • @xterm/addon-fit - Auto-resize terminal to container
  • github.com/creack/pty - PTY handling in Go
  • github.com/gorilla/websocket - WebSocket support
  • github.com/swaggo/swag - Swagger documentation generator
  • github.com/swaggo/http-swagger - Swagger UI handler

API Endpoints Added

Terminal WebSocket

  • GET /ws/terminal - WebSocket endpoint for interactive terminal sessions
    • Query params: shell (bash/zsh/sh), sshKeyId (optional SSH key ID)

System

  • GET /api/system/shells - List available shells on the system