Something went wrong. Try again.
sloproxy
Something went wrong. Try again.
1.2 kB · 51 lines
Go
at main
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152package cliproxy
import ( "net/http" "strings" "sync"
coreauth "github.com/router-for-me/CLIProxyAPI/v7/sdk/cliproxy/auth" "github.com/router-for-me/CLIProxyAPI/v7/sdk/proxyutil" log "github.com/sirupsen/logrus")
// defaultRoundTripperProvider returns a per-auth HTTP RoundTripper based on// the Auth.ProxyURL value. It caches transports per proxy URL string.type defaultRoundTripperProvider struct { mu sync.RWMutex cache map[string]http.RoundTripper}
func newDefaultRoundTripperProvider() *defaultRoundTripperProvider { return &defaultRoundTripperProvider{cache: make(map[string]http.RoundTripper)}}
// RoundTripperFor implements coreauth.RoundTripperProvider.func (p *defaultRoundTripperProvider) RoundTripperFor(auth *coreauth.Auth) http.RoundTripper { if auth == nil { return nil } proxyStr := strings.TrimSpace(auth.ProxyURL) if proxyStr == "" { return nil } p.mu.RLock() rt := p.cache[proxyStr] p.mu.RUnlock() if rt != nil { return rt } transport, _, errBuild := proxyutil.BuildHTTPTransport(proxyStr) if errBuild != nil { log.Errorf("%v", errBuild) return nil } if transport == nil { return nil } p.mu.Lock() p.cache[proxyStr] = transport p.mu.Unlock() return transport}