This commit is contained in:
68
system_proxy_darwin.go
Normal file
68
system_proxy_darwin.go
Normal file
@@ -0,0 +1,68 @@
|
||||
//go:build darwin
|
||||
// +build darwin
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os/exec"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func parseNetworkServices(out string) []string {
|
||||
lines := strings.Split(out, "\n")
|
||||
var result []string
|
||||
|
||||
for _, line := range lines {
|
||||
if strings.Contains(line, "(Hardware Port:") {
|
||||
start := strings.Index(line, "Hardware Port: ") + len("Hardware Port: ")
|
||||
end := strings.Index(line[start:], ",")
|
||||
if end > 0 {
|
||||
result = append(result, line[start:start+end])
|
||||
}
|
||||
}
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
func contains(arr []string, v string) bool {
|
||||
for _, x := range arr {
|
||||
if x == v {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func setProxy(enable bool, host string, port string) error {
|
||||
out, err := exec.Command("networksetup", "-listnetworkserviceorder").CombinedOutput()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
services := parseNetworkServices(string(out))
|
||||
active := ""
|
||||
|
||||
if contains(services, "Wi-Fi") {
|
||||
active = "Wi-Fi"
|
||||
} else if contains(services, "Ethernet") {
|
||||
active = "Ethernet"
|
||||
} else {
|
||||
if len(services) == 0 {
|
||||
return fmt.Errorf("no network services found")
|
||||
}
|
||||
active = services[0]
|
||||
}
|
||||
|
||||
if enable {
|
||||
exec.Command("networksetup", "-setwebproxy", active, host, port).Run()
|
||||
exec.Command("networksetup", "-setsecurewebproxy", active, host, port).Run()
|
||||
exec.Command("networksetup", "-setwebproxystate", active, "on").Run()
|
||||
exec.Command("networksetup", "-setsecurewebproxystate", active, "on").Run()
|
||||
} else {
|
||||
exec.Command("networksetup", "-setwebproxystate", active, "off").Run()
|
||||
exec.Command("networksetup", "-setsecurewebproxystate", active, "off").Run()
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user