summaryrefslogtreecommitdiff
path: root/internal/cli
diff options
context:
space:
mode:
Diffstat (limited to 'internal/cli')
-rw-r--r--internal/cli/cli.go31
-rw-r--r--internal/cli/profile_test.go12
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)
}
}