-
Notifications
You must be signed in to change notification settings - Fork 4
/
proxy.go
80 lines (67 loc) · 2.28 KB
/
proxy.go
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
package cmd
import (
"flag"
"strings"
"github.com/efixler/envflags"
)
type ProxyFlags struct {
enabled *envflags.Value[bool]
proxyURL *envflags.Value[string]
username *envflags.Value[string]
password *envflags.Value[string]
}
func (p *ProxyFlags) addEnabledFlag(proxyName string, flags *flag.FlagSet) {
// --use-xxx-proxy
var argName, envName string
if proxyName == "" {
argName = "use-proxy"
envName = "PROXY_ENABLED"
proxyName = "default"
} else {
argName = "use-" + strings.ToLower(proxyName) + "-proxy"
envName = strings.ToUpper(proxyName) + "_PROXY_ENABLED"
}
p.enabled = envflags.NewBool(envName, false)
p.enabled.AddTo(flags, argName, "Use the "+proxyName+" proxy")
}
// Set up the command line args and environment variables for a proxy.
// The assumption here is that the app ultimately supports at least two different proxies,
// one for general usage and another for headless scraping. The general proxy should pass an
// empty proxy name. Other proxies should pass a unique name, which will be used in constructing
// the environment variable and command line argument names.
func AddProxyFlags(proxyName string, withEnabledFlag bool, flags *flag.FlagSet) *ProxyFlags {
var baseEnv, baseArgName string
helpPrefix := "Default"
if proxyName != "" {
baseEnv = strings.ToUpper(proxyName) + "_"
baseArgName = strings.ToLower(proxyName) + "-"
helpPrefix = strings.ToUpper(string(proxyName[0])) + strings.ToLower(proxyName[1:])
}
proxy := &ProxyFlags{
proxyURL: envflags.NewString(baseEnv+"PROXY", ""),
username: envflags.NewString(baseEnv+"PROXY_USERNAME", ""),
password: envflags.NewString(baseEnv+"PROXY_PASSWORD", ""),
}
proxy.proxyURL.AddTo(flags, baseArgName+"proxy", helpPrefix+" proxy URL")
proxy.username.AddTo(flags, baseArgName+"proxy-username", helpPrefix+" proxy username")
proxy.password.AddTo(flags, baseArgName+"proxy-password", helpPrefix+" proxy password")
if withEnabledFlag {
proxy.addEnabledFlag(proxyName, flags)
}
return proxy
}
func (p *ProxyFlags) Enabled() bool {
if p.enabled == nil {
return false
}
return p.enabled.Get()
}
func (p *ProxyFlags) ProxyURL() string {
return p.proxyURL.Get()
}
func (p *ProxyFlags) Username() string {
return p.username.Get()
}
func (p *ProxyFlags) Password() string {
return p.password.Get()
}