Fedora 33 and rawhide got an updated version of the azblob library. Sadly, it introduced a non-compatible API change. This commit does the same thing asa67baf5adid for kolo/xmlrpc: We now have two wrappers around the affected part of the API. Fedora 32 uses the wrapper around the old API, whereas Fedora 33 and 34 (and RHEL with its vendored deps) use the wrapper around the new API. The switch is implemented using go build flags and spec file magic. Seea67baf5afor more thoughts. Also, there's v0.11.1-0.20201209121048-6df5d9af221d in go.mod, why? The maintainers of azblob probably tagged a wrong commit with v0.12.0 which breaks go. The long v0.11.1-.* version is basically the proper v0.12.0 commit. See https://github.com/Azure/azure-storage-blob-go/issues/236 for more information. Signed-off-by: Ondřej Budai <ondrej@budai.cz>
52 lines
1.3 KiB
Go
52 lines
1.3 KiB
Go
package ieproxy
|
|
|
|
import (
|
|
"net/http"
|
|
"net/url"
|
|
|
|
"golang.org/x/net/http/httpproxy"
|
|
)
|
|
|
|
func proxyMiddleman() func(req *http.Request) (i *url.URL, e error) {
|
|
// Get the proxy configuration
|
|
conf := GetConf()
|
|
envcfg := httpproxy.FromEnvironment()
|
|
|
|
if envcfg.HTTPProxy != "" || envcfg.HTTPSProxy != "" {
|
|
// If the user manually specifies environment variables, prefer those over the Windows config.
|
|
return http.ProxyFromEnvironment
|
|
}
|
|
|
|
return func(req *http.Request) (i *url.URL, e error) {
|
|
if conf.Automatic.Active {
|
|
host := conf.Automatic.FindProxyForURL(req.URL.String())
|
|
if host != "" {
|
|
return &url.URL{Host: host}, nil
|
|
}
|
|
}
|
|
if conf.Static.Active {
|
|
return staticProxy(conf, req)
|
|
}
|
|
// Should return no proxy; fallthrough.
|
|
return http.ProxyFromEnvironment(req)
|
|
}
|
|
}
|
|
|
|
func staticProxy(conf ProxyConf, req *http.Request) (i *url.URL, e error) {
|
|
// If static proxy obtaining is specified
|
|
prox := httpproxy.Config{
|
|
HTTPSProxy: mapFallback("https", "", conf.Static.Protocols),
|
|
HTTPProxy: mapFallback("http", "", conf.Static.Protocols),
|
|
NoProxy: conf.Static.NoProxy,
|
|
}
|
|
return prox.ProxyFunc()(req.URL)
|
|
}
|
|
|
|
// Return oKey or fbKey if oKey doesn't exist in the map.
|
|
func mapFallback(oKey, fbKey string, m map[string]string) string {
|
|
if v, ok := m[oKey]; ok {
|
|
return v
|
|
} else {
|
|
return m[fbKey]
|
|
}
|
|
}
|