mirror of
https://github.com/AdguardTeam/AdGuardHome.git
synced 2024-12-24 15:48:18 +03:00
48 lines
1.2 KiB
Go
48 lines
1.2 KiB
Go
|
package home
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"crypto/tls"
|
||
|
"net"
|
||
|
"net/http"
|
||
|
"net/url"
|
||
|
"time"
|
||
|
)
|
||
|
|
||
|
// httpClient returns a new HTTP client that uses the AdGuard Home's own DNS
|
||
|
// server for resolving hostnames. The resulting client should not be used
|
||
|
// until [Context.dnsServer] is initialized.
|
||
|
//
|
||
|
// TODO(a.garipov, e.burkov): This is rather messy. Refactor.
|
||
|
func httpClient() (c *http.Client) {
|
||
|
// Do not use Context.dnsServer.DialContext directly in the struct literal
|
||
|
// below, since Context.dnsServer may be nil when this function is called.
|
||
|
dialContext := func(ctx context.Context, network, addr string) (conn net.Conn, err error) {
|
||
|
return Context.dnsServer.DialContext(ctx, network, addr)
|
||
|
}
|
||
|
|
||
|
return &http.Client{
|
||
|
// TODO(a.garipov): Make configurable.
|
||
|
Timeout: time.Minute * 5,
|
||
|
Transport: &http.Transport{
|
||
|
DialContext: dialContext,
|
||
|
Proxy: httpProxy,
|
||
|
TLSClientConfig: &tls.Config{
|
||
|
RootCAs: Context.tlsRoots,
|
||
|
CipherSuites: Context.tlsCipherIDs,
|
||
|
MinVersion: tls.VersionTLS12,
|
||
|
},
|
||
|
},
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// httpProxy returns parses and returns an HTTP proxy URL from the config, if
|
||
|
// any.
|
||
|
func httpProxy(_ *http.Request) (u *url.URL, err error) {
|
||
|
if config.ProxyURL == "" {
|
||
|
return nil, nil
|
||
|
}
|
||
|
|
||
|
return url.Parse(config.ProxyURL)
|
||
|
}
|