-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathproxy_linux.go
More file actions
89 lines (83 loc) · 2.16 KB
/
Copy pathproxy_linux.go
File metadata and controls
89 lines (83 loc) · 2.16 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
package proxy
import (
"fmt"
"os"
"os/exec"
"strconv"
"strings"
)
// SetGlobal set os proxy to http or socks.
func SetGlobal(c *Config) error {
var err error
if c.Protocol == "http" {
err = execute("gsettings", "set", "org.gnome.system.proxy.http", "host", c.Host)
if err != nil {
return err
}
err = execute("gsettings", "set", "org.gnome.system.proxy.http", "port", strconv.Itoa(c.Port))
if err != nil {
return err
}
err = execute("gsettings", "set", "org.gnome.system.proxy.https", "host", c.Host)
if err != nil {
return err
}
err = execute("gsettings", "set", "org.gnome.system.proxy.https", "port", strconv.Itoa(c.Port))
if err != nil {
return err
}
err = execute("gsettings", "set", "org.gnome.system.proxy", "mode", "manual")
if err != nil {
return err
}
} else if strings.HasPrefix(c.Protocol, "socks") {
err = execute("gsettings", "set", "org.gnome.system.proxy.socks", "host", c.Host)
if err != nil {
return err
}
err = execute("gsettings", "set", "org.gnome.system.proxy.socks", "port", strconv.Itoa(c.Port))
if err != nil {
return err
}
err = execute("gsettings", "set", "org.gnome.system.proxy", "mode", "manual")
if err != nil {
return err
}
}
return nil
}
// SetPAC set os proxy to pac.
func SetPAC(c *Config) error {
var url = fmt.Sprintf("http://%s:%d", c.PACHost, c.PACPort)
err := execute("gsettings", "set", "org.gnome.system.proxy", "autoconfig-url", url)
if err != nil {
return err
}
err = execute("gsettings", "set", "org.gnome.system.proxy", "mode", "auto")
if err != nil {
return err
}
return nil
}
// Reset clear os proxy settings.
func Reset() error {
err := execute("gsettings", "set", "org.gnome.system.proxy", "mode", "none")
return err
}
// StartProxy start proxy process.
func StartProxy(cmd string) (*os.Process, error) {
var arr = strings.Split(cmd, " ")
var c = exec.Command(arr[0], arr[1:]...)
c.Stdout = os.Stdout
c.Stderr = os.Stderr
if err := c.Start(); err != nil {
return nil, err
}
return c.Process, nil
}
func execute(name string, args ...string) error {
var cmd = exec.Command(name, args...)
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
return cmd.Run()
}