AdGuardHome/internal/home/client.go
Dimitry Kolyshev e1995408e4 Pull request: 6263 custom ups cache
Updates #6263.

Squashed commit of the following:

commit f6b704fb58
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

commit 780d001cef
Author: Dimitry Kolyshev <dkolyshev@adguard.com>
Date:   Fri Nov 24 09:53:46 2023 +0200

    all: imp locales

commit 820bcf0e23
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

commit e7ca515630
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

commit 23392d08b1
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

commit a09cd190c0
Author: Dimitry Kolyshev <dkolyshev@adguard.com>
Date:   Wed Nov 22 09:48:43 2023 +0200

    home: imp code

commit feb15745d2
Author: Ildar Kamalov <ik@adguard.com>
Date:   Tue Nov 21 17:27:38 2023 +0300

    client: move cache fields to the upstream tab

commit 789060e4d4
Author: Ildar Kamalov <ik@adguard.com>
Date:   Tue Nov 21 16:28:03 2023 +0300

    client: add form fields

commit a700bfb42e
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

commit 7669419b59
Author: Dimitry Kolyshev <dkolyshev@adguard.com>
Date:   Tue Nov 21 11:34:17 2023 +0200

    home: imp code

commit 4a9dc1d6c1
Author: Dimitry Kolyshev <dkolyshev@adguard.com>
Date:   Mon Nov 20 15:08:44 2023 +0200

    docs: http client docs

commit 944e0d7a4b
Author: Dimitry Kolyshev <dkolyshev@adguard.com>
Date:   Mon Nov 20 13:51:00 2023 +0200

    home: http client dns cache
2023-11-24 15:20:32 +03:00

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
}