mirror of
https://github.com/AdguardTeam/AdGuardHome.git
synced 2024-12-15 19:31:45 +03:00
7bfad08dde
Updates #6006. Squashed commit of the following: commit ac27db95c12858b6ef182a0bd4acebab67a23993 Author: Ainar Garipov <A.Garipov@AdGuard.COM> Date: Tue Jul 18 15:47:17 2023 +0300 all: imp code commit 3936288512bfc2d44902ead6ab1bb5711f92b73c Author: Ainar Garipov <A.Garipov@AdGuard.COM> Date: Mon Jul 17 19:23:46 2023 +0300 all: imp client resolving
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)
|
|
}
|