Skip to content

Commit 6571ed1

Browse files
Improve code organization and naming consistency (#22)
* style * style --------- Co-authored-by: Garrett Delfosse <[email protected]>
1 parent c5045da commit 6571ed1

File tree

10 files changed

+69
-227
lines changed

10 files changed

+69
-227
lines changed

audit/logging_auditor.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ package audit
22

33
import "log/slog"
44

5-
// LoggingAuditor implements Auditor by logging to slog
5+
// LoggingAuditor implements proxy.Auditor by logging to slog
66
type LoggingAuditor struct {
77
logger *slog.Logger
88
}

audit/request.go

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package audit
22

3-
import "net/http"
3+
type Auditor interface {
4+
AuditRequest(req Request)
5+
}
46

57
// Request represents information about an HTTP request for auditing
68
type Request struct {
@@ -9,11 +11,3 @@ type Request struct {
911
Allowed bool
1012
Rule string // The rule that matched (if any)
1113
}
12-
13-
// HTTPRequestToAuditRequest converts an http.Request to an audit.Request
14-
func HTTPRequestToAuditRequest(httpReq *http.Request) *Request {
15-
return &Request{
16-
Method: httpReq.Method,
17-
URL: httpReq.URL.String(),
18-
}
19-
}

audit/request_test.go

Lines changed: 0 additions & 117 deletions
This file was deleted.

cli/cli.go

Lines changed: 15 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ Examples:
5959
},
6060
},
6161
Handler: func(inv *serpent.Invocation) error {
62-
return Run(config, inv.Args)
62+
return Run(inv.Context(), config, inv.Args)
6363
},
6464
}
6565
}
@@ -89,7 +89,9 @@ func setupLogging(logLevel string) *slog.Logger {
8989
}
9090

