diff --git a/.github/ISSUE_TEMPLATE/bug.yml b/.github/ISSUE_TEMPLATE/bug.yml
index 37d61e56..36b0f74a 100644
--- a/.github/ISSUE_TEMPLATE/bug.yml
+++ b/.github/ISSUE_TEMPLATE/bug.yml
@@ -102,6 +102,9 @@
the best way. For crashes, please provide a full failure log.
'label': 'Action'
'value': |
+ Replace the following command with the one you're calling or a
+ description of the failing action:
+
```sh
nslookup -debug -type=a 'www.example.com' '$YOUR_AGH_ADDRESS'
```
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 8a3af2fe..f140346b 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -1,7 +1,7 @@
'name': 'build'
'env':
- 'GO_VERSION': '1.20.12'
+ 'GO_VERSION': '1.21.8'
'NODE_VERSION': '16'
'on':
@@ -101,7 +101,10 @@
- 'name': 'Set up Docker Buildx'
'uses': 'docker/setup-buildx-action@v1'
- 'name': 'Run snapshot build'
- 'run': 'make SIGN=0 VERBOSE=1 build-release build-docker'
+ # Set a custom version string, since the checkout@v2 action does not seem
+ # to know about the master branch, while the version script uses it to
+ # count the number of commits within the branch.
+ 'run': 'make SIGN=0 VERBOSE=1 VERSION="v0.0.0-github" build-release build-docker'
'notify':
'needs':
diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml
index 1ba27d28..ebbe80ef 100644
--- a/.github/workflows/lint.yml
+++ b/.github/workflows/lint.yml
@@ -1,7 +1,7 @@
'name': 'lint'
'env':
- 'GO_VERSION': '1.20.12'
+ 'GO_VERSION': '1.21.8'
'on':
'push':
diff --git a/CHANGELOG.md b/CHANGELOG.md
index a2f02b18..e3953d3f 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -14,21 +14,93 @@ and this project adheres to
+### Added
+
+- Ability to disable the use of system hosts file information for query
+ resolution ([#6610]).
+- Ability to define custom directories for storage of query log files and
+ statistics ([#5992]).
+
+### Fixed
+
+- Incorrect tracking of the system hosts file's changes ([#6711]).
+
+[#5992]: https://github.com/AdguardTeam/AdGuardHome/issues/5992
+[#6610]: https://github.com/AdguardTeam/AdGuardHome/issues/6610
+[#6711]: https://github.com/AdguardTeam/AdGuardHome/issues/6711
+
+## [v0.107.45] - 2024-03-06
+
+See also the [v0.107.45 GitHub milestone][ms-v0.107.45].
+
+### Security
+
+- Go version has been updated to prevent the possibility of exploiting the Go
+ vulnerabilities fixed in [Go 1.21.8][go-1.21.8].
+
+### Added
+
+- Context menu item in the Query Log to add a Client to the Persistent client
+ list ([#6679]).
+
+### Changed
+
+- Starting with this release our scripts are using Go's [forward compatibility
+ mechanism][go-toolchain] for updating the Go version.
+
+ **Important note for porters:** This change means that if your `go` version
+ is 1.21+ but is different from the one required by AdGuard Home, the `go` tool
+ will automatically download the required version.
+
+ If you want to use the version installed on your builder, run:
+
+ ```sh
+ go get go@$YOUR_VERSION
+ go mod tidy
+ ```
+
+ and call `make` with `GOTOOLCHAIN=local`.
+
+### Deprecated
+
+- Go 1.21 support. Future versions will require at least Go 1.22 to build.
+
+### Fixed
+
+- Missing IP addresses in logs when querying for domain names from the ignore
+ lists.
+- Blank page after resetting access clients ([#6634]).
+- Wrong algorithm for caching bootstrapped upstream addresses ([#6723]).
+
+### Removed
+
+- Go 1.20 support, as it has reached end of life.
+
+[#6634]: https://github.com/AdguardTeam/AdGuardHome/issues/6634
+[#6679]: https://github.com/AdguardTeam/AdGuardHome/issues/6679
+[#6723]: https://github.com/AdguardTeam/AdGuardHome/issues/6723
+
+[go-1.21.8]: https://groups.google.com/g/golang-announce/c/5pwGVUPoMbg
+[go-toolchain]: https://go.dev/blog/toolchain
+[ms-v0.107.45]: https://github.com/AdguardTeam/AdGuardHome/milestone/80?closed=1
+
+
+
## [v0.107.44] - 2024-02-06
See also the [v0.107.44 GitHub milestone][ms-v0.107.44].
@@ -2759,11 +2831,12 @@ See also the [v0.104.2 GitHub milestone][ms-v0.104.2].
-[Unreleased]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.107.44...HEAD
+[Unreleased]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.107.45...HEAD
+[v0.107.45]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.107.44...v0.107.45
[v0.107.44]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.107.43...v0.107.44
[v0.107.43]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.107.42...v0.107.43
[v0.107.42]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.107.41...v0.107.42
diff --git a/Makefile b/Makefile
index b40b4cd0..8fccfc35 100644
--- a/Makefile
+++ b/Makefile
@@ -8,7 +8,7 @@
# Makefile. Bump this number every time a significant change is made to
# this Makefile.
#
-# AdGuard-Project-Version: 2
+# AdGuard-Project-Version: 4
# Don't name these macros "GO" etc., because GNU Make apparently makes
# them exported environment variables with the literal value of
@@ -27,6 +27,7 @@ DIST_DIR = dist
GOAMD64 = v1
GOPROXY = https://goproxy.cn|https://proxy.golang.org|direct
GOSUMDB = sum.golang.google.cn
+GOTOOLCHAIN = go1.21.8
GPG_KEY = devteam@adguard.com
GPG_KEY_PASSPHRASE = not-a-real-password
NPM = npm
@@ -56,15 +57,16 @@ BUILD_RELEASE_DEPS_0 = deps js-build
BUILD_RELEASE_DEPS_1 = go-deps
ENV = env\
- COMMIT='$(COMMIT)'\
CHANNEL='$(CHANNEL)'\
- GPG_KEY='$(GPG_KEY)'\
- GPG_KEY_PASSPHRASE='$(GPG_KEY_PASSPHRASE)'\
+ COMMIT='$(COMMIT)'\
DIST_DIR='$(DIST_DIR)'\
GO="$(GO.MACRO)"\
GOAMD64="$(GOAMD64)"\
GOPROXY='$(GOPROXY)'\
GOSUMDB='$(GOSUMDB)'\
+ GOTOOLCHAIN='$(GOTOOLCHAIN)'\
+ GPG_KEY='$(GPG_KEY)'\
+ GPG_KEY_PASSPHRASE='$(GPG_KEY_PASSPHRASE)'\
PATH="$${PWD}/bin:$$( "$(GO.MACRO)" env GOPATH )/bin:$${PATH}"\
RACE='$(RACE)'\
SIGN='$(SIGN)'\
@@ -117,6 +119,8 @@ go-tools: ; $(ENV) "$(SHELL)" ./scripts/make/go-tools.sh
# targets.
go-test: ; $(ENV) RACE='1' "$(SHELL)" ./scripts/make/go-test.sh
+go-upd-tools: ; $(ENV) "$(SHELL)" ./scripts/make/go-upd-tools.sh
+
go-check: go-tools go-lint go-test
# A quick check to make sure that all supported operating systems can be
@@ -132,10 +136,3 @@ openapi-lint: ; cd ./openapi/ && $(YARN) test
openapi-show: ; cd ./openapi/ && $(YARN) start
txt-lint: ; $(ENV) "$(SHELL)" ./scripts/make/txt-lint.sh
-
-# TODO(a.garipov): Consider adding to scripts/ and the common project
-# structure.
-go-upd-tools:
- cd ./internal/tools/ &&\
- "$(GO.MACRO)" get -u &&\
- "$(GO.MACRO)" mod tidy
diff --git a/bamboo-specs/release.yaml b/bamboo-specs/release.yaml
index e7004570..26d39c8f 100644
--- a/bamboo-specs/release.yaml
+++ b/bamboo-specs/release.yaml
@@ -7,7 +7,7 @@
# Make sure to sync any changes with the branch overrides below.
'variables':
'channel': 'edge'
- 'dockerGo': 'adguard/golang-ubuntu:7.6'
+ 'dockerGo': 'adguard/golang-ubuntu:8.1'
'stages':
- 'Build frontend':
@@ -272,7 +272,7 @@
# need to build a few of these.
'variables':
'channel': 'beta'
- 'dockerGo': 'adguard/golang-ubuntu:7.6'
+ 'dockerGo': 'adguard/golang-ubuntu:8.1'
# release-vX.Y.Z branches are the branches from which the actual final
# release is built.
- '^release-v[0-9]+\.[0-9]+\.[0-9]+':
@@ -287,4 +287,4 @@
# are the ones that actually get released.
'variables':
'channel': 'release'
- 'dockerGo': 'adguard/golang-ubuntu:7.6'
+ 'dockerGo': 'adguard/golang-ubuntu:8.1'
diff --git a/bamboo-specs/snapcraft.yaml b/bamboo-specs/snapcraft.yaml
index 77948f13..bbf2b271 100644
--- a/bamboo-specs/snapcraft.yaml
+++ b/bamboo-specs/snapcraft.yaml
@@ -10,7 +10,7 @@
# Make sure to sync any changes with the branch overrides below.
'variables':
'channel': 'edge'
- 'dockerGo': 'adguard/golang-ubuntu:7.6'
+ 'dockerGo': 'adguard/golang-ubuntu:8.1'
'snapcraftChannel': 'edge'
'stages':
@@ -191,7 +191,7 @@
# need to build a few of these.
'variables':
'channel': 'beta'
- 'dockerGo': 'adguard/golang-ubuntu:7.6'
+ 'dockerGo': 'adguard/golang-ubuntu:8.1'
'snapcraftChannel': 'beta'
# release-vX.Y.Z branches are the branches from which the actual final
# release is built.
@@ -207,5 +207,5 @@
# are the ones that actually get released.
'variables':
'channel': 'release'
- 'dockerGo': 'adguard/golang-ubuntu:7.6'
+ 'dockerGo': 'adguard/golang-ubuntu:8.1'
'snapcraftChannel': 'candidate'
diff --git a/bamboo-specs/test.yaml b/bamboo-specs/test.yaml
index 86e08cc4..b27817df 100644
--- a/bamboo-specs/test.yaml
+++ b/bamboo-specs/test.yaml
@@ -5,7 +5,8 @@
'key': 'AHBRTSPECS'
'name': 'AdGuard Home - Build and run tests'
'variables':
- 'dockerGo': 'adguard/golang-ubuntu:7.6'
+ 'dockerGo': 'adguard/golang-ubuntu:8.1'
+ 'channel': 'development'
'stages':
- 'Tests':
@@ -73,7 +74,7 @@
make\
ARCH="amd64"\
OS="windows darwin linux"\
- CHANNEL="development"\
+ CHANNEL=${bamboo.channel}\
SIGN=0\
PARALLELISM=1\
VERBOSE=2\
@@ -115,3 +116,16 @@
'labels': []
'other':
'concurrent-build-plugin': 'system-default'
+
+'branch-overrides':
+ # rc-vX.Y.Z branches are the release candidate branches. They are created
+ # from the release branch and are used to build the release candidate
+ # images.
+ - '^rc-v[0-9]+\.[0-9]+\.[0-9]+':
+ # Build betas on release branches manually.
+ 'triggers': []
+ # Set the default release channel on the release branch to beta, as we
+ # may need to build a few of these.
+ 'variables':
+ 'dockerGo': 'adguard/golang-ubuntu:8.1'
+ 'channel': 'candidate'
diff --git a/client/src/__locales/be.json b/client/src/__locales/be.json
index ad13bfac..61af80d8 100644
--- a/client/src/__locales/be.json
+++ b/client/src/__locales/be.json
@@ -236,6 +236,7 @@
"updated_upstream_dns_toast": "Upstream DNS-серверы абноўлены",
"dns_test_ok_toast": "Паказаныя серверы DNS працуюць карэктна",
"dns_test_not_ok_toast": "Сервер «{{key}}»: немагчыма выкарыстоўваць, праверце слушнасць напісання",
+ "dns_test_parsing_error_toast": "Раздзел {{section}}: радок {{line}}: немагчыма выкарыстоўваць, праверце слушнасць напісання",
"dns_test_warning_toast": "Upstream «{{key}}» не адказвае на тэставыя запыты і можа не працаваць належным чынам",
"unblock": "Адблакаваць",
"block": "Заблакаваць",
@@ -243,6 +244,7 @@
"allow_this_client": "Дазволіць доступ гэтаму кліенту",
"block_for_this_client_only": "Заблакаваць толькі для гэтага кліента",
"unblock_for_this_client_only": "Адблакаваць толькі для гэтага кліента",
+ "add_persistent_client": "Дадаць у захаваныя кліенты",
"time_table_header": "Час",
"date": "Дата",
"domain_name_table_header": "Дамен",
@@ -462,6 +464,7 @@
"form_add_id": "Дадаць ідэнтыфікатар",
"form_client_name": "Увядзіце імя кліента",
"name": "Назва",
+ "client_name": "Кліент {{id}}",
"client_global_settings": "Выкарыстаць глабальныя налады",
"client_deleted": "Кліент «{{key}}» паспяхова выдалены",
"client_added": "Кліент «{{key}}» паспяхова дададзены",
diff --git a/client/src/__locales/cs.json b/client/src/__locales/cs.json
index a13d6a48..f8f64dcb 100644
--- a/client/src/__locales/cs.json
+++ b/client/src/__locales/cs.json
@@ -236,6 +236,7 @@
"updated_upstream_dns_toast": "Odchozí servery byly úspěšně uloženy",
"dns_test_ok_toast": "Specifikované DNS servery pracují správně",
"dns_test_not_ok_toast": "Server \"{{key}}\": nemohl být použit, zkontrolujte, zda jste ho správně napsali",
+ "dns_test_parsing_error_toast": "Sekce {{section}}: řádek {{line}}: nelze použít, zkontrolujte prosím, zda jste ho správně napsali",
"dns_test_warning_toast": "Upstream \"{{key}}\" neodpovídá na testovací požadavky a nemusí fungovat správně",
"unblock": "Odblokovat",
"block": "Blokovat",
@@ -243,6 +244,7 @@
"allow_this_client": "Povolit tohoto klienta",
"block_for_this_client_only": "Blokovat pouze pro tohoto klienta",
"unblock_for_this_client_only": "Odblokovat pouze pro tohoto klienta",
+ "add_persistent_client": "Přidat jako trvalého klienta",
"time_table_header": "Čas",
"date": "Datum",
"domain_name_table_header": "Název domény",
@@ -465,6 +467,7 @@
"form_add_id": "Přidat identifikátor",
"form_client_name": "Zadejte název klienta",
"name": "Název",
+ "client_name": "Klient {{id}}",
"client_global_settings": "Použít globální nastavení",
"client_deleted": "Klient \"{{key}}\" byl úspěšně odstraněn",
"client_added": "Klient \"{{key}}\" byl úspěšně přidán",
diff --git a/client/src/__locales/da.json b/client/src/__locales/da.json
index ce34569e..272ee813 100644
--- a/client/src/__locales/da.json
+++ b/client/src/__locales/da.json
@@ -236,6 +236,7 @@
"updated_upstream_dns_toast": "Upstream-servere er gemt",
"dns_test_ok_toast": "Angivne DNS-servere fungerer korrekt",
"dns_test_not_ok_toast": "Server \"{{key}}\": Kunne ikke bruges. Tjek, at du har angivet den korrekt",
+ "dns_test_parsing_error_toast": "Sektion {{section}}: linje {{line}}: kunne ikke anvendes. Tjek at den er angivet korrekt",
"dns_test_warning_toast": "Upstream \"{{key}}\" svarer ikke på testforespørgsler og fungerer muligvis ikke korrekt",
"unblock": "Afblokering",
"block": "Blokering",
@@ -243,6 +244,7 @@
"allow_this_client": "Tillad denne klient",
"block_for_this_client_only": "Blokér kun for denne klient",
"unblock_for_this_client_only": "Afblokér kun for denne klient",
+ "add_persistent_client": "Tilføj som vedvarende klient",
"time_table_header": "Tid",
"date": "Dato",
"domain_name_table_header": "Domænenavn",
@@ -465,6 +467,7 @@
"form_add_id": "Tilføj identifikator",
"form_client_name": "Angiv klientnavn",
"name": "Navn",
+ "client_name": "Klient {{id}}",
"client_global_settings": "Brug globale indstillinger",
"client_deleted": "Klient \"{{key}}\" slettet",
"client_added": "Klient \"{{key}}\" tilføjet",
diff --git a/client/src/__locales/de.json b/client/src/__locales/de.json
index c0b1b590..bdf1da7d 100644
--- a/client/src/__locales/de.json
+++ b/client/src/__locales/de.json
@@ -236,6 +236,7 @@
"updated_upstream_dns_toast": "Upstream-Server erfolgreich gespeichert",
"dns_test_ok_toast": "Angegebene DNS-Server arbeiten ordnungsgemäß",
"dns_test_not_ok_toast": "Server „{{key}}“: konnte nicht verwendet werden, bitte überprüfen Sie die korrekte Schreibweise",
+ "dns_test_parsing_error_toast": "Abschnitt {{section}}: Zeile {{line}}: konnte nicht verwendet werden, bitte überprüfen Sie, ob alles richtig geschrieben ist",
"dns_test_warning_toast": "Upstream „{{key}}“ reagiert nicht auf Testanfragen und funktioniert möglicherweise nicht fehlerfrei",
"unblock": "Entsperren",
"block": "Sperren",
@@ -243,6 +244,7 @@
"allow_this_client": "Diesen Client zulassen",
"block_for_this_client_only": "Nur für diesen Client sperren",
"unblock_for_this_client_only": "Nur für diesen Client freigeben",
+ "add_persistent_client": "Als dauerhaften Client hinzufügen",
"time_table_header": "Zeit",
"date": "Datum",
"domain_name_table_header": "Domainname",
@@ -465,6 +467,7 @@
"form_add_id": "Kennung hinzufügen",
"form_client_name": "Clientnamen eingeben",
"name": "Name",
+ "client_name": "Client {{id}}",
"client_global_settings": "Allgemeine Einstellungen nutzen",
"client_deleted": "Client „{{key}}“ erfolgreich entfernt",
"client_added": "Client „{{key}}“ erfolgreich hinzugefügt",
diff --git a/client/src/__locales/en.json b/client/src/__locales/en.json
index 112928be..bc3e459c 100644
--- a/client/src/__locales/en.json
+++ b/client/src/__locales/en.json
@@ -236,6 +236,7 @@
"updated_upstream_dns_toast": "Upstream servers successfully saved",
"dns_test_ok_toast": "Specified DNS servers are working correctly",
"dns_test_not_ok_toast": "Server \"{{key}}\": could not be used, please check that you've written it correctly",
+ "dns_test_parsing_error_toast": "Section {{section}}: line {{line}}: could not be used, please check that you've written it correctly",
"dns_test_warning_toast": "Upstream \"{{key}}\" does not respond to test requests and may not work properly",
"unblock": "Unblock",
"block": "Block",
@@ -243,6 +244,7 @@
"allow_this_client": "Allow this client",
"block_for_this_client_only": "Block for this client only",
"unblock_for_this_client_only": "Unblock for this client only",
+ "add_persistent_client": "Add as persistent client",
"time_table_header": "Time",
"date": "Date",
"domain_name_table_header": "Domain name",
@@ -465,6 +467,7 @@
"form_add_id": "Add identifier",
"form_client_name": "Enter client name",
"name": "Name",
+ "client_name": "Client {{id}}",
"client_global_settings": "Use global settings",
"client_deleted": "Client \"{{key}}\" successfully deleted",
"client_added": "Client \"{{key}}\" successfully added",
diff --git a/client/src/__locales/es.json b/client/src/__locales/es.json
index efbd744c..be20a424 100644
--- a/client/src/__locales/es.json
+++ b/client/src/__locales/es.json
@@ -236,6 +236,7 @@
"updated_upstream_dns_toast": "Servidores DNS de subida guardados correctamente",
"dns_test_ok_toast": "Los servidores DNS especificados funcionan correctamente",
"dns_test_not_ok_toast": "Servidor \"{{key}}\": no se puede utilizar, por favor revisa si lo has escrito correctamente",
+ "dns_test_parsing_error_toast": "No se pudo utilizar la sección {{section}}: línea {{line}}:, verifica si la escribiste correctamente",
"dns_test_warning_toast": "DNS de subida \"{{key}}\" no responde a las peticiones de prueba y es posible que no funcione correctamente",
"unblock": "Desbloquear",
"block": "Bloquear",
@@ -243,6 +244,7 @@
"allow_this_client": "Permitir a este cliente",
"block_for_this_client_only": "Bloquear solo para este cliente",
"unblock_for_this_client_only": "Desbloquear solo para este cliente",
+ "add_persistent_client": "Añadir como cliente persistente",
"time_table_header": "Hora",
"date": "Fecha",
"domain_name_table_header": "Nombre del dominio",
@@ -465,6 +467,7 @@
"form_add_id": "Añadir identificador",
"form_client_name": "Ingresa el nombre del cliente",
"name": "Nombre",
+ "client_name": "Cliente {{id}}",
"client_global_settings": "Usar configuración global",
"client_deleted": "Cliente \"{{key}}\" eliminado correctamente",
"client_added": "Cliente \"{{key}}\" añadido correctamente",
diff --git a/client/src/__locales/fa.json b/client/src/__locales/fa.json
index 907b95cf..ae4a2258 100644
--- a/client/src/__locales/fa.json
+++ b/client/src/__locales/fa.json
@@ -220,6 +220,7 @@
"updated_upstream_dns_toast": "سرورهای DNS جریان ارسالی بروز رسانی شده است",
"dns_test_ok_toast": "سرورهای DNS تعیین شده بدرستی کار می کنند",
"dns_test_not_ok_toast": "سرور \"{{key}}\": نمیتواند مورد استفاده قرار گیرد،لطفا بررسی کنید آن را بدرستی نوشته اید",
+ "dns_test_parsing_error_toast": "بخش {{section}}: خط {{line}}: نمیتواند مورد استفاده قرار گیرد،لطفا بررسی کنید آن را بهدرستی نوشتهاید",
"unblock": "رفع انسداد",
"block": "مسدود کردن",
"disallow_this_client": "این مشتری را رد کنید",
@@ -420,6 +421,7 @@
"form_add_id": "افزودن احرازکننده",
"form_client_name": "نام کلاینت را وارد کنید",
"name": "نام",
+ "client_name": "مشتری {{id}}",
"client_global_settings": "استفاده از تنظیمات سراسری",
"client_deleted": "کلاینت \"{{key}}\" را با موفقیت حذف کرد",
"client_added": "کلاینت \"{{key}}\" را با موفقیت اضافه کرد",
diff --git a/client/src/__locales/fi.json b/client/src/__locales/fi.json
index 6cecca15..07db2ab0 100644
--- a/client/src/__locales/fi.json
+++ b/client/src/__locales/fi.json
@@ -236,6 +236,7 @@
"updated_upstream_dns_toast": "Ylävirtapalvelimet tallennettiin",
"dns_test_ok_toast": "Määritetyt DNS-palvelimet toimivat oikein",
"dns_test_not_ok_toast": "Palvelin \"{{key}}\": Ei voitu käyttää, tarkista oikeinkirjoitus",
+ "dns_test_parsing_error_toast": "Osio {{section}}: rivi {{line}}: Ei voitu käyttää, tarkista oikeinkirjoitus",
"dns_test_warning_toast": "Datavuon \"{{key}}\" ei vastaa testipyyntöihin eikä välttämättä toimi kunnolla",
"unblock": "Salli",
"block": "Estä",
@@ -243,6 +244,7 @@
"allow_this_client": "Salli tämä päätelaite",
"block_for_this_client_only": "Estä vain tältä päätelaitteelta",
"unblock_for_this_client_only": "Salli vain tälle päätelaitteelle",
+ "add_persistent_client": "Lisää pysyvänä päätelaitteena",
"time_table_header": "Aika",
"date": "Päiväys",
"domain_name_table_header": "Verkkotunnus",
@@ -446,7 +448,7 @@
"manual_update": "Seuraa näitä ohjeita päivittääksesi manuaalisesti.",
"processing_update": "Odota kun AdGuard Home päivittyy",
"clients_title": "Pysyvät päätelaitteet",
- "clients_desc": "Määritä pysyvät AdGuard Homeen yhdistetyt päätelaitetiedot.",
+ "clients_desc": "Määritä AdGuard Homeen pysyvästi yhdistettyjen päätelaitteiden tiedot.",
"settings_global": "Yleinen",
"settings_custom": "Mukautettu",
"table_client": "Asiakas",
@@ -465,6 +467,7 @@
"form_add_id": "Lisää tunniste",
"form_client_name": "Syötä päätelaitteen nimi",
"name": "Nimi",
+ "client_name": "Päätelaite {{id}}",
"client_global_settings": "Käytä yleisiä asetuksia",
"client_deleted": "Päätelaite \"{{key}}\" poistettiin",
"client_added": "Päätelaite \"{{key}}\" lisättiin",
diff --git a/client/src/__locales/fr.json b/client/src/__locales/fr.json
index a7766cb9..6bc2d8cf 100644
--- a/client/src/__locales/fr.json
+++ b/client/src/__locales/fr.json
@@ -236,6 +236,7 @@
"updated_upstream_dns_toast": "Serveurs en amont enregistrés",
"dns_test_ok_toast": "Les serveurs DNS spécifiés fonctionnent correctement",
"dns_test_not_ok_toast": "Impossible d'utiliser le serveur « {{key}} »: veuillez vérifier si le nom saisi est bien correct",
+ "dns_test_parsing_error_toast": "La section {{section}}: ligne {{line}}: n'a pas pu être utilisée, veuillez vérifier que vous l'avez écrite correctement",
"dns_test_warning_toast": "L'amont « {{key}} » ne répond pas aux demandes de test et peut ne pas fonctionner correctement",
"unblock": "Débloquer",
"block": "Bloquer",
@@ -243,6 +244,7 @@
"allow_this_client": "Autoriser ce client",
"block_for_this_client_only": "Bloquer uniquement pour ce client",
"unblock_for_this_client_only": "Débloquer uniquement pour ce client",
+ "add_persistent_client": "Ajouter comme client persistant",
"time_table_header": "Temps",
"date": "Date",
"domain_name_table_header": "Nom de domaine",
@@ -465,6 +467,7 @@
"form_add_id": "Ajouter identifiant",
"form_client_name": "Saisissez le nom du client",
"name": "Nom",
+ "client_name": "Client {{id}}",
"client_global_settings": "Utiliser les paramètres généraux",
"client_deleted": "Le client « {{key}} » a été supprimé",
"client_added": "Le client « {{key}} » a été ajouté",
diff --git a/client/src/__locales/hr.json b/client/src/__locales/hr.json
index 7fe2c68a..c29167cf 100644
--- a/client/src/__locales/hr.json
+++ b/client/src/__locales/hr.json
@@ -236,6 +236,7 @@
"updated_upstream_dns_toast": "Uzvodni poslužitelji uspješno su spremljeni",
"dns_test_ok_toast": "Odabrani DNS poslužitelji su trenutno aktivni",
"dns_test_not_ok_toast": "\"{{key}}\" poslužitelja: ne može se upotrijebiti, provjerite jeste li to ispravno napisali",
+ "dns_test_parsing_error_toast": "Odjeljak {{section}}: redak {{line}}: nije moguće koristiti, provjerite jeste li ispravno napisali",
"dns_test_warning_toast": "Upstream \"{{key}}\" ne odgovara na zahtjeve za testiranje i možda neće raditi ispravno",
"unblock": "Odblokiraj",
"block": "Blokiraj",
@@ -243,6 +244,7 @@
"allow_this_client": "Omogući ovog klijenta",
"block_for_this_client_only": "Blokiraj samo za ovog klijenta",
"unblock_for_this_client_only": "Odblokiraj samo za ovog klijenta",
+ "add_persistent_client": "Dodaj u spremljene klijente",
"time_table_header": "Vrijeme",
"date": "Datum",
"domain_name_table_header": "Naziv domene",
@@ -462,6 +464,7 @@
"form_add_id": "Dodaj identifikator",
"form_client_name": "Unesite naziv klijenta",
"name": "Naziv",
+ "client_name": "Klijent {{id}}",
"client_global_settings": "Koristi globalne postavke",
"client_deleted": "Klijent \"{{key}}\" je uspješno uklonjen",
"client_added": "Klijent \"{{key}}\" je uspješno dodan",
diff --git a/client/src/__locales/hu.json b/client/src/__locales/hu.json
index 40bf8512..7c94437e 100644
--- a/client/src/__locales/hu.json
+++ b/client/src/__locales/hu.json
@@ -236,6 +236,7 @@
"updated_upstream_dns_toast": "Upstream szerverek sikeresen mentve",
"dns_test_ok_toast": "A megadott DNS-kiszolgálók megfelelően működnek",
"dns_test_not_ok_toast": "Szerver \"{{key}}\": nem használható, ellenőrizze, hogy helyesen írta-e be",
+ "dns_test_parsing_error_toast": "Szekció {{section}}: sor {{line}}: nem használható, ellenőrizze, hogy helyesen írta-e be",
"dns_test_warning_toast": "A \"{{key}}\" feltöltés nem válaszol a tesztkérelmekre, és lehet, hogy nem működik megfelelően",
"unblock": "Feloldás",
"block": "Blokkolás",
@@ -243,6 +244,7 @@
"allow_this_client": "Engedélyezés ennek a kliensnek",
"block_for_this_client_only": "Tiltás csak ennek a kliensnek",
"unblock_for_this_client_only": "Feloldás csak ennek a kliensnek",
+ "add_persistent_client": "Hozzáadás állandó ügyfélként",
"time_table_header": "Idő",
"date": "Dátum",
"domain_name_table_header": "Domain név",
@@ -462,6 +464,7 @@
"form_add_id": "Azonosító hozzáadása",
"form_client_name": "Adja meg a kliens nevét",
"name": "Név",
+ "client_name": "Ügyfél {{id}}",
"client_global_settings": "Globális beállítások használata",
"client_deleted": "A(z) \"{{key}}\" kliens sikeresen el lett távolítva",
"client_added": "A(z) \"{{key}}\" kliens sikeresen hozzá lett adva",
diff --git a/client/src/__locales/id.json b/client/src/__locales/id.json
index 960df7ee..3b8cb123 100644
--- a/client/src/__locales/id.json
+++ b/client/src/__locales/id.json
@@ -224,10 +224,10 @@
"example_upstream_regular": "DNS reguler (melalui UDP);",
"example_upstream_regular_port": "DNS biasa (lebih dari UDP, dengan port);",
"example_upstream_udp": "DNS biasa (lebih dari UDP, nama host);",
- "example_upstream_dot": "terenkripsi <0>DNS-over-TLS0>;",
- "example_upstream_doh": "terenkripsi <0>DNS-over-HTTPS0>;",
- "example_upstream_doh3": "DNS-over-HTTPS terenkripsi dengan paksa <0>HTTP/30> dan tidak ada fallback ke HTTP/2 atau lebih rendah;",
- "example_upstream_doq": "terenkripsi <0>DNS-over-QUIC0>;",
+ "example_upstream_dot": "<0>DNS melalui TLS0> terenkripsi;",
+ "example_upstream_doh": "<0>DNS melalui HTTPS0> terenkripsi;",
+ "example_upstream_doh3": "DNS melalui HTTPS terenkripsi dengan <0>HTTP/30> secara paksa dan tidak ada cadangan ke HTTP/2 atau lebih rendah;",
+ "example_upstream_doq": "<0>DNS melalui QUIC0> terenkripsi;",
"example_upstream_sdns": "<0>Stempel DNS0> untuk <1>DNSCrypt1> atau pengarah <2>DNS-over-HTTPS2>;",
"example_upstream_tcp": "DNS reguler (melalui TCP);",
"example_upstream_tcp_port": "DNS biasa (melalui TCP, dengan port);",
@@ -236,6 +236,7 @@
"updated_upstream_dns_toast": "Server upstream berhasil disimpan",
"dns_test_ok_toast": "Server DNS yang ditentukan bekerja dengan benar",
"dns_test_not_ok_toast": "Server \"{{key}}\": tidak dapat digunakan, mohon cek bahwa Anda telah menulisnya dengan benar",
+ "dns_test_parsing_error_toast": "Bagian {{section}}: baris {{line}}: tidak dapat digunakan, mohon cek bahwa Anda telah menulisnya dengan benar",
"dns_test_warning_toast": "Upstream \"{{key}}\" tidak menanggapi permintaan pengujian dan mungkin tidak berfungsi dengan baik",
"unblock": "Buka Blokir",
"block": "Blok",
@@ -243,6 +244,7 @@
"allow_this_client": "Ijinkan klien ini",
"block_for_this_client_only": "Blok hanya untuk klien ini",
"unblock_for_this_client_only": "Jangan diblok hanya untuk klien ini",
+ "add_persistent_client": "Tambahkan sebagai klien persisten",
"time_table_header": "Waktu",
"date": "Tanggal",
"domain_name_table_header": "Nama domain",
@@ -289,7 +291,7 @@
"custom_ip": "Custom IP",
"blocking_ipv4": "Blokiran IPv4",
"blocking_ipv6": "Blokiran IPv6",
- "blocked_response_ttl": "TTL Respons yang diblokir",
+ "blocked_response_ttl": "Respons TTL yang diblokir",
"blocked_response_ttl_desc": "Menentukan berapa detik klien harus menyimpan respons yang difilter dalam cache",
"form_enter_blocked_response_ttl": "Masukkan TTL respons yang diblokir (detik)",
"dnscrypt": "DNSCrypt",
@@ -424,7 +426,7 @@
"encryption_reset": "Anda yakin ingin mengatur ulang pengaturan enkripsi?",
"encryption_warning": "Peringatan",
"encryption_plain_dns_enable": "Aktifkan DNS biasa",
- "encryption_plain_dns_desc": "DNS Biasa diaktifkan secara standar. Anda dapat menonaktifkannya untuk memaksa semua perangkat menggunakan DNS terenkripsi. Untuk melakukan ini, Anda harus mengaktifkan setidaknya satu protokol DNS terenkripsi",
+ "encryption_plain_dns_desc": "DNS biasa diaktifkan secara standar. Anda dapat menonaktifkannya untuk memaksa semua perangkat menggunakan DNS terenkripsi. Untuk melakukan ini, Anda harus mengaktifkan setidaknya satu protokol DNS terenkripsi",
"encryption_plain_dns_error": "Untuk menonaktifkan DNS biasa, aktifkan setidaknya satu protokol DNS terenkripsi",
"topline_expiring_certificate": "Sertifikat SSL Anda hampir kedaluwarsa. Perbarui <0>Pengaturan enkripsi0>.",
"topline_expired_certificate": "Sertifikat SSL Anda kedaluwarsa. Perbarui <0>Pengaturan enkripsi0>.",
@@ -442,7 +444,7 @@
"fix": "Perbaiki",
"dns_providers": "Berikut adalah <0>daftar penyedia DNS yang dikenal0> untuk dipilih.",
"update_now": "Perbarui sekarang",
- "update_failed": "Pembaruan otomatis gagal. Silahkan ikuti petunjuk ini untuk perbarui secara manual.",
+ "update_failed": "Pembaruan otomatis gagal. Silakan ikuti langkah-langkah berikut untuk memperbarui secara manual.",
"manual_update": "Silakan mengikuti langkah berikut untuk memperbarui secara manual.",
"processing_update": "Silahkan tunggu, AdGuard Home sedang diperbarui",
"clients_title": "Klien yang gigih",
@@ -465,6 +467,7 @@
"form_add_id": "Tambahkan pengenal",
"form_client_name": "Masukkan nama klien",
"name": "Nama",
+ "client_name": "Klien {{id}}",
"client_global_settings": "Gunakan pengaturan global",
"client_deleted": "Klien \"{{key}}\" berhasil dihapus",
"client_added": "Klien \"{{key}}\" berhasil ditambahkan",
@@ -545,7 +548,7 @@
"domain": "Domain",
"ecs": "ECS",
"punycode": "Kode kecil",
- "answer": "Jawab",
+ "answer": "Jawaban",
"filter_added_successfully": "Filter telah berhasil ditambahkan",
"filter_removed_successfully": "Daftar ini telah sukses dihapus",
"filter_updated": "Daftar telah sukses diperbarui",
@@ -679,7 +682,7 @@
"form_error_password_length": "Kata sandi harus terdiri dari {{min}} hingga {{max}}",
"anonymizer_notification": "<0>Catatan:0> Anonimisasi IP diaktifkan. Anda dapat menonaktifkannya di <1>Pengaturan umum1> .",
"confirm_dns_cache_clear": "Apakah Anda yakin ingin menghapus cache DNS?",
- "cache_cleared": "Cache DNS berhasil dibersihkan",
+ "cache_cleared": "Cache DNS berhasil dihapus",
"clear_cache": "Hapus cache",
"make_static": "Jadikan statis",
"theme_auto_desc": "Otomatis (berdasarkan skema warna perangkat anda)",
diff --git a/client/src/__locales/it.json b/client/src/__locales/it.json
index a29004af..88e4e053 100644
--- a/client/src/__locales/it.json
+++ b/client/src/__locales/it.json
@@ -236,6 +236,7 @@
"updated_upstream_dns_toast": "I server upstream sono stati salvati correttamente",
"dns_test_ok_toast": "I server DNS specificati funzionano correttamente",
"dns_test_not_ok_toast": "Server \"{{key}}\": non può essere utilizzato, assicurati di averlo digitato correttamente",
+ "dns_test_parsing_error_toast": "Sezione {{section}}: riga {{line}}: non può essere usata, controlla se l'hai scritta correttamente",
"dns_test_warning_toast": "Upstream \"{{key}}\" non risponde alle richieste di test e potrebbe non funzionare correttamente",
"unblock": "Sblocca",
"block": "Blocca",
@@ -243,6 +244,7 @@
"allow_this_client": "Consenti questo client",
"block_for_this_client_only": "Blocca solo per questo client",
"unblock_for_this_client_only": "Sblocca solo per questo client",
+ "add_persistent_client": "Aggiungi come client persistente",
"time_table_header": "Ora",
"date": "Data",
"domain_name_table_header": "Nome dominio",
@@ -465,6 +467,7 @@
"form_add_id": "Aggiungi identificatore",
"form_client_name": "Inserisci nome client",
"name": "Nome",
+ "client_name": "Client {{id}}",
"client_global_settings": "Utilizza le impostazioni globali",
"client_deleted": "Client \"{{key}}\" eliminato correttamente",
"client_added": "Client \"{{key}}\" aggiunto correttamente",
diff --git a/client/src/__locales/ja.json b/client/src/__locales/ja.json
index 3e0521ec..06cbc108 100644
--- a/client/src/__locales/ja.json
+++ b/client/src/__locales/ja.json
@@ -236,6 +236,7 @@
"updated_upstream_dns_toast": "アップストリームサーバーを保存しました。",
"dns_test_ok_toast": "指定されたDNSサーバは正しく動作しています",
"dns_test_not_ok_toast": "サーバ \"{{key}}\": 使用できませんでした。正しく入力されているかどうかを確認してください",
+ "dns_test_parsing_error_toast": "セクション {{section}}: 行 {{line}}: を使用できませんでした。正しく記述されているか確認してください",
"dns_test_warning_toast": "アップストリーム\"{{key}}\"はテストリクエストに応答せず、正しく動作しない可能性があります。",
"unblock": "ブロック解除",
"block": "ブロック",
@@ -243,6 +244,7 @@
"allow_this_client": "このクライアントを許可する",
"block_for_this_client_only": "このクライアントに対してのみブロックする",
"unblock_for_this_client_only": "このクライアントに対してのみブロックを解除する",
+ "add_persistent_client": "永続クライアントとして追加する",
"time_table_header": "時刻",
"date": "購入日時",
"domain_name_table_header": "ドメイン名",
@@ -465,6 +467,7 @@
"form_add_id": "識別子を追加する",
"form_client_name": "クライアント名を入力してください",
"name": "名前",
+ "client_name": "クライアント {{id}}",
"client_global_settings": "グローバル設定を使用する",
"client_deleted": "クライアント \"{{key}}\" の削除に成功しました",
"client_added": "クライアント \"{{key}}\" の追加に成功しました",
diff --git a/client/src/__locales/ko.json b/client/src/__locales/ko.json
index 7ce4ad02..bbab696a 100644
--- a/client/src/__locales/ko.json
+++ b/client/src/__locales/ko.json
@@ -236,6 +236,7 @@
"updated_upstream_dns_toast": "업스트림 서버가 성공적으로 저장되었습니다",
"dns_test_ok_toast": "지정된 DNS 서버가 올바르게 작동하고 있습니다.",
"dns_test_not_ok_toast": "서버 '{{key}}': 사용할 수 없습니다, 제대로 작성했는지 확인하세요",
+ "dns_test_parsing_error_toast": "섹션 {{section}}: 줄 {{line}}: 사용할 수 없으며, 올바르게 작성했는지 확인하세요.",
"dns_test_warning_toast": "업스트림 '{{key}}'이(가) 테스트 요청에 응답하지 않으며 제대로 작동하지 않을 수 있습니다",
"unblock": "차단 해제",
"block": "차단",
@@ -243,6 +244,7 @@
"allow_this_client": "클라이언트 허용",
"block_for_this_client_only": "이 클라이언트에 대해서만 차단",
"unblock_for_this_client_only": "이 클라이언트에 대해서만 차단 해제",
+ "add_persistent_client": "저장된 클라이언트에 추가",
"time_table_header": "시간",
"date": "날짜",
"domain_name_table_header": "도메인명",
@@ -465,6 +467,7 @@
"form_add_id": "식별자 추가",
"form_client_name": "클라이언트 이름 입력",
"name": "이름",
+ "client_name": "클라이언트 {{id}}",
"client_global_settings": "글로벌 설정 사용",
"client_deleted": "클라이언트 '{{key}}'이(가) 정상적으로 삭제되었습니다",
"client_added": "클라이언트 '{{key}}'이(가) 정상적으로 추가되었습니다",
diff --git a/client/src/__locales/nl.json b/client/src/__locales/nl.json
index 5e545f98..2ff6c752 100644
--- a/client/src/__locales/nl.json
+++ b/client/src/__locales/nl.json
@@ -236,6 +236,7 @@
"updated_upstream_dns_toast": "Upstream-servers succesvol opgeslagen",
"dns_test_ok_toast": "Opgegeven DNS-servers werken correct",
"dns_test_not_ok_toast": "Server \"{{key}}\": kon niet worden gebruikt, controleer of je het correct hebt geschreven",
+ "dns_test_parsing_error_toast": "Sectie {{section}}: regel {{line}}: kan niet worden gebruikt. Controleer of je het correct hebt geschreven",
"dns_test_warning_toast": "Upstream \"{{key}}\" reageert niet op testverzoeken en werkt mogelijk niet goed",
"unblock": "Deblokkeren",
"block": "Blokkeren",
@@ -243,6 +244,7 @@
"allow_this_client": "Toepassing/systeem toelaten",
"block_for_this_client_only": "Alleen voor deze cliënt blokkeren",
"unblock_for_this_client_only": "Alleen voor deze cliënt deblokkeren",
+ "add_persistent_client": "Toevoegen als permanente client",
"time_table_header": "Tijd",
"date": "Datum",
"domain_name_table_header": "Domein naam",
@@ -465,6 +467,7 @@
"form_add_id": "ID toevoegen",
"form_client_name": "Vul gebruikersnaam in",
"name": "Naam",
+ "client_name": "Client {{id}}",
"client_global_settings": "Gebruik globale instelling",
"client_deleted": "Gebruiker \"{{key}}\" met succes verwijderd",
"client_added": "Gebruiker \"{{key}}\" met succes toegevoegd",
diff --git a/client/src/__locales/no.json b/client/src/__locales/no.json
index 0d9a5d39..8708e4d8 100644
--- a/client/src/__locales/no.json
+++ b/client/src/__locales/no.json
@@ -212,6 +212,7 @@
"updated_upstream_dns_toast": "Oppdaterte oppstrøms-DNS-tjenerne",
"dns_test_ok_toast": "De spesifiserte DNS-tjenerne fungerer riktig",
"dns_test_not_ok_toast": "Tjeneren «{{key}}» kunne ikke brukes, vennligst dobbeltsjekk at du har skrevet den riktig",
+ "dns_test_parsing_error_toast": "Seksjon {{section}}: linje {{line}}: kunne ikke brukes, vennligst sjekk at du har skrevet det riktig",
"unblock": "Tillat",
"block": "Blokker",
"disallow_this_client": "Ikke tillat denne klienten",
diff --git a/client/src/__locales/pl.json b/client/src/__locales/pl.json
index d657eb06..8d0b5b14 100644
--- a/client/src/__locales/pl.json
+++ b/client/src/__locales/pl.json
@@ -236,6 +236,7 @@
"updated_upstream_dns_toast": "Serwery nadrzędne zostały pomyślnie zapisane",
"dns_test_ok_toast": "Określone serwery DNS działają poprawnie",
"dns_test_not_ok_toast": "Serwer \"{{key}}\": nie może być użyte, sprawdź, czy zapisano go poprawnie",
+ "dns_test_parsing_error_toast": "Sekcja {{section}}: linia {{line}}: nie może być użyte, sprawdź, czy zapisano go poprawnie",
"dns_test_warning_toast": "Upstream \"{{key}}\" nie odpowiada na zapytania testowe i może nie działać prawidłowo",
"unblock": "Odblokuj",
"block": "Zablokuj",
@@ -243,6 +244,7 @@
"allow_this_client": "Pozwól temu klientowi",
"block_for_this_client_only": "Zablokuj tylko tego klienta",
"unblock_for_this_client_only": "Odblokuj tylko tego klienta",
+ "add_persistent_client": "Dodaj do zapisanych klientów",
"time_table_header": "Czas",
"date": "Data",
"domain_name_table_header": "Nazwa domeny",
@@ -423,6 +425,9 @@
"encryption_hostnames": "Nazwy hostów",
"encryption_reset": "Czy na pewno chcesz zresetować ustawienia szyfrowania?",
"encryption_warning": "Ostrzeżenie",
+ "encryption_plain_dns_enable": "Włącz zwykły DNS",
+ "encryption_plain_dns_desc": "Zwykły DNS jest domyślnie włączony. Możesz go wyłączyć, aby zmusić wszystkie urządzenia do korzystania z szyfrowanego DNS. Aby to zrobić, musisz włączyć co najmniej jeden szyfrowany protokół DNS",
+ "encryption_plain_dns_error": "Aby wyłączyć zwykły DNS, włącz co najmniej jeden szyfrowany protokół DNS",
"topline_expiring_certificate": "Twój certyfikat SSL wkrótce wygaśnie. Zaktualizuj <0>Ustawienia szyfrowania0>.",
"topline_expired_certificate": "Twój certyfikat SSL wygasł. Zaktualizuj <0>Ustawienia szyfrowania0>.",
"form_error_port_range": "Wpisz numer portu z zakresu 80-65535",
@@ -462,6 +467,7 @@
"form_add_id": "Dodaj identyfikator",
"form_client_name": "Wpisz nazwę klienta",
"name": "Nazwa",
+ "client_name": "Klient {{id}}",
"client_global_settings": "Użyj ustawień globalnych",
"client_deleted": "Klient \"{{key}}\" został pomyślnie usunięty",
"client_added": "Klient \"{{key}}\" został pomyślnie dodany",
diff --git a/client/src/__locales/pt-br.json b/client/src/__locales/pt-br.json
index 5541d5a3..caf1be0a 100644
--- a/client/src/__locales/pt-br.json
+++ b/client/src/__locales/pt-br.json
@@ -236,6 +236,7 @@
"updated_upstream_dns_toast": "Servidores DNS primário salvos com sucesso",
"dns_test_ok_toast": "Os servidores DNS especificados estão funcionando corretamente",
"dns_test_not_ok_toast": "O servidor \"{{key}}\": não pôde ser utilizado. Por favor, verifique se você escreveu corretamente",
+ "dns_test_parsing_error_toast": "A seção {{section}}: linha {{line}}: não pôde ser usada. Verifique se foi escrita corretamente",
"dns_test_warning_toast": "Servidor DNS primário \"{{key}}\" não responde aos Solicitações de teste e pode não funcionar corretamente",
"unblock": "Desbloquear",
"block": "Bloquear",
@@ -243,6 +244,7 @@
"allow_this_client": "Permitir este cliente",
"block_for_this_client_only": "Bloquear apenas para este cliente",
"unblock_for_this_client_only": "Desbloquear apenas para este cliente",
+ "add_persistent_client": "Adicionar como cliente persistente",
"time_table_header": "Data",
"date": "Data",
"domain_name_table_header": "Nome de domínio",
@@ -465,6 +467,7 @@
"form_add_id": "Adicionar identificador",
"form_client_name": "Digite o nome do cliente",
"name": "Nome",
+ "client_name": "Cliente {{id}}",
"client_global_settings": "Usar configurações global",
"client_deleted": "Cliente \"{{key}}\" excluído com sucesso",
"client_added": "Cliente \"{{key}}\" adicionado com sucesso",
diff --git a/client/src/__locales/pt-pt.json b/client/src/__locales/pt-pt.json
index 138143cd..fe5d1263 100644
--- a/client/src/__locales/pt-pt.json
+++ b/client/src/__locales/pt-pt.json
@@ -236,6 +236,7 @@
"updated_upstream_dns_toast": "Servidores DNS primário guardados com sucesso",
"dns_test_ok_toast": "Os servidores DNS especificados estão a funcionar corretamente",
"dns_test_not_ok_toast": "O servidor \"{{key}}\": não pôde ser utilizado. Por favor, verifique se o escreveu corretamente",
+ "dns_test_parsing_error_toast": "A seção {{section}}: linha {{line}}: não pôde ser usada. Verifique se foi escrita corretamente",
"dns_test_warning_toast": "Servidor DNS primário \"{{key}}\" não responde aos solicitações de teste e pode não funcionar corretamente",
"unblock": "Desbloquear",
"block": "Bloquear",
@@ -243,6 +244,7 @@
"allow_this_client": "Permitir este cliente",
"block_for_this_client_only": "Bloquear apenas para este cliente",
"unblock_for_this_client_only": "Desbloquear apenas para este cliente",
+ "add_persistent_client": "Adicionar como cliente persistente",
"time_table_header": "Data",
"date": "Data",
"domain_name_table_header": "Nome do domínio",
@@ -465,6 +467,7 @@
"form_add_id": "Adicionar identificador",
"form_client_name": "Insira o nome do cliente",
"name": "Nome",
+ "client_name": "Cliente {{id}}",
"client_global_settings": "Usar definições globais",
"client_deleted": "Cliente \"{{key}}\" excluído com sucesso",
"client_added": "Cliente \"{{key}}\" adicionado com sucesso",
diff --git a/client/src/__locales/ro.json b/client/src/__locales/ro.json
index 03331064..7ec981a7 100644
--- a/client/src/__locales/ro.json
+++ b/client/src/__locales/ro.json
@@ -236,6 +236,7 @@
"updated_upstream_dns_toast": "Serverele din amonte au fost salvate cu succes",
"dns_test_ok_toast": "Serverele DNS specificate funcționează corect",
"dns_test_not_ok_toast": "Serverul \"{{key}}\": nu a putut fi utilizat, verificați dacă l-ați scris corect",
+ "dns_test_parsing_error_toast": "Secțiune {{section}}: linie {{line}}: nu a putut fi folosit, vă rugăm să verificați dacă l-ați scris corect",
"dns_test_warning_toast": "„{{key}}” în amonte nu răspunde la solicitările de testare și s-ar putea să nu funcționeze corect",
"unblock": "Deblocați",
"block": "Blocați",
@@ -243,6 +244,7 @@
"allow_this_client": "Permiteți acest client",
"block_for_this_client_only": "Blocați numai pentru acest client",
"unblock_for_this_client_only": "Deblocați numai pentru acest client",
+ "add_persistent_client": "Adăugați ca client persistent",
"time_table_header": "Ora",
"date": "Data",
"domain_name_table_header": "Nume domeniu",
@@ -462,6 +464,7 @@
"form_add_id": "Adăugați identificator",
"form_client_name": "Introduceți nume client",
"name": "Nume",
+ "client_name": "Client {{id}}",
"client_global_settings": "Folosiți setări globale",
"client_deleted": "Clientul \"{{key}}\" a fost șters cu succes",
"client_added": "Clientul \"{{key}}\" a fost adăugat cu succes",
diff --git a/client/src/__locales/ru.json b/client/src/__locales/ru.json
index 9e4be536..ba9dee82 100644
--- a/client/src/__locales/ru.json
+++ b/client/src/__locales/ru.json
@@ -236,6 +236,7 @@
"updated_upstream_dns_toast": "DNS-серверы успешно обновлены",
"dns_test_ok_toast": "Указанные серверы DNS работают корректно",
"dns_test_not_ok_toast": "Сервер «{{key}}»: невозможно использовать, проверьте правильность написания",
+ "dns_test_parsing_error_toast": "Раздел {{section}}: строка {{line}}: невозможно использовать, проверьте правильность написания",
"dns_test_warning_toast": "Upstream «{{key}}» не отвечает на тестовые запросы и может работать некорректно",
"unblock": "Разблокировать",
"block": "Заблокировать",
@@ -243,6 +244,7 @@
"allow_this_client": "Разрешить доступ клиенту",
"block_for_this_client_only": "Заблокировать только для этого клиента",
"unblock_for_this_client_only": "Разблокировать только для этого клиента",
+ "add_persistent_client": "Добавить в сохранённые клиенты",
"time_table_header": "Время",
"date": "Дата",
"domain_name_table_header": "Домен",
@@ -465,6 +467,7 @@
"form_add_id": "Добавить идентификатор",
"form_client_name": "Введите имя клиента",
"name": "Имя",
+ "client_name": "Клиент {{id}}",
"client_global_settings": "Использовать глобальные настройки",
"client_deleted": "Клиент «{{key}}» успешно удалён",
"client_added": "Клиент «{{key}}» успешно добавлен",
diff --git a/client/src/__locales/sk.json b/client/src/__locales/sk.json
index fb573726..614ff3ec 100644
--- a/client/src/__locales/sk.json
+++ b/client/src/__locales/sk.json
@@ -26,7 +26,7 @@
"enabled_dhcp": "DHCP server zapnutý",
"disabled_dhcp": "DHCP server vypnutý",
"unavailable_dhcp": "DHCP nie je dostupné",
- "unavailable_dhcp_desc": "AdGuard Home nemôže vo vašom OS prevádzkovať DHCP server",
+ "unavailable_dhcp_desc": "AdGuard Home nemôže vo Vašom OS prevádzkovať DHCP server",
"dhcp_title": "DHCP server (experimentálne!)",
"dhcp_description": "Ak Váš smerovač neposkytuje možnosť nastaviť DHCP, môžete použiť vlastný zabudovaný DHCP server AdGuard.",
"dhcp_enable": "Zapnúť DHCP server",
@@ -236,6 +236,7 @@
"updated_upstream_dns_toast": "Upstream servery boli úspešne uložené",
"dns_test_ok_toast": "Špecifikované DNS servery pracujú korektne",
"dns_test_not_ok_toast": "Server \"{{key}}\": nemohol byť použitý, skontrolujte, či ste ho správne napísali",
+ "dns_test_parsing_error_toast": "Sekcia {{section}}: riadok {{line}}: nepodarilo sa použiť, skontrolujte, či ste ho napísali správne",
"dns_test_warning_toast": "Upstream \"{{key}}\" neodpovedá na testovacie dopyty a nemusí fungovať správne",
"unblock": "Odblokovať",
"block": "Blokovať",
@@ -243,6 +244,7 @@
"allow_this_client": "Povoliť tohto klienta",
"block_for_this_client_only": "Blokovať len pre tohto klienta",
"unblock_for_this_client_only": "Odblokovať len pre tohto klienta",
+ "add_persistent_client": "Pridať ako trvalého klienta",
"time_table_header": "Čas",
"date": "Dátum",
"domain_name_table_header": "Meno domény",
@@ -465,6 +467,7 @@
"form_add_id": "Pridajte identifikátor",
"form_client_name": "Zadajte meno klienta",
"name": "Meno",
+ "client_name": "Klient {{id}}",
"client_global_settings": "Použiť globálne nastavenia",
"client_deleted": "\"{{key}}\" klienta bol úspešne vymazaný",
"client_added": "\"{{key}}\" klienta bol úspešne pridaný",
diff --git a/client/src/__locales/sl.json b/client/src/__locales/sl.json
index 4621e04b..99be87c6 100644
--- a/client/src/__locales/sl.json
+++ b/client/src/__locales/sl.json
@@ -236,6 +236,7 @@
"updated_upstream_dns_toast": "Gorvodni trežniki so uspešno shranjeni",
"dns_test_ok_toast": "Navedeni strežniki DNS delujejo pravilno",
"dns_test_not_ok_toast": "Ni mogoče uporabiti: strežnika \"{{key}}\". Preverite, ali ste ga pravilno napisali",
+ "dns_test_parsing_error_toast": "Razdelek {{section}}: vrstica {{line}}: ni bilo mogoče uporabiti, preverite, ali ste ga pravilno zapisali",
"dns_test_warning_toast": "Upstream \"{{key}}\" se ne odziva na testne zahteve in morda ne deluje pravilno",
"unblock": "Omogoči",
"block": "Onemogoči",
@@ -243,6 +244,7 @@
"allow_this_client": "Dovoli tega odjemalca",
"block_for_this_client_only": "Onemogoči samo za tega odjemalca",
"unblock_for_this_client_only": "Omogoči samo za tega odjemalca",
+ "add_persistent_client": "Dodaj kot vztrajnega odjemalca",
"time_table_header": "Čas",
"date": "Datum",
"domain_name_table_header": "Ime domene",
@@ -465,6 +467,7 @@
"form_add_id": "Dodaj identifikatorja",
"form_client_name": "Vnesite ime odjemalca",
"name": "Ime",
+ "client_name": "Odjemalec {{id}}",
"client_global_settings": "Uporabi splošne nastavitve",
"client_deleted": "Odjemalec \"{{key}}\" je bil uspešno izbrisan",
"client_added": "Odjemalec \"{{key}}\" je bil uspešno dodan",
diff --git a/client/src/__locales/sr-cs.json b/client/src/__locales/sr-cs.json
index 583822e7..312451be 100644
--- a/client/src/__locales/sr-cs.json
+++ b/client/src/__locales/sr-cs.json
@@ -236,6 +236,7 @@
"updated_upstream_dns_toast": "Upstream serveri su uspešno sačuvani",
"dns_test_ok_toast": "Dati DNS serveri rade ispravno",
"dns_test_not_ok_toast": "Server \"{{key}}\": se ne može koristiti. Proverite da li ste ga ispravno uneli",
+ "dns_test_parsing_error_toast": "Odeljak {{section}}: linija {{line}}: ne može se koristiti, molimo proverite da li ste ga ispravno napisali",
"dns_test_warning_toast": "Apstrim \"{{key}}\" ne odgovara na zahteve za testiranje i možda neće raditi kako treba",
"unblock": "Odblokiraj",
"block": "Blokiraj",
@@ -243,6 +244,7 @@
"allow_this_client": "Dozvoli ovaj klijent",
"block_for_this_client_only": "Blokiraj samo za ovaj klijent",
"unblock_for_this_client_only": "Odblokiraj samo za ovaj klijent",
+ "add_persistent_client": "Dodati u sačuvane klijente",
"time_table_header": "Vreme",
"date": "Datum",
"domain_name_table_header": "Ime domena",
@@ -462,6 +464,7 @@
"form_add_id": "Dodaj identifikator",
"form_client_name": "Unesite ime klijenta",
"name": "Ime",
+ "client_name": "Klijent {{id}}",
"client_global_settings": "Koristi globalne postavke",
"client_deleted": "Klijent \"{{key}}\" uspešno izbrisan",
"client_added": "Klijent \"{{key}}\" uspešno dodat",
diff --git a/client/src/__locales/sv.json b/client/src/__locales/sv.json
index a1a11a6f..8d5dbb5d 100644
--- a/client/src/__locales/sv.json
+++ b/client/src/__locales/sv.json
@@ -236,6 +236,7 @@
"updated_upstream_dns_toast": "Sparade uppströms dns-servrar",
"dns_test_ok_toast": "Angivna DNS servrar fungerar korrekt",
"dns_test_not_ok_toast": "Server \"{{key}}\": kunde inte användas. Var snäll och kolla att du skrivit in rätt",
+ "dns_test_parsing_error_toast": "Avsnitt {{section}}: rad {{line}}: kunde inte användas, kontrollera att du har skrivit det korrekt",
"dns_test_warning_toast": "Uppströms \"{{key}}\" svarar inte på testförfrågningar och kanske inte fungerar korrekt",
"unblock": "Avblockera",
"block": "Blockera",
@@ -243,6 +244,7 @@
"allow_this_client": "Tillåt den här klienten",
"block_for_this_client_only": "Blockera endast för denna klient",
"unblock_for_this_client_only": "Avblockera endast för denna klient",
+ "add_persistent_client": "Lägg till som beständig klient",
"time_table_header": "Tid",
"date": "Datum",
"domain_name_table_header": "Domännamn",
@@ -461,6 +463,7 @@
"form_add_id": "Lägg till identifierare",
"form_client_name": "Skriv in klientnamn",
"name": "Namn",
+ "client_name": "Klient {{id}}",
"client_global_settings": "Använda globala inställningar",
"client_deleted": "Klient \"{{key}}\" har raderats",
"client_added": "Klient \"{{key}}\" har lagts till",
diff --git a/client/src/__locales/tr.json b/client/src/__locales/tr.json
index b3ce3ba6..e43cb20e 100644
--- a/client/src/__locales/tr.json
+++ b/client/src/__locales/tr.json
@@ -236,6 +236,7 @@
"updated_upstream_dns_toast": "Üst sunucular başarıyla kaydedildi",
"dns_test_ok_toast": "Belirtilen DNS sunucuları düzgün çalışıyor",
"dns_test_not_ok_toast": "Sunucu \"{{key}}\": kullanılamıyor, lütfen doğru yazdığınızdan emin olun",
+ "dns_test_parsing_error_toast": "{{section}} bölümü: {{line}}. satır: kullanılamadı, lütfen doğru yazdığınızı kontrol edin",
"dns_test_warning_toast": "Üst kaynak \"{{key}}\", test isteklerine yanıt vermiyor ve düzgün çalışmayabilir",
"unblock": "Engeli kaldır",
"block": "Engelle",
@@ -243,6 +244,7 @@
"allow_this_client": "Bu istemciye izin ver",
"block_for_this_client_only": "Yalnızca bu istemci için engelle",
"unblock_for_this_client_only": "Yalnızca bu istemci için engellemeyi kaldır",
+ "add_persistent_client": "Kalıcı istemci olarak ekle",
"time_table_header": "Saat",
"date": "Tarih",
"domain_name_table_header": "Alan adı",
@@ -465,6 +467,7 @@
"form_add_id": "Tanımlayıcı ekle",
"form_client_name": "İstemci ismi girin",
"name": "Adı",
+ "client_name": "İstemci {{id}}",
"client_global_settings": "Genel ayarları kullan",
"client_deleted": "\"{{key}}\" istemcisi başarıyla silindi",
"client_added": "\"{{key}}\" istemcisi başarıyla eklendi",
diff --git a/client/src/__locales/uk.json b/client/src/__locales/uk.json
index dbec359c..87300a2f 100644
--- a/client/src/__locales/uk.json
+++ b/client/src/__locales/uk.json
@@ -236,6 +236,7 @@
"updated_upstream_dns_toast": "DNS-сервери успішно збережено",
"dns_test_ok_toast": "Вказані DNS сервери працюють правильно",
"dns_test_not_ok_toast": "Сервер «{{key}}»: неможливо використати. Перевірте правильність введення",
+ "dns_test_parsing_error_toast": "Розділ {{section}}: рядок {{line}}: неможливо використати. Перевірте правильність введення",
"dns_test_warning_toast": "Upstream «{{key}}» не відповідає на тестові запити та може працювати не правильно",
"unblock": "Дозволити",
"block": "Заборонити",
@@ -243,6 +244,7 @@
"allow_this_client": "Дозволити цей клієнт",
"block_for_this_client_only": "Заборонити тільки цей клієнт",
"unblock_for_this_client_only": "Дозволити тільки цей клієнт",
+ "add_persistent_client": "Додати в збережені клієнти",
"time_table_header": "Час",
"date": "Дата",
"domain_name_table_header": "Назва домену",
@@ -465,6 +467,7 @@
"form_add_id": "Додати ідентифікатор",
"form_client_name": "Введіть ім'я клієнта",
"name": "Ім'я",
+ "client_name": "Клієнт {{id}}",
"client_global_settings": "Використати загальні налаштування",
"client_deleted": "Клієнта «{{key}}» успішно видалено",
"client_added": "Клієнта «{{key}}» успішно додано",
diff --git a/client/src/__locales/vi.json b/client/src/__locales/vi.json
index fb68549f..4736281a 100644
--- a/client/src/__locales/vi.json
+++ b/client/src/__locales/vi.json
@@ -236,6 +236,7 @@
"updated_upstream_dns_toast": "Các máy chủ thượng nguồn đã được lưu thành công",
"dns_test_ok_toast": "Máy chủ DNS có thể sử dụng",
"dns_test_not_ok_toast": "Máy chủ \"{{key}}\"': không thể sử dụng, vui lòng kiểm tra lại",
+ "dns_test_parsing_error_toast": "Phần {{section}}: dòng {{line}}: không thể sử dụng được, vui lòng kiểm tra xem bạn đã viết đúng chưa",
"dns_test_warning_toast": "Ngược lại \"{{key}}\" không phản hồi các yêu cầu kiểm tra và có thể không hoạt động bình thường",
"unblock": "Bỏ chặn",
"block": "Chặn",
@@ -243,6 +244,7 @@
"allow_this_client": "Cho phép ứng dụng khách này",
"block_for_this_client_only": "Chỉ chặn ứng dụng khách này",
"unblock_for_this_client_only": "Chỉ hủy chặn ứng dụng khách này",
+ "add_persistent_client": "Thêm làm ứng dụng khách liên tục",
"time_table_header": "Thời gian",
"date": "Ngày",
"domain_name_table_header": "Tên miền",
@@ -462,6 +464,7 @@
"form_add_id": "Thêm định danh",
"form_client_name": "Nhập tên máy khách",
"name": "Tên",
+ "client_name": "Khách hàng {{id}}",
"client_global_settings": "Sử dụng cài đặt toàn cầu",
"client_deleted": "Máy khách \"{{key}}\" đã xóa thành công",
"client_added": "Máy khách \"{{key}}\" đã thêm thành công",
diff --git a/client/src/__locales/zh-cn.json b/client/src/__locales/zh-cn.json
index dda8a017..d93d0731 100644
--- a/client/src/__locales/zh-cn.json
+++ b/client/src/__locales/zh-cn.json
@@ -236,6 +236,7 @@
"updated_upstream_dns_toast": "上游服务器保存成功",
"dns_test_ok_toast": "指定的 DNS 服务器现已正常运行",
"dns_test_not_ok_toast": "服务器 \"{{key}}\":无法使用,请检查你输入的是否正确",
+ "dns_test_parsing_error_toast": "第 {{section}} 节:第 {{line}} 行:无法使用,请检查您输入的是否正确",
"dns_test_warning_toast": "上游 “{{key}}” 不响应测试请求,可能无法正常工作",
"unblock": "放行",
"block": "拦截",
@@ -243,6 +244,7 @@
"allow_this_client": "允许这个客户端",
"block_for_this_client_only": "仅对此客户端拦截",
"unblock_for_this_client_only": "仅解除对此客户端的拦截",
+ "add_persistent_client": "添加为持久客户端",
"time_table_header": "时间",
"date": "日期",
"domain_name_table_header": "域名",
@@ -465,6 +467,7 @@
"form_add_id": "添加标识符",
"form_client_name": "输入客户端名称",
"name": "名称",
+ "client_name": "客户端 {{id}}",
"client_global_settings": "使用全局设置",
"client_deleted": "客户端 \"{{key}}\" 删除成功",
"client_added": "客户端 \"{{key}}\" 添加成功",
diff --git a/client/src/__locales/zh-tw.json b/client/src/__locales/zh-tw.json
index ddaa6244..0028fed1 100644
--- a/client/src/__locales/zh-tw.json
+++ b/client/src/__locales/zh-tw.json
@@ -236,6 +236,7 @@
"updated_upstream_dns_toast": "上游的伺服器被成功地儲存",
"dns_test_ok_toast": "已明確指定的 DNS 伺服器正在正確地運作",
"dns_test_not_ok_toast": "伺服器 \"{{key}}\":無法被使用,請檢查您已正確地填寫它",
+ "dns_test_parsing_error_toast": "第 {{section}} 節:第 {{line}} 行:無法使用,請檢查您輸入的是否正確",
"dns_test_warning_toast": "上游 “{{key}}” 不回應測試請求,可能無法正常工作",
"unblock": "解除封鎖",
"block": "封鎖",
@@ -243,6 +244,7 @@
"allow_this_client": "允許此用戶端",
"block_for_this_client_only": "僅對此用戶端封鎖",
"unblock_for_this_client_only": "僅對此用戶端解除封鎖",
+ "add_persistent_client": "新增為永久性客戶端",
"time_table_header": "時間",
"date": "日期",
"domain_name_table_header": "域名",
@@ -465,6 +467,7 @@
"form_add_id": "新增識別碼",
"form_client_name": "輸入用戶端名稱",
"name": "名稱",
+ "client_name": "用戶端 {{id}}",
"client_global_settings": "使用全域的設定",
"client_deleted": "用戶端 \"{{key}}\" 被成功地刪除",
"client_added": "用戶端 \"{{key}}\" 被成功地加入",
diff --git a/client/src/actions/index.js b/client/src/actions/index.js
index e0e50841..c7af4fa0 100644
--- a/client/src/actions/index.js
+++ b/client/src/actions/index.js
@@ -403,6 +403,11 @@ export const testUpstream = (
const message = upstreamResponse[key];
if (message.startsWith('WARNING:')) {
dispatch(addErrorToast({ error: i18next.t('dns_test_warning_toast', { key }) }));
+ } else if (message.endsWith(': parsing error')) {
+ const info = message.substring(0, message.indexOf(':'));
+ const [sectionKey, line] = info.split(' ');
+ const section = i18next.t(sectionKey);
+ dispatch(addErrorToast({ error: i18next.t('dns_test_parsing_error_toast', { section, line }) }));
} else if (message !== 'OK') {
dispatch(addErrorToast({ error: i18next.t('dns_test_not_ok_toast', { key }) }));
}
diff --git a/client/src/components/Filters/Modal.js b/client/src/components/Filters/Modal.js
index aba53b30..5144a6f2 100644
--- a/client/src/components/Filters/Modal.js
+++ b/client/src/components/Filters/Modal.js
@@ -13,6 +13,8 @@ ReactModal.setAppElement('#root');
const MODAL_TYPE_TO_TITLE_TYPE_MAP = {
[MODAL_TYPE.EDIT_FILTERS]: 'edit',
[MODAL_TYPE.ADD_FILTERS]: 'new',
+ [MODAL_TYPE.EDIT_CLIENT]: 'edit',
+ [MODAL_TYPE.ADD_CLIENT]: 'new',
[MODAL_TYPE.SELECT_MODAL_TYPE]: 'new',
[MODAL_TYPE.CHOOSE_FILTERING_LIST]: 'choose',
};
diff --git a/client/src/components/Logs/Cells/ClientCell.js b/client/src/components/Logs/Cells/ClientCell.js
index d0dd3168..da15efc3 100644
--- a/client/src/components/Logs/Cells/ClientCell.js
+++ b/client/src/components/Logs/Cells/ClientCell.js
@@ -3,7 +3,7 @@ import { shallowEqual, useDispatch, useSelector } from 'react-redux';
import { nanoid } from 'nanoid';
import classNames from 'classnames';
import { useTranslation } from 'react-i18next';
-import { Link } from 'react-router-dom';
+import { Link, useHistory } from 'react-router-dom';
import propTypes from 'prop-types';
import { checkFiltered, getBlockingClientName } from '../../../helpers/helpers';
@@ -25,12 +25,14 @@ const ClientCell = ({
}) => {
const { t } = useTranslation();
const dispatch = useDispatch();
+ const history = useHistory();
const autoClients = useSelector((state) => state.dashboard.autoClients, shallowEqual);
const isDetailed = useSelector((state) => state.queryLogs.isDetailed);
const allowedСlients = useSelector((state) => state.access.allowed_clients, shallowEqual);
const [isOptionsOpened, setOptionsOpened] = useState(false);
const autoClient = autoClients.find((autoClient) => autoClient.name === client);
+ const clients = useSelector((state) => state.dashboard.clients);
const source = autoClient?.source;
const whoisAvailable = client_info && Object.keys(client_info.whois).length > 0;
const clientName = client_info?.name || client_id;
@@ -55,6 +57,8 @@ const ClientCell = ({
const isFiltered = checkFiltered(reason);
+ const clientIds = clients.map((c) => c.ids).flat();
+
const nameClass = classNames('w-90 o-hidden d-flex flex-column', {
'mt-2': isDetailed && !client_info?.name && !whoisAvailable,
'white-space--nowrap': isDetailed,
@@ -66,7 +70,6 @@ const ClientCell = ({
const renderBlockingButton = (isFiltered, domain) => {
const buttonType = isFiltered ? BLOCK_ACTIONS.UNBLOCK : BLOCK_ACTIONS.BLOCK;
- const clients = useSelector((state) => state.dashboard.clients);
const {
confirmMessage,
@@ -118,6 +121,15 @@ const ClientCell = ({
},
];
+ if (!clientIds.includes(client)) {
+ BUTTON_OPTIONS.push({
+ name: 'add_persistent_client',
+ onClick: () => {
+ history.push(`/#clients?clientId=${client}`);
+ },
+ });
+ }
+
const getOptions = (options) => {
if (options.length === 0) {
return null;
diff --git a/client/src/components/Settings/Clients/ClientsTable/ClientsTable.js b/client/src/components/Settings/Clients/ClientsTable/ClientsTable.js
index f4744a5a..3f82ee98 100644
--- a/client/src/components/Settings/Clients/ClientsTable/ClientsTable.js
+++ b/client/src/components/Settings/Clients/ClientsTable/ClientsTable.js
@@ -4,6 +4,7 @@ import React, { useEffect } from 'react';
import PropTypes from 'prop-types';
import { Trans, useTranslation } from 'react-i18next';
import { useDispatch, useSelector } from 'react-redux';
+import { useHistory, useLocation } from 'react-router-dom';
import ReactTable from 'react-table';
import { getAllBlockedServices, getBlockedServices } from '../../../../actions/services';
@@ -39,8 +40,12 @@ const ClientsTable = ({
}) => {
const [t] = useTranslation();
const dispatch = useDispatch();
+ const location = useLocation();
+ const history = useHistory();
const services = useSelector((store) => store?.services);
const globalSettings = useSelector((store) => store?.settings.settingsList) || {};
+ const params = new URLSearchParams(location.search);
+ const clientId = params.get('clientId');
const { safesearch } = globalSettings;
@@ -48,6 +53,12 @@ const ClientsTable = ({
dispatch(getAllBlockedServices());
dispatch(getBlockedServices());
dispatch(initSettings());
+
+ if (clientId) {
+ toggleClientModal({
+ type: MODAL_TYPE.ADD_CLIENT,
+ });
+ }
}, []);
const handleFormAdd = (values) => {
@@ -85,11 +96,15 @@ const ClientsTable = ({
}
}
- if (modalType === MODAL_TYPE.EDIT_FILTERS) {
+ if (modalType === MODAL_TYPE.EDIT_CLIENT) {
handleFormUpdate(config, modalClientName);
} else {
handleFormAdd(config);
}
+
+ if (clientId) {
+ history.push('/#clients');
+ }
};
const getOptionsWithLabels = (options) => (
@@ -133,6 +148,14 @@ const ClientsTable = ({
}
};
+ const handleClose = () => {
+ toggleClientModal();
+
+ if (clientId) {
+ history.push('/#clients');
+ }
+ };
+
const columns = [
{
Header: t('table_client'),
@@ -298,7 +321,7 @@ const ClientsTable = ({
type="button"
className="btn btn-icon btn-outline-primary btn-sm mr-2"
onClick={() => toggleClientModal({
- type: MODAL_TYPE.EDIT_FILTERS,
+ type: MODAL_TYPE.EDIT_CLIENT,
name: clientName,
})
}
@@ -371,12 +394,13 @@ const ClientsTable = ({
>
diff --git a/client/src/components/Settings/Clients/Form.js b/client/src/components/Settings/Clients/Form.js
index 2df5b655..46c90928 100644
--- a/client/src/components/Settings/Clients/Form.js
+++ b/client/src/components/Settings/Clients/Form.js
@@ -147,7 +147,7 @@ let Form = (props) => {
useGlobalSettings,
useGlobalServices,
blockedServicesSchedule,
- toggleClientModal,
+ handleClose,
processingAdding,
processingUpdating,
invalid,
@@ -427,7 +427,7 @@ let Form = (props) => {
disabled={submitting}
onClick={() => {
reset();
- toggleClientModal();
+ handleClose();
}}
>
cancel_btn
@@ -456,7 +456,7 @@ Form.propTypes = {
reset: PropTypes.func.isRequired,
change: PropTypes.func.isRequired,
submitting: PropTypes.bool.isRequired,
- toggleClientModal: PropTypes.func.isRequired,
+ handleClose: PropTypes.func.isRequired,
useGlobalSettings: PropTypes.bool,
useGlobalServices: PropTypes.bool,
blockedServicesSchedule: PropTypes.object,
diff --git a/client/src/components/Settings/Clients/Modal.js b/client/src/components/Settings/Clients/Modal.js
index 9c244a21..321e663c 100644
--- a/client/src/components/Settings/Clients/Modal.js
+++ b/client/src/components/Settings/Clients/Modal.js
@@ -6,7 +6,9 @@ import ReactModal from 'react-modal';
import { MODAL_TYPE } from '../../../helpers/constants';
import Form from './Form';
-const getInitialData = (initial) => {
+const getInitialData = ({
+ initial, modalType, clientId, clientName,
+}) => {
if (initial && initial.blocked_services) {
const { blocked_services } = initial;
const blocked = {};
@@ -21,46 +23,60 @@ const getInitialData = (initial) => {
};
}
+ if (modalType !== MODAL_TYPE.EDIT_CLIENT && clientId) {
+ return {
+ ...initial,
+ name: clientName,
+ ids: [clientId],
+ };
+ }
+
return initial;
};
-const Modal = (props) => {
- const {
- isModalOpen,
+const Modal = ({
+ isModalOpen,
+ modalType,
+ currentClientData,
+ handleSubmit,
+ handleClose,
+ processingAdding,
+ processingUpdating,
+ tagsOptions,
+ clientId,
+ t,
+}) => {
+ const initialData = getInitialData({
+ initial: currentClientData,
modalType,
- currentClientData,
- handleSubmit,
- toggleClientModal,
- processingAdding,
- processingUpdating,
- tagsOptions,
- } = props;
- const initialData = getInitialData(currentClientData);
+ clientId,
+ clientName: t('client_name', { id: clientId }),
+ });
return (
toggleClientModal()}
+ onRequestClose={handleClose}
>