mirror of
https://github.com/AdguardTeam/AdGuardHome.git
synced 2024-11-28 18:08:51 +03:00
e1995408e4
Updates #6263. Squashed commit of the following: commitf6b704fb58
Merge:780d001ce
5dd10d9fc
Author: Dimitry Kolyshev <dkolyshev@adguard.com> Date: Fri Nov 24 09:55:04 2023 +0200 Merge remote-tracking branch 'origin/master' into 6263-custom-ups-cache commit780d001cef
Author: Dimitry Kolyshev <dkolyshev@adguard.com> Date: Fri Nov 24 09:53:46 2023 +0200 all: imp locales commit820bcf0e23
Merge:e7ca51563
1320043e9
Author: Dimitry Kolyshev <dkolyshev@adguard.com> Date: Thu Nov 23 11:16:54 2023 +0200 Merge remote-tracking branch 'origin/master' into 6263-custom-ups-cache # Conflicts: # CHANGELOG.md commite7ca515630
Merge:23392d08b
0f5e8ca56
Author: Dimitry Kolyshev <dkolyshev@adguard.com> Date: Wed Nov 22 09:49:32 2023 +0200 Merge remote-tracking branch 'origin/master' into 6263-custom-ups-cache commit23392d08b1
Merge:a09cd190c
feb15745d
Author: Dimitry Kolyshev <dkolyshev@adguard.com> Date: Wed Nov 22 09:49:10 2023 +0200 Merge remote-tracking branch 'origin/6263-custom-ups-cache' into 6263-custom-ups-cache commita09cd190c0
Author: Dimitry Kolyshev <dkolyshev@adguard.com> Date: Wed Nov 22 09:48:43 2023 +0200 home: imp code commitfeb15745d2
Author: Ildar Kamalov <ik@adguard.com> Date: Tue Nov 21 17:27:38 2023 +0300 client: move cache fields to the upstream tab commit789060e4d4
Author: Ildar Kamalov <ik@adguard.com> Date: Tue Nov 21 16:28:03 2023 +0300 client: add form fields commita700bfb42e
Merge:7669419b5
db42254d7
Author: Dimitry Kolyshev <dkolyshev@adguard.com> Date: Tue Nov 21 11:44:14 2023 +0200 Merge remote-tracking branch 'origin/master' into 6263-custom-ups-cache commit7669419b59
Author: Dimitry Kolyshev <dkolyshev@adguard.com> Date: Tue Nov 21 11:34:17 2023 +0200 home: imp code commit4a9dc1d6c1
Author: Dimitry Kolyshev <dkolyshev@adguard.com> Date: Mon Nov 20 15:08:44 2023 +0200 docs: http client docs commit944e0d7a4b
Author: Dimitry Kolyshev <dkolyshev@adguard.com> Date: Mon Nov 20 13:51:00 2023 +0200 home: http client dns cache
101 lines
2.8 KiB
Go
101 lines
2.8 KiB
Go
package home
|
|
|
|
import (
|
|
"fmt"
|
|
"time"
|
|
|
|
"github.com/AdguardTeam/AdGuardHome/internal/client"
|
|
"github.com/AdguardTeam/AdGuardHome/internal/filtering"
|
|
"github.com/AdguardTeam/AdGuardHome/internal/filtering/safesearch"
|
|
"github.com/AdguardTeam/AdGuardHome/internal/whois"
|
|
"github.com/AdguardTeam/dnsproxy/proxy"
|
|
"github.com/AdguardTeam/golibs/stringutil"
|
|
)
|
|
|
|
// Client contains information about persistent clients.
|
|
type Client struct {
|
|
// upstreamConfig is the custom upstream configuration for this client. If
|
|
// it's nil, it has not been initialized yet. If it's non-nil and empty,
|
|
// there are no valid upstreams. If it's non-nil and non-empty, these
|
|
// upstream must be used.
|
|
upstreamConfig *proxy.CustomUpstreamConfig
|
|
|
|
// TODO(d.kolyshev): Make safeSearchConf a pointer.
|
|
safeSearchConf filtering.SafeSearchConfig
|
|
SafeSearch filtering.SafeSearch
|
|
|
|
// BlockedServices is the configuration of blocked services of a client.
|
|
BlockedServices *filtering.BlockedServices
|
|
|
|
Name string
|
|
|
|
IDs []string
|
|
Tags []string
|
|
Upstreams []string
|
|
|
|
UpstreamsCacheSize uint32
|
|
UpstreamsCacheEnabled bool
|
|
|
|
UseOwnSettings bool
|
|
FilteringEnabled bool
|
|
SafeBrowsingEnabled bool
|
|
ParentalEnabled bool
|
|
UseOwnBlockedServices bool
|
|
IgnoreQueryLog bool
|
|
IgnoreStatistics bool
|
|
}
|
|
|
|
// ShallowClone returns a deep copy of the client, except upstreamConfig,
|
|
// safeSearchConf, SafeSearch fields, because it's difficult to copy them.
|
|
func (c *Client) ShallowClone() (sh *Client) {
|
|
clone := *c
|
|
|
|
clone.BlockedServices = c.BlockedServices.Clone()
|
|
clone.IDs = stringutil.CloneSlice(c.IDs)
|
|
clone.Tags = stringutil.CloneSlice(c.Tags)
|
|
clone.Upstreams = stringutil.CloneSlice(c.Upstreams)
|
|
|
|
return &clone
|
|
}
|
|
|
|
// closeUpstreams closes the client-specific upstream config of c if any.
|
|
func (c *Client) closeUpstreams() (err error) {
|
|
if c.upstreamConfig != nil {
|
|
if err = c.upstreamConfig.Close(); err != nil {
|
|
return fmt.Errorf("closing upstreams of client %q: %w", c.Name, err)
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// setSafeSearch initializes and sets the safe search filter for this client.
|
|
func (c *Client) setSafeSearch(
|
|
conf filtering.SafeSearchConfig,
|
|
cacheSize uint,
|
|
cacheTTL time.Duration,
|
|
) (err error) {
|
|
ss, err := safesearch.NewDefault(conf, fmt.Sprintf("client %q", c.Name), cacheSize, cacheTTL)
|
|
if err != nil {
|
|
// Don't wrap the error, because it's informative enough as is.
|
|
return err
|
|
}
|
|
|
|
c.SafeSearch = ss
|
|
|
|
return nil
|
|
}
|
|
|
|
// RuntimeClient is a client information about which has been obtained using the
|
|
// source described in the Source field.
|
|
type RuntimeClient struct {
|
|
// WHOIS is the filtered WHOIS data of a client.
|
|
WHOIS *whois.Info
|
|
|
|
// Host is the host name of a client.
|
|
Host string
|
|
|
|
// Source is the source from which the information about the client has
|
|
// been obtained.
|
|
Source client.Source
|
|
}
|