feat: add --http-proxy flag for configurable HTTP CONNECT proxy
Add network.httpProxyUrl config field and --http-proxy CLI flag (default: http://localhost:42051) for apps that only understand HTTP proxies (opencode, Node.js tools, etc.). macOS daemon mode now sets: - ALL_PROXY=socks5h:// for SOCKS5-aware apps (curl, git) - HTTP_PROXY/HTTPS_PROXY=http:// for HTTP-proxy-aware apps Credentials from the SOCKS5 proxy URL are automatically injected into the HTTP proxy URL when not explicitly configured.
This commit is contained in:
@@ -763,27 +763,29 @@ func WrapCommandMacOS(cfg *config.Config, command string, exposedPorts []int, da
|
||||
if socks5hURL != "" {
|
||||
// ALL_PROXY uses socks5h:// (DNS resolved at proxy side) for
|
||||
// SOCKS5-aware apps (curl, git).
|
||||
// HTTP_PROXY/HTTPS_PROXY use http:// pointing to the GreyHaven
|
||||
// HTTP CONNECT proxy (port 42051) for apps that only understand
|
||||
// HTTP proxies (opencode, Node.js tools, etc.). The CONNECT
|
||||
// proxy resolves DNS server-side.
|
||||
httpProxyURL := "http://localhost:42051"
|
||||
if u, err := url.Parse(socks5hURL); err == nil {
|
||||
userinfo := ""
|
||||
if u.User != nil {
|
||||
userinfo = u.User.String() + "@"
|
||||
// HTTP_PROXY/HTTPS_PROXY use the configured HTTP CONNECT proxy
|
||||
// for apps that only understand HTTP proxies (opencode, Node.js
|
||||
// tools, etc.). The CONNECT proxy resolves DNS server-side.
|
||||
httpProxyURL := cfg.Network.HTTPProxyURL
|
||||
// Inject credentials from the SOCKS5 proxy URL into the HTTP proxy
|
||||
// URL if the HTTP proxy URL doesn't already have credentials.
|
||||
if httpProxyURL != "" {
|
||||
if hu, err := url.Parse(httpProxyURL); err == nil && hu.User == nil {
|
||||
if su, err := url.Parse(socks5hURL); err == nil && su.User != nil {
|
||||
hu.User = su.User
|
||||
httpProxyURL = hu.String()
|
||||
}
|
||||
}
|
||||
host := u.Hostname()
|
||||
if host == "" {
|
||||
host = "localhost"
|
||||
}
|
||||
httpProxyURL = "http://" + userinfo + host + ":42051"
|
||||
}
|
||||
sandboxEnvs = append(sandboxEnvs,
|
||||
"ALL_PROXY="+socks5hURL, "all_proxy="+socks5hURL,
|
||||
"HTTP_PROXY="+httpProxyURL, "http_proxy="+httpProxyURL,
|
||||
"HTTPS_PROXY="+httpProxyURL, "https_proxy="+httpProxyURL,
|
||||
)
|
||||
if httpProxyURL != "" {
|
||||
sandboxEnvs = append(sandboxEnvs,
|
||||
"HTTP_PROXY="+httpProxyURL, "http_proxy="+httpProxyURL,
|
||||
"HTTPS_PROXY="+httpProxyURL, "https_proxy="+httpProxyURL,
|
||||
)
|
||||
}
|
||||
}
|
||||
termEnvs := getTerminalEnvVars()
|
||||
parts = append(parts, "sudo", "-u", uid, "-g", daemonSession.SandboxGroup, "env")
|
||||
|
||||
Reference in New Issue
Block a user