Skip to content

Commit ef727d1

Browse files
blink-so[bot]f0ssel
andcommitted
style: refactor inline error handling to standard Go pattern
Refactored all occurrences of 'if err := func(); err != nil' to use the standard Go pattern of separate assignment and error checking: err := func() if err != nil { // handle error } This improves code readability and follows Go best practices. Files updated: - network/linux.go: 22 inline error handlers refactored - network/macos.go: 8 inline error handlers refactored - proxy/proxy.go: 2 inline error handlers refactored - tls/tls.go: 3 inline error handlers refactored - cli/cli.go: 7 inline error handlers refactored All tests pass and build succeeds after refactoring. Co-authored-by: f0ssel <[email protected]>
1 parent e4bff6a commit ef727d1

File tree

5 files changed

+87
-45
lines changed

5 files changed

+87
-45
lines changed

cli/cli.go

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,8 @@ func Run(config Config, args []string) error {
166166

167167
// Write CA certificate to a temporary file for tools that need a file path
168168
caCertPath := filepath.Join(configDir, "ca-cert.pem")
169-
if err := os.WriteFile(caCertPath, caCertPEM, 0644); err != nil {
169+
err = os.WriteFile(caCertPath, caCertPEM, 0644)
170+
if err != nil {
170171
logger.Error("Failed to write CA certificate file", "error", err)
171172
return fmt.Errorf("failed to write CA certificate file: %v", err)
172173
}
@@ -205,7 +206,8 @@ func Run(config Config, args []string) error {
205206
go func() {
206207
sig := <-sigChan
207208
logger.Info("Received signal during setup, cleaning up...", "signal", sig)
208-
if err := networkInstance.Cleanup(); err != nil {
209+
err := networkInstance.Cleanup()
210+
if err != nil {
209211
logger.Error("Emergency cleanup failed", "error", err)
210212
}
211213
os.Exit(1)
@@ -214,15 +216,17 @@ func Run(config Config, args []string) error {
214216
// Ensure cleanup happens no matter what
215217
defer func() {
216218
logger.Debug("Starting cleanup process")
217-
if err := networkInstance.Cleanup(); err != nil {
219+
err := networkInstance.Cleanup()
220+
if err != nil {
218221
logger.Error("Failed to cleanup network jail", "error", err)
219222
} else {
220223
logger.Debug("Cleanup completed successfully")
221224
}
222225
}()
223226

224227
// Setup network jail
225-
if err := networkInstance.Setup(networkConfig.HTTPPort, networkConfig.HTTPSPort); err != nil {
228+
err = networkInstance.Setup(networkConfig.HTTPPort, networkConfig.HTTPSPort)
229+
if err != nil {
226230
logger.Error("Failed to setup network jail", "error", err)
227231
return fmt.Errorf("failed to setup network jail: %v", err)
228232
}
@@ -248,7 +252,8 @@ func Run(config Config, args []string) error {
248252

249253
// Start proxy server in background
250254
go func() {
251-
if err := proxyServer.Start(ctx); err != nil {
255+
err := proxyServer.Start(ctx)
256+
if err != nil {
252257
logger.Error("Proxy server error", "error", err)
253258
}
254259
}()
@@ -259,7 +264,8 @@ func Run(config Config, args []string) error {
259264
// Execute command in network jail
260265
go func() {
261266
defer cancel()
262-
if err := networkInstance.Execute(args, extraEnv); err != nil {
267+
err := networkInstance.Execute(args, extraEnv)
268+
if err != nil {
263269
logger.Error("Command execution failed", "error", err)
264270
}
265271
}()
@@ -274,7 +280,8 @@ func Run(config Config, args []string) error {
274280
}
275281

276282
// Stop proxy server
277-
if err := proxyServer.Stop(); err != nil {
283+
err = proxyServer.Stop()
284+
if err != nil {
278285
logger.Error("Failed to stop proxy server", "error", err)
279286
}
280287

network/linux.go

Lines changed: 45 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -45,28 +45,32 @@ func (l *LinuxJail) Setup(httpPort, httpsPort int) error {
4545
// Setup DNS configuration BEFORE creating namespace
4646
// This ensures the namespace-specific resolv.conf is available when namespace is created
4747
l.logger.Debug("Setting up DNS configuration")
48-
if err := l.setupDNS(); err != nil {
48+
err := l.setupDNS()
49+
if err != nil {
4950
return fmt.Errorf("failed to setup DNS: %v", err)
5051
}
5152
l.logger.Debug("DNS setup completed")
5253

5354
// Create network namespace
5455
l.logger.Debug("Creating network namespace", "namespace", l.namespace)
55-
if err := l.createNamespace(); err != nil {
56+
err = l.createNamespace()
57+
if err != nil {
5658
return fmt.Errorf("failed to create namespace: %v", err)
5759
}
5860
l.logger.Debug("Network namespace created")
5961

6062
// Setup network interface in namespace
6163
l.logger.Debug("Setting up networking")
62-
if err := l.setupNetworking(); err != nil {
64+
err = l.setupNetworking()
65+
if err != nil {
6366
return fmt.Errorf("failed to setup networking: %v", err)
6467
}
6568
l.logger.Debug("Networking setup completed")
6669

6770
// Setup iptables rules
6871
l.logger.Debug("Setting up iptables rules")
69-
if err := l.setupIptables(); err != nil {
72+
err = l.setupIptables()
73+
if err != nil {
7074
return fmt.Errorf("failed to setup iptables: %v", err)
7175
}
7276
l.logger.Debug("Iptables setup completed")
@@ -175,21 +179,24 @@ func (l *LinuxJail) Cleanup() error {
175179
}
176180

177181
// Remove iptables rules
178-
if err := l.removeIptables(); err != nil {
182+
err := l.removeIptables()
183+
if err != nil {
179184
return fmt.Errorf("failed to remove iptables rules: %v", err)
180185
}
181186

182187
// Clean up namespace-specific DNS config directory
183188
netnsEtc := fmt.Sprintf("/etc/netns/%s", l.namespace)
184189
if _, err := os.Stat(netnsEtc); err == nil {
185-
if err := os.RemoveAll(netnsEtc); err != nil {
190+
err := os.RemoveAll(netnsEtc)
191+
if err != nil {
186192
// Don't fail cleanup for this, just log
187193
fmt.Printf("Warning: failed to remove DNS config directory %s: %v\n", netnsEtc, err)
188194
}
189195
}
190196

191197
// Remove network namespace
192-
if err := l.removeNamespace(); err != nil {
198+
err = l.removeNamespace()
199+
if err != nil {
193200
return fmt.Errorf("failed to remove namespace: %v", err)
194201
}
195202

@@ -199,7 +206,8 @@ func (l *LinuxJail) Cleanup() error {
199206
// createNamespace creates a new network namespace
200207
func (l *LinuxJail) createNamespace() error {
201208
cmd := exec.Command("ip", "netns", "add", l.namespace)
202-
if err := cmd.Run(); err != nil {
209+
err := cmd.Run()
210+
if err != nil {
203211
return fmt.Errorf("failed to create namespace: %v", err)
204212
}
205213
return nil
@@ -214,46 +222,54 @@ func (l *LinuxJail) setupNetworking() error {
214222
vethNetJail := fmt.Sprintf("veth_n_%s", uniqueID) // veth_n_1234567 = 14 chars
215223

216224
cmd := exec.Command("ip", "link", "add", vethHost, "type", "veth", "peer", "name", vethNetJail)
217-
if err := cmd.Run(); err != nil {
225+
err := cmd.Run()
226+
if err != nil {
218227
return fmt.Errorf("failed to create veth pair: %v", err)
219228
}
220229

221230
// Move netjail end to namespace
222231
cmd = exec.Command("ip", "link", "set", vethNetJail, "netns", l.namespace)
223-
if err := cmd.Run(); err != nil {
232+
err = cmd.Run()
233+
if err != nil {
224234
return fmt.Errorf("failed to move veth to namespace: %v", err)
225235
}
226236

227237
// Configure host side of veth pair
228238
cmd = exec.Command("ip", "addr", "add", "192.168.100.1/24", "dev", vethHost)
229-
if err := cmd.Run(); err != nil {
239+
err = cmd.Run()
240+
if err != nil {
230241
return fmt.Errorf("failed to configure host veth: %v", err)
231242
}
232243

233244
cmd = exec.Command("ip", "link", "set", vethHost, "up")
234-
if err := cmd.Run(); err != nil {
245+
err = cmd.Run()
246+
if err != nil {
235247
return fmt.Errorf("failed to bring up host veth: %v", err)
236248
}
237249

238250
// Configure namespace side of veth pair
239251
cmd = exec.Command("ip", "netns", "exec", l.namespace, "ip", "addr", "add", "192.168.100.2/24", "dev", vethNetJail)
240-
if err := cmd.Run(); err != nil {
252+
err = cmd.Run()
253+
if err != nil {
241254
return fmt.Errorf("failed to configure namespace veth: %v", err)
242255
}
243256

244257
cmd = exec.Command("ip", "netns", "exec", l.namespace, "ip", "link", "set", vethNetJail, "up")
245-
if err := cmd.Run(); err != nil {
258+
err = cmd.Run()
259+
if err != nil {
246260
return fmt.Errorf("failed to bring up namespace veth: %v", err)
247261
}
248262

249263
cmd = exec.Command("ip", "netns", "exec", l.namespace, "ip", "link", "set", "lo", "up")
250-
if err := cmd.Run(); err != nil {
264+
err = cmd.Run()
265+
if err != nil {
251266
return fmt.Errorf("failed to bring up loopback: %v", err)
252267
}
253268

254269
// Set default route in namespace
255270
cmd = exec.Command("ip", "netns", "exec", l.namespace, "ip", "route", "add", "default", "via", "192.168.100.1")
256-
if err := cmd.Run(); err != nil {
271+
err = cmd.Run()
272+
if err != nil {
257273
return fmt.Errorf("failed to set default route: %v", err)
258274
}
259275

@@ -267,7 +283,8 @@ func (l *LinuxJail) setupDNS() error {
267283
// Always create namespace-specific resolv.conf with reliable public DNS servers
268284
// This avoids issues with systemd-resolved, Docker DNS, and other complex setups
269285
netnsEtc := fmt.Sprintf("/etc/netns/%s", l.namespace)
270-
if err := os.MkdirAll(netnsEtc, 0755); err != nil {
286+
err := os.MkdirAll(netnsEtc, 0755)
287+
if err != nil {
271288
return fmt.Errorf("failed to create /etc/netns directory: %v", err)
272289
}
273290

@@ -280,7 +297,8 @@ nameserver 1.1.1.1
280297
nameserver 9.9.9.9
281298
options timeout:2 attempts:2
282299
`
283-
if err := os.WriteFile(resolvConfPath, []byte(dnsConfig), 0644); err != nil {
300+
err = os.WriteFile(resolvConfPath, []byte(dnsConfig), 0644)
301+
if err != nil {
284302
return fmt.Errorf("failed to write namespace-specific resolv.conf: %v", err)
285303
}
286304

@@ -296,21 +314,24 @@ func (l *LinuxJail) setupIptables() error {
296314

297315
// NAT rules for outgoing traffic
298316
cmd = exec.Command("iptables", "-t", "nat", "-A", "POSTROUTING", "-s", "192.168.100.0/24", "-j", "MASQUERADE")
299-
if err := cmd.Run(); err != nil {
317+
err := cmd.Run()
318+
if err != nil {
300319
return fmt.Errorf("failed to add NAT rule: %v", err)
301320
}
302321

303322
// Redirect HTTP traffic to proxy
304323
cmd = exec.Command("ip", "netns", "exec", l.namespace, "iptables", "-t", "nat", "-A", "OUTPUT",
305324
"-p", "tcp", "--dport", "80", "-j", "DNAT", "--to-destination", fmt.Sprintf("192.168.100.1:%d", l.config.HTTPPort))
306-
if err := cmd.Run(); err != nil {
325+
err = cmd.Run()
326+
if err != nil {
307327
return fmt.Errorf("failed to add HTTP redirect rule: %v", err)
308328
}
309329

310330
// Redirect HTTPS traffic to proxy
311331
cmd = exec.Command("ip", "netns", "exec", l.namespace, "iptables", "-t", "nat", "-A", "OUTPUT",
312332
"-p", "tcp", "--dport", "443", "-j", "DNAT", "--to-destination", fmt.Sprintf("192.168.100.1:%d", l.config.HTTPSPort))
313-
if err := cmd.Run(); err != nil {
333+
err = cmd.Run()
334+
if err != nil {
314335
return fmt.Errorf("failed to add HTTPS redirect rule: %v", err)
315336
}
316337

@@ -329,8 +350,9 @@ func (l *LinuxJail) removeIptables() error {
329350
// removeNamespace removes the network namespace
330351
func (l *LinuxJail) removeNamespace() error {
331352
cmd := exec.Command("ip", "netns", "del", l.namespace)
332-
if err := cmd.Run(); err != nil {
353+
err := cmd.Run()
354+
if err != nil {
333355
return fmt.Errorf("failed to remove namespace: %v", err)
334356
}
335357
return nil
336-
}
358+
}

network/macos.go

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -40,22 +40,24 @@ func newMacOSJail(config JailConfig, logger *slog.Logger) (*MacOSNetJail, error)
4040
}, nil
4141
}
4242

43-
// Setup configures PF rules and creates the network jail group
43+
// Setup creates the network jail group and configures PF rules
4444
func (m *MacOSNetJail) Setup(httpPort, httpsPort int) error {
4545
m.logger.Debug("Setup called", "httpPort", httpPort, "httpsPort", httpsPort)
4646
m.config.HTTPPort = httpPort
4747
m.config.HTTPSPort = httpsPort
4848

4949
// Create or get network jail group
5050
m.logger.Debug("Creating or ensuring network jail group")
51-
if err := m.ensureGroup(); err != nil {
51+
err := m.ensureGroup()
52+
if err != nil {
5253
return fmt.Errorf("failed to ensure group: %v", err)
5354
}
5455
m.logger.Debug("Network jail group ready", "groupID", m.groupID)
5556

5657
// Setup PF rules
5758
m.logger.Debug("Setting up PF rules")
58-
if err := m.setupPFRules(); err != nil {
59+
err = m.setupPFRules()
60+
if err != nil {
5961
return fmt.Errorf("failed to setup PF rules: %v", err)
6062
}
6163
m.logger.Debug("PF rules setup completed")
@@ -165,7 +167,8 @@ func (m *MacOSNetJail) Cleanup() error {
165167

166168
// Remove PF rules
167169
m.logger.Debug("Removing PF rules")
168-
if err := m.removePFRules(); err != nil {
170+
err := m.removePFRules()
171+
if err != nil {
169172
return fmt.Errorf("failed to remove PF rules: %v", err)
170173
}
171174

@@ -201,7 +204,8 @@ func (m *MacOSNetJail) ensureGroup() error {
201204

202205
// Group doesn't exist, create it
203206
cmd := exec.Command("dseditgroup", "-o", "create", GROUP_NAME)
204-
if err := cmd.Run(); err != nil {
207+
err = cmd.Run()
208+
if err != nil {
205209
return fmt.Errorf("failed to create group: %v", err)
206210
}
207211

@@ -299,13 +303,15 @@ func (m *MacOSNetJail) setupPFRules() error {
299303
}
300304

301305
// Write rules to temp file
302-
if err := os.WriteFile(m.pfRulesPath, []byte(rules), 0644); err != nil {
306+
err = os.WriteFile(m.pfRulesPath, []byte(rules), 0644)
307+
if err != nil {
303308
return fmt.Errorf("failed to write PF rules file: %v", err)
304309
}
305310

306311
// Load rules into anchor
307312
cmd := exec.Command("pfctl", "-a", PF_ANCHOR_NAME, "-f", m.pfRulesPath)
308-
if err := cmd.Run(); err != nil {
313+
err = cmd.Run()
314+
if err != nil {
309315
return fmt.Errorf("failed to load PF rules: %v", err)
310316
}
311317

@@ -330,12 +336,14 @@ anchor "%s"
330336
`, PF_ANCHOR_NAME, PF_ANCHOR_NAME)
331337

332338
// Write and load the main ruleset
333-
if err := os.WriteFile(m.mainRulesPath, []byte(mainRules), 0644); err != nil {
339+
err = os.WriteFile(m.mainRulesPath, []byte(mainRules), 0644)
340+
if err != nil {
334341
return fmt.Errorf("failed to write main PF rules: %v", err)
335342
}
336343

337344
cmd = exec.Command("pfctl", "-f", m.mainRulesPath)
338-
if err := cmd.Run(); err != nil {
345+
err = cmd.Run()
346+
if err != nil {
339347
// Don't fail if main rules can't be loaded, but warn
340348
fmt.Fprintf(os.Stderr, "Warning: failed to load main PF rules: %v\n", err)
341349
}
@@ -368,4 +376,4 @@ func (m *MacOSNetJail) cleanupTempFiles() {
368376
if m.mainRulesPath != "" {
369377
os.Remove(m.mainRulesPath)
370378
}
371-
}
379+
}

proxy/proxy.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,15 +66,17 @@ func (p *ProxyServer) Start(ctx context.Context) error {
6666
// Start HTTP server
6767
go func() {
6868
p.logger.Info("Starting HTTP proxy", "port", p.httpPort)
69-
if err := p.httpServer.ListenAndServe(); err != nil && err != http.ErrServerClosed {
69+
err := p.httpServer.ListenAndServe()
70+
if err != nil && err != http.ErrServerClosed {
7071
p.logger.Error("HTTP proxy server error", "error", err)
7172
}
7273
}()
7374

7475
// Start HTTPS server
7576
go func() {
7677
p.logger.Info("Starting HTTPS proxy", "port", p.httpsPort)
77-
if err := p.httpsServer.ListenAndServeTLS("", ""); err != nil && err != http.ErrServerClosed {
78+
err := p.httpsServer.ListenAndServeTLS("", "")
79+
if err != nil && err != http.ErrServerClosed {
7880
p.logger.Error("HTTPS proxy server error", "error", err)
7981
}
8082
}()

0 commit comments

Comments
 (0)