From f41c316b2bbbf3c42232c59d8d34b69322e1eb27 Mon Sep 17 00:00:00 2001 From: Lukasz Raczylo Date: Mon, 24 Nov 2025 02:28:08 +0000 Subject: [PATCH] Add configuration wizard. (#2) * Add configuration wizard. --- README.md | 22 +- WIZARD_USAGE.md | 171 ++++ cmd/kportal/main.go | 94 +- docs/index.html | 1334 ++++++++++++++++++-------- docs/kportal-logo-dark.svg | 132 +++ docs/kportal-logo-light.svg | 128 +++ docs/kportal-screenshot.png | Bin 204002 -> 188622 bytes internal/config/config.go | 14 + internal/config/config_test.go | 2 +- internal/config/mutator.go | 273 ++++++ internal/config/watcher.go | 30 +- internal/forward/manager.go | 33 +- internal/forward/portcheck.go | 34 +- internal/forward/worker.go | 40 +- internal/forward/worker_unit_test.go | 286 ++++++ internal/healthcheck/checker.go | 24 +- internal/k8s/discovery.go | 321 +++++++ internal/logger/demo_test.go | 70 ++ internal/logger/klog_bridge.go | 96 ++ internal/logger/klog_bridge_test.go | 280 ++++++ internal/logger/logger.go | 159 +++ internal/logger/logger_test.go | 521 ++++++++++ internal/ui/bubbletea_ui.go | 309 +++++- internal/ui/wizard_commands.go | 222 +++++ internal/ui/wizard_handlers.go | 763 +++++++++++++++ internal/ui/wizard_state.go | 302 ++++++ internal/ui/wizard_styles.go | 211 ++++ internal/ui/wizard_views.go | 602 ++++++++++++ 28 files changed, 5977 insertions(+), 496 deletions(-) create mode 100644 WIZARD_USAGE.md create mode 100644 docs/kportal-logo-dark.svg create mode 100644 docs/kportal-logo-light.svg create mode 100644 internal/config/mutator.go create mode 100644 internal/forward/worker_unit_test.go create mode 100644 internal/k8s/discovery.go create mode 100644 internal/logger/demo_test.go create mode 100644 internal/logger/klog_bridge.go create mode 100644 internal/logger/klog_bridge_test.go create mode 100644 internal/logger/logger.go create mode 100644 internal/logger/logger_test.go create mode 100644 internal/ui/wizard_commands.go create mode 100644 internal/ui/wizard_handlers.go create mode 100644 internal/ui/wizard_state.go create mode 100644 internal/ui/wizard_styles.go create mode 100644 internal/ui/wizard_views.go diff --git a/README.md b/README.md index 664ffb5..a3d1b22 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,16 @@ -# kportal +

+ kportal logo +

-[![Release](https://img.shields.io/github/v/release/lukaszraczylo/kportal)](https://github.com/lukaszraczylo/kportal/releases) -[![License](https://img.shields.io/github/license/lukaszraczylo/kportal)](LICENSE) -[![Go Report Card](https://goreportcard.com/badge/github.com/lukaszraczylo/kportal)](https://goreportcard.com/report/github.com/lukaszraczylo/kportal) +

+ Release + License + Go Report Card +

-**Modern Kubernetes port-forward manager with interactive terminal UI** +

+ Modern Kubernetes port-forward manager with interactive terminal UI +

kportal simplifies managing multiple Kubernetes port-forwards with an elegant, interactive terminal interface. Built with [Bubble Tea](https://github.com/charmbracelet/bubbletea), it provides real-time status updates, automatic reconnection, and hot-reload configuration support. @@ -13,6 +19,9 @@ kportal simplifies managing multiple Kubernetes port-forwards with an elegant, i ## ✨ Features - šŸŽÆ **Interactive TUI** - Beautiful terminal interface with keyboard navigation (↑↓/jk, Space to toggle, q to quit) +- āž• **Live Add** - Add new port-forwards on-the-fly without editing config files or restarting +- āœļø **Live Edit** - Modify existing port-forwards (ports, resources, aliases) in real-time +- šŸ—‘ļø **Live Delete** - Remove port-forwards instantly from the running session - šŸ”„ **Auto-Reconnect** - Automatic retry with exponential backoff on connection failures (max 10s) - ⚔ **Hot-Reload** - Update configuration without restarting - changes applied automatically - šŸ„ **Health Checks** - Real-time port forward status monitoring with 5-second intervals @@ -93,6 +102,9 @@ kportal 3. **Navigate the interface**: - `↑↓` or `j/k` - Navigate through forwards - `Space` or `Enter` - Toggle forward on/off + - `a` - Add new port-forward interactively + - `e` - Edit selected port-forward + - `d` - Delete selected port-forward - `q` - Quit application ## šŸ“– Configuration diff --git a/WIZARD_USAGE.md b/WIZARD_USAGE.md new file mode 100644 index 0000000..7ab34ee --- /dev/null +++ b/WIZARD_USAGE.md @@ -0,0 +1,171 @@ +# Interactive Add/Remove Wizards + +kportal now includes interactive wizards for adding and removing port forwards directly from the running UI! + +## Quick Start + +Run kportal normally: +```bash +./kportal +``` + +From the main view: +- Press **`n`** to add a new port forward +- Press **`d`** to delete existing port forwards + +## Add Forward Wizard (`n` key) + +The wizard guides you through 7 steps to add a new forward: + +### Step 1: Select Context +Choose from available Kubernetes contexts in your kubeconfig. + +### Step 2: Select Namespace +Pick the namespace where your resource lives. + +### Step 3: Select Resource Type +Three options: +- **Pod (by name prefix)** - Forward to a specific pod by prefix matching +- **Pod (by label selector)** - Forward to pods matching labels (survives restarts) +- **Service** - Most stable, load-balanced option + +### Step 4: Enter Resource +- **Pod prefix**: Type a prefix like `nginx-` to match pods +- **Label selector**: Enter labels like `app=nginx,env=prod` +- **Service**: Select from a list of services + +The wizard shows real-time validation and matching resources! + +### Step 5: Remote Port +Enter the port number on the remote resource. The wizard displays detected ports from running containers. + +### Step 6: Local Port +Enter the local port to bind to. The wizard checks availability in real-time. + +### Step 7: Confirmation +Review your configuration and optionally add an alias (friendly name). Confirm to save! + +### Navigation Keys + +- **`↑`/`↓`** or **`j`/`k`** - Navigate options +- **`Enter`** - Confirm and proceed to next step +- **`Esc`** - Go back one step (or cancel on first step) +- **`Ctrl+C`** - Hard cancel and return to main view +- **`Backspace`** - Delete characters in text fields + +## Remove Forward Wizard (`d` key) + +Multi-select interface for removing forwards: + +1. **Select forwards**: Use arrow keys to navigate, `Space` to toggle selection +2. **Confirm removal**: Press `Enter` and confirm your choice + +### Navigation Keys + +- **`↑`/`↓`** or **`j`/`k`** - Navigate forwards +- **`Space`** - Toggle selection of current forward +- **`a`** - Select all forwards +- **`n`** - Deselect all forwards +- **`Enter`** - Proceed to confirmation +- **`Esc`** - Cancel and return to main view +- **`Ctrl+C`** - Hard cancel + +## Auto Hot-Reload + +When you save a forward via the wizard: +1. The wizard writes to `.kportal.yaml` atomically +2. The file watcher detects the change (~100ms) +3. The manager reloads and starts the new forward +4. The UI updates automatically + +No restart needed! + +## Error Handling + +The wizards handle errors gracefully: + +- **Cluster unreachable**: Shows error but allows manual entry +- **Port conflicts**: Displays which process is using the port +- **Invalid selectors**: Shows validation errors in real-time +- **Duplicate ports**: Prevents adding forwards with conflicting ports + +## Tips + +### Pod Prefix Matching +When using pod prefix, you can type just the app name: +- `nginx` matches `nginx-deployment-abc123` +- `postgres` matches `postgres-statefulset-0` + +### Label Selectors +Use standard Kubernetes label syntax: +- `app=nginx` - Single label +- `app=nginx,env=prod` - Multiple labels (comma-separated) +- Real-time validation shows matching pods as you type! + +### Aliases +Use aliases for cleaner UI display: +- Instead of: `production/default/pod/nginx-deployment-abc123:80→8080` +- Shows as: `my-nginx:80→8080` + +### Quick Selection +In list views, you can use `j`/`k` (Vim-style) or arrow keys for navigation. + +## Example Workflow + +Adding a forward for a PostgreSQL database: + +1. Press `n` in main view +2. Select context: `production` (arrow keys + Enter) +3. Select namespace: `default` (arrow keys + Enter) +4. Select type: `Service` (arrow keys + Enter) +5. Select service: `postgres` (arrow keys + Enter) +6. Enter remote port: `5432` (type + Enter) +7. Enter local port: `5432` (type + Enter) +8. Add alias: `prod-db` (optional, type + Enter) +9. Confirm: Select "Add to .kportal.yaml" (Enter) + +Done! The forward starts automatically within seconds. + +## Architecture + +The wizards use: +- **Config Mutator**: Safe, atomic YAML writes (temp file + rename) +- **K8s Discovery**: Lists contexts, namespaces, pods, services +- **Modal Overlays**: Wizards appear centered over the main view +- **Async Validation**: Port checks and selector validation run in background +- **Hot-Reload Integration**: File watcher picks up changes automatically + +## Troubleshooting + +### Wizards not appearing? +Check that kportal can connect to your Kubernetes cluster: +```bash +kubectl cluster-info +``` + +### Port check showing wrong status? +The port check happens asynchronously. Wait a moment after typing for validation. + +### Changes not appearing? +The file watcher triggers within 100ms. If changes aren't visible, check: +1. `.kportal.yaml` was written correctly +2. No validation errors in the file +3. kportal process is still running + +--- + +**Navigation Summary** + +Main View: +- `n` - New forward wizard +- `d` - Delete forward wizard +- `Space` - Toggle forward on/off +- `↑↓/jk` - Navigate forwards +- `q` - Quit + +Wizards: +- `Enter` - Next step / Confirm +- `Esc` - Previous step / Cancel +- `Ctrl+C` - Hard cancel +- `↑↓/jk` - Navigate +- `Space` - Toggle (in delete wizard) diff --git a/cmd/kportal/main.go b/cmd/kportal/main.go index 9de7523..9c63e12 100644 --- a/cmd/kportal/main.go +++ b/cmd/kportal/main.go @@ -7,23 +7,30 @@ import ( "log" "os" "os/signal" + "path/filepath" + "strings" "syscall" "time" "github.com/nvm/kportal/internal/config" "github.com/nvm/kportal/internal/converter" "github.com/nvm/kportal/internal/forward" + "github.com/nvm/kportal/internal/k8s" + "github.com/nvm/kportal/internal/logger" "github.com/nvm/kportal/internal/ui" "k8s.io/klog/v2" ) const ( - defaultConfigFile = ".kportal.yaml" + defaultConfigFile = ".kportal.yaml" + initialForwardSettleTime = 100 * time.Millisecond + tableUpdateInterval = 2 * time.Second ) var ( configFile = flag.String("c", defaultConfigFile, "Path to configuration file") verbose = flag.Bool("v", false, "Enable verbose logging") + logFormat = flag.String("log-format", "text", "Log format: text or json") check = flag.Bool("check", false, "Validate configuration and exit") showVersion = flag.Bool("version", false, "Show version and exit") convertInput = flag.String("convert", "", "Convert kftray JSON config to kportal YAML (provide input file path)") @@ -39,6 +46,62 @@ func main() { os.Exit(0) } + // Validate config path security + if *configFile != "" { + absConfigPath, err := filepath.Abs(*configFile) + if err != nil { + fmt.Fprintf(os.Stderr, "Invalid config path: %v\n", err) + os.Exit(1) + } + absConfigPath = filepath.Clean(absConfigPath) + + // Block system directories + systemDirs := []string{"/etc", "/sys", "/proc", "/dev"} + for _, sysDir := range systemDirs { + if strings.HasPrefix(absConfigPath, sysDir) { + fmt.Fprintf(os.Stderr, "Error: Config file cannot be in system directory: %s\n", sysDir) + os.Exit(1) + } + } + + *configFile = absConfigPath + } + + // Initialize structured logger + var logLevel logger.Level + var logFmt logger.Format + var logOutput io.Writer + + if *verbose { + logLevel = logger.LevelDebug + logOutput = os.Stderr + } else { + logLevel = logger.LevelInfo + logOutput = io.Discard // Silence logger in non-verbose mode to prevent UI corruption + } + + switch *logFormat { + case "json": + logFmt = logger.FormatJSON + default: + logFmt = logger.FormatText + } + + logger.Init(logLevel, logFmt, logOutput) + + // Configure klog (used by kubernetes client-go) to route through our logger + // This prevents k8s logs from interfering with the UI + if *verbose { + // In verbose mode, route klog through our structured logger at DEBUG level + klogLogger := logger.New(logger.LevelDebug, logFmt, os.Stderr) + klogWriter := logger.NewKlogWriter(klogLogger) + klog.SetOutput(klogWriter) + } else { + // In non-verbose mode, completely silence klog + klog.SetOutput(io.Discard) + } + klog.LogToStderr(false) + // Handle conversion mode if *convertInput != "" { if err := converter.ConvertKFTrayToKPortal(*convertInput, *convertOutput); err != nil { @@ -68,11 +131,8 @@ func main() { log.SetOutput(io.Discard) log.SetPrefix("") log.SetFlags(0) - - // Disable klog (used by kubernetes client-go) - klog.SetOutput(io.Discard) - klog.LogToStderr(false) } else { + // Verbose mode - enable standard log formatting log.SetFlags(log.LstdFlags | log.Lshortfile) } @@ -101,8 +161,21 @@ func main() { log.Printf("Loading configuration from: %s", *configFile) } + // Create Kubernetes client pool and discovery for wizards + pool, err := k8s.NewClientPool() + if err != nil { + fmt.Fprintf(os.Stderr, "Warning: Failed to create k8s client pool: %v\n", err) + fmt.Fprintf(os.Stderr, "Add/remove wizards will not be available\n") + } + discovery := k8s.NewDiscovery(pool) + mutator := config.NewMutator(*configFile) + // Create forward manager - manager := forward.NewManager(*verbose) + manager, err := forward.NewManager(*verbose) + if err != nil { + fmt.Fprintf(os.Stderr, "Error creating forward manager: %v\n", err) + os.Exit(1) + } // Create UI (bubbletea for interactive, simple table for verbose) var bubbleTeaUI *ui.BubbleTeaUI @@ -117,6 +190,11 @@ func main() { manager.DisableForward(id) } }, version) + + // Set wizard dependencies + // Note: mutator is always available (for delete/edit), discovery requires valid kubeconfig (for add) + bubbleTeaUI.SetWizardDependencies(discovery, mutator, *configFile) + manager.SetStatusUI(bubbleTeaUI) } else { // Verbose mode with simple table @@ -140,7 +218,7 @@ func main() { // Start table update loop go func() { - ticker := time.NewTicker(2 * time.Second) + ticker := time.NewTicker(tableUpdateInterval) defer ticker.Stop() for range ticker.C { tableUI.Render() @@ -211,7 +289,7 @@ func main() { }() // Give a moment for initial forwards to be added - time.Sleep(100 * time.Millisecond) + time.Sleep(initialForwardSettleTime) // Start the bubbletea app (blocks until quit) if err := bubbleTeaUI.Start(); err != nil { diff --git a/docs/index.html b/docs/index.html index bc204aa..ef2c18a 100644 --- a/docs/index.html +++ b/docs/index.html @@ -1,225 +1,616 @@ - + - - - - kportal - Kubernetes Port-Forward Manager - - - - - - - - - - - - - - -
-
-
-

- Kubernetes Port-Forward
- Manager -

-

- Professional terminal interface for managing multiple Kubernetes port-forwards with auto-reconnect, hot-reload, and real-time health monitoring. -

- -
- Version - License - Go Report -
- -
- kportal terminal interface -
-
-
-
- - -
-
-
-

Features

-

Everything you need for production-grade port-forwarding

-
-
-
-
- + + -

Interactive TUI

-

Beautiful terminal interface powered by Bubble Tea. Toggle forwards on/off, view real-time status updates.

-
- -
-
- -
-

Auto-Reconnect

-

Automatic reconnection on failure with exponential backoff. Never lose connectivity to your services.

-
- -
-
- -
-

Hot-Reload

-

Configuration changes applied automatically. Add, remove, or modify forwards without restarting.

-
- -
-
- -
-

Health Checks

-

Real-time health monitoring with 5-second intervals. Grace period prevents false error alerts.

-
- -
-
- -
-

Error Reporting

-

Detailed error messages displayed in the interface. Know exactly what went wrong.

-
- -
-
- -
-

Multi-Context

-

Support for multiple Kubernetes contexts and namespaces. Manage all your clusters from one place.

-
-
-
-
- - -
-
-
-

Installation

-

Get started in seconds

-
-
-
-
- -
-

Homebrew

-

macOS & Linux

-
-
-
- brew install lukaszraczylo/brew-taps/kportal - -
-
- -
-
- -
-

Quick Install

-

All platforms

-
-
-
- curl -fsSL https://raw.githubusercontent.com/lukaszraczylo/kportal/main/install.sh | bash - -
-
- -
-
- -
-

Manual Download

-

Direct download from GitHub releases

-
-
- - Download Binary - -
-
-
-
- - -
-
-
-

Configuration

-

Simple YAML configuration

-
-
-
-
-
- - .kportal.yaml -
- + + + + +
-
contexts:
+                
+
+ + + + + +
+ +
+ + +
+
+
+ +
+
+ +
+ kportal logo + +
+ +

+ Kubernetes Port-Forward
+ Manager +

+

+ Terminal interface for professionals managing multiple + Kubernetes port-forwards with auto-reconnect, + hot-reload, and real-time health monitoring. No, it's + not a wrapper for the kubectl command. +

+ +
+ Version + License + Go Report +
+ +
+
+
+ kportal terminal interface +
+
+
+
+
+ + +
+
+
+

+ Features +

+

+ Everything you need for production-grade port-forwarding +

+
+ + +
+ +
+
+
+ +
+
+

Live Add

+

Add forwards on-the-fly

+
+
+
+ +
+
+
+ +
+
+

Live Edit

+

Modify in real-time

+
+
+
+ +
+
+
+ +
+
+

Live Delete

+

Remove instantly

+
+
+
+ +
+
+
+ +
+
+

Toggle Forwards

+

Enable/disable with Space

+
+
+
+ + +
+
+
+ +
+
+

Auto-Reconnect

+

Exponential backoff retry

+
+
+
+ +
+
+
+ +
+
+

Hot-Reload

+

Config changes auto-apply

+
+
+
+ +
+
+
+ +
+
+

Health Checks

+

Real-time monitoring

+
+
+
+ +
+
+
+ +
+
+

Multi-Context

+

All clusters in one place

+
+
+
+
+
+
+ + +
+
+
+

+ Installation +

+

+ Get started in seconds +

+
+
+
+
+ +
+

+ Homebrew +

+

+ macOS & Linux +

+
+
+
+ brew install + lukaszraczylo/brew-taps/kportal +
+ +
+
+
+ +
+
+ +
+

+ Quick Install +

+

+ All platforms +

+
+
+
+ curl -fsSL + https://raw.githubusercontent.com/lukaszraczylo/kportal/main/install.sh + | bash +
+ +
+
+
+ +
+
+ +
+

+ Manual Download +

+

+ Direct download from GitHub releases +

+
+
+ + Download Binary + +
+
+
+
+ + +
+
+
+

+ Configuration +

+

+ Simple YAML configuration +

+
+
+
+
+
+
+
+ + .kportal.yaml +
+ +
+
contexts:
   - name: production
     namespaces:
       - name: backend
@@ -237,197 +628,350 @@
             port: 6379
             localPort: 6379
             alias: prod-redis
-
- -
-
-

- Resource Types -

-
    -
  • pod/name - Direct pod
  • -
  • service/name - Service
  • -
  • deployment/name - Deployment
  • -
+
-
-

- Features +
+
+

+ Resource Types +

+
    +
  • + pod/name + - Direct pod +
  • +
  • + service/name + - Service +
  • +
  • + deployment/name + - Deployment +
  • +
+
+ +
+

+ Features +

+
    +
  • Pod prefix matching
  • +
  • Label selectors
  • +
  • Alias support
  • +
  • Auto-reconnect
  • +
+
+
+

+
+
+ + +
+ +
+ + +
+
+
+
+
+ kportal logo +
+

+ Kubernetes port-forward manager for professionals +

+
+
+

Links

+ +
+
+

+ Built With +

+
    +
  • Bubble Tea
  • +
  • Lipgloss
  • +
  • + client-go +
-
-
-
- - -
- -
- - - + - - + + // Copy to clipboard function with fallback + function copyToClipboard(text, button) { + // Modern clipboard API (preferred) + if (navigator.clipboard && navigator.clipboard.writeText) { + navigator.clipboard + .writeText(text) + .then(() => { + showCopySuccess(button); + }) + .catch((err) => { + console.error("Clipboard API failed:", err); + fallbackCopy(text, button); + }); + } else { + // Fallback for older browsers or insecure contexts + fallbackCopy(text, button); + } + } + + // Fallback copy method using execCommand + function fallbackCopy(text, button) { + const textarea = document.createElement("textarea"); + textarea.value = text; + textarea.style.position = "fixed"; + textarea.style.top = "0"; + textarea.style.left = "0"; + textarea.style.opacity = "0"; + document.body.appendChild(textarea); + textarea.focus(); + textarea.select(); + + try { + const successful = document.execCommand("copy"); + if (successful) { + showCopySuccess(button); + } else { + showCopyError(button); + } + } catch (err) { + console.error("Fallback copy failed:", err); + showCopyError(button); + } + + document.body.removeChild(textarea); + } + + // Show success feedback + function showCopySuccess(button) { + const originalHTML = button.innerHTML; + button.innerHTML = + ''; + setTimeout(() => { + button.innerHTML = originalHTML; + }, 2000); + } + + // Show error feedback + function showCopyError(button) { + const originalHTML = button.innerHTML; + button.innerHTML = ''; + setTimeout(() => { + button.innerHTML = originalHTML; + }, 2000); + } + + // Smooth scrolling + document.querySelectorAll('a[href^="#"]').forEach((anchor) => { + anchor.addEventListener("click", function (e) { + e.preventDefault(); + const target = document.querySelector( + this.getAttribute("href"), + ); + if (target) { + target.scrollIntoView({ + behavior: "smooth", + block: "start", + }); + } + }); + }); + + diff --git a/docs/kportal-logo-dark.svg b/docs/kportal-logo-dark.svg new file mode 100644 index 0000000..e0cc408 --- /dev/null +++ b/docs/kportal-logo-dark.svg @@ -0,0 +1,132 @@ + diff --git a/docs/kportal-logo-light.svg b/docs/kportal-logo-light.svg new file mode 100644 index 0000000..9182421 --- /dev/null +++ b/docs/kportal-logo-light.svg @@ -0,0 +1,128 @@ + diff --git a/docs/kportal-screenshot.png b/docs/kportal-screenshot.png index cc6d01dadee8ed2c1aeb07909305c2813893211c..41d7b0977fe9607ddf4462532e6913752809b9ff 100644 GIT binary patch delta 186815 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 delta 202316 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 z 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

kE~=T>JfcLiS`AU%}LW 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 diff --git a/internal/config/config.go b/internal/config/config.go index faf3b32..0a9c818 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -7,6 +7,10 @@ import ( "gopkg.in/yaml.v3" ) +const ( + maxConfigSize = 10 * 1024 * 1024 // 10MB +) + // Config represents the root configuration structure from .kportal.yaml type Config struct { Contexts []Context `yaml:"contexts"` @@ -80,6 +84,16 @@ func (f *Forward) GetNamespace() string { // LoadConfig loads and parses the configuration file from the given path. func LoadConfig(path string) (*Config, error) { + // Validate file size before reading + fileInfo, err := os.Stat(path) + if err != nil { + return nil, fmt.Errorf("failed to stat config file: %w", err) + } + + if fileInfo.Size() > maxConfigSize { + return nil, fmt.Errorf("config file too large: %d bytes (max %d)", fileInfo.Size(), maxConfigSize) + } + data, err := os.ReadFile(path) if err != nil { return nil, fmt.Errorf("failed to read config file: %w", err) diff --git a/internal/config/config_test.go b/internal/config/config_test.go index 22ff031..1a6498a 100644 --- a/internal/config/config_test.go +++ b/internal/config/config_test.go @@ -97,7 +97,7 @@ func TestLoadConfig_FileNotFound(t *testing.T) { cfg, err := LoadConfig("/non/existent/path/.kportal.yaml") assert.Error(t, err, "LoadConfig should fail with non-existent file") assert.Nil(t, cfg, "config should be nil on error") - assert.Contains(t, err.Error(), "failed to read config file", "error should mention read failure") + assert.Contains(t, err.Error(), "failed to stat config file", "error should mention stat failure") } func TestForward_ID(t *testing.T) { diff --git a/internal/config/mutator.go b/internal/config/mutator.go new file mode 100644 index 0000000..b16d13c --- /dev/null +++ b/internal/config/mutator.go @@ -0,0 +1,273 @@ +package config + +import ( + "fmt" + "os" + "path/filepath" + "sync" + + "gopkg.in/yaml.v3" +) + +// Mutator provides safe, atomic mutations to the kportal configuration file. +// All operations use atomic file writes (write to temp, then rename) to prevent +// corruption and ensure the file watcher picks up changes. +type Mutator struct { + configPath string + mu sync.Mutex // Ensure only one mutation at a time +} + +// NewMutator creates a new configuration mutator for the given config file path. +func NewMutator(configPath string) *Mutator { + return &Mutator{ + configPath: configPath, + } +} + +// findOrCreateContext finds an existing context or creates a new one +func (m *Mutator) findOrCreateContext(cfg *Config, contextName string) *Context { + for i := range cfg.Contexts { + if cfg.Contexts[i].Name == contextName { + return &cfg.Contexts[i] + } + } + + // Create new context + cfg.Contexts = append(cfg.Contexts, Context{ + Name: contextName, + Namespaces: []Namespace{}, + }) + return &cfg.Contexts[len(cfg.Contexts)-1] +} + +// findOrCreateNamespace finds an existing namespace or creates a new one +func (m *Mutator) findOrCreateNamespace(ctx *Context, namespaceName string) *Namespace { + for i := range ctx.Namespaces { + if ctx.Namespaces[i].Name == namespaceName { + return &ctx.Namespaces[i] + } + } + + // Create new namespace + ctx.Namespaces = append(ctx.Namespaces, Namespace{ + Name: namespaceName, + Forwards: []Forward{}, + }) + return &ctx.Namespaces[len(ctx.Namespaces)-1] +} + +// AddForward adds a new port forward to the configuration. +// If the context or namespace doesn't exist, they will be created. +// The new configuration is validated before writing. +// Returns an error if the port is already in use or validation fails. +func (m *Mutator) AddForward(contextName, namespaceName string, fwd Forward) error { + m.mu.Lock() + defer m.mu.Unlock() + + // Load current config + cfg, err := LoadConfig(m.configPath) + if err != nil { + // If file doesn't exist, create empty config + if os.IsNotExist(err) { + cfg = &Config{Contexts: []Context{}} + } else { + return fmt.Errorf("failed to load config: %w", err) + } + } + + // Find or create context and namespace + targetContext := m.findOrCreateContext(cfg, contextName) + targetNamespace := m.findOrCreateNamespace(targetContext, namespaceName) + + // Set context/namespace on the forward for validation + fwd.SetContext(contextName, namespaceName) + + // Check for duplicate local port + allForwards := cfg.GetAllForwards() + for _, existing := range allForwards { + if existing.LocalPort == fwd.LocalPort { + return fmt.Errorf("port %d is already in use by %s", fwd.LocalPort, existing.String()) + } + } + + // Add the forward + targetNamespace.Forwards = append(targetNamespace.Forwards, fwd) + + // Validate the new configuration + validator := NewValidator() + if errs := validator.ValidateConfig(cfg); len(errs) > 0 { + return fmt.Errorf("validation failed: %s", FormatValidationErrors(errs)) + } + + // Write atomically + return m.writeAtomic(cfg) +} + +// RemoveForwards removes forwards matching the predicate function. +// The predicate receives the context, namespace, and forward, and should return true +// to remove that forward. +// Empty namespaces and contexts are preserved (not automatically removed). +func (m *Mutator) RemoveForwards(predicate func(ctx, ns string, fwd Forward) bool) error { + m.mu.Lock() + defer m.mu.Unlock() + + // Load current config + cfg, err := LoadConfig(m.configPath) + if err != nil { + return fmt.Errorf("failed to load config: %w", err) + } + + // Iterate and filter + for i := range cfg.Contexts { + ctx := &cfg.Contexts[i] + filteredNamespaces := []Namespace{} + + for j := range ctx.Namespaces { + ns := &ctx.Namespaces[j] + + // Filter forwards + filtered := []Forward{} + for _, fwd := range ns.Forwards { + // CRITICAL: Set context/namespace so fwd.ID() generates correct ID + fwd.SetContext(ctx.Name, ns.Name) + + if !predicate(ctx.Name, ns.Name, fwd) { + // Keep this forward + filtered = append(filtered, fwd) + } + } + + ns.Forwards = filtered + + // Only keep namespaces that have at least one forward + if len(ns.Forwards) > 0 { + filteredNamespaces = append(filteredNamespaces, *ns) + } + } + + ctx.Namespaces = filteredNamespaces + } + + // Validate the new configuration + validator := NewValidator() + if errs := validator.ValidateConfig(cfg); len(errs) > 0 { + return fmt.Errorf("validation failed: %s", FormatValidationErrors(errs)) + } + + // Write atomically + return m.writeAtomic(cfg) +} + +// RemoveForwardByID removes a specific forward by its ID. +func (m *Mutator) RemoveForwardByID(id string) error { + return m.RemoveForwards(func(ctx, ns string, fwd Forward) bool { + return fwd.ID() == id + }) +} + +// UpdateForward atomically replaces an existing forward with a new one. +// This is used for editing - it removes the old forward and adds the new one in a single transaction. +// If the old forward doesn't exist, returns an error. +// If the new forward validation fails, the operation is rolled back (old forward remains). +func (m *Mutator) UpdateForward(oldID, newContextName, newNamespaceName string, newFwd Forward) error { + m.mu.Lock() + defer m.mu.Unlock() + + // Load current config + cfg, err := LoadConfig(m.configPath) + if err != nil { + return fmt.Errorf("failed to load config: %w", err) + } + + // First, verify the old forward exists and remove it + oldForwardFound := false + for i := range cfg.Contexts { + ctx := &cfg.Contexts[i] + for j := range ctx.Namespaces { + ns := &ctx.Namespaces[j] + + // Filter forwards, removing the old one + filtered := []Forward{} + for _, fwd := range ns.Forwards { + // CRITICAL: Set context/namespace so fwd.ID() generates correct ID + fwd.SetContext(ctx.Name, ns.Name) + + if fwd.ID() == oldID { + oldForwardFound = true + // Skip this forward (remove it) + continue + } + + // Keep this forward + filtered = append(filtered, fwd) + } + + ns.Forwards = filtered + } + } + + if !oldForwardFound { + return fmt.Errorf("forward with ID %s not found", oldID) + } + + // Now add the new forward + // Find or create context and namespace + targetContext := m.findOrCreateContext(cfg, newContextName) + targetNamespace := m.findOrCreateNamespace(targetContext, newNamespaceName) + + // Set context/namespace on the forward for validation + newFwd.SetContext(newContextName, newNamespaceName) + + // Check for duplicate local port (excluding the one we just removed) + allForwards := cfg.GetAllForwards() + for _, existing := range allForwards { + if existing.LocalPort == newFwd.LocalPort && existing.ID() != oldID { + return fmt.Errorf("port %d is already in use by %s", newFwd.LocalPort, existing.String()) + } + } + + // Add the new forward + targetNamespace.Forwards = append(targetNamespace.Forwards, newFwd) + + // Validate the new configuration + validator := NewValidator() + if errs := validator.ValidateConfig(cfg); len(errs) > 0 { + return fmt.Errorf("validation failed: %s", FormatValidationErrors(errs)) + } + + // Write atomically + return m.writeAtomic(cfg) +} + +// writeAtomic writes the configuration atomically to prevent corruption. +// Steps: +// 1. Marshal config to YAML +// 2. Write to temporary file (.kportal.yaml.tmp) +// 3. Atomic rename to actual config file +// +// This ensures the file watcher picks up a complete, valid file. +func (m *Mutator) writeAtomic(cfg *Config) error { + // Marshal to YAML + data, err := yaml.Marshal(cfg) + if err != nil { + return fmt.Errorf("failed to marshal config: %w", err) + } + + // Create temporary file in same directory as config + dir := filepath.Dir(m.configPath) + tmpFile := filepath.Join(dir, ".kportal.yaml.tmp") + + // Write to temp file + if err := os.WriteFile(tmpFile, data, 0600); err != nil { + return fmt.Errorf("failed to write temp file: %w", err) + } + + // Atomic rename + if err := os.Rename(tmpFile, m.configPath); err != nil { + // Clean up temp file on failure + os.Remove(tmpFile) + return fmt.Errorf("failed to rename temp file: %w", err) + } + + return nil +} diff --git a/internal/config/watcher.go b/internal/config/watcher.go index 9d50dcc..bc1c05c 100644 --- a/internal/config/watcher.go +++ b/internal/config/watcher.go @@ -6,6 +6,7 @@ import ( "path/filepath" "github.com/fsnotify/fsnotify" + "github.com/nvm/kportal/internal/logger" ) // ReloadCallback is called when the configuration file changes. @@ -113,28 +114,37 @@ func (w *Watcher) handleReload() { // Load new configuration newCfg, err := LoadConfig(w.configPath) if err != nil { - log.Printf("Failed to load configuration: %v", err) - log.Printf("Keeping previous configuration active") + logger.Error("Failed to load configuration during hot-reload", map[string]interface{}{ + "config_path": w.configPath, + "error": err.Error(), + }) + logger.Info("Keeping previous configuration active", nil) return } // Validate new configuration validator := NewValidator() if errs := validator.ValidateConfig(newCfg); len(errs) > 0 { - log.Printf("Configuration validation failed:") - log.Print(FormatValidationErrors(errs)) - log.Printf("Keeping previous configuration active") + logger.Error("Configuration validation failed during hot-reload", map[string]interface{}{ + "config_path": w.configPath, + "validation_errors": len(errs), + }) + logger.Info("Keeping previous configuration active", nil) return } // Call reload callback if err := w.callback(newCfg); err != nil { - log.Printf("Failed to apply new configuration: %v", err) - log.Printf("Keeping previous configuration active") + logger.Error("Failed to apply new configuration", map[string]interface{}{ + "config_path": w.configPath, + "error": err.Error(), + }) + logger.Info("Keeping previous configuration active", nil) return } - if w.verbose { - log.Printf("Configuration reloaded successfully") - } + logger.Info("Configuration reloaded successfully", map[string]interface{}{ + "config_path": w.configPath, + "forwards_count": len(newCfg.GetAllForwards()), + }) } diff --git a/internal/forward/manager.go b/internal/forward/manager.go index d737d9d..d8bf112 100644 --- a/internal/forward/manager.go +++ b/internal/forward/manager.go @@ -9,6 +9,12 @@ import ( "github.com/nvm/kportal/internal/config" "github.com/nvm/kportal/internal/healthcheck" "github.com/nvm/kportal/internal/k8s" + "github.com/nvm/kportal/internal/logger" +) + +const ( + healthCheckInterval = 5 * time.Second + healthCheckTimeout = 2 * time.Second ) // StatusUpdater is an interface for updating forward status @@ -34,17 +40,17 @@ type Manager struct { } // NewManager creates a new forward Manager. -func NewManager(verbose bool) *Manager { +func NewManager(verbose bool) (*Manager, error) { clientPool, err := k8s.NewClientPool() if err != nil { - log.Fatalf("Failed to create client pool: %v", err) + return nil, fmt.Errorf("failed to create client pool: %w", err) } resolver := k8s.NewResourceResolver(clientPool) portForwarder := k8s.NewPortForwarder(clientPool, resolver) // Create health checker: check every 5 seconds with 2 second timeout - healthChecker := healthcheck.NewChecker(5*time.Second, 2*time.Second) + healthChecker := healthcheck.NewChecker(healthCheckInterval, healthCheckTimeout) return &Manager{ workers: make(map[string]*ForwardWorker), @@ -54,7 +60,7 @@ func NewManager(verbose bool) *Manager { portChecker: NewPortChecker(), healthChecker: healthChecker, verbose: verbose, - } + }, nil } // SetStatusUI sets the status updater for the manager @@ -93,7 +99,14 @@ func (m *Manager) Start(cfg *config.Config) error { for _, fwd := range forwards { if err := m.startWorker(fwd); err != nil { - log.Printf("Failed to start worker for %s: %v", fwd.ID(), err) + logger.Error("Failed to start worker", map[string]interface{}{ + "forward_id": fwd.ID(), + "context": fwd.GetContext(), + "namespace": fwd.GetNamespace(), + "resource": fwd.Resource, + "local_port": fwd.LocalPort, + "error": err.Error(), + }) // Continue with other workers } } @@ -146,7 +159,9 @@ func (m *Manager) Reload(newCfg *config.Config) error { return fmt.Errorf("new configuration is nil") } - log.Printf("Reloading configuration...") + logger.Info("Reloading configuration", map[string]interface{}{ + "new_forwards_count": len(newCfg.GetAllForwards()), + }) // Get all forwards from new config newForwards := newCfg.GetAllForwards() @@ -295,8 +310,10 @@ func (m *Manager) stopWorker(id string) error { // Unregister from health checker m.healthChecker.Unregister(id) - // Note: We DON'T call Remove() here anymore - keep it in the UI - // The UI will show it as disabled instead + // Notify UI to remove the forward + if m.statusUI != nil { + m.statusUI.Remove(id) + } // Stop the worker worker.Stop() diff --git a/internal/forward/portcheck.go b/internal/forward/portcheck.go index 031ed58..6bf9d2d 100644 --- a/internal/forward/portcheck.go +++ b/internal/forward/portcheck.go @@ -8,6 +8,19 @@ import ( "strings" ) +// isValidPID validates that a PID string contains only digits +func isValidPID(pid string) bool { + if len(pid) == 0 || len(pid) > 9 { + return false + } + for _, c := range pid { + if c < '0' || c > '9' { + return false + } + } + return true +} + // PortConflict represents a local port that is already in use. type PortConflict struct { Port int // The conflicting port number @@ -93,6 +106,10 @@ func (pc *PortChecker) getProcessUsingPortUnix(port int) string { pids := strings.Split(pidStr, "\n") pid := pids[0] + if !isValidPID(pid) { + return "unknown" + } + // Get process name using ps cmd = exec.Command("ps", "-p", pid, "-o", "comm=") output, err = cmd.Output() @@ -140,6 +157,10 @@ func (pc *PortChecker) getProcessUsingPortWindows(port int) string { pid := fields[len(fields)-1] + if !isValidPID(pid) { + return "unknown" + } + // Get process name using tasklist cmd = exec.Command("tasklist", "/FI", fmt.Sprintf("PID eq %s", pid), "/FO", "CSV", "/NH") output, err = cmd.Output() @@ -188,16 +209,3 @@ func FormatConflicts(conflicts []PortConflict) string { return sb.String() } - -// GetPortsFromForwards extracts all local ports from a list of forward configurations. -func GetPortsFromForwards(forwards []interface{}) []int { - ports := make([]int, 0, len(forwards)) - for _, fwd := range forwards { - // This function expects a generic interface to work with different forward types - // The actual implementation should use the Forward struct from config package - if f, ok := fwd.(interface{ GetLocalPort() int }); ok { - ports = append(ports, f.GetLocalPort()) - } - } - return ports -} diff --git a/internal/forward/worker.go b/internal/forward/worker.go index 9013335..2a4af8f 100644 --- a/internal/forward/worker.go +++ b/internal/forward/worker.go @@ -10,9 +10,14 @@ import ( "github.com/nvm/kportal/internal/config" "github.com/nvm/kportal/internal/healthcheck" "github.com/nvm/kportal/internal/k8s" + "github.com/nvm/kportal/internal/logger" "github.com/nvm/kportal/internal/retry" ) +const ( + portForwardReadyTimeout = 30 * time.Second +) + // ForwardWorker manages a single port-forward connection with automatic retry. type ForwardWorker struct { forward config.Forward @@ -86,7 +91,13 @@ func (w *ForwardWorker) run() { ) if err != nil { - log.Printf("[%s] Failed to resolve resource: %v", w.forward.ID(), err) + logger.Error("Failed to resolve resource", map[string]interface{}{ + "forward_id": w.forward.ID(), + "context": w.forward.GetContext(), + "namespace": w.forward.GetNamespace(), + "resource": w.forward.Resource, + "error": err.Error(), + }) w.sleepWithBackoff(backoff) continue } @@ -96,10 +107,20 @@ func (w *ForwardWorker) run() { if w.healthChecker != nil { w.healthChecker.MarkReconnecting(w.forward.ID()) } - log.Printf("[%s] Switched to new pod: %s → %s", w.forward.ID(), w.lastPod, podName) + logger.Info("Pod restart detected, switching to new pod", map[string]interface{}{ + "forward_id": w.forward.ID(), + "old_pod": w.lastPod, + "new_pod": podName, + "context": w.forward.GetContext(), + "namespace": w.forward.GetNamespace(), + }) } else if w.lastPod == "" { - log.Printf("[%s] Forwarding %s → localhost:%d", - w.forward.ID(), w.forward.String(), w.forward.LocalPort) + logger.Info("Starting port forward", map[string]interface{}{ + "forward_id": w.forward.ID(), + "target": w.forward.String(), + "local_port": w.forward.LocalPort, + "pod": podName, + }) if w.healthChecker != nil { w.healthChecker.MarkStarting(w.forward.ID()) } @@ -123,7 +144,14 @@ func (w *ForwardWorker) run() { } // Log the error - log.Printf("[%s] Port-forward connection failed: %v", w.forward.ID(), err) + logger.Warn("Port-forward connection failed, will retry", map[string]interface{}{ + "forward_id": w.forward.ID(), + "context": w.forward.GetContext(), + "namespace": w.forward.GetNamespace(), + "resource": w.forward.Resource, + "local_port": w.forward.LocalPort, + "error": err.Error(), + }) // Clear last pod so we re-resolve on next attempt w.lastPod = "" @@ -206,7 +234,7 @@ func (w *ForwardWorker) establishForward(podName string) error { return fmt.Errorf("failed to establish forward: %w", err) case <-w.ctx.Done(): return nil - case <-time.After(30 * time.Second): + case <-time.After(portForwardReadyTimeout): return fmt.Errorf("timeout waiting for port-forward to become ready") } diff --git a/internal/forward/worker_unit_test.go b/internal/forward/worker_unit_test.go new file mode 100644 index 0000000..9b076de --- /dev/null +++ b/internal/forward/worker_unit_test.go @@ -0,0 +1,286 @@ +package forward + +import ( + "testing" + + "github.com/nvm/kportal/internal/config" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func TestLogWriter_Write(t *testing.T) { + tests := []struct { + name string + prefix string + input string + expectedInLog string + description string + }{ + { + name: "write simple message", + prefix: "[worker] ", + input: "test message", + expectedInLog: "[worker] test message", + description: "Should write message with prefix to log", + }, + { + name: "write empty message", + prefix: "[test] ", + input: "", + expectedInLog: "[test] ", + description: "Should handle empty message", + }, + { + name: "write multiline message", + prefix: "[fwd] ", + input: "line1\nline2", + expectedInLog: "[fwd] line1\nline2", + description: "Should handle multiline messages", + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + // Test logWriter + originalWriter := &logWriter{prefix: tt.prefix} + + n, err := originalWriter.Write([]byte(tt.input)) + + require.NoError(t, err, "Write should not return error") + assert.Equal(t, len(tt.input), n, "Write should return number of bytes written") + }) + } +} + +func TestForwardWorker_GetForward(t *testing.T) { + tests := []struct { + name string + forward config.Forward + description string + }{ + { + name: "get pod forward", + forward: config.Forward{ + Resource: "pod/my-app", + LocalPort: 8080, + Port: 80, + Protocol: "tcp", + }, + description: "Should return the forward configuration", + }, + { + name: "get service forward", + forward: config.Forward{ + Resource: "service/postgres", + LocalPort: 5432, + Port: 5432, + Protocol: "tcp", + }, + description: "Should return service forward configuration", + }, + { + name: "get forward with selector", + forward: config.Forward{ + Resource: "pod", + Selector: "app=nginx,env=prod", + LocalPort: 8080, + Port: 80, + Protocol: "tcp", + }, + description: "Should return forward with label selector", + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + // Note: We can't easily test the full worker lifecycle without mocks, + // but we can test the constructor and simple getters + + // This test would require proper mocking setup + // For now, we'll test the Forward struct directly + + id := tt.forward.ID() + assert.NotEmpty(t, id, "Forward should have an ID") + + forwardStr := tt.forward.String() + assert.NotEmpty(t, forwardStr, "Forward should have a string representation") + assert.Contains(t, forwardStr, tt.forward.Resource, "String should contain resource") + }) + } +} + +func TestForwardWorker_IsRunning(t *testing.T) { + // This is a basic test of the goroutine state tracking + // Full integration tests would require mock dependencies + + t.Run("worker state tracking", func(t *testing.T) { + // Test the concept of the done channel + doneChan := make(chan struct{}) + + // Initially, channel is open (worker would be running) + select { + case <-doneChan: + t.Fatal("doneChan should be open initially") + default: + // Expected: channel is open + } + + // Close the channel (simulating worker done) + close(doneChan) + + // Now channel should be closed + select { + case <-doneChan: + // Expected: channel is closed + default: + t.Fatal("doneChan should be closed after close") + } + }) +} + +func TestForwardID(t *testing.T) { + tests := []struct { + name string + forward config.Forward + expectUnique bool + description string + }{ + { + name: "unique IDs for different forwards", + forward: config.Forward{ + Resource: "pod/app1", + LocalPort: 8080, + Port: 80, + }, + expectUnique: true, + description: "Different forwards should have different IDs", + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + id1 := tt.forward.ID() + + // Create a different forward + fwd2 := config.Forward{ + Resource: "pod/app2", + LocalPort: 8081, + Port: 80, + } + id2 := fwd2.ID() + + if tt.expectUnique { + assert.NotEqual(t, id1, id2, "Different forwards should have different IDs") + } + + // Same forward should produce same ID + id3 := tt.forward.ID() + assert.Equal(t, id1, id3, "Same forward should produce same ID") + }) + } +} + +func TestForwardString(t *testing.T) { + tests := []struct { + name string + forward config.Forward + expectedContains []string + description string + }{ + { + name: "pod forward string", + forward: config.Forward{ + Resource: "pod/my-app", + LocalPort: 8080, + Port: 80, + }, + expectedContains: []string{"pod/my-app", "8080", "80"}, + description: "Should contain resource and ports", + }, + { + name: "service forward string", + forward: config.Forward{ + Resource: "service/postgres", + LocalPort: 5432, + Port: 5432, + }, + expectedContains: []string{"service/postgres", "5432"}, + description: "Should contain service and port", + }, + { + name: "selector forward string", + forward: config.Forward{ + Resource: "pod", + Selector: "app=nginx", + LocalPort: 8080, + Port: 80, + }, + expectedContains: []string{"app=nginx", "8080", "80"}, + description: "Should contain selector and ports", + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + result := tt.forward.String() + + assert.NotEmpty(t, result, "String representation should not be empty") + + for _, expected := range tt.expectedContains { + assert.Contains(t, result, expected, + "String should contain %s", expected) + } + }) + } +} + +func TestSleepWithBackoffConcept(t *testing.T) { + // Test the backoff concept without actually running a worker + t.Run("backoff delay increases", func(t *testing.T) { + // This tests the retry backoff behavior conceptually + delays := []int{1, 2, 4, 8, 10, 10, 10} + + for i, expected := range delays { + // Simulate backoff calculation + delay := 1 + for j := 0; j < i; j++ { + delay *= 2 + if delay > 10 { + delay = 10 + } + } + + assert.Equal(t, expected, delay, + "Backoff at attempt %d should be %d", i, expected) + } + }) +} + +func TestWorkerVerboseMode(t *testing.T) { + tests := []struct { + name string + verbose bool + description string + }{ + { + name: "verbose mode enabled", + verbose: true, + description: "Worker should respect verbose flag", + }, + { + name: "verbose mode disabled", + verbose: false, + description: "Worker should respect non-verbose flag", + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + // Test that verbose flag is a boolean + assert.IsType(t, bool(true), tt.verbose) + + // In a real worker, this would control logging + // For now, we just verify the type + }) + } +} diff --git a/internal/healthcheck/checker.go b/internal/healthcheck/checker.go index 28155a4..a741c91 100644 --- a/internal/healthcheck/checker.go +++ b/internal/healthcheck/checker.go @@ -8,6 +8,10 @@ import ( "time" ) +const ( + startupGracePeriod = 10 * time.Second +) + // Status represents the health status of a port forward type Status string @@ -85,39 +89,41 @@ func (c *Checker) Unregister(forwardID string) { // MarkReconnecting marks a forward as reconnecting (called by worker) func (c *Checker) MarkReconnecting(forwardID string) { c.mu.Lock() - defer c.mu.Unlock() if health, exists := c.ports[forwardID]; exists { oldStatus := health.Status health.Status = StatusReconnect health.LastCheck = time.Now() - // Notify if status changed + c.mu.Unlock() + if oldStatus != StatusReconnect { - c.mu.Unlock() c.notifyStatusChange(forwardID, StatusReconnect, "") - c.mu.Lock() } + return } + + c.mu.Unlock() } // MarkStarting marks a forward as starting (called by worker) func (c *Checker) MarkStarting(forwardID string) { c.mu.Lock() - defer c.mu.Unlock() if health, exists := c.ports[forwardID]; exists { oldStatus := health.Status health.Status = StatusStarting health.LastCheck = time.Now() - // Notify if status changed + c.mu.Unlock() + if oldStatus != StatusStarting { - c.mu.Unlock() c.notifyStatusChange(forwardID, StatusStarting, "") - c.mu.Lock() } + return } + + c.mu.Unlock() } // GetStatus returns the current health status of a forward @@ -207,7 +213,7 @@ func (c *Checker) checkPort(forwardID string) { // Grace period: if forward is less than 10 seconds old, keep it as "Starting" // This avoids scary "Error" messages during initial connection attempts timeSinceStart := time.Since(registeredAt) - if timeSinceStart < 10*time.Second { + if timeSinceStart < startupGracePeriod { newStatus = StatusStarting } else { newStatus = StatusUnhealthy diff --git a/internal/k8s/discovery.go b/internal/k8s/discovery.go new file mode 100644 index 0000000..0beb27f --- /dev/null +++ b/internal/k8s/discovery.go @@ -0,0 +1,321 @@ +package k8s + +import ( + "context" + "fmt" + "net" + "sort" + "strconv" + "strings" + + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// Discovery provides cluster introspection capabilities for the UI wizards. +// It queries the Kubernetes API to list contexts, namespaces, pods, and services. +type Discovery struct { + pool *ClientPool +} + +// NewDiscovery creates a new Discovery instance using the provided client pool. +func NewDiscovery(pool *ClientPool) *Discovery { + return &Discovery{ + pool: pool, + } +} + +// PodInfo contains information about a pod relevant for port forwarding. +type PodInfo struct { + Name string + Namespace string + Containers []ContainerInfo + Status string + Created metav1.Time +} + +// ContainerInfo contains information about a container within a pod. +type ContainerInfo struct { + Name string + Ports []PortInfo +} + +// PortInfo describes a port exposed by a container or service. +type PortInfo struct { + Name string + Port int32 + Protocol string +} + +// ServiceInfo contains information about a service. +type ServiceInfo struct { + Name string + Namespace string + Ports []PortInfo + Type string +} + +// ListContexts returns all available Kubernetes contexts from kubeconfig. +func (d *Discovery) ListContexts() ([]string, error) { + return d.pool.ListContexts() +} + +// GetCurrentContext returns the name of the current context from kubeconfig. +func (d *Discovery) GetCurrentContext() (string, error) { + return d.pool.GetCurrentContext() +} + +// ListNamespaces returns all namespaces in the given context. +// Returns an error if the context is invalid or unreachable. +func (d *Discovery) ListNamespaces(ctx context.Context, contextName string) ([]string, error) { + client, err := d.pool.GetClient(contextName) + if err != nil { + return nil, fmt.Errorf("failed to get client: %w", err) + } + + nsList, err := client.CoreV1().Namespaces().List(ctx, metav1.ListOptions{}) + if err != nil { + return nil, fmt.Errorf("failed to list namespaces: %w", err) + } + + namespaces := make([]string, 0, len(nsList.Items)) + for _, ns := range nsList.Items { + namespaces = append(namespaces, ns.Name) + } + + // Sort alphabetically + sort.Strings(namespaces) + + return namespaces, nil +} + +// ListPods returns all running pods in the given namespace with their port information. +// Only returns pods in Running or Pending state. +func (d *Discovery) ListPods(ctx context.Context, contextName, namespace string) ([]PodInfo, error) { + client, err := d.pool.GetClient(contextName) + if err != nil { + return nil, fmt.Errorf("failed to get client: %w", err) + } + + podList, err := client.CoreV1().Pods(namespace).List(ctx, metav1.ListOptions{}) + if err != nil { + return nil, fmt.Errorf("failed to list pods: %w", err) + } + + pods := make([]PodInfo, 0) + for _, pod := range podList.Items { + // Only include Running or Pending pods + if pod.Status.Phase != corev1.PodRunning && pod.Status.Phase != corev1.PodPending { + continue + } + + containers := make([]ContainerInfo, 0, len(pod.Spec.Containers)) + for _, container := range pod.Spec.Containers { + ports := make([]PortInfo, 0, len(container.Ports)) + for _, port := range container.Ports { + ports = append(ports, PortInfo{ + Name: port.Name, + Port: port.ContainerPort, + Protocol: string(port.Protocol), + }) + } + + containers = append(containers, ContainerInfo{ + Name: container.Name, + Ports: ports, + }) + } + + pods = append(pods, PodInfo{ + Name: pod.Name, + Namespace: pod.Namespace, + Containers: containers, + Status: string(pod.Status.Phase), + Created: pod.CreationTimestamp, + }) + } + + // Sort by creation time (newest first) + sort.Slice(pods, func(i, j int) bool { + return pods[i].Created.After(pods[j].Created.Time) + }) + + return pods, nil +} + +// ListPodsWithSelector returns pods matching the given label selector. +// Selector format: "key=value,key2=value2" +// Returns an error if the selector is invalid. +func (d *Discovery) ListPodsWithSelector(ctx context.Context, contextName, namespace, selector string) ([]PodInfo, error) { + client, err := d.pool.GetClient(contextName) + if err != nil { + return nil, fmt.Errorf("failed to get client: %w", err) + } + + // Validate selector format + selector = strings.TrimSpace(selector) + if selector == "" { + return nil, fmt.Errorf("selector cannot be empty") + } + + podList, err := client.CoreV1().Pods(namespace).List(ctx, metav1.ListOptions{ + LabelSelector: selector, + }) + if err != nil { + return nil, fmt.Errorf("failed to list pods with selector: %w", err) + } + + pods := make([]PodInfo, 0) + for _, pod := range podList.Items { + // Only include Running pods for selector-based forwards + if pod.Status.Phase != corev1.PodRunning { + continue + } + + containers := make([]ContainerInfo, 0, len(pod.Spec.Containers)) + for _, container := range pod.Spec.Containers { + ports := make([]PortInfo, 0, len(container.Ports)) + for _, port := range container.Ports { + ports = append(ports, PortInfo{ + Name: port.Name, + Port: port.ContainerPort, + Protocol: string(port.Protocol), + }) + } + + containers = append(containers, ContainerInfo{ + Name: container.Name, + Ports: ports, + }) + } + + pods = append(pods, PodInfo{ + Name: pod.Name, + Namespace: pod.Namespace, + Containers: containers, + Status: string(pod.Status.Phase), + Created: pod.CreationTimestamp, + }) + } + + // Sort by creation time (newest first) + sort.Slice(pods, func(i, j int) bool { + return pods[i].Created.After(pods[j].Created.Time) + }) + + return pods, nil +} + +// ListServices returns all services in the given namespace. +func (d *Discovery) ListServices(ctx context.Context, contextName, namespace string) ([]ServiceInfo, error) { + client, err := d.pool.GetClient(contextName) + if err != nil { + return nil, fmt.Errorf("failed to get client: %w", err) + } + + svcList, err := client.CoreV1().Services(namespace).List(ctx, metav1.ListOptions{}) + if err != nil { + return nil, fmt.Errorf("failed to list services: %w", err) + } + + services := make([]ServiceInfo, 0, len(svcList.Items)) + for _, svc := range svcList.Items { + ports := make([]PortInfo, 0, len(svc.Spec.Ports)) + for _, port := range svc.Spec.Ports { + ports = append(ports, PortInfo{ + Name: port.Name, + Port: port.Port, + Protocol: string(port.Protocol), + }) + } + + services = append(services, ServiceInfo{ + Name: svc.Name, + Namespace: svc.Namespace, + Ports: ports, + Type: string(svc.Spec.Type), + }) + } + + // Sort alphabetically + sort.Slice(services, func(i, j int) bool { + return services[i].Name < services[j].Name + }) + + return services, nil +} + +// GetUniquePorts extracts unique ports from a list of pods. +// Returns a sorted list of port numbers with their names (if available). +func GetUniquePorts(pods []PodInfo) []PortInfo { + portMap := make(map[int32]string) + + for _, pod := range pods { + for _, container := range pod.Containers { + for _, port := range container.Ports { + // Prefer named ports + if _, ok := portMap[port.Port]; !ok || port.Name != "" { + if port.Name != "" { + portMap[port.Port] = port.Name + } else if !ok { + portMap[port.Port] = fmt.Sprintf("port-%d", port.Port) + } + } + } + } + } + + // Convert to slice + ports := make([]PortInfo, 0, len(portMap)) + for port, name := range portMap { + ports = append(ports, PortInfo{ + Name: name, + Port: port, + }) + } + + // Sort by port number + sort.Slice(ports, func(i, j int) bool { + return ports[i].Port < ports[j].Port + }) + + return ports +} + +// CheckPortAvailability checks if a local port is available. +// Returns: available (bool), processInfo (string), error +func CheckPortAvailability(port int) (bool, string, error) { + if port < 1 || port > 65535 { + return false, "", fmt.Errorf("invalid port: %d", port) + } + + // Try to listen on the port + addr := fmt.Sprintf(":%d", port) + listener, err := net.Listen("tcp", addr) + if err != nil { + // Port is in use + // Try to get process info (best-effort) + processInfo := "unknown process" + // Note: Getting process info requires platform-specific code + // For now, just return a generic message + return false, processInfo, nil + } + + // Port is available, close the listener + listener.Close() + return true, "", nil +} + +// ValidatePort checks if a port number is valid. +func ValidatePort(portStr string) (int, error) { + port, err := strconv.Atoi(portStr) + if err != nil { + return 0, fmt.Errorf("invalid port number: %s", portStr) + } + + if port < 1 || port > 65535 { + return 0, fmt.Errorf("port must be between 1 and 65535, got %d", port) + } + + return port, nil +} diff --git a/internal/logger/demo_test.go b/internal/logger/demo_test.go new file mode 100644 index 0000000..d1c9bdb --- /dev/null +++ b/internal/logger/demo_test.go @@ -0,0 +1,70 @@ +package logger_test + +import ( + "bytes" + "fmt" + "testing" + + "github.com/nvm/kportal/internal/logger" +) + +// This test demonstrates the logger output formats +func TestLoggerDemo(t *testing.T) { + t.Skip("Demo only - run manually with: go test -v -run TestLoggerDemo") + + fmt.Println("\n=== TEXT FORMAT (DEFAULT) ===") + textBuf := &bytes.Buffer{} + textLogger := logger.New(logger.LevelInfo, logger.FormatText, textBuf) + + textLogger.Info("Port forward started", map[string]interface{}{ + "forward_id": "prod/default/pod/app:8080", + "local_port": 8080, + "pod": "app-xyz123", + }) + + textLogger.Warn("Connection failed, retrying", map[string]interface{}{ + "forward_id": "prod/default/pod/app:8080", + "error": "connection refused", + "retry": 3, + }) + + textLogger.Error("Failed to resolve resource", map[string]interface{}{ + "forward_id": "prod/default/pod/app:8080", + "error": "pod not found", + }) + + fmt.Print(textBuf.String()) + + fmt.Println("\n=== JSON FORMAT ===") + jsonBuf := &bytes.Buffer{} + jsonLogger := logger.New(logger.LevelInfo, logger.FormatJSON, jsonBuf) + + jsonLogger.Info("Port forward started", map[string]interface{}{ + "forward_id": "prod/default/pod/app:8080", + "local_port": 8080, + "pod": "app-xyz123", + }) + + jsonLogger.Warn("Connection failed, retrying", map[string]interface{}{ + "forward_id": "prod/default/pod/app:8080", + "error": "connection refused", + "retry": 3, + }) + + jsonLogger.Error("Failed to resolve resource", map[string]interface{}{ + "forward_id": "prod/default/pod/app:8080", + "error": "pod not found", + }) + + fmt.Print(jsonBuf.String()) + + fmt.Println("\n=== LOG LEVEL FILTERING (Debug level disabled) ===") + filteredBuf := &bytes.Buffer{} + filteredLogger := logger.New(logger.LevelInfo, logger.FormatText, filteredBuf) + + filteredLogger.Debug("This will not appear", nil) + filteredLogger.Info("This will appear", nil) + filteredLogger.Warn("This will also appear", nil) + + fmt.Print(filteredBuf.String()) +} diff --git a/internal/logger/klog_bridge.go b/internal/logger/klog_bridge.go new file mode 100644 index 0000000..8b7a88e --- /dev/null +++ b/internal/logger/klog_bridge.go @@ -0,0 +1,96 @@ +package logger + +import ( + "bytes" + "io" + "strings" + "sync" +) + +// KlogWriter is an io.Writer that routes klog output through our structured logger. +// It parses klog messages and routes them to appropriate log levels. +// It is thread-safe for concurrent writes. +type KlogWriter struct { + logger *Logger + buffer *bytes.Buffer + mu sync.Mutex +} + +// NewKlogWriter creates a new KlogWriter that routes k8s client-go logs +// through our structured logger. +func NewKlogWriter(logger *Logger) *KlogWriter { + return &KlogWriter{ + logger: logger, + buffer: &bytes.Buffer{}, + } +} + +// Write implements io.Writer. +// It parses klog output and routes it through our structured logger. +// This method is thread-safe. +func (w *KlogWriter) Write(p []byte) (n int, err error) { + w.mu.Lock() + defer w.mu.Unlock() + + // Write to buffer first + w.buffer.Write(p) + + // Process complete lines + for { + line, err := w.buffer.ReadString('\n') + if err != nil { + // No complete line yet, write back what we read and wait for more + if err == io.EOF && line != "" { + w.buffer.WriteString(line) + } + break + } + + // Process the complete line + w.processLine(strings.TrimSpace(line)) + } + + return len(p), nil +} + +// processLine parses a klog line and routes it to the appropriate log level. +func (w *KlogWriter) processLine(line string) { + if line == "" { + return + } + + // Parse klog format: "I1124 12:34:56.789012 12345 file.go:123] message" + // First character indicates level: I=Info, W=Warning, E=Error, F=Fatal + if len(line) < 1 { + return + } + + level := line[0] + message := line + + // Try to extract just the message part after "]" + if idx := strings.Index(line, "] "); idx != -1 { + message = line[idx+2:] + } + + // Determine log level and route accordingly + switch level { + case 'I': // Info + w.logger.Debug(message, map[string]interface{}{ + "source": "k8s-client", + }) + case 'W': // Warning + w.logger.Warn(message, map[string]interface{}{ + "source": "k8s-client", + }) + case 'E', 'F': // Error or Fatal + w.logger.Error(message, map[string]interface{}{ + "source": "k8s-client", + }) + default: + // Unknown format, log as debug + w.logger.Debug(message, map[string]interface{}{ + "source": "k8s-client", + }) + } +} diff --git a/internal/logger/klog_bridge_test.go b/internal/logger/klog_bridge_test.go new file mode 100644 index 0000000..29f05c5 --- /dev/null +++ b/internal/logger/klog_bridge_test.go @@ -0,0 +1,280 @@ +package logger + +import ( + "bytes" + "encoding/json" + "fmt" + "strings" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func TestKlogWriter(t *testing.T) { + tests := []struct { + name string + input string + expectedLevel string + expectedMsg string + loggerLevel Level + loggerFormat Format + shouldLog bool + description string + }{ + { + name: "info level log", + input: "I1124 12:34:56.789012 12345 portforward.go:123] Starting port forward\n", + expectedLevel: "DEBUG", + expectedMsg: "Starting port forward", + loggerLevel: LevelDebug, + loggerFormat: FormatText, + shouldLog: true, + description: "Info logs from k8s should be routed as DEBUG", + }, + { + name: "warning level log", + input: "W1124 12:34:56.789012 12345 portforward.go:456] Connection unstable\n", + expectedLevel: "WARN", + expectedMsg: "Connection unstable", + loggerLevel: LevelDebug, + loggerFormat: FormatText, + shouldLog: true, + description: "Warning logs should be routed as WARN", + }, + { + name: "error level log", + input: "E1124 12:34:56.789012 12345 portforward.go:789] Connection failed\n", + expectedLevel: "ERROR", + expectedMsg: "Connection failed", + loggerLevel: LevelDebug, + loggerFormat: FormatText, + shouldLog: true, + description: "Error logs should be routed as ERROR", + }, + { + name: "fatal level log", + input: "F1124 12:34:56.789012 12345 portforward.go:999] Fatal error\n", + expectedLevel: "ERROR", + expectedMsg: "Fatal error", + loggerLevel: LevelDebug, + loggerFormat: FormatText, + shouldLog: true, + description: "Fatal logs should be routed as ERROR", + }, + { + name: "multiline input", + input: "I1124 12:34:56.789012 12345 portforward.go:123] First message\nI1124 12:34:57.123456 12345 portforward.go:124] Second message\n", + expectedLevel: "DEBUG", + expectedMsg: "First message", + loggerLevel: LevelDebug, + loggerFormat: FormatText, + shouldLog: true, + description: "Should handle multiple log lines", + }, + { + name: "log filtered by level", + input: "I1124 12:34:56.789012 12345 portforward.go:123] Debug message\n", + expectedLevel: "DEBUG", + expectedMsg: "Debug message", + loggerLevel: LevelInfo, // Logger set to INFO, DEBUG should be filtered + loggerFormat: FormatText, + shouldLog: false, + description: "DEBUG logs should be filtered when logger level is INFO", + }, + { + name: "unknown log format", + input: "X1124 12:34:56.789012 12345 portforward.go:123] Unknown format\n", + expectedLevel: "DEBUG", + expectedMsg: "Unknown format", + loggerLevel: LevelDebug, + loggerFormat: FormatText, + shouldLog: true, + description: "Unknown format should default to DEBUG", + }, + { + name: "empty line", + input: "\n", + expectedLevel: "", + expectedMsg: "", + loggerLevel: LevelDebug, + loggerFormat: FormatText, + shouldLog: false, + description: "Empty lines should be ignored", + }, + { + name: "partial line no newline", + input: "I1124 12:34:56.789012 12345 portforward.go:123] Partial", + expectedLevel: "", + expectedMsg: "", + loggerLevel: LevelDebug, + loggerFormat: FormatText, + shouldLog: false, + description: "Partial lines without newline should be buffered", + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + // Create output buffer + var buf bytes.Buffer + + // Create logger with specified level and format + logger := New(tt.loggerLevel, tt.loggerFormat, &buf) + + // Create klog writer + klogWriter := NewKlogWriter(logger) + + // Write input + n, err := klogWriter.Write([]byte(tt.input)) + require.NoError(t, err) + assert.Equal(t, len(tt.input), n) + + // Check output + output := buf.String() + + if !tt.shouldLog { + assert.Empty(t, output, "Expected no log output") + return + } + + if tt.loggerFormat == FormatText { + // Text format: [LEVEL] message + assert.Contains(t, output, fmt.Sprintf("[%s]", tt.expectedLevel)) + assert.Contains(t, output, tt.expectedMsg) + assert.Contains(t, output, "k8s-client") // Should include source field + } else { + // JSON format + var entry logEntry + lines := strings.Split(strings.TrimSpace(output), "\n") + if len(lines) > 0 { + err := json.Unmarshal([]byte(lines[0]), &entry) + require.NoError(t, err) + assert.Equal(t, tt.expectedLevel, entry.Level) + assert.Equal(t, tt.expectedMsg, entry.Message) + assert.Equal(t, "k8s-client", entry.Fields["source"]) + } + } + }) + } +} + +func TestKlogWriterBuffering(t *testing.T) { + tests := []struct { + name string + writes []string + expectCount int + description string + }{ + { + name: "single complete line", + writes: []string{ + "I1124 12:34:56.789012 12345 portforward.go:123] Complete line\n", + }, + expectCount: 1, + description: "Single complete line should produce one log entry", + }, + { + name: "partial then complete", + writes: []string{ + "I1124 12:34:56.789012 12345 portforward.go:123] Partial ", + "line\n", + }, + expectCount: 1, + description: "Partial writes should be buffered and combined", + }, + { + name: "multiple complete lines in chunks", + writes: []string{ + "I1124 12:34:56.789012 12345 portforward.go:123] First\n", + "I1124 12:34:57.123456 12345 portforward.go:124] Second\n", + "I1124 12:34:58.456789 12345 portforward.go:125] Third\n", + }, + expectCount: 3, + description: "Multiple complete lines should produce multiple log entries", + }, + { + name: "mixed partial and complete", + writes: []string{ + "I1124 12:34:56.789012 12345 portforward.go:123] First\nI1124 12:34:57.123456 12345 port", + "forward.go:124] Second\n", + }, + expectCount: 2, + description: "Mixed partial and complete lines should be handled correctly", + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + var buf bytes.Buffer + logger := New(LevelDebug, FormatText, &buf) + klogWriter := NewKlogWriter(logger) + + // Write all chunks + for _, write := range tt.writes { + _, err := klogWriter.Write([]byte(write)) + require.NoError(t, err) + } + + // Count log entries (each line starts with [LEVEL]) + output := buf.String() + count := strings.Count(output, "[DEBUG]") + + strings.Count(output, "[INFO]") + + strings.Count(output, "[WARN]") + + strings.Count(output, "[ERROR]") + + assert.Equal(t, tt.expectCount, count, "Expected %d log entries, got %d", tt.expectCount, count) + }) + } +} + +func TestKlogWriterJSONFormat(t *testing.T) { + var buf bytes.Buffer + logger := New(LevelDebug, FormatJSON, &buf) + klogWriter := NewKlogWriter(logger) + + // Write a k8s log line + input := "I1124 12:34:56.789012 12345 portforward.go:123] Starting port forward\n" + _, err := klogWriter.Write([]byte(input)) + require.NoError(t, err) + + // Parse JSON output + var entry logEntry + err = json.Unmarshal(buf.Bytes(), &entry) + require.NoError(t, err) + + // Verify JSON structure + assert.Equal(t, "DEBUG", entry.Level) + assert.Equal(t, "Starting port forward", entry.Message) + assert.NotEmpty(t, entry.Time) + assert.Equal(t, "k8s-client", entry.Fields["source"]) +} + +func TestKlogWriterConcurrency(t *testing.T) { + // Test that concurrent writes don't cause data races + var buf bytes.Buffer + logger := New(LevelDebug, FormatText, &buf) + klogWriter := NewKlogWriter(logger) + + done := make(chan bool) + numGoroutines := 10 + numWrites := 100 + + for i := 0; i < numGoroutines; i++ { + go func(id int) { + for j := 0; j < numWrites; j++ { + msg := fmt.Sprintf("I1124 12:34:56.789012 12345 test.go:123] Message from goroutine %d iteration %d\n", id, j) + klogWriter.Write([]byte(msg)) + } + done <- true + }(i) + } + + // Wait for all goroutines + for i := 0; i < numGoroutines; i++ { + <-done + } + + // Just verify we didn't panic (data race detector would catch issues) + assert.NotEmpty(t, buf.String()) +} diff --git a/internal/logger/logger.go b/internal/logger/logger.go new file mode 100644 index 0000000..26f0d9f --- /dev/null +++ b/internal/logger/logger.go @@ -0,0 +1,159 @@ +package logger + +import ( + "encoding/json" + "fmt" + "io" + "os" + "time" +) + +type Level int + +const ( + LevelDebug Level = iota + LevelInfo + LevelWarn + LevelError +) + +type Format int + +const ( + FormatText Format = iota + FormatJSON +) + +type Logger struct { + level Level + format Format + output io.Writer +} + +type logEntry struct { + Time string `json:"time"` + Level string `json:"level"` + Message string `json:"message"` + Fields map[string]interface{} `json:"fields,omitempty"` +} + +func New(level Level, format Format, output io.Writer) *Logger { + if output == nil { + output = os.Stderr + } + return &Logger{ + level: level, + format: format, + output: output, + } +} + +func (l *Logger) log(level Level, msg string, fields map[string]interface{}) { + if level < l.level { + return + } + + levelStr := levelToString(level) + + if l.format == FormatJSON { + entry := logEntry{ + Time: time.Now().Format(time.RFC3339), + Level: levelStr, + Message: msg, + Fields: fields, + } + data, _ := json.Marshal(entry) + fmt.Fprintln(l.output, string(data)) + } else { + // Text format + if len(fields) > 0 { + fmt.Fprintf(l.output, "[%s] %s %v\n", levelStr, msg, fields) + } else { + fmt.Fprintf(l.output, "[%s] %s\n", levelStr, msg) + } + } +} + +func (l *Logger) Debug(msg string, fields ...map[string]interface{}) { + f := make(map[string]interface{}) + if len(fields) > 0 { + f = fields[0] + } + l.log(LevelDebug, msg, f) +} + +func (l *Logger) Info(msg string, fields ...map[string]interface{}) { + f := make(map[string]interface{}) + if len(fields) > 0 { + f = fields[0] + } + l.log(LevelInfo, msg, f) +} + +func (l *Logger) Warn(msg string, fields ...map[string]interface{}) { + f := make(map[string]interface{}) + if len(fields) > 0 { + f = fields[0] + } + l.log(LevelWarn, msg, f) +} + +func (l *Logger) Error(msg string, fields ...map[string]interface{}) { + f := make(map[string]interface{}) + if len(fields) > 0 { + f = fields[0] + } + l.log(LevelError, msg, f) +} + +func levelToString(level Level) string { + switch level { + case LevelDebug: + return "DEBUG" + case LevelInfo: + return "INFO" + case LevelWarn: + return "WARN" + case LevelError: + return "ERROR" + default: + return "UNKNOWN" + } +} + +// Global logger for backward compatibility +var globalLogger *Logger + +func Init(level Level, format Format, output ...io.Writer) { + var out io.Writer + if len(output) > 0 && output[0] != nil { + out = output[0] + } else { + out = os.Stderr + } + globalLogger = New(level, format, out) +} + +func Debug(msg string, fields ...map[string]interface{}) { + if globalLogger != nil { + globalLogger.Debug(msg, fields...) + } +} + +func Info(msg string, fields ...map[string]interface{}) { + if globalLogger != nil { + globalLogger.Info(msg, fields...) + } +} + +func Warn(msg string, fields ...map[string]interface{}) { + if globalLogger != nil { + globalLogger.Warn(msg, fields...) + } +} + +func Error(msg string, fields ...map[string]interface{}) { + if globalLogger != nil { + globalLogger.Error(msg, fields...) + } +} diff --git a/internal/logger/logger_test.go b/internal/logger/logger_test.go new file mode 100644 index 0000000..714ff4b --- /dev/null +++ b/internal/logger/logger_test.go @@ -0,0 +1,521 @@ +package logger + +import ( + "bytes" + "encoding/json" + "io" + "strings" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func TestLoggerTextFormat(t *testing.T) { + tests := []struct { + name string + level Level + logLevel Level + message string + fields map[string]interface{} + expectOutput bool + expectContains []string + }{ + { + name: "info logged at info level", + level: LevelInfo, + logLevel: LevelInfo, + message: "test message", + fields: nil, + expectOutput: true, + expectContains: []string{"[INFO]", "test message"}, + }, + { + name: "debug filtered at info level", + level: LevelInfo, + logLevel: LevelDebug, + message: "debug message", + fields: nil, + expectOutput: false, + expectContains: []string{}, + }, + { + name: "error logged at info level", + level: LevelInfo, + logLevel: LevelError, + message: "error message", + fields: nil, + expectOutput: true, + expectContains: []string{"[ERROR]", "error message"}, + }, + { + name: "info with fields", + level: LevelInfo, + logLevel: LevelInfo, + message: "test message", + fields: map[string]interface{}{ + "key1": "value1", + "key2": 123, + }, + expectOutput: true, + expectContains: []string{"[INFO]", "test message", "key1", "value1"}, + }, + { + name: "warn logged at warn level", + level: LevelWarn, + logLevel: LevelWarn, + message: "warning message", + fields: nil, + expectOutput: true, + expectContains: []string{"[WARN]", "warning message"}, + }, + { + name: "info filtered at warn level", + level: LevelWarn, + logLevel: LevelInfo, + message: "info message", + fields: nil, + expectOutput: false, + expectContains: []string{}, + }, + { + name: "debug logged at debug level", + level: LevelDebug, + logLevel: LevelDebug, + message: "debug message", + fields: nil, + expectOutput: true, + expectContains: []string{"[DEBUG]", "debug message"}, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + buf := &bytes.Buffer{} + logger := New(tt.level, FormatText, buf) + + // Log at the specified level + switch tt.logLevel { + case LevelDebug: + if tt.fields != nil { + logger.Debug(tt.message, tt.fields) + } else { + logger.Debug(tt.message) + } + case LevelInfo: + if tt.fields != nil { + logger.Info(tt.message, tt.fields) + } else { + logger.Info(tt.message) + } + case LevelWarn: + if tt.fields != nil { + logger.Warn(tt.message, tt.fields) + } else { + logger.Warn(tt.message) + } + case LevelError: + if tt.fields != nil { + logger.Error(tt.message, tt.fields) + } else { + logger.Error(tt.message) + } + } + + output := buf.String() + + if tt.expectOutput { + assert.NotEmpty(t, output, "Expected log output but got none") + for _, expected := range tt.expectContains { + assert.Contains(t, output, expected, "Expected output to contain: %s", expected) + } + } else { + assert.Empty(t, output, "Expected no log output but got: %s", output) + } + }) + } +} + +func TestLoggerJSONFormat(t *testing.T) { + tests := []struct { + name string + level Level + logLevel Level + message string + fields map[string]interface{} + expectOutput bool + expectLevel string + }{ + { + name: "info logged at info level", + level: LevelInfo, + logLevel: LevelInfo, + message: "test message", + fields: nil, + expectOutput: true, + expectLevel: "INFO", + }, + { + name: "debug filtered at info level", + level: LevelInfo, + logLevel: LevelDebug, + message: "debug message", + fields: nil, + expectOutput: false, + expectLevel: "", + }, + { + name: "error logged at debug level", + level: LevelDebug, + logLevel: LevelError, + message: "error message", + fields: nil, + expectOutput: true, + expectLevel: "ERROR", + }, + { + name: "info with fields", + level: LevelInfo, + logLevel: LevelInfo, + message: "test message", + fields: map[string]interface{}{ + "context": "production", + "port": 8080, + "retry": 3, + }, + expectOutput: true, + expectLevel: "INFO", + }, + { + name: "warn at warn level", + level: LevelWarn, + logLevel: LevelWarn, + message: "warning message", + fields: nil, + expectOutput: true, + expectLevel: "WARN", + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + buf := &bytes.Buffer{} + logger := New(tt.level, FormatJSON, buf) + + // Log at the specified level + switch tt.logLevel { + case LevelDebug: + if tt.fields != nil { + logger.Debug(tt.message, tt.fields) + } else { + logger.Debug(tt.message) + } + case LevelInfo: + if tt.fields != nil { + logger.Info(tt.message, tt.fields) + } else { + logger.Info(tt.message) + } + case LevelWarn: + if tt.fields != nil { + logger.Warn(tt.message, tt.fields) + } else { + logger.Warn(tt.message) + } + case LevelError: + if tt.fields != nil { + logger.Error(tt.message, tt.fields) + } else { + logger.Error(tt.message) + } + } + + output := buf.String() + + if tt.expectOutput { + assert.NotEmpty(t, output, "Expected log output but got none") + + // Parse JSON + var entry logEntry + err := json.Unmarshal([]byte(strings.TrimSpace(output)), &entry) + require.NoError(t, err, "Failed to parse JSON output: %s", output) + + // Validate fields + assert.Equal(t, tt.expectLevel, entry.Level) + assert.Equal(t, tt.message, entry.Message) + assert.NotEmpty(t, entry.Time, "Time field should not be empty") + + // Validate custom fields if provided + if tt.fields != nil { + require.NotNil(t, entry.Fields, "Expected fields in JSON output") + for key, expectedValue := range tt.fields { + actualValue, exists := entry.Fields[key] + assert.True(t, exists, "Expected field %s not found in output", key) + // JSON unmarshaling converts numbers to float64 + if floatVal, ok := expectedValue.(int); ok { + assert.Equal(t, float64(floatVal), actualValue) + } else { + assert.Equal(t, expectedValue, actualValue) + } + } + } + } else { + assert.Empty(t, output, "Expected no log output but got: %s", output) + } + }) + } +} + +func TestGlobalLogger(t *testing.T) { + tests := []struct { + name string + initLevel Level + initFormat Format + logFunc func(string, ...map[string]interface{}) + message string + expectContains string + }{ + { + name: "global info logger text", + initLevel: LevelInfo, + initFormat: FormatText, + logFunc: Info, + message: "global info message", + expectContains: "[INFO]", + }, + { + name: "global error logger text", + initLevel: LevelInfo, + initFormat: FormatText, + logFunc: Error, + message: "global error message", + expectContains: "[ERROR]", + }, + { + name: "global warn logger json", + initLevel: LevelWarn, + initFormat: FormatJSON, + logFunc: Warn, + message: "global warn message", + expectContains: `"level":"WARN"`, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + // Capture stderr by replacing globalLogger's output + buf := &bytes.Buffer{} + Init(tt.initLevel, tt.initFormat) + globalLogger.output = buf + + // Call the global log function + tt.logFunc(tt.message) + + output := buf.String() + assert.Contains(t, output, tt.expectContains) + assert.Contains(t, output, tt.message) + }) + } +} + +func TestLogLevelsFiltering(t *testing.T) { + tests := []struct { + name string + loggerLevel Level + logAtLevels []Level + expectOutputs []bool + }{ + { + name: "debug level logs everything", + loggerLevel: LevelDebug, + logAtLevels: []Level{LevelDebug, LevelInfo, LevelWarn, LevelError}, + expectOutputs: []bool{true, true, true, true}, + }, + { + name: "info level filters debug", + loggerLevel: LevelInfo, + logAtLevels: []Level{LevelDebug, LevelInfo, LevelWarn, LevelError}, + expectOutputs: []bool{false, true, true, true}, + }, + { + name: "warn level filters debug and info", + loggerLevel: LevelWarn, + logAtLevels: []Level{LevelDebug, LevelInfo, LevelWarn, LevelError}, + expectOutputs: []bool{false, false, true, true}, + }, + { + name: "error level only logs errors", + loggerLevel: LevelError, + logAtLevels: []Level{LevelDebug, LevelInfo, LevelWarn, LevelError}, + expectOutputs: []bool{false, false, false, true}, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + buf := &bytes.Buffer{} + logger := New(tt.loggerLevel, FormatText, buf) + + for i, logLevel := range tt.logAtLevels { + buf.Reset() + + switch logLevel { + case LevelDebug: + logger.Debug("test") + case LevelInfo: + logger.Info("test") + case LevelWarn: + logger.Warn("test") + case LevelError: + logger.Error("test") + } + + hasOutput := buf.Len() > 0 + assert.Equal(t, tt.expectOutputs[i], hasOutput, + "Level %v at logger level %v: expected output=%v, got=%v", + logLevel, tt.loggerLevel, tt.expectOutputs[i], hasOutput) + } + }) + } +} + +func TestLoggerNilOutput(t *testing.T) { + // Test that logger defaults to os.Stderr when output is nil + logger := New(LevelInfo, FormatText, nil) + assert.NotNil(t, logger.output, "Logger output should not be nil") +} + +func TestLevelToString(t *testing.T) { + tests := []struct { + level Level + expected string + }{ + {LevelDebug, "DEBUG"}, + {LevelInfo, "INFO"}, + {LevelWarn, "WARN"}, + {LevelError, "ERROR"}, + {Level(999), "UNKNOWN"}, + } + + for _, tt := range tests { + t.Run(tt.expected, func(t *testing.T) { + result := levelToString(tt.level) + assert.Equal(t, tt.expected, result) + }) + } +} + +func TestJSONFieldTypes(t *testing.T) { + tests := []struct { + name string + fields map[string]interface{} + }{ + { + name: "string fields", + fields: map[string]interface{}{ + "key1": "value1", + "key2": "value2", + }, + }, + { + name: "numeric fields", + fields: map[string]interface{}{ + "port": 8080, + "timeout": 30, + "retry": 3, + }, + }, + { + name: "boolean fields", + fields: map[string]interface{}{ + "enabled": true, + "running": false, + }, + }, + { + name: "mixed types", + fields: map[string]interface{}{ + "context": "production", + "port": 8080, + "enabled": true, + "namespace": "default", + }, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + buf := &bytes.Buffer{} + logger := New(LevelInfo, FormatJSON, buf) + + logger.Info("test message", tt.fields) + + var entry logEntry + err := json.Unmarshal([]byte(strings.TrimSpace(buf.String())), &entry) + require.NoError(t, err) + + assert.Equal(t, len(tt.fields), len(entry.Fields), + "Field count mismatch") + + for key := range tt.fields { + _, exists := entry.Fields[key] + assert.True(t, exists, "Field %s not found in JSON output", key) + } + }) + } +} + +func TestInitWithCustomOutput(t *testing.T) { + tests := []struct { + name string + output io.Writer + expectDiscard bool + description string + }{ + { + name: "init with custom buffer", + output: &bytes.Buffer{}, + expectDiscard: false, + description: "Should use provided buffer", + }, + { + name: "init with io.Discard", + output: io.Discard, + expectDiscard: true, + description: "Should use io.Discard to silence output", + }, + { + name: "init without output defaults to stderr", + output: nil, + expectDiscard: false, + description: "Should default to stderr when no output provided", + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if tt.output != nil { + Init(LevelInfo, FormatText, tt.output) + } else { + Init(LevelInfo, FormatText) + } + + // Verify global logger was initialized + assert.NotNil(t, globalLogger, "Global logger should be initialized") + + if tt.output != nil && !tt.expectDiscard { + // For buffer, verify output works + if buf, ok := tt.output.(*bytes.Buffer); ok { + Info("test message") + output := buf.String() + assert.Contains(t, output, "test message") + assert.Contains(t, output, "[INFO]") + } + } else if tt.expectDiscard { + // For io.Discard, verify no output appears (we can't really test this directly, + // but we can verify the logger was set with the right output) + assert.Equal(t, io.Discard, globalLogger.output) + } + }) + } +} diff --git a/internal/ui/bubbletea_ui.go b/internal/ui/bubbletea_ui.go index 7029c18..dac36a2 100644 --- a/internal/ui/bubbletea_ui.go +++ b/internal/ui/bubbletea_ui.go @@ -8,6 +8,7 @@ import ( tea "github.com/charmbracelet/bubbletea" "github.com/charmbracelet/lipgloss" "github.com/nvm/kportal/internal/config" + "github.com/nvm/kportal/internal/k8s" ) // ForwardUpdateMsg is sent when a forward status changes @@ -44,11 +45,29 @@ type BubbleTeaUI struct { toggleCallback func(id string, enable bool) version string errors map[string]string // Track error messages by forward ID + + // Modal wizard state + viewMode ViewMode + addWizard *AddWizardState + removeWizard *RemoveWizardState + + // Delete confirmation state + deleteConfirming bool + deleteConfirmID string + deleteConfirmAlias string + deleteConfirmCursor int // 0 = Yes, 1 = No + + // Dependencies for wizards + discovery *k8s.Discovery + mutator *config.Mutator + configPath string } // bubbletea model type model struct { - ui *BubbleTeaUI + ui *BubbleTeaUI + termWidth int + termHeight int } // NewBubbleTeaUI creates a new bubbletea-based UI @@ -61,11 +80,22 @@ func NewBubbleTeaUI(toggleCallback func(id string, enable bool), version string) toggleCallback: toggleCallback, version: version, errors: make(map[string]string), + viewMode: ViewModeMain, } return ui } +// SetWizardDependencies sets the dependencies needed for the add/remove wizards +func (ui *BubbleTeaUI) SetWizardDependencies(discovery *k8s.Discovery, mutator *config.Mutator, configPath string) { + ui.mu.Lock() + defer ui.mu.Unlock() + + ui.discovery = discovery + ui.mutator = mutator + ui.configPath = configPath +} + // Start starts the bubbletea application func (ui *BubbleTeaUI) Start() error { m := model{ui: ui} @@ -187,33 +217,55 @@ func (m model) Init() tea.Cmd { } func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) { + m.ui.mu.RLock() + viewMode := m.ui.viewMode + m.ui.mu.RUnlock() + switch msg := msg.(type) { + case tea.WindowSizeMsg: + // Update terminal dimensions on resize + m.termWidth = msg.Width + m.termHeight = msg.Height + return m, nil + case tea.KeyMsg: - switch msg.String() { - case "ctrl+c", "q": - return m, tea.Quit - case "up", "k": - m.ui.moveSelection(-1) - case "down", "j": - m.ui.moveSelection(1) - case " ", "enter": - m.ui.toggleSelected() + // Route based on current view mode + switch viewMode { + case ViewModeMain: + return m.handleMainViewKeys(msg) + case ViewModeAddWizard: + return m.handleAddWizardKeys(msg) + case ViewModeRemoveWizard: + return m.handleRemoveWizardKeys(msg) } - case ForwardAddMsg: - // Already handled in AddForward, just trigger re-render + // Forward management messages (always update main view data) + case ForwardAddMsg, ForwardUpdateMsg, ForwardErrorMsg, ForwardRemoveMsg: return m, nil - case ForwardUpdateMsg: - // Already handled in UpdateStatus, just trigger re-render - return m, nil - - case ForwardErrorMsg: - // Already handled in SetError, just trigger re-render - return m, nil - - case ForwardRemoveMsg: - // Already handled in Remove, just trigger re-render + // Wizard-specific messages + case ContextsLoadedMsg: + return m.handleContextsLoaded(msg) + case NamespacesLoadedMsg: + return m.handleNamespacesLoaded(msg) + case PodsLoadedMsg: + return m.handlePodsLoaded(msg) + case ServicesLoadedMsg: + return m.handleServicesLoaded(msg) + case SelectorValidatedMsg: + return m.handleSelectorValidated(msg) + case PortCheckedMsg: + return m.handlePortChecked(msg) + case ForwardSavedMsg: + return m.handleForwardSaved(msg) + case ForwardsRemovedMsg: + return m.handleForwardsRemoved(msg) + case WizardCompleteMsg: + m.ui.mu.Lock() + m.ui.viewMode = ViewModeMain + m.ui.addWizard = nil + m.ui.removeWizard = nil + m.ui.mu.Unlock() return m, nil } @@ -221,11 +273,57 @@ func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) { } func (m model) View() string { + m.ui.mu.RLock() + viewMode := m.ui.viewMode + deleteConfirming := m.ui.deleteConfirming + m.ui.mu.RUnlock() + + // Always render main view as base + mainView := m.renderMainView() + + // Use actual terminal dimensions for proper centering + termWidth := m.termWidth + termHeight := m.termHeight + + // Fallback to reasonable defaults if dimensions not yet received + if termWidth == 0 { + termWidth = 120 + } + if termHeight == 0 { + termHeight = 40 + } + + // Overlay delete confirmation if active + if deleteConfirming { + modal := m.renderDeleteConfirmation() + return overlayContent(mainView, modal, termWidth, termHeight) + } + + // Overlay wizard if active + switch viewMode { + case ViewModeAddWizard: + modal := m.renderAddWizard() + return overlayContent(mainView, modal, termWidth, termHeight) + case ViewModeRemoveWizard: + modal := m.renderRemoveWizard() + return overlayContent(mainView, modal, termWidth, termHeight) + default: + return mainView + } +} + +func (m model) renderMainView() string { m.ui.mu.RLock() defer m.ui.mu.RUnlock() var b strings.Builder + // Get terminal dimensions for proper sizing + termHeight := m.termHeight + if termHeight == 0 { + termHeight = 40 // Fallback + } + // Styles titleStyle := lipgloss.NewStyle(). Bold(true). @@ -350,21 +448,7 @@ func (m model) View() string { } } - // Footer - b.WriteString("\n") - footerStyle := lipgloss.NewStyle().Foreground(lipgloss.Color("240")) - keyStyle := lipgloss.NewStyle().Foreground(lipgloss.Color("220")) - - footer := fmt.Sprintf("%s/%s: Navigate %s: Toggle %s: Quit │ Total: %d", - keyStyle.Render("↑↓"), - keyStyle.Render("jk"), - keyStyle.Render("Space"), - keyStyle.Render("q"), - len(m.ui.forwardOrder)) - - b.WriteString(footerStyle.Render(footer)) - - // Display errors if any + // Display errors if any (before footer) if len(m.ui.errors) > 0 { b.WriteString("\n\n") errorHeaderStyle := lipgloss.NewStyle(). @@ -374,20 +458,104 @@ func (m model) View() string { b.WriteString(errorHeaderStyle.Render("Errors:")) b.WriteString("\n") + errorLineStyle := lipgloss.NewStyle(). + Foreground(lipgloss.Color("196")). + Width(118). // Slightly less than table width (120) for padding + MaxWidth(118) + for id, errMsg := range m.ui.errors { // Find the forward to display its alias if fwd, ok := m.ui.forwards[id]; ok { - errorLineStyle := lipgloss.NewStyle().Foreground(lipgloss.Color("196")) - line := fmt.Sprintf(" • %s: %s", fwd.Alias, errMsg) - b.WriteString(errorLineStyle.Render(line)) - b.WriteString("\n") + // Format: " • alias: error message" + prefix := fmt.Sprintf(" • %s: ", fwd.Alias) + + // Wrap the error message if it's too long + // Max line length is 118, subtract prefix length + maxErrLen := 118 - len(prefix) + wrappedMsg := wrapText(errMsg, maxErrLen) + + // Render first line with prefix + lines := strings.Split(wrappedMsg, "\n") + if len(lines) > 0 { + b.WriteString(errorLineStyle.Render(prefix + lines[0])) + b.WriteString("\n") + + // Render subsequent lines with indentation + indent := strings.Repeat(" ", len(prefix)) + for i := 1; i < len(lines); i++ { + b.WriteString(errorLineStyle.Render(indent + lines[i])) + b.WriteString("\n") + } + } } } } + // Calculate current content height + currentContent := b.String() + currentLines := strings.Count(currentContent, "\n") + 1 + + // Footer styles + footerStyle := lipgloss.NewStyle().Foreground(lipgloss.Color("240")) + keyStyle := lipgloss.NewStyle().Foreground(lipgloss.Color("220")) + + footer := fmt.Sprintf("%s/%s: Navigate %s: Toggle %s: New %s: Edit %s: Delete %s: Quit │ Total: %d", + keyStyle.Render("↑↓"), + keyStyle.Render("jk"), + keyStyle.Render("Space"), + keyStyle.Render("n"), + keyStyle.Render("e"), + keyStyle.Render("d"), + keyStyle.Render("q"), + len(m.ui.forwardOrder)) + + // Fill space to push footer to bottom (reserve 2 lines: 1 for spacing, 1 for footer) + footerHeight := 2 + remainingLines := termHeight - currentLines - footerHeight + if remainingLines > 0 { + b.WriteString(strings.Repeat("\n", remainingLines)) + } + + // Add footer at bottom + b.WriteString("\n") + b.WriteString(footerStyle.Render(footer)) + return b.String() } +// wrapText wraps text to the specified width, breaking at word boundaries +func wrapText(text string, width int) string { + if len(text) <= width { + return text + } + + var result strings.Builder + var line strings.Builder + words := strings.Fields(text) + + for i, word := range words { + // If adding this word would exceed width, start new line + if line.Len()+len(word)+1 > width && line.Len() > 0 { + result.WriteString(line.String()) + result.WriteString("\n") + line.Reset() + } + + // Add space before word (except first word on line) + if line.Len() > 0 { + line.WriteString(" ") + } + line.WriteString(word) + + // Last word - flush the line + if i == len(words)-1 { + result.WriteString(line.String()) + } + } + + return result.String() +} + // moveSelection moves the selection up or down func (ui *BubbleTeaUI) moveSelection(delta int) { ui.mu.Lock() @@ -406,6 +574,65 @@ func (ui *BubbleTeaUI) moveSelection(delta int) { } } +// renderDeleteConfirmation renders the delete confirmation dialog +func (m model) renderDeleteConfirmation() string { + m.ui.mu.RLock() + defer m.ui.mu.RUnlock() + + var b strings.Builder + + // Use wizard color palette for consistency + titleStyle := lipgloss.NewStyle(). + Bold(true). + Foreground(warningColor). // Yellow for warning (delete action) + Padding(0, 1) + + buttonSelectedStyle := lipgloss.NewStyle(). + Background(primaryColor). // Pink/Magenta background + Foreground(lipgloss.Color("230")). // Light yellow text + Bold(true). + Padding(0, 1) + + buttonUnselectedStyle := lipgloss.NewStyle(). + Foreground(mutedColor). // Gray + Padding(0, 1) + + deleteInfoStyle := lipgloss.NewStyle(). + Foreground(lipgloss.Color("252")). // Light gray for info text + Italic(true) + + // Title + b.WriteString(titleStyle.Render("⚠ Delete Port Forward")) + b.WriteString("\n\n") + + // Message + b.WriteString("Are you sure you want to delete:\n\n") + b.WriteString(deleteInfoStyle.Render(" " + m.ui.deleteConfirmAlias)) + b.WriteString("\n\n") + + // Buttons + if m.ui.deleteConfirmCursor == 0 { + b.WriteString(buttonSelectedStyle.Render(" Yes ")) + b.WriteString(" ") + b.WriteString(buttonUnselectedStyle.Render(" No ")) + } else { + b.WriteString(buttonUnselectedStyle.Render(" Yes ")) + b.WriteString(" ") + b.WriteString(buttonSelectedStyle.Render(" No ")) + } + + b.WriteString("\n\n") + b.WriteString(helpStyle.Render("←/→: Navigate Enter: Confirm Esc: Cancel")) + + // Wrap in a box using wizard style + boxStyle := lipgloss.NewStyle(). + Border(lipgloss.RoundedBorder()). + BorderForeground(accentColor). // Purple border like other wizards + Padding(1, 2) + + return boxStyle.Render(b.String()) +} + // toggleSelected toggles the selected forward on/off func (ui *BubbleTeaUI) toggleSelected() { ui.mu.Lock() diff --git a/internal/ui/wizard_commands.go b/internal/ui/wizard_commands.go new file mode 100644 index 0000000..8758e41 --- /dev/null +++ b/internal/ui/wizard_commands.go @@ -0,0 +1,222 @@ +package ui + +import ( + "context" + "fmt" + "time" + + tea "github.com/charmbracelet/bubbletea" + "github.com/nvm/kportal/internal/config" + "github.com/nvm/kportal/internal/k8s" +) + +const ( + k8sAPITimeout = 10 * time.Second +) + +// Messages sent from async commands back to the update loop + +// ContextsLoadedMsg is sent when contexts have been loaded +type ContextsLoadedMsg struct { + contexts []string + err error +} + +// NamespacesLoadedMsg is sent when namespaces have been loaded +type NamespacesLoadedMsg struct { + namespaces []string + err error +} + +// PodsLoadedMsg is sent when pods have been loaded +type PodsLoadedMsg struct { + pods []k8s.PodInfo + err error +} + +// ServicesLoadedMsg is sent when services have been loaded +type ServicesLoadedMsg struct { + services []k8s.ServiceInfo + err error +} + +// SelectorValidatedMsg is sent when a selector has been validated +type SelectorValidatedMsg struct { + valid bool + pods []k8s.PodInfo + err error +} + +// PortCheckedMsg is sent when a port's availability has been checked +type PortCheckedMsg struct { + port int + available bool + message string +} + +// ForwardSavedMsg is sent when a forward has been saved to config +type ForwardSavedMsg struct { + success bool + err error +} + +// ForwardsRemovedMsg is sent when forwards have been removed from config +type ForwardsRemovedMsg struct { + success bool + count int + err error +} + +// WizardCompleteMsg signals that the wizard has completed +type WizardCompleteMsg struct{} + +// Command functions (return tea.Cmd) + +// loadContextsCmd loads available Kubernetes contexts +func loadContextsCmd(discovery *k8s.Discovery) tea.Cmd { + return func() tea.Msg { + contexts, err := discovery.ListContexts() + if err != nil { + return ContextsLoadedMsg{err: err} + } + return ContextsLoadedMsg{contexts: contexts} + } +} + +// loadNamespacesCmd loads namespaces for the given context +func loadNamespacesCmd(discovery *k8s.Discovery, contextName string) tea.Cmd { + return func() tea.Msg { + ctx, cancel := context.WithTimeout(context.Background(), k8sAPITimeout) + defer cancel() + + namespaces, err := discovery.ListNamespaces(ctx, contextName) + if err != nil { + return NamespacesLoadedMsg{err: err} + } + return NamespacesLoadedMsg{namespaces: namespaces} + } +} + +// loadPodsCmd loads pods for the given context and namespace +func loadPodsCmd(discovery *k8s.Discovery, contextName, namespace string) tea.Cmd { + return func() tea.Msg { + ctx, cancel := context.WithTimeout(context.Background(), k8sAPITimeout) + defer cancel() + + pods, err := discovery.ListPods(ctx, contextName, namespace) + if err != nil { + return PodsLoadedMsg{err: err} + } + return PodsLoadedMsg{pods: pods} + } +} + +// loadServicesCmd loads services for the given context and namespace +func loadServicesCmd(discovery *k8s.Discovery, contextName, namespace string) tea.Cmd { + return func() tea.Msg { + ctx, cancel := context.WithTimeout(context.Background(), k8sAPITimeout) + defer cancel() + + services, err := discovery.ListServices(ctx, contextName, namespace) + if err != nil { + return ServicesLoadedMsg{err: err} + } + return ServicesLoadedMsg{services: services} + } +} + +// validateSelectorCmd validates a label selector and returns matching pods +func validateSelectorCmd(discovery *k8s.Discovery, contextName, namespace, selector string) tea.Cmd { + return func() tea.Msg { + ctx, cancel := context.WithTimeout(context.Background(), k8sAPITimeout) + defer cancel() + + pods, err := discovery.ListPodsWithSelector(ctx, contextName, namespace, selector) + if err != nil { + return SelectorValidatedMsg{valid: false, err: err} + } + + return SelectorValidatedMsg{ + valid: len(pods) > 0, + pods: pods, + } + } +} + +// checkPortCmd checks if a local port is available +func checkPortCmd(port int) tea.Cmd { + return func() tea.Msg { + available, processInfo, err := k8s.CheckPortAvailability(port) + + msg := "" + if err != nil { + msg = fmt.Sprintf("āœ— Error: %v", err) + } else if available { + msg = fmt.Sprintf("āœ“ Port %d available", port) + } else { + msg = fmt.Sprintf("āœ— Port %d in use by %s", port, processInfo) + } + + return PortCheckedMsg{ + port: port, + available: available, + message: msg, + } + } +} + +// saveForwardCmd saves a new forward to the configuration file +func saveForwardCmd(mutator *config.Mutator, contextName, namespace string, fwd config.Forward) tea.Cmd { + return func() tea.Msg { + err := mutator.AddForward(contextName, namespace, fwd) + return ForwardSavedMsg{ + success: err == nil, + err: err, + } + } +} + +// updateForwardCmd atomically updates an existing forward (used in edit mode) +func updateForwardCmd(mutator *config.Mutator, oldID, contextName, namespace string, fwd config.Forward) tea.Cmd { + return func() tea.Msg { + err := mutator.UpdateForward(oldID, contextName, namespace, fwd) + return ForwardSavedMsg{ + success: err == nil, + err: err, + } + } +} + +// removeForwardsCmd removes selected forwards from the configuration file +func removeForwardsCmd(mutator *config.Mutator, forwards []RemovableForward) tea.Cmd { + return func() tea.Msg { + // Create a map of IDs to remove + idsToRemove := make(map[string]bool) + for _, fwd := range forwards { + idsToRemove[fwd.ID] = true + } + + // Remove forwards matching the IDs + err := mutator.RemoveForwards(func(ctx, ns string, fwd config.Forward) bool { + return idsToRemove[fwd.ID()] + }) + + return ForwardsRemovedMsg{ + success: err == nil, + count: len(forwards), + err: err, + } + } +} + +// removeForwardByIDCmd removes a single forward by its ID +func removeForwardByIDCmd(mutator *config.Mutator, id string) tea.Cmd { + return func() tea.Msg { + err := mutator.RemoveForwardByID(id) + return ForwardsRemovedMsg{ + success: err == nil, + count: 1, + err: err, + } + } +} diff --git a/internal/ui/wizard_handlers.go b/internal/ui/wizard_handlers.go new file mode 100644 index 0000000..ff7a7ec --- /dev/null +++ b/internal/ui/wizard_handlers.go @@ -0,0 +1,763 @@ +package ui + +import ( + "fmt" + "strconv" + "strings" + + tea "github.com/charmbracelet/bubbletea" + "github.com/nvm/kportal/internal/config" + "github.com/nvm/kportal/internal/k8s" +) + +// handleMainViewKeys handles keyboard input in the main view +func (m model) handleMainViewKeys(msg tea.KeyMsg) (tea.Model, tea.Cmd) { + // If delete confirmation is showing, handle it separately + if m.ui.deleteConfirming { + return m.handleDeleteConfirmation(msg) + } + + switch msg.String() { + case "ctrl+c", "q": + return m, tea.Quit + + case "up", "k": + m.ui.moveSelection(-1) + + case "down", "j": + m.ui.moveSelection(1) + + case " ", "enter": + m.ui.toggleSelected() + + case "n": // Enter add wizard + m.ui.mu.Lock() + if m.ui.discovery == nil || m.ui.mutator == nil { + // Dependencies not set up + m.ui.mu.Unlock() + return m, nil + } + + m.ui.viewMode = ViewModeAddWizard + m.ui.addWizard = newAddWizardState() + m.ui.addWizard.loading = true + m.ui.mu.Unlock() + + // Load contexts + return m, loadContextsCmd(m.ui.discovery) + + case "e": // Edit selected forward + m.ui.mu.Lock() + + if len(m.ui.forwardOrder) == 0 { + // No forwards to edit + m.ui.mu.Unlock() + return m, nil + } + + if m.ui.discovery == nil || m.ui.mutator == nil { + // Dependencies not set up + m.ui.mu.Unlock() + return m, nil + } + + // Get the currently selected forward + currentSelectedIndex := m.ui.selectedIndex + if currentSelectedIndex < 0 || currentSelectedIndex >= len(m.ui.forwardOrder) { + m.ui.mu.Unlock() + return m, nil + } + + selectedID := m.ui.forwardOrder[currentSelectedIndex] + selectedForward, ok := m.ui.forwards[selectedID] + if !ok { + m.ui.mu.Unlock() + return m, nil + } + + // Create an add wizard pre-filled with the current forward's values + m.ui.viewMode = ViewModeAddWizard + m.ui.addWizard = newAddWizardState() + + // Pre-fill the wizard with current values + m.ui.addWizard.selectedContext = selectedForward.Context + m.ui.addWizard.selectedNamespace = selectedForward.Namespace + m.ui.addWizard.resourceValue = selectedForward.Resource + m.ui.addWizard.remotePort = selectedForward.RemotePort + m.ui.addWizard.localPort = selectedForward.LocalPort + m.ui.addWizard.alias = selectedForward.Alias + + // Determine resource type from the resource string + if strings.HasPrefix(selectedForward.Type, "service") { + m.ui.addWizard.selectedResourceType = ResourceTypeService + } else { + m.ui.addWizard.selectedResourceType = ResourceTypePodPrefix + } + + // Mark as edit mode and store original ID + m.ui.addWizard.isEditing = true + m.ui.addWizard.originalID = selectedID + + // Start at the remote port step (skip context/namespace/resource selection) + m.ui.addWizard.step = StepEnterRemotePort + + // Load resources to detect ports + m.ui.addWizard.loading = true + m.ui.mu.Unlock() + + // Load pods or services to detect available ports + if m.ui.addWizard.selectedResourceType == ResourceTypeService { + return m, loadServicesCmd(m.ui.discovery, selectedForward.Context, selectedForward.Namespace) + } + return m, loadPodsCmd(m.ui.discovery, selectedForward.Context, selectedForward.Namespace) + + case "d": // Delete currently selected forward - show confirmation + m.ui.mu.Lock() + + if len(m.ui.forwardOrder) == 0 { + // No forwards to delete + m.ui.mu.Unlock() + return m, nil + } + + if m.ui.mutator == nil { + // Dependencies not set up + m.ui.mu.Unlock() + return m, nil + } + + // Get the currently selected forward + currentSelectedIndex := m.ui.selectedIndex + if currentSelectedIndex < 0 || currentSelectedIndex >= len(m.ui.forwardOrder) { + m.ui.mu.Unlock() + return m, nil + } + + selectedID := m.ui.forwardOrder[currentSelectedIndex] + selectedForward, ok := m.ui.forwards[selectedID] + if !ok { + m.ui.mu.Unlock() + return m, nil + } + + // Show confirmation dialog + m.ui.deleteConfirming = true + m.ui.deleteConfirmID = selectedID + m.ui.deleteConfirmAlias = selectedForward.Alias + m.ui.deleteConfirmCursor = 0 // Default to "No" for safety + + m.ui.mu.Unlock() + return m, nil + } + + return m, nil +} + +// handleDeleteConfirmation handles keyboard input for delete confirmation dialog +func (m model) handleDeleteConfirmation(msg tea.KeyMsg) (tea.Model, tea.Cmd) { + m.ui.mu.Lock() + + switch msg.String() { + case "ctrl+c", "esc": + // Cancel deletion + m.ui.deleteConfirming = false + m.ui.deleteConfirmID = "" + m.ui.deleteConfirmAlias = "" + m.ui.deleteConfirmCursor = 0 // Reset cursor + m.ui.mu.Unlock() + // Force a repaint by returning the model + return m, tea.ClearScreen + + case "left", "h", "right", "l": + // Toggle between Yes/No + m.ui.deleteConfirmCursor = 1 - m.ui.deleteConfirmCursor + m.ui.mu.Unlock() + return m, nil + + case "enter", "y": + // Confirm deletion (either Enter on Yes or pressing 'y') + if m.ui.deleteConfirmCursor == 0 || msg.String() == "y" { + id := m.ui.deleteConfirmID + m.ui.deleteConfirming = false + m.ui.deleteConfirmID = "" + m.ui.deleteConfirmAlias = "" + m.ui.mu.Unlock() + return m, removeForwardByIDCmd(m.ui.mutator, id) + } + // Enter on No = cancel + m.ui.deleteConfirming = false + m.ui.deleteConfirmID = "" + m.ui.deleteConfirmAlias = "" + m.ui.deleteConfirmCursor = 0 // Reset cursor + m.ui.mu.Unlock() + return m, tea.ClearScreen + + case "n": + // Quick 'n' for no + m.ui.deleteConfirming = false + m.ui.deleteConfirmID = "" + m.ui.deleteConfirmAlias = "" + m.ui.deleteConfirmCursor = 0 // Reset cursor + m.ui.mu.Unlock() + return m, tea.ClearScreen + } + + m.ui.mu.Unlock() + return m, nil +} + +// handleAddWizardKeys handles keyboard input in the add wizard +func (m model) handleAddWizardKeys(msg tea.KeyMsg) (tea.Model, tea.Cmd) { + m.ui.mu.Lock() + defer m.ui.mu.Unlock() + + wizard := m.ui.addWizard + if wizard == nil { + return m, nil + } + + switch msg.String() { + case "ctrl+c": + // Hard cancel + m.ui.viewMode = ViewModeMain + m.ui.addWizard = nil + return m, tea.ClearScreen + + case "esc": + // In edit mode, Esc always cancels (don't navigate back through skipped steps) + if wizard.isEditing { + m.ui.viewMode = ViewModeMain + m.ui.addWizard = nil + return m, tea.ClearScreen + } + + // In add mode, go back or cancel + if wizard.step == StepSelectContext { + // On first step, cancel entirely + m.ui.viewMode = ViewModeMain + m.ui.addWizard = nil + return m, tea.ClearScreen + } else { + // Go back one step + wizard.step-- + wizard.cursor = 0 + wizard.clearTextInput() + wizard.error = nil + + // Reset input mode based on the step we're going back to + switch wizard.step { + case StepSelectContext, StepSelectNamespace, StepSelectResourceType: + wizard.inputMode = InputModeList + case StepEnterResource: + if wizard.selectedResourceType == ResourceTypeService { + wizard.inputMode = InputModeList + } else { + wizard.inputMode = InputModeText + } + case StepEnterRemotePort, StepEnterLocalPort: + wizard.inputMode = InputModeText + case StepConfirmation: + wizard.inputMode = InputModeList + } + } + return m, nil + + case "up", "k": + // In confirmation step, toggle between alias and buttons + if wizard.step == StepConfirmation { + if wizard.confirmationFocus == FocusButtons { + wizard.confirmationFocus = FocusAlias + } + } else { + wizard.moveCursor(-1) + } + + case "down", "j": + // In confirmation step, toggle between alias and buttons + if wizard.step == StepConfirmation { + if wizard.confirmationFocus == FocusAlias { + wizard.confirmationFocus = FocusButtons + wizard.cursor = 0 + } else { + wizard.moveCursor(1) // Navigate between buttons + } + } else { + wizard.moveCursor(1) + } + + case "tab": + // Tab moves between alias field and buttons in confirmation + if wizard.step == StepConfirmation { + if wizard.confirmationFocus == FocusAlias { + wizard.confirmationFocus = FocusButtons + wizard.cursor = 0 + } else { + wizard.confirmationFocus = FocusAlias + } + } + + case "enter": + return m.handleAddWizardEnter() + + case "backspace": + // Allow backspace in text input mode OR when focused on alias in confirmation + canBackspace := wizard.inputMode == InputModeText || + (wizard.step == StepConfirmation && wizard.confirmationFocus == FocusAlias) + if canBackspace && len(wizard.textInput) > 0 { + wizard.textInput = wizard.textInput[:len(wizard.textInput)-1] + } + + default: + // Handle text input + canTypeText := wizard.inputMode == InputModeText || + (wizard.step == StepConfirmation && wizard.confirmationFocus == FocusAlias) + if canTypeText && len(msg.String()) == 1 { + wizard.handleTextInput(rune(msg.String()[0])) + + // Trigger validation for selector + if wizard.step == StepEnterResource && wizard.selectedResourceType == ResourceTypePodSelector { + if len(wizard.textInput) > 0 { + wizard.loading = true + wizard.error = nil + return m, validateSelectorCmd(m.ui.discovery, wizard.selectedContext, wizard.selectedNamespace, wizard.textInput) + } + } + } + } + + return m, nil +} + +// handleAddWizardEnter handles Enter key in the add wizard +func (m model) handleAddWizardEnter() (tea.Model, tea.Cmd) { + wizard := m.ui.addWizard + + switch wizard.step { + case StepSelectContext: + if wizard.cursor >= 0 && wizard.cursor < len(wizard.contexts) { + wizard.selectedContext = wizard.contexts[wizard.cursor] + wizard.step = StepSelectNamespace + wizard.cursor = 0 + wizard.loading = true + return m, loadNamespacesCmd(m.ui.discovery, wizard.selectedContext) + } + + case StepSelectNamespace: + if wizard.cursor >= 0 && wizard.cursor < len(wizard.namespaces) { + wizard.selectedNamespace = wizard.namespaces[wizard.cursor] + wizard.step = StepSelectResourceType + wizard.cursor = 0 + wizard.inputMode = InputModeList + } + + case StepSelectResourceType: + if wizard.cursor >= 0 && wizard.cursor < 3 { + wizard.selectedResourceType = ResourceType(wizard.cursor) + wizard.step = StepEnterResource + wizard.cursor = 0 + + if wizard.selectedResourceType == ResourceTypeService { + wizard.inputMode = InputModeList + wizard.loading = true + return m, loadServicesCmd(m.ui.discovery, wizard.selectedContext, wizard.selectedNamespace) + } else { + wizard.inputMode = InputModeText + wizard.loading = true + return m, loadPodsCmd(m.ui.discovery, wizard.selectedContext, wizard.selectedNamespace) + } + } + + case StepEnterResource: + switch wizard.selectedResourceType { + case ResourceTypePodPrefix: + if wizard.textInput != "" { + wizard.resourceValue = wizard.textInput + wizard.step = StepEnterRemotePort + wizard.clearTextInput() + + // Detect ports from matching pods + wizard.detectedPorts = k8s.GetUniquePorts(wizard.pods) + if len(wizard.detectedPorts) > 0 { + wizard.inputMode = InputModeList + wizard.cursor = 0 + } else { + wizard.inputMode = InputModeText + } + } + + case ResourceTypePodSelector: + if wizard.textInput != "" && len(wizard.matchingPods) > 0 { + wizard.resourceValue = "pod" + wizard.selector = wizard.textInput + wizard.step = StepEnterRemotePort + wizard.clearTextInput() + + // Detect ports from matching pods + wizard.detectedPorts = k8s.GetUniquePorts(wizard.matchingPods) + if len(wizard.detectedPorts) > 0 { + wizard.inputMode = InputModeList + wizard.cursor = 0 + } else { + wizard.inputMode = InputModeText + } + } + + case ResourceTypeService: + if wizard.cursor >= 0 && wizard.cursor < len(wizard.services) { + wizard.resourceValue = wizard.services[wizard.cursor].Name + wizard.step = StepEnterRemotePort + wizard.clearTextInput() + + // Get ports from selected service + wizard.detectedPorts = wizard.services[wizard.cursor].Ports + if len(wizard.detectedPorts) > 0 { + wizard.inputMode = InputModeList + wizard.cursor = 0 + } else { + wizard.inputMode = InputModeText + } + } + } + + case StepEnterRemotePort: + if wizard.inputMode == InputModeList && len(wizard.detectedPorts) > 0 { + // List mode - user selected from detected ports + if wizard.cursor == len(wizard.detectedPorts) { + // Selected "Manual entry" option + wizard.inputMode = InputModeText + wizard.clearTextInput() + } else if wizard.cursor >= 0 && wizard.cursor < len(wizard.detectedPorts) { + // Selected a detected port + wizard.remotePort = int(wizard.detectedPorts[wizard.cursor].Port) + wizard.step = StepEnterLocalPort + wizard.clearTextInput() + wizard.inputMode = InputModeText + wizard.error = nil + } + } else { + // Text mode - manual entry + port, err := strconv.Atoi(wizard.textInput) + if err != nil || port < 1 || port > 65535 { + wizard.error = fmt.Errorf("invalid port number") + } else { + wizard.remotePort = port + wizard.step = StepEnterLocalPort + wizard.clearTextInput() + wizard.error = nil + } + } + + case StepEnterLocalPort: + port, err := strconv.Atoi(wizard.textInput) + if err != nil || port < 1 || port > 65535 { + wizard.error = fmt.Errorf("invalid port number") + } else { + wizard.localPort = port + wizard.step = StepConfirmation + wizard.clearTextInput() + wizard.cursor = 0 + wizard.inputMode = InputModeList + wizard.error = nil + wizard.loading = true + return m, checkPortCmd(port) + } + + case StepConfirmation: + // If focused on alias field, move to buttons + if wizard.confirmationFocus == FocusAlias { + wizard.confirmationFocus = FocusButtons + wizard.cursor = 0 + return m, nil + } + + // Handle button selection + if wizard.cursor == 0 { + // Confirmed - save the forward + wizard.alias = wizard.textInput + + // Build the forward config + fwd := config.Forward{ + Protocol: "tcp", + Port: wizard.remotePort, + LocalPort: wizard.localPort, + Alias: wizard.alias, + } + + if wizard.selectedResourceType == ResourceTypePodPrefix { + fwd.Resource = "pod/" + wizard.resourceValue + } else if wizard.selectedResourceType == ResourceTypePodSelector { + fwd.Resource = wizard.resourceValue + fwd.Selector = wizard.selector + } else if wizard.selectedResourceType == ResourceTypeService { + fwd.Resource = "service/" + wizard.resourceValue + } + + wizard.loading = true + + // If editing, use atomic update operation + if wizard.isEditing { + return m, updateForwardCmd(m.ui.mutator, wizard.originalID, wizard.selectedContext, wizard.selectedNamespace, fwd) + } + + return m, saveForwardCmd(m.ui.mutator, wizard.selectedContext, wizard.selectedNamespace, fwd) + } else { + // Cancelled + m.ui.viewMode = ViewModeMain + m.ui.addWizard = nil + } + + case StepSuccess: + if wizard.cursor == 0 { + // Add another + m.ui.addWizard = newAddWizardState() + m.ui.addWizard.loading = true + return m, loadContextsCmd(m.ui.discovery) + } else { + // Return to main view + m.ui.viewMode = ViewModeMain + m.ui.addWizard = nil + } + } + + return m, nil +} + +// handleRemoveWizardKeys handles keyboard input in the remove wizard +func (m model) handleRemoveWizardKeys(msg tea.KeyMsg) (tea.Model, tea.Cmd) { + m.ui.mu.Lock() + defer m.ui.mu.Unlock() + + wizard := m.ui.removeWizard + if wizard == nil { + return m, nil + } + + switch msg.String() { + case "ctrl+c": + // Hard cancel - always exit + m.ui.viewMode = ViewModeMain + m.ui.removeWizard = nil + return m, tea.ClearScreen + + case "esc": + if wizard.confirming { + // In confirmation mode, Esc confirms the removal (same as pressing Yes) + selectedForwards := wizard.getSelectedForwards() + return m, removeForwardsCmd(m.ui.mutator, selectedForwards) + } else { + // Not confirming yet - cancel entirely + m.ui.viewMode = ViewModeMain + m.ui.removeWizard = nil + } + return m, tea.ClearScreen + + case "up", "k": + wizard.moveCursor(-1) + + case "down", "j": + wizard.moveCursor(1) + + case " ": + if !wizard.confirming { + wizard.toggleSelection() + } + + case "a": + wizard.selectAll() + + case "n": + wizard.selectNone() + + case "enter": + if !wizard.confirming { + if wizard.getSelectedCount() == 0 { + // Nothing selected + return m, nil + } + // Show confirmation + wizard.confirming = true + wizard.confirmCursor = 0 + } else { + // Confirmed + if wizard.confirmCursor == 0 { + // Yes, remove + selectedForwards := wizard.getSelectedForwards() + return m, removeForwardsCmd(m.ui.mutator, selectedForwards) + } else { + // No, cancel + wizard.confirming = false + } + } + } + + return m, nil +} + +// Message handlers + +func (m model) handleContextsLoaded(msg ContextsLoadedMsg) (tea.Model, tea.Cmd) { + m.ui.mu.Lock() + defer m.ui.mu.Unlock() + + if m.ui.addWizard != nil { + m.ui.addWizard.loading = false + m.ui.addWizard.error = msg.err + if msg.err == nil { + // Get current context and move it to the top + currentCtx, err := m.ui.discovery.GetCurrentContext() + if err == nil && currentCtx != "" { + // Reorder contexts with current first + reordered := []string{currentCtx} + for _, ctx := range msg.contexts { + if ctx != currentCtx { + reordered = append(reordered, ctx) + } + } + m.ui.addWizard.contexts = reordered + } else { + m.ui.addWizard.contexts = msg.contexts + } + } + } + + return m, nil +} + +func (m model) handleNamespacesLoaded(msg NamespacesLoadedMsg) (tea.Model, tea.Cmd) { + m.ui.mu.Lock() + defer m.ui.mu.Unlock() + + if m.ui.addWizard != nil { + m.ui.addWizard.loading = false + m.ui.addWizard.error = msg.err + if msg.err == nil { + m.ui.addWizard.namespaces = msg.namespaces + } + } + + return m, nil +} + +func (m model) handlePodsLoaded(msg PodsLoadedMsg) (tea.Model, tea.Cmd) { + m.ui.mu.Lock() + defer m.ui.mu.Unlock() + + if m.ui.addWizard != nil { + m.ui.addWizard.loading = false + m.ui.addWizard.error = msg.err + if msg.err == nil { + m.ui.addWizard.pods = msg.pods + + // If we're at the remote port step (edit mode), detect ports now + if m.ui.addWizard.step == StepEnterRemotePort { + m.ui.addWizard.detectedPorts = k8s.GetUniquePorts(msg.pods) + if len(m.ui.addWizard.detectedPorts) > 0 { + m.ui.addWizard.inputMode = InputModeList + m.ui.addWizard.cursor = 0 + } else { + m.ui.addWizard.inputMode = InputModeText + m.ui.addWizard.textInput = fmt.Sprintf("%d", m.ui.addWizard.remotePort) + } + } + } + } + + return m, nil +} + +func (m model) handleServicesLoaded(msg ServicesLoadedMsg) (tea.Model, tea.Cmd) { + m.ui.mu.Lock() + defer m.ui.mu.Unlock() + + if m.ui.addWizard != nil { + m.ui.addWizard.loading = false + m.ui.addWizard.error = msg.err + if msg.err == nil { + m.ui.addWizard.services = msg.services + + // If we're at the remote port step (edit mode), detect ports now + if m.ui.addWizard.step == StepEnterRemotePort { + // Find the service by name + for _, svc := range msg.services { + if svc.Name == m.ui.addWizard.resourceValue { + m.ui.addWizard.detectedPorts = svc.Ports + if len(m.ui.addWizard.detectedPorts) > 0 { + m.ui.addWizard.inputMode = InputModeList + m.ui.addWizard.cursor = 0 + } else { + m.ui.addWizard.inputMode = InputModeText + m.ui.addWizard.textInput = fmt.Sprintf("%d", m.ui.addWizard.remotePort) + } + break + } + } + } + } + } + + return m, nil +} + +func (m model) handleSelectorValidated(msg SelectorValidatedMsg) (tea.Model, tea.Cmd) { + m.ui.mu.Lock() + defer m.ui.mu.Unlock() + + if m.ui.addWizard != nil { + m.ui.addWizard.loading = false + m.ui.addWizard.error = msg.err + if msg.valid { + m.ui.addWizard.matchingPods = msg.pods + } else { + m.ui.addWizard.matchingPods = nil + } + } + + return m, nil +} + +func (m model) handlePortChecked(msg PortCheckedMsg) (tea.Model, tea.Cmd) { + m.ui.mu.Lock() + defer m.ui.mu.Unlock() + + if m.ui.addWizard != nil { + m.ui.addWizard.loading = false + m.ui.addWizard.portAvailable = msg.available + m.ui.addWizard.portCheckMsg = msg.message + } + + return m, nil +} + +func (m model) handleForwardSaved(msg ForwardSavedMsg) (tea.Model, tea.Cmd) { + m.ui.mu.Lock() + defer m.ui.mu.Unlock() + + if m.ui.addWizard != nil { + m.ui.addWizard.loading = false + if msg.success { + // Move to success step + m.ui.addWizard.step = StepSuccess + m.ui.addWizard.cursor = 0 + m.ui.addWizard.inputMode = InputModeList + } else { + m.ui.addWizard.error = msg.err + } + } + + return m, nil +} + +func (m model) handleForwardsRemoved(msg ForwardsRemovedMsg) (tea.Model, tea.Cmd) { + m.ui.mu.Lock() + defer m.ui.mu.Unlock() + + // Delete now happens directly without wizard + // Just ensure we're back in main view + m.ui.viewMode = ViewModeMain + m.ui.removeWizard = nil + + // If there was an error, it will be logged but we don't show it in UI for now + // The config watcher will either reload (success) or keep old config (failure) + + return m, nil +} diff --git a/internal/ui/wizard_state.go b/internal/ui/wizard_state.go new file mode 100644 index 0000000..3ce1870 --- /dev/null +++ b/internal/ui/wizard_state.go @@ -0,0 +1,302 @@ +package ui + +import ( + "github.com/nvm/kportal/internal/k8s" +) + +// ViewMode represents the current view state of the UI +type ViewMode int + +const ( + ViewModeMain ViewMode = iota + ViewModeAddWizard + ViewModeRemoveWizard +) + +// InputMode represents whether the wizard is in list selection or text input mode +type InputMode int + +const ( + InputModeList InputMode = iota + InputModeText +) + +// AddWizardStep represents the current step in the add wizard flow +type AddWizardStep int + +const ( + StepSelectContext AddWizardStep = iota + StepSelectNamespace + StepSelectResourceType + StepEnterResource + StepEnterRemotePort + StepEnterLocalPort + StepConfirmation + StepSuccess +) + +// ConfirmationFocus represents what the user is focused on in confirmation step +type ConfirmationFocus int + +const ( + FocusAlias ConfirmationFocus = iota + FocusButtons +) + +// ResourceType represents the type of Kubernetes resource to forward to +type ResourceType int + +const ( + ResourceTypePodPrefix ResourceType = iota + ResourceTypePodSelector + ResourceTypeService +) + +// String returns a human-readable name for the resource type +func (r ResourceType) String() string { + switch r { + case ResourceTypePodPrefix: + return "Pod (by name prefix)" + case ResourceTypePodSelector: + return "Pod (by label selector)" + case ResourceTypeService: + return "Service" + default: + return "Unknown" + } +} + +// Description returns a description of the resource type +func (r ResourceType) Description() string { + switch r { + case ResourceTypePodPrefix: + return "Recommended for specific pod instances" + case ResourceTypePodSelector: + return "Flexible, survives pod restarts automatically" + case ResourceTypeService: + return "Most stable, load-balanced" + default: + return "" + } +} + +// AddWizardState maintains the state for the add port forward wizard +type AddWizardState struct { + step AddWizardStep + inputMode InputMode + cursor int + scrollOffset int // For scrolling long lists + textInput string + loading bool + error error + + // Selections made by user + selectedContext string + selectedNamespace string + selectedResourceType ResourceType + resourceValue string // pod prefix or service name + selector string // for pod selector type + remotePort int + localPort int + alias string + + // Available options (loaded asynchronously from k8s) + contexts []string + namespaces []string + pods []k8s.PodInfo + services []k8s.ServiceInfo + + // Validation state + portAvailable bool + portCheckMsg string + matchingPods []k8s.PodInfo + + // Edit mode + isEditing bool + originalID string // ID of the forward being edited + + // Detected ports from resources + detectedPorts []k8s.PortInfo + + // Confirmation focus (alias field vs buttons) + confirmationFocus ConfirmationFocus +} + +// newAddWizardState creates a new add wizard state initialized to the first step +func newAddWizardState() *AddWizardState { + return &AddWizardState{ + step: StepSelectContext, + inputMode: InputModeList, + cursor: 0, + contexts: []string{}, + } +} + +// moveCursor moves the cursor up or down in list selection mode +func (w *AddWizardState) moveCursor(delta int) { + if w.inputMode != InputModeList { + return + } + + var maxItems int + + switch w.step { + case StepSelectContext: + maxItems = len(w.contexts) + case StepSelectNamespace: + maxItems = len(w.namespaces) + case StepSelectResourceType: + maxItems = 3 // Three resource types + case StepEnterResource: + if w.selectedResourceType == ResourceTypeService { + maxItems = len(w.services) + } + case StepEnterRemotePort: + if len(w.detectedPorts) > 0 { + maxItems = len(w.detectedPorts) + 1 // +1 for "Manual entry" option + } + } + + w.cursor += delta + if w.cursor < 0 { + w.cursor = 0 + } + if w.cursor >= maxItems && maxItems > 0 { + w.cursor = maxItems - 1 + } + + // Adjust scroll offset to keep cursor visible + // Viewport shows max 20 items at a time + const viewportHeight = 20 + + // If cursor moved below visible area, scroll down + if w.cursor >= w.scrollOffset+viewportHeight { + w.scrollOffset = w.cursor - viewportHeight + 1 + } + + // If cursor moved above visible area, scroll up + if w.cursor < w.scrollOffset { + w.scrollOffset = w.cursor + } + + // Ensure scroll offset is valid + if w.scrollOffset < 0 { + w.scrollOffset = 0 + } +} + +// handleTextInput handles a single character input in text mode +func (w *AddWizardState) handleTextInput(char rune) { + // Note: Caller already checks if text input is allowed (inputMode or confirmation step) + // so we don't need to check inputMode here + + // Handle backspace + if char == 127 || char == 8 { + if len(w.textInput) > 0 { + w.textInput = w.textInput[:len(w.textInput)-1] + } + return + } + + // Only allow printable characters + if char >= 32 && char < 127 { + w.textInput += string(char) + } +} + +// clearTextInput clears the text input field +func (w *AddWizardState) clearTextInput() { + w.textInput = "" +} + +// RemoveWizardState maintains the state for the remove port forward wizard +type RemoveWizardState struct { + forwards []RemovableForward + cursor int + selected map[int]bool + confirming bool + confirmCursor int // 0 = Yes, 1 = No +} + +// RemovableForward represents a forward that can be removed +type RemovableForward struct { + ID string + Context string + Namespace string + Alias string + Resource string + Selector string + Port int + LocalPort int +} + +// moveCursor moves the cursor up or down +func (w *RemoveWizardState) moveCursor(delta int) { + if w.confirming { + // Move between Yes/No in confirmation + w.confirmCursor += delta + if w.confirmCursor < 0 { + w.confirmCursor = 0 + } + if w.confirmCursor > 1 { + w.confirmCursor = 1 + } + } else { + // Move between forwards + w.cursor += delta + if w.cursor < 0 { + w.cursor = 0 + } + if w.cursor >= len(w.forwards) { + w.cursor = len(w.forwards) - 1 + } + } +} + +// toggleSelection toggles the selection of the current forward +func (w *RemoveWizardState) toggleSelection() { + if w.confirming { + return + } + w.selected[w.cursor] = !w.selected[w.cursor] +} + +// selectAll selects all forwards for removal +func (w *RemoveWizardState) selectAll() { + if w.confirming { + return + } + for i := range w.forwards { + w.selected[i] = true + } +} + +// selectNone deselects all forwards +func (w *RemoveWizardState) selectNone() { + if w.confirming { + return + } + w.selected = make(map[int]bool) +} + +// getSelectedCount returns the number of selected forwards +func (w *RemoveWizardState) getSelectedCount() int { + count := 0 + for _, selected := range w.selected { + if selected { + count++ + } + } + return count +} + +// getSelectedForwards returns a list of selected forwards +func (w *RemoveWizardState) getSelectedForwards() []RemovableForward { + selected := make([]RemovableForward, 0) + for i, fwd := range w.forwards { + if w.selected[i] { + selected = append(selected, fwd) + } + } + return selected +} diff --git a/internal/ui/wizard_styles.go b/internal/ui/wizard_styles.go new file mode 100644 index 0000000..70fed1e --- /dev/null +++ b/internal/ui/wizard_styles.go @@ -0,0 +1,211 @@ +package ui + +import ( + "fmt" + "strings" + + "github.com/charmbracelet/lipgloss" +) + +// Color palette for wizards +var ( + primaryColor = lipgloss.Color("205") // Pink/Magenta + successColor = lipgloss.Color("42") // Green + errorColor = lipgloss.Color("196") // Red + warningColor = lipgloss.Color("220") // Yellow + mutedColor = lipgloss.Color("241") // Gray + accentColor = lipgloss.Color("63") // Purple + highlightColor = lipgloss.Color("117") // Light blue +) + +// Text styles +var ( + wizardHeaderStyle = lipgloss.NewStyle(). + Bold(true). + Foreground(primaryColor). + MarginBottom(0) + + wizardStepStyle = lipgloss.NewStyle(). + Foreground(mutedColor). + Italic(true) + + breadcrumbStyle = lipgloss.NewStyle(). + Foreground(highlightColor). + Bold(true) + + selectedStyle = lipgloss.NewStyle(). + Foreground(primaryColor). + Bold(true) + + successStyle = lipgloss.NewStyle(). + Foreground(successColor). + Bold(true) + + errorStyle = lipgloss.NewStyle(). + Foreground(errorColor). + Bold(true) + + warningStyle = lipgloss.NewStyle(). + Foreground(warningColor). + Bold(true) + + mutedStyle = lipgloss.NewStyle(). + Foreground(mutedColor) + + helpStyle = lipgloss.NewStyle(). + Foreground(mutedColor). + Italic(true) + + spinnerStyle = lipgloss.NewStyle(). + Foreground(accentColor). + Bold(true) +) + +// Input styles +var ( + inputStyle = lipgloss.NewStyle(). + Foreground(lipgloss.Color("252")) + + validInputStyle = lipgloss.NewStyle(). + Foreground(successColor) +) + +// Checkbox styles +var ( + checkedBoxStyle = lipgloss.NewStyle(). + Foreground(successColor). + Bold(true) + + uncheckedBoxStyle = lipgloss.NewStyle(). + Foreground(mutedColor) +) + +// Container styles +var ( + wizardBoxStyle = lipgloss.NewStyle(). + Border(lipgloss.RoundedBorder()). + BorderForeground(accentColor). + Padding(1, 2). + Width(60) +) + +// Helper functions for rendering + +// renderProgress returns a step indicator like "Step 2/7" +func renderProgress(current, total int) string { + return wizardStepStyle.Render(fmt.Sprintf("Step %d/%d", current, total)) +} + +// renderHeader returns a formatted header with title and progress +func renderHeader(title, progress string) string { + header := wizardHeaderStyle.Render(title) + if progress != "" { + header += " " + progress + } + return header + "\n\n" +} + +// renderBreadcrumb returns a formatted breadcrumb path +func renderBreadcrumb(parts ...string) string { + return breadcrumbStyle.Render(strings.Join(parts, " / ")) +} + +// renderList renders a list of items with cursor selection and viewport scrolling +func renderList(items []string, cursor int, prefix string, scrollOffset int) string { + var b strings.Builder + + const viewportHeight = 20 + totalItems := len(items) + + // Show scroll up indicator if there are items above the viewport + if scrollOffset > 0 { + b.WriteString(mutedStyle.Render(" ↑ More above ↑") + "\n") + } + + // Calculate visible range + start := scrollOffset + end := scrollOffset + viewportHeight + if end > totalItems { + end = totalItems + } + + // Render visible items + for i := start; i < end; i++ { + cursorPrefix := prefix + if i == cursor { + cursorPrefix = "ā–ø " + b.WriteString(selectedStyle.Render(cursorPrefix + items[i])) + } else { + b.WriteString(cursorPrefix + items[i]) + } + b.WriteString("\n") + } + + // Show scroll down indicator if there are items below the viewport + if end < totalItems { + b.WriteString(mutedStyle.Render(" ↓ More below ↓") + "\n") + } + + return b.String() +} + +// renderTextInput renders a text input field with a cursor +func renderTextInput(label, value string, valid bool) string { + var b strings.Builder + + b.WriteString(label) + + inputText := value + "ā–ˆ" + if valid { + b.WriteString(validInputStyle.Render(inputText)) + } else { + b.WriteString(inputStyle.Render(inputText)) + } + + return b.String() +} + +// overlayContent overlays modal content centered on the base view +func overlayContent(base, modal string, termWidth, termHeight int) string { + baseLines := strings.Split(base, "\n") + modalLines := strings.Split(modal, "\n") + + // Ensure base has enough lines + for len(baseLines) < termHeight { + baseLines = append(baseLines, "") + } + + modalHeight := len(modalLines) + modalWidth := 0 + for _, line := range modalLines { + w := lipgloss.Width(line) + if w > modalWidth { + modalWidth = w + } + } + + // Calculate center position + startRow := (termHeight - modalHeight) / 2 + if startRow < 0 { + startRow = 0 + } + + // Create result with modal overlaid + result := make([]string, len(baseLines)) + copy(result, baseLines) + + for i, modalLine := range modalLines { + row := startRow + i + if row >= 0 && row < len(result) { + // Center the modal line + padding := (termWidth - lipgloss.Width(modalLine)) / 2 + if padding < 0 { + padding = 0 + } + + result[row] = strings.Repeat(" ", padding) + modalLine + } + } + + return strings.Join(result, "\n") +} diff --git a/internal/ui/wizard_views.go b/internal/ui/wizard_views.go new file mode 100644 index 0000000..bc62d3d --- /dev/null +++ b/internal/ui/wizard_views.go @@ -0,0 +1,602 @@ +package ui + +import ( + "fmt" + "strings" +) + +// renderAddWizard renders the appropriate step of the add wizard +func (m model) renderAddWizard() string { + if m.ui.addWizard == nil { + return "" + } + + wizard := m.ui.addWizard + + var content string + switch wizard.step { + case StepSelectContext: + content = m.renderSelectContext() + case StepSelectNamespace: + content = m.renderSelectNamespace() + case StepSelectResourceType: + content = m.renderSelectResourceType() + case StepEnterResource: + content = m.renderEnterResource() + case StepEnterRemotePort: + content = m.renderEnterRemotePort() + case StepEnterLocalPort: + content = m.renderEnterLocalPort() + case StepConfirmation: + content = m.renderConfirmation() + case StepSuccess: + content = m.renderSuccess() + default: + content = "Unknown step" + } + + return wizardBoxStyle.Render(content) +} + +func (m model) renderSelectContext() string { + wizard := m.ui.addWizard + var b strings.Builder + + b.WriteString(renderHeader("Add Port Forward", renderProgress(1, 7))) + b.WriteString("Select Kubernetes Context:\n\n") + + if wizard.loading { + b.WriteString(spinnerStyle.Render("⣾ Loading contexts...")) + } else if wizard.error != nil { + b.WriteString(errorStyle.Render(fmt.Sprintf("āœ— Error: %v", wizard.error))) + } else if len(wizard.contexts) == 0 { + b.WriteString(mutedStyle.Render("No contexts found in kubeconfig")) + } else { + const viewportHeight = 20 + totalItems := len(wizard.contexts) + + // Show scroll up indicator if there are items above the viewport + if wizard.scrollOffset > 0 { + b.WriteString(mutedStyle.Render(" ↑ More above ↑") + "\n") + } + + // Calculate visible range + start := wizard.scrollOffset + end := wizard.scrollOffset + viewportHeight + if end > totalItems { + end = totalItems + } + + // Render visible contexts with (current) marker on first one + for i := start; i < end; i++ { + prefix := " " + text := wizard.contexts[i] + if i == 0 { + text += mutedStyle.Render(" (current)") + } + + if i == wizard.cursor { + prefix = "ā–ø " + b.WriteString(selectedStyle.Render(prefix + text)) + } else { + b.WriteString(prefix + text) + } + b.WriteString("\n") + } + + // Show scroll down indicator if there are items below the viewport + if end < totalItems { + b.WriteString(mutedStyle.Render(" ↓ More below ↓") + "\n") + } + } + + b.WriteString("\n") + b.WriteString(helpStyle.Render("↑/↓: Navigate Enter: Select Esc/Ctrl+C: Cancel")) + + return b.String() +} + +func (m model) renderSelectNamespace() string { + wizard := m.ui.addWizard + var b strings.Builder + + b.WriteString(renderHeader("Add Port Forward", renderProgress(2, 7))) + b.WriteString(fmt.Sprintf("Context: %s\n\n", breadcrumbStyle.Render(wizard.selectedContext))) + + b.WriteString("Select Namespace:\n\n") + + if wizard.loading { + b.WriteString(spinnerStyle.Render("⣾ Loading namespaces...")) + } else if wizard.error != nil { + b.WriteString(errorStyle.Render(fmt.Sprintf("āœ— Error: %v\n", wizard.error))) + b.WriteString(mutedStyle.Render("\nCluster may be unreachable. Check context.")) + } else if len(wizard.namespaces) == 0 { + b.WriteString(mutedStyle.Render("No namespaces found")) + } else { + b.WriteString(renderList(wizard.namespaces, wizard.cursor, " ", wizard.scrollOffset)) + } + + b.WriteString("\n") + b.WriteString(helpStyle.Render("↑/↓: Navigate Enter: Select Esc: Back Ctrl+C: Cancel")) + + return b.String() +} + +func (m model) renderSelectResourceType() string { + wizard := m.ui.addWizard + var b strings.Builder + + b.WriteString(renderHeader("Add Port Forward", renderProgress(3, 7))) + b.WriteString(renderBreadcrumb(wizard.selectedContext, wizard.selectedNamespace)) + b.WriteString("\n\n") + + b.WriteString("Select Resource Type:\n\n") + + resourceTypes := []ResourceType{ + ResourceTypePodPrefix, + ResourceTypePodSelector, + ResourceTypeService, + } + + for i, rt := range resourceTypes { + prefix := " " + if i == wizard.cursor { + prefix = "ā–ø " + b.WriteString(selectedStyle.Render(prefix + rt.String())) + b.WriteString("\n") + b.WriteString(mutedStyle.Render(" " + rt.Description())) + } else { + b.WriteString(prefix + rt.String()) + } + b.WriteString("\n") + if i < len(resourceTypes)-1 { + b.WriteString("\n") + } + } + + b.WriteString("\n") + b.WriteString(helpStyle.Render("↑/↓: Navigate Enter: Select Esc: Back Ctrl+C: Cancel")) + + return b.String() +} + +func (m model) renderEnterResource() string { + wizard := m.ui.addWizard + var b strings.Builder + + b.WriteString(renderHeader("Add Port Forward", renderProgress(4, 7))) + b.WriteString(renderBreadcrumb(wizard.selectedContext, wizard.selectedNamespace)) + b.WriteString("\n\n") + + switch wizard.selectedResourceType { + case ResourceTypePodPrefix: + b.WriteString("Enter pod name prefix:\n\n") + + // Show running pods for reference + if wizard.loading { + b.WriteString(spinnerStyle.Render("⣾ Loading pods...")) + } else if len(wizard.pods) > 0 { + b.WriteString(mutedStyle.Render("Running pods:\n")) + showCount := 0 + for _, pod := range wizard.pods { + if strings.HasPrefix(pod.Name, wizard.textInput) || wizard.textInput == "" { + if showCount < 5 { // Limit to 5 pods + b.WriteString(mutedStyle.Render(fmt.Sprintf(" • %s\n", pod.Name))) + showCount++ + } + } + } + if showCount == 0 && wizard.textInput != "" { + b.WriteString(mutedStyle.Render(" (no matching pods)\n")) + } else if len(wizard.pods) > showCount { + b.WriteString(mutedStyle.Render(fmt.Sprintf(" ... and %d more\n", len(wizard.pods)-showCount))) + } + b.WriteString("\n") + } + + // Text input + b.WriteString(renderTextInput("Prefix: ", wizard.textInput, true)) + b.WriteString("\n\n") + + // Show match count + if wizard.textInput != "" { + matchCount := 0 + for _, pod := range wizard.pods { + if strings.HasPrefix(pod.Name, wizard.textInput) { + matchCount++ + } + } + + if matchCount > 0 { + b.WriteString(successStyle.Render(fmt.Sprintf("āœ“ Matches %d pod(s)", matchCount))) + } else { + b.WriteString(warningStyle.Render("⚠ No matching pods (you can still proceed)")) + } + } + + case ResourceTypePodSelector: + b.WriteString("Enter label selector:\n") + b.WriteString(mutedStyle.Render("Format: key=value,key2=value2\n\n")) + + b.WriteString(renderTextInput("Selector: ", wizard.textInput, true)) + b.WriteString("\n\n") + + if wizard.loading { + b.WriteString(spinnerStyle.Render("⣾ Validating selector...")) + } else if len(wizard.matchingPods) > 0 { + b.WriteString(successStyle.Render(fmt.Sprintf("āœ“ Found %d matching pod(s):\n", len(wizard.matchingPods)))) + showCount := 0 + for _, pod := range wizard.matchingPods { + if showCount < 3 { + b.WriteString(mutedStyle.Render(fmt.Sprintf(" • %s\n", pod.Name))) + showCount++ + } + } + if len(wizard.matchingPods) > 3 { + b.WriteString(mutedStyle.Render(fmt.Sprintf(" ... and %d more\n", len(wizard.matchingPods)-3))) + } + } else if wizard.error != nil { + b.WriteString(errorStyle.Render(fmt.Sprintf("āœ— Invalid selector: %v", wizard.error))) + } + + case ResourceTypeService: + b.WriteString("Select service:\n\n") + + if wizard.loading { + b.WriteString(spinnerStyle.Render("⣾ Loading services...")) + } else if len(wizard.services) == 0 { + b.WriteString(mutedStyle.Render("No services found")) + } else { + serviceNames := make([]string, len(wizard.services)) + for i, svc := range wizard.services { + serviceNames[i] = svc.Name + } + b.WriteString(renderList(serviceNames, wizard.cursor, " ", wizard.scrollOffset)) + } + } + + b.WriteString("\n") + b.WriteString(helpStyle.Render("Enter: Continue Esc: Back Ctrl+C: Cancel")) + + return b.String() +} + +func (m model) renderEnterRemotePort() string { + wizard := m.ui.addWizard + var b strings.Builder + + b.WriteString(renderHeader("Add Port Forward", renderProgress(5, 7))) + b.WriteString(renderBreadcrumb(wizard.selectedContext, wizard.selectedNamespace)) + b.WriteString("\n") + + // Show resource selection + resourceInfo := wizard.resourceValue + if wizard.selector != "" { + resourceInfo = fmt.Sprintf("%s [%s]", wizard.resourceValue, wizard.selector) + } + b.WriteString(mutedStyle.Render(fmt.Sprintf("Resource: %s\n\n", resourceInfo))) + + // If we have detected ports and in list mode, show them as a list + if len(wizard.detectedPorts) > 0 && wizard.inputMode == InputModeList { + b.WriteString("Select remote port:\n\n") + + const viewportHeight = 20 + totalItems := len(wizard.detectedPorts) + 1 // +1 for manual entry option + + // Show scroll up indicator if there are items above the viewport + if wizard.scrollOffset > 0 { + b.WriteString(mutedStyle.Render(" ↑ More above ↑") + "\n") + } + + // Calculate visible range + start := wizard.scrollOffset + end := wizard.scrollOffset + viewportHeight + if end > totalItems { + end = totalItems + } + + // Render detected ports within viewport + for i := start; i < end && i < len(wizard.detectedPorts); i++ { + port := wizard.detectedPorts[i] + portDesc := fmt.Sprintf("%d", port.Port) + if port.Name != "" { + portDesc += fmt.Sprintf(" (%s)", port.Name) + } + + prefix := " " + if i == wizard.cursor { + prefix = "ā–ø " + b.WriteString(selectedStyle.Render(prefix + portDesc)) + } else { + b.WriteString(prefix + portDesc) + } + b.WriteString("\n") + } + + // Add "Manual entry" option if within viewport + manualIdx := len(wizard.detectedPorts) + if manualIdx >= start && manualIdx < end { + manualOption := "Manual entry (type port number)" + prefix := " " + if wizard.cursor == manualIdx { + prefix = "ā–ø " + b.WriteString(selectedStyle.Render(prefix + manualOption)) + } else { + b.WriteString(mutedStyle.Render(prefix + manualOption)) + } + b.WriteString("\n") + } + + // Show scroll down indicator if there are items below the viewport + if end < totalItems { + b.WriteString(mutedStyle.Render(" ↓ More below ↓") + "\n") + } + + b.WriteString("\n") + b.WriteString(helpStyle.Render("↑/↓: Navigate Enter: Select Esc: Back Ctrl+C: Cancel")) + } else { + // Text input mode (no detected ports or user chose manual entry) + if len(wizard.detectedPorts) > 0 { + b.WriteString(mutedStyle.Render("Detected ports:\n")) + for _, port := range wizard.detectedPorts { + portDesc := fmt.Sprintf("%d", port.Port) + if port.Name != "" { + portDesc += fmt.Sprintf(" (%s)", port.Name) + } + b.WriteString(mutedStyle.Render(fmt.Sprintf(" • %s\n", portDesc))) + } + b.WriteString("\n") + } + + b.WriteString(renderTextInput("Remote port: ", wizard.textInput, wizard.error == nil)) + b.WriteString("\n\n") + + if wizard.error != nil { + b.WriteString(errorStyle.Render(fmt.Sprintf("āœ— %v", wizard.error))) + } else if wizard.textInput != "" { + b.WriteString(mutedStyle.Render("Press Enter to continue")) + } + + b.WriteString("\n") + b.WriteString(helpStyle.Render("Enter: Continue Esc: Back Ctrl+C: Cancel")) + } + + return b.String() +} + +func (m model) renderEnterLocalPort() string { + wizard := m.ui.addWizard + var b strings.Builder + + b.WriteString(renderHeader("Add Port Forward", renderProgress(6, 7))) + b.WriteString(renderBreadcrumb(wizard.selectedContext, wizard.selectedNamespace)) + b.WriteString("\n") + + resourceInfo := wizard.resourceValue + if wizard.selector != "" { + resourceInfo = fmt.Sprintf("%s [%s]", wizard.resourceValue, wizard.selector) + } + b.WriteString(mutedStyle.Render(fmt.Sprintf("Resource: %s\n", resourceInfo))) + b.WriteString(mutedStyle.Render(fmt.Sprintf("Remote port: %d\n\n", wizard.remotePort))) + + b.WriteString(renderTextInput("Local port: ", wizard.textInput, wizard.error == nil)) + b.WriteString("\n\n") + + if wizard.loading { + b.WriteString(spinnerStyle.Render("⣾ Checking availability...")) + } else if wizard.error != nil { + b.WriteString(errorStyle.Render(fmt.Sprintf("āœ— %v", wizard.error))) + } else if wizard.portCheckMsg != "" { + if wizard.portAvailable { + b.WriteString(successStyle.Render(wizard.portCheckMsg)) + } else { + b.WriteString(errorStyle.Render(wizard.portCheckMsg)) + } + } else if wizard.textInput != "" && wizard.localPort > 0 { + b.WriteString(mutedStyle.Render("Press Enter to check availability")) + } + + b.WriteString("\n") + b.WriteString(helpStyle.Render("Enter: Continue Esc: Back Ctrl+C: Cancel")) + + return b.String() +} + +func (m model) renderConfirmation() string { + wizard := m.ui.addWizard + var b strings.Builder + + b.WriteString(renderHeader("Add Port Forward", renderProgress(7, 7))) + b.WriteString("\n") + + b.WriteString("Review Configuration:\n\n") + + resourceInfo := wizard.resourceValue + if wizard.selector != "" { + resourceInfo = fmt.Sprintf("pod (selector: %s)", wizard.selector) + } else if wizard.selectedResourceType == ResourceTypePodPrefix { + resourceInfo = fmt.Sprintf("pod/%s", wizard.resourceValue) + } else if wizard.selectedResourceType == ResourceTypeService { + resourceInfo = fmt.Sprintf("service/%s", wizard.resourceValue) + } + + b.WriteString(fmt.Sprintf(" Context: %s\n", wizard.selectedContext)) + b.WriteString(fmt.Sprintf(" Namespace: %s\n", wizard.selectedNamespace)) + b.WriteString(fmt.Sprintf(" Resource: %s\n", resourceInfo)) + b.WriteString(fmt.Sprintf(" Remote Port: %d\n", wizard.remotePort)) + b.WriteString(fmt.Sprintf(" Local Port: %d\n", wizard.localPort)) + b.WriteString(" Protocol: tcp\n") + + b.WriteString("\n") + + // Show alias field with focus indicator + if wizard.confirmationFocus == FocusAlias { + b.WriteString(selectedStyle.Render("ā–ø Optional alias (friendly name):") + "\n") + b.WriteString(" Alias: " + validInputStyle.Render(wizard.textInput+"ā–ˆ") + "\n") + } else { + b.WriteString(mutedStyle.Render(" Optional alias (friendly name):") + "\n") + b.WriteString(mutedStyle.Render(" Alias: "+wizard.textInput) + "\n") + } + + b.WriteString("\n") + + // Show buttons with focus indicator + if wizard.confirmationFocus == FocusButtons { + if wizard.cursor == 0 { + b.WriteString(selectedStyle.Render("ā–ø Add to .kportal.yaml") + "\n") + b.WriteString(" Cancel\n") + } else { + b.WriteString(" Add to .kportal.yaml\n") + b.WriteString(selectedStyle.Render("ā–ø Cancel") + "\n") + } + } else { + b.WriteString(mutedStyle.Render(" Add to .kportal.yaml") + "\n") + b.WriteString(mutedStyle.Render(" Cancel") + "\n") + } + + b.WriteString("\n") + b.WriteString(helpStyle.Render("↑/↓/Tab: Navigate Enter: Confirm Esc: Back")) + + return b.String() +} + +func (m model) renderSuccess() string { + wizard := m.ui.addWizard + var b strings.Builder + + b.WriteString(successStyle.Render("Success! āœ“")) + b.WriteString("\n\n") + + if wizard.error != nil { + b.WriteString(errorStyle.Render(fmt.Sprintf("Error: %v", wizard.error))) + } else { + b.WriteString("Added to .kportal.yaml\n\n") + + forwardDesc := fmt.Sprintf("localhost:%d → %s:%d", + wizard.localPort, + wizard.resourceValue, + wizard.remotePort) + + if wizard.alias != "" { + forwardDesc = fmt.Sprintf("%s (%s)", wizard.alias, forwardDesc) + } + + b.WriteString(successStyle.Render(forwardDesc)) + b.WriteString("\n\n") + b.WriteString(mutedStyle.Render("The port forward will be active shortly.")) + } + + b.WriteString("\n\n") + b.WriteString("Would you like to:\n") + + if wizard.cursor == 0 { + b.WriteString(selectedStyle.Render("ā–ø Add another port forward") + "\n") + b.WriteString(" Return to main view\n") + } else { + b.WriteString(" Add another port forward\n") + b.WriteString(selectedStyle.Render("ā–ø Return to main view") + "\n") + } + + b.WriteString("\n") + b.WriteString(helpStyle.Render("↑/↓: Navigate Enter: Select")) + + return b.String() +} + +// renderRemoveWizard renders the remove wizard +func (m model) renderRemoveWizard() string { + if m.ui.removeWizard == nil { + return "" + } + + wizard := m.ui.removeWizard + + var content string + if wizard.confirming { + content = m.renderRemoveConfirmation() + } else { + content = m.renderRemoveSelection() + } + + return wizardBoxStyle.Render(content) +} + +func (m model) renderRemoveSelection() string { + wizard := m.ui.removeWizard + var b strings.Builder + + b.WriteString(renderHeader("Remove Port Forwards", "")) + b.WriteString("\n") + + b.WriteString("Select forwards to remove (Space to toggle):\n\n") + + for i, fwd := range wizard.forwards { + isSelected := i == wizard.cursor + isChecked := wizard.selected[i] + + line1 := fmt.Sprintf("%s:%d→%d", fwd.Alias, fwd.Port, fwd.LocalPort) + line2 := fmt.Sprintf(" %s/%s/%s", fwd.Context, fwd.Namespace, fwd.Resource) + + checkbox := "[ ] " + if isChecked { + checkbox = "[āœ“] " + } + + fullLine := checkbox + line1 + if isSelected { + b.WriteString(selectedStyle.Render(fullLine)) + } else { + if isChecked { + b.WriteString(checkedBoxStyle.Render(checkbox) + line1) + } else { + b.WriteString(uncheckedBoxStyle.Render(checkbox) + line1) + } + } + + b.WriteString("\n") + b.WriteString(mutedStyle.Render(line2)) + b.WriteString("\n\n") + } + + selectedCount := wizard.getSelectedCount() + b.WriteString(fmt.Sprintf("%d of %d selected\n\n", selectedCount, len(wizard.forwards))) + + b.WriteString(helpStyle.Render("Space: Toggle a: All n: None Enter: Remove Esc: Cancel")) + + return b.String() +} + +func (m model) renderRemoveConfirmation() string { + wizard := m.ui.removeWizard + var b strings.Builder + + b.WriteString(renderHeader("Confirm Removal", "")) + b.WriteString("\n") + + selectedCount := wizard.getSelectedCount() + b.WriteString(fmt.Sprintf("Remove %d port forward(s)?\n\n", selectedCount)) + + selectedForwards := wizard.getSelectedForwards() + for _, fwd := range selectedForwards { + b.WriteString(errorStyle.Render(fmt.Sprintf(" • %s:%d→%d\n", fwd.Alias, fwd.Port, fwd.LocalPort))) + b.WriteString(mutedStyle.Render(fmt.Sprintf(" %s/%s/%s\n", fwd.Context, fwd.Namespace, fwd.Resource))) + } + + b.WriteString("\n") + b.WriteString(warningStyle.Render("This action cannot be undone.")) + b.WriteString("\n\n") + + // Yes/No buttons + if wizard.confirmCursor == 0 { + b.WriteString(selectedStyle.Render("ā–ø Yes, remove them") + "\n") + b.WriteString(" Cancel\n") + } else { + b.WriteString(" Yes, remove them\n") + b.WriteString(selectedStyle.Render("ā–ø Cancel") + "\n") + } + + b.WriteString("\n") + b.WriteString(helpStyle.Render("↑/↓: Navigate Enter: Confirm Esc: Cancel")) + + return b.String() +}