Skip to content

Commit 12e6842

Browse files
committed
Simplify implementation: Remove enhanced APIs, update existing APIs directly
- Remove all Enhanced* structs and NewEnhanced functions - Add Unprivileged field directly to existing Config struct - Update existing New() function to handle unprivileged mode - Simplify CLI to use standard jail.New() instead of conditional logic - Remove JailInterface abstraction - use concrete *jail.Jail type - Much cleaner and simpler for experimental feature
1 parent a2dfe31 commit 12e6842

File tree

3 files changed

+14
-104
lines changed

3 files changed

+14
-104
lines changed

cli/cli.go

Lines changed: 7 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -137,26 +137,13 @@ func Run(ctx context.Context, config Config, args []string) error {
137137
}
138138

139139
// Create jail instance
140-
var jailInstance JailInterface
141-
if config.Unprivileged {
142-
// Use enhanced jail with unprivileged mode
143-
enhancedConfig := jail.EnhancedConfig{
144-
RuleEngine: ruleEngine,
145-
Auditor: auditor,
146-
CertManager: certManager,
147-
Logger: logger,
148-
Unprivileged: true,
149-
}
150-
jailInstance, err = jail.NewEnhanced(ctx, enhancedConfig)
151-
} else {
152-
// Use regular jail (privileged mode)
153-
jailInstance, err = jail.New(ctx, jail.Config{
154-
RuleEngine: ruleEngine,
155-
Auditor: auditor,
156-
CertManager: certManager,
157-
Logger: logger,
158-
})
159-
}
140+
jailInstance, err := jail.New(ctx, jail.Config{
141+
RuleEngine: ruleEngine,
142+
Auditor: auditor,
143+
CertManager: certManager,
144+
Logger: logger,
145+
Unprivileged: config.Unprivileged,
146+
})
160147
if err != nil {
161148
return fmt.Errorf("failed to create jail instance: %v", err)
162149
}
@@ -298,13 +285,6 @@ func getConfigDir(homeDir string) string {
298285
return filepath.Join(homeDir, ".config", "coder_jail")
299286
}
300287

301-
// JailInterface defines the common interface for both jail types
302-
type JailInterface interface {
303-
Start() error
304-
Command(command []string) *exec.Cmd
305-
Close() error
306-
}
307-
308288
// validateUnprivilegedMode checks if the system supports unprivileged mode
309289
func validateUnprivilegedMode(logger *slog.Logger) error {
310290
// Check if we're on Linux

jail

-1.14 KB
Binary file not shown.

jail.go

Lines changed: 7 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -16,19 +16,11 @@ import (
1616
)
1717

1818
type Config struct {
19-
RuleEngine rules.Evaluator
20-
Auditor audit.Auditor
21-
CertManager tls.Manager
22-
Logger *slog.Logger
23-
}
24-
25-
// EnhancedConfig extends Config with unprivileged mode support
26-
type EnhancedConfig struct {
2719
RuleEngine rules.Evaluator
2820
Auditor audit.Auditor
2921
CertManager tls.Manager
3022
Logger *slog.Logger
31-
Unprivileged bool // If true, use user namespace instead of privileged namespaces
23+
Unprivileged bool // Enable unprivileged mode (user namespace + iptables)
3224
}
3325

3426
type Jail struct {
@@ -40,6 +32,11 @@ type Jail struct {
4032
}
4133

4234
func New(ctx context.Context, config Config) (*Jail, error) {
35+
// Validate unprivileged mode if requested
36+
if config.Unprivileged && runtime.GOOS != "linux" {
37+
return nil, fmt.Errorf("unprivileged mode only supports Linux, got: %s", runtime.GOOS)
38+
}
39+
4340
// Setup TLS config and write CA certificate to file
4441
tlsConfig, caCertPath, configDir, err := config.CertManager.SetupTLSAndWriteCACert()
4542
if err != nil {
@@ -71,61 +68,6 @@ func New(ctx context.Context, config Config) (*Jail, error) {
7168
"REQUESTS_CA_BUNDLE": caCertPath, // Python requests
7269
"NODE_EXTRA_CA_CERTS": caCertPath, // Node.js
7370
},
74-
})
75-
if err != nil {
76-
return nil, fmt.Errorf("failed to create commander: %v", err)
77-
}
78-
79-
// Create cancellable context for jail
80-
ctx, cancel := context.WithCancel(ctx)
81-
82-
return &Jail{
83-
commander: commander,
84-
proxyServer: proxyServer,
85-
logger: config.Logger,
86-
ctx: ctx,
87-
cancel: cancel,
88-
}, nil
89-
}
90-
91-
// NewEnhanced creates a jail that can run in either privileged or unprivileged mode
92-
func NewEnhanced(ctx context.Context, config EnhancedConfig) (*Jail, error) {
93-
config.Logger.Debug("Creating enhanced jail", "unprivileged", config.Unprivileged)
94-
95-
// Validate platform support for unprivileged mode
96-
if config.Unprivileged && runtime.GOOS != "linux" {
97-
return nil, fmt.Errorf("unprivileged mode only supports Linux, got: %s", runtime.GOOS)
98-
}
99-
100-
// Setup TLS config and write CA certificate to file
101-
tlsConfig, caCertPath, configDir, err := config.CertManager.SetupTLSAndWriteCACert()
102-
if err != nil {
103-
return nil, fmt.Errorf("failed to setup TLS and CA certificate: %v", err)
104-
}
105-
106-
// Create proxy server
107-
proxyServer := proxy.NewProxyServer(proxy.Config{
108-
HTTPPort: 8080,
109-
HTTPSPort: 8443,
110-
Auditor: config.Auditor,
111-
RuleEngine: config.RuleEngine,
112-
Logger: config.Logger,
113-
TLSConfig: tlsConfig,
114-
})
115-
116-
// Create appropriate commander based on configuration
117-
commander, err := newEnhancedNamespaceCommander(namespace.Config{
118-
Logger: config.Logger,
119-
HttpProxyPort: 8080,
120-
HttpsProxyPort: 8443,
121-
Env: map[string]string{
122-
"SSL_CERT_FILE": caCertPath,
123-
"SSL_CERT_DIR": configDir,
124-
"CURL_CA_BUNDLE": caCertPath,
125-
"GIT_SSL_CAINFO": caCertPath,
126-
"REQUESTS_CA_BUNDLE": caCertPath,
127-
"NODE_EXTRA_CA_CERTS": caCertPath,
128-
},
12971
}, config.Unprivileged)
13072
if err != nil {
13173
return nil, fmt.Errorf("failed to create commander: %v", err)
@@ -182,19 +124,7 @@ func (j *Jail) Close() error {
182124
}
183125

184126
// newNamespaceCommander creates a new namespace instance for the current platform
185-
func newNamespaceCommander(config namespace.Config) (namespace.Commander, error) {
186-
switch runtime.GOOS {
187-
case "darwin":
188-
return namespace.NewMacOS(config)
189-
case "linux":
190-
return namespace.NewLinux(config)
191-
default:
192-
return nil, fmt.Errorf("unsupported platform: %s", runtime.GOOS)
193-
}
194-
}
195-
196-
// newEnhancedNamespaceCommander creates the appropriate commander based on mode and platform
197-
func newEnhancedNamespaceCommander(config namespace.Config, unprivileged bool) (namespace.Commander, error) {
127+
func newNamespaceCommander(config namespace.Config, unprivileged bool) (namespace.Commander, error) {
198128
switch runtime.GOOS {
199129
case "darwin":
200130
if unprivileged {

0 commit comments

Comments
 (0)