9191
// Run executes the jail command with the given configuration and arguments
92-
func Run(config Config, args []string) error {
92+
func Run(ctx context.Context, config Config, args []string) error {
93+
ctx, cancel := context.WithCancel(ctx)
94+
defer cancel()
9395
logger := setupLogging(config.LogLevel)
9496

9597
// Get command arguments
@@ -113,7 +115,7 @@ func Run(config Config, args []string) error {
113115
ruleEngine := rules.NewRuleEngine(allowRules, logger)
114116

115117
// Create auditor
116-
// auditor := audit.NewLoggingAuditor(logger)
118+
auditor := audit.NewLoggingAuditor(logger)
117119

118120
// Create certificate manager
119121
certManager, err := tls.NewCertificateManager(logger)
@@ -123,53 +125,32 @@ func Run(config Config, args []string) error {
123125
}
124126

125127
// Create jail instance
126-
jailInstance, err := jail.New(context.Background(), jail.Config{
128+
jailInstance, err := jail.New(ctx, jail.Config{
127129
RuleEngine: ruleEngine,
128-
Auditor: audit.NewLoggingAuditor(logger),
129-
Logger: logger,
130+
Auditor: auditor,
130131
CertManager: certManager,
132+
Logger: logger,
131133
})
132134
if err != nil {
133-
logger.Error("Failed to create jail instance", "error", err)
134135
return fmt.Errorf("failed to create jail instance: %v", err)
135136
}
136137

137138
// Setup signal handling BEFORE any setup
138139
sigChan := make(chan os.Signal, 1)
139140
signal.Notify(sigChan, syscall.SIGINT, syscall.SIGTERM)
140141

141-
// Handle signals immediately in background
142-
go func() {
143-
sig := <-sigChan
144-
logger.Info("Received signal during setup, cleaning up...", "signal", sig)
145-
err := jailInstance.Close()
146-
if err != nil {
147-
logger.Error("Emergency cleanup failed", "error", err)
148-
}
149-
os.Exit(1)
150-
}()
151-
152-
// Ensure cleanup happens no matter what
153-
defer func() {
154-
logger.Debug("Starting cleanup process")
155-
err := jailInstance.Close()
156-
if err != nil {
157-
logger.Error("Failed to cleanup jail", "error", err)
158-
} else {
159-
logger.Debug("Cleanup completed successfully")
160-
}
161-
}()
162-
163142
// Open jail (starts network namespace and proxy server)
164143
err = jailInstance.Start()
165144
if err != nil {
166-
logger.Error("Failed to open jail", "error", err)
167145
return fmt.Errorf("failed to open jail: %v", err)
168146
}
169-
170-
// Create context for graceful shutdown
171-
ctx, cancel := context.WithCancel(context.Background())
172-
defer cancel()
147+
defer func() {
148+
logger.Info("Closing jail...")
149+
err := jailInstance.Close()
150+
if err != nil {
151+
logger.Error("Failed to close jail", "error", err)
152+
}
153+
}()
173154

174155
// Execute command in jail
175156
go func() {

jail.go

Lines changed: 11 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2,37 +2,29 @@ package jail
22

33
import (
44
"context"
5-
cryptotls "crypto/tls"
65
"fmt"
76
"log/slog"
87
"os/exec"
98
"runtime"
109
"time"
1110

11+
"github.com/coder/jail/audit"
1212
"github.com/coder/jail/namespace"
1313
"github.com/coder/jail/proxy"
14+
"github.com/coder/jail/rules"
15+
"github.com/coder/jail/tls"
1416
)
1517

16-
type Commander interface {
17-
Start() error
18-
Command(command []string) *exec.Cmd
19-
Close() error
20-
}
21-
22-
type CertificateManager interface {
23-
SetupTLSAndWriteCACert() (*cryptotls.Config, string, string, error)
24-
}
25-
2618
type Config struct {
27-
RuleEngine proxy.RuleEvaluator
28-
Auditor proxy.Auditor
29-
CertManager CertificateManager
19+
RuleEngine rules.Evaluator
20+
Auditor audit.Auditor
21+
CertManager tls.Manager
3022
Logger *slog.Logger
3123
}
3224

3325
type Jail struct {
34-
commander Commander
35-
proxyServer *proxy.ProxyServer
26+
commander namespace.Commander
27+
proxyServer *proxy.Server
3628
logger *slog.Logger
3729
ctx context.Context
3830
cancel context.CancelFunc
@@ -56,7 +48,7 @@ func New(ctx context.Context, config Config) (*Jail, error) {
5648
})
5749

5850
// Create commander
59-
commander, err := newCommander(namespace.Config{
51+
commander, err := newNamespaceCommander(namespace.Config{
6052
Logger: config.Logger,
6153
HttpProxyPort: 8080,
6254
HttpsProxyPort: 8443,
@@ -125,8 +117,8 @@ func (j *Jail) Close() error {
125117
return j.commander.Close()
126118
}
127119

128-
// newCommander creates a new NetJail instance for the current platform
129-
func newCommander(config namespace.Config) (Commander, error) {
120+
// newNamespaceCommander creates a new namespace instance for the current platform
121+
func newNamespaceCommander(config namespace.Config) (namespace.Commander, error) {
130122
switch runtime.GOOS {
131123
case "darwin":
132124
return namespace.NewMacOS(config)

namespace/namespace.go

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,20 @@ package namespace
33
import (
44
"fmt"
55
"log/slog"
6+
"os/exec"
67
"time"
78
)
89

910
const (
1011
namespacePrefix = "coder_jail"
1112
)
1213

14+
type Commander interface {
15+
Start() error
16+
Command(command []string) *exec.Cmd
17+
Close() error
18+
}
19+
1320
// JailConfig holds configuration for network jail
1421
type Config struct {
1522
Logger *slog.Logger
@@ -18,18 +25,6 @@ type Config struct {
1825
Env map[string]string
1926
}
2027

21-
// // NewJail creates a new NetJail instance for the current platform
22-
// func New(config Config) (jail.Commander, error) {
23-
// switch runtime.GOOS {
24-
// case "darwin":
25-
// return NewMacOS(config)
26-
// case "linux":
27-
// return NewLinux(config)
28-
// default:
29-
// return nil, fmt.Errorf("unsupported platform: %s", runtime.GOOS)
30-
// }
31-
// }
32-
3328
func newNamespaceName() string {
3429
return fmt.Sprintf("%s_%d", namespacePrefix, time.Now().UnixNano()%10000000)
3530
}

namespace/noop.go

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,6 @@ import (
66

77
type noop struct{}
88

9-
func newNoop(_ Config) (*noop, error) {
10-
return &noop{}, nil
11-
}
12-
139
func (n *noop) Command(_ []string) *exec.Cmd {
1410
return exec.Command("true")
1511
}

0 commit comments

Comments
 (0)