-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathshadowproxy.go
74 lines (60 loc) · 1.74 KB
/
shadowproxy.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
package shadowproxy
import (
"bytes"
"encoding/json"
"time"
"github.com/luraproject/lura/v2/config"
)
type jsonConfig struct {
Host []string `json:"host"`
URLPattern string `json:"url_pattern"`
Method string `json:"method"`
HostSanitizationDisabled bool `json:"disable_host_sanitize"`
Timeout string `json:"timeout"`
}
type ProxyConfig struct {
Host []string
URLPattern string
Method string
HostSanitizationDisabled bool
Timeout time.Duration
}
const Namespace = "kivra/shadowproxy"
func addNameSpace(s string) string {
return Namespace + ": " + s
}
func configGetter(e *config.EndpointConfig) (*ProxyConfig, bool) {
jsonCfg := new(jsonConfig)
cfg := new(ProxyConfig)
tmp, ok := e.ExtraConfig[Namespace]
if !ok {
return cfg, false
}
buf := new(bytes.Buffer)
if err := json.NewEncoder(buf).Encode(tmp); err != nil {
panic(addNameSpace("Error: failed to parse proxy config: " + err.Error()))
}
if err := json.NewDecoder(buf).Decode(jsonCfg); err != nil {
panic(addNameSpace("Error: failed to parse proxy config: " + err.Error()))
}
cfg.Host = jsonCfg.Host
cfg.HostSanitizationDisabled = jsonCfg.HostSanitizationDisabled
cfg.Method = jsonCfg.Method
cfg.URLPattern = jsonCfg.URLPattern
if jsonCfg.Timeout == "" {
cfg.Timeout = e.Timeout
} else {
t, err := time.ParseDuration(jsonCfg.Timeout)
if err != nil {
panic(addNameSpace("Error: failed to parse proxy timeout config: " + err.Error()))
}
cfg.Timeout = t
}
if cfg.Method == "" {
cfg.Method = "GET"
}
if !cfg.HostSanitizationDisabled {
cfg.Host = config.NewURIParser().CleanHosts(cfg.Host)
}
return cfg, true
}