Pull request 1809: 4299-querylog-stats-clients-api
Merge in DNS/adguard-home from 4299-querylog-stats-clients-api to master Squashed commit of the following: commit 066100a7869d7572c4ae65b3c7b1487ac50baf15 Merge: 95bc00c05da77514Author: Stanislav Chzhen <s.chzhen@adguard.com> Date: Fri Apr 14 13:57:30 2023 +0300 Merge branch 'master' into 4299-querylog-stats-clients-api commit 95bc00c0b3d05b262ee0b90be9757e61cac0778c Author: Stanislav Chzhen <s.chzhen@adguard.com> Date: Thu Apr 13 11:48:39 2023 +0300 all: fix typo commit 4b868da48f0c976d204346e40ba948803be6397f Author: Stanislav Chzhen <s.chzhen@adguard.com> Date: Thu Apr 13 11:42:52 2023 +0300 all: fix text label commit 7a3ba5c7f688bd53cf761b5e8e614fbe251bd006 Merge: 315256e36c8d89a4Author: Stanislav Chzhen <s.chzhen@adguard.com> Date: Thu Apr 13 11:34:59 2023 +0300 Merge branch 'master' into 4299-querylog-stats-clients-api commit 315256e3f3861b5116962f7c47384b7c72e41813 Author: Stanislav Chzhen <s.chzhen@adguard.com> Date: Tue Apr 11 19:07:18 2023 +0300 all: ignore search, unit commit 28c6ffec9558e7c38d7bd12055eabddb8f5675c2 Author: Artem Krisanov <a.krisanov@adguard.com> Date: Tue Apr 11 15:08:35 2023 +0300 Added 'Protection' and 'Query Log and statistics' sections to client settings. Added checkboxes to ignore client in (query log/statistics) commit 2657bd2b820d8b2b3d71d23e4545c867b9ae6cdf Author: Stanislav Chzhen <s.chzhen@adguard.com> Date: Mon Apr 10 17:28:59 2023 +0300 all: add todo commit e151fcbc0c36d8e6a5c091fbf374bf0e35804699 Author: Stanislav Chzhen <s.chzhen@adguard.com> Date: Mon Apr 10 15:15:46 2023 +0300 openapi: imp docs commit 31875cbbd1bd09a73baa3636d0cc242b5ac35059 Author: Stanislav Chzhen <s.chzhen@adguard.com> Date: Mon Apr 10 13:02:31 2023 +0300 all: add querylog stats client ignore api
This commit is contained in:
@@ -6,6 +6,7 @@ import (
|
||||
"net/http"
|
||||
"net/netip"
|
||||
|
||||
"github.com/AdguardTeam/AdGuardHome/internal/aghalg"
|
||||
"github.com/AdguardTeam/AdGuardHome/internal/aghhttp"
|
||||
"github.com/AdguardTeam/AdGuardHome/internal/filtering"
|
||||
)
|
||||
@@ -44,6 +45,9 @@ type clientJSON struct {
|
||||
SafeSearchEnabled bool `json:"safesearch_enabled"`
|
||||
UseGlobalBlockedServices bool `json:"use_global_blocked_services"`
|
||||
UseGlobalSettings bool `json:"use_global_settings"`
|
||||
|
||||
IgnoreQueryLog aghalg.NullBool `json:"ignore_querylog"`
|
||||
IgnoreStatistics aghalg.NullBool `json:"ignore_statistics"`
|
||||
}
|
||||
|
||||
type runtimeClientJSON struct {
|
||||
@@ -90,7 +94,7 @@ func (clients *clientsContainer) handleGetClients(w http.ResponseWriter, r *http
|
||||
}
|
||||
|
||||
// jsonToClient converts JSON object to Client object.
|
||||
func (clients *clientsContainer) jsonToClient(cj clientJSON) (c *Client, err error) {
|
||||
func (clients *clientsContainer) jsonToClient(cj clientJSON, prev *Client) (c *Client, err error) {
|
||||
var safeSearchConf filtering.SafeSearchConfig
|
||||
if cj.SafeSearchConf != nil {
|
||||
safeSearchConf = *cj.SafeSearchConf
|
||||
@@ -129,6 +133,18 @@ func (clients *clientsContainer) jsonToClient(cj clientJSON) (c *Client, err err
|
||||
UseOwnBlockedServices: !cj.UseGlobalBlockedServices,
|
||||
}
|
||||
|
||||
if cj.IgnoreQueryLog != aghalg.NBNull {
|
||||
c.IgnoreQueryLog = cj.IgnoreQueryLog == aghalg.NBTrue
|
||||
} else if prev != nil {
|
||||
c.IgnoreQueryLog = prev.IgnoreQueryLog
|
||||
}
|
||||
|
||||
if cj.IgnoreStatistics != aghalg.NBNull {
|
||||
c.IgnoreStatistics = cj.IgnoreStatistics == aghalg.NBTrue
|
||||
} else if prev != nil {
|
||||
c.IgnoreStatistics = prev.IgnoreStatistics
|
||||
}
|
||||
|
||||
if safeSearchConf.Enabled {
|
||||
err = c.setSafeSearch(
|
||||
safeSearchConf,
|
||||
@@ -165,6 +181,9 @@ func clientToJSON(c *Client) (cj *clientJSON) {
|
||||
BlockedServices: c.BlockedServices,
|
||||
|
||||
Upstreams: c.Upstreams,
|
||||
|
||||
IgnoreQueryLog: aghalg.BoolToNullBool(c.IgnoreQueryLog),
|
||||
IgnoreStatistics: aghalg.BoolToNullBool(c.IgnoreStatistics),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -178,7 +197,7 @@ func (clients *clientsContainer) handleAddClient(w http.ResponseWriter, r *http.
|
||||
return
|
||||
}
|
||||
|
||||
c, err := clients.jsonToClient(cj)
|
||||
c, err := clients.jsonToClient(cj, nil)
|
||||
if err != nil {
|
||||
aghhttp.Error(r, w, http.StatusBadRequest, "%s", err)
|
||||
|
||||
@@ -232,6 +251,8 @@ type updateJSON struct {
|
||||
}
|
||||
|
||||
// handleUpdateClient is the handler for POST /control/clients/update HTTP API.
|
||||
//
|
||||
// TODO(s.chzhen): Accept updated parameters instead of whole structure.
|
||||
func (clients *clientsContainer) handleUpdateClient(w http.ResponseWriter, r *http.Request) {
|
||||
dj := updateJSON{}
|
||||
err := json.NewDecoder(r.Body).Decode(&dj)
|
||||
@@ -247,7 +268,21 @@ func (clients *clientsContainer) handleUpdateClient(w http.ResponseWriter, r *ht
|
||||
return
|
||||
}
|
||||
|
||||
c, err := clients.jsonToClient(dj.Data)
|
||||
var prev *Client
|
||||
var ok bool
|
||||
|
||||
func() {
|
||||
clients.lock.Lock()
|
||||
defer clients.lock.Unlock()
|
||||
|
||||
prev, ok = clients.list[dj.Name]
|
||||
}()
|
||||
|
||||
if !ok {
|
||||
aghhttp.Error(r, w, http.StatusBadRequest, "client not found")
|
||||
}
|
||||
|
||||
c, err := clients.jsonToClient(dj.Data, prev)
|
||||
if err != nil {
|
||||
aghhttp.Error(r, w, http.StatusBadRequest, "%s", err)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user