diff options
Diffstat (limited to 'internal/cli')
| -rw-r--r-- | internal/cli/cli.go | 31 | ||||
| -rw-r--r-- | internal/cli/profile_test.go | 12 |
2 files changed, 29 insertions, 14 deletions
diff --git a/internal/cli/cli.go b/internal/cli/cli.go index 0876d08..11914b1 100644 --- a/internal/cli/cli.go +++ b/internal/cli/cli.go @@ -178,7 +178,15 @@ func (a *App) ExecuteCommand(cfg *config.Config) error { } // Start the WireGuard userspace device & routing table setup - tunnel, err := wireguard.StartTunnel(wgCfg) + dnsServer := cfg.DNSServer + if dnsServer == "" { + dnsServer = wgCfg.DNS + } + if dnsServer == "" { + dnsServer = "1.1.1.1" // Fallback to safe public DNS to prevent leaks + } + + tunnel, err := wireguard.StartTunnel(wgCfg, dnsServer) if err != nil { return fmt.Errorf("failed to start WireGuard tunnel: %w", err) } @@ -256,15 +264,23 @@ func (a *App) handleProfileConfigure(name string) error { return fmt.Errorf("profile '%s' not found", name) } - cfg, err := wgconf.Parse(profilePath) - if err != nil { - return fmt.Errorf("failed to parse profile %s: %w", name, err) + editor := os.Getenv("EDITOR") + if editor == "" { + editor = "vi" // Sensible fallback } - fmt.Printf("Editing profile %s...\n", name) - fmt.Println("DNS server (current: '" + cfg.DNS + "'):") + fmt.Printf("Opening profile %s in default editor (%s)...\n", name, editor) + + cmd := exec.Command(editor, profilePath) + cmd.Stdin = os.Stdin + cmd.Stdout = os.Stdout + cmd.Stderr = os.Stderr + + if err := cmd.Run(); err != nil { + return fmt.Errorf("editor failed: %w", err) + } - return fmt.Errorf("interactive configuration not supported in this environment, use a config file") + return nil } func (a *App) handleProfileList() error { @@ -354,6 +370,7 @@ func (a *App) showConfig() error { fmt.Printf("Configuration:\n") fmt.Printf(" Profile: %s\n", cfg.Profile) fmt.Printf(" DNS Server: %s\n", cfg.DNSServer) + fmt.Printf(" Config Dir: %s\n", pm.ConfigDir()) fmt.Printf(" Runtime Base: %s\n", pm.RuntimeBaseDir()) fmt.Printf(" Profile Path: %s\n", profilePath) fmt.Printf(" PIDs Path: %s\n", pidsPath) diff --git a/internal/cli/profile_test.go b/internal/cli/profile_test.go index d256cb0..17a5bc6 100644 --- a/internal/cli/profile_test.go +++ b/internal/cli/profile_test.go @@ -96,10 +96,6 @@ func TestProfileDeleteNotFound(t *testing.T) { } func TestProfileConfigure(t *testing.T) { - // profile configure is intended to modify existing configs. - // For now, we just want to ensure it doesn't crash and we can - // eventually implement it. - tmpDir := t.TempDir() profilesDir := filepath.Join(tmpDir, "profiles") err := os.MkdirAll(profilesDir, 0755) @@ -117,9 +113,11 @@ func TestProfileConfigure(t *testing.T) { app := NewApp([]string{"wg-wrap", "profile", "configure", profileName}) app.ConfigDir = profilesDir + // Use "true" as the mock editor to ensure it exits successfully immediately + t.Setenv("EDITOR", "true") + err = app.Route() - // This will currently return "not yet implemented" error, which is expected for now. - if err == nil { - t.Errorf("expected 'not yet implemented' error, got nil") + if err != nil { + t.Errorf("expected successful configuration, got error: %v", err) } } |
