diff --git a/CHANGELOG.md b/CHANGELOG.md index d4abd1cd..a9e5a664 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,12 +18,51 @@ and this project adheres to + + + +## [v0.107.20] - 2022-12-07 See also the [v0.107.20 GitHub milestone][ms-v0.107.20]. +### Security + +- Go version has been updated to prevent the possibility of exploiting the + CVE-2022-41717 and CVE-2022-41720 Go vulnerability fixed in [Go + 1.18.9][go-1.18.9]. + +### Added + +- The ability to clear the DNS cache ([#5190]). + +### Changed + +- DHCP server initialization errors are now logged at debug level if the server + itself disabled ([#4944]). + +### Fixed + +- Wrong validation error messages on the DHCP configuration page ([#5208]). +- Slow upstream checks making the API unresponsive ([#5193]). +- The TLS initialization errors preventing AdGuard Home from starting ([#5189]). + Instead, AdGuard Home disables encryption and shows an error message on the + encryption settings page in the UI, which was the intended previous behavior. +- URLs of some vetter blocklists. + +[#4944]: https://github.com/AdguardTeam/AdGuardHome/issues/4944 +[#5189]: https://github.com/AdguardTeam/AdGuardHome/issues/5189 +[#5190]: https://github.com/AdguardTeam/AdGuardHome/issues/5190 +[#5193]: https://github.com/AdguardTeam/AdGuardHome/issues/5193 +[#5208]: https://github.com/AdguardTeam/AdGuardHome/issues/5208 + +[go-1.18.9]: https://groups.google.com/g/golang-announce/c/L_3rmdT0BMU [ms-v0.107.20]: https://github.com/AdguardTeam/AdGuardHome/milestone/56?closed=1 ---> @@ -1443,11 +1482,12 @@ See also the [v0.104.2 GitHub milestone][ms-v0.104.2]. -[Unreleased]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.107.19...HEAD +[Unreleased]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.107.20...HEAD +[v0.107.20]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.107.19...v0.107.20 [v0.107.19]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.107.18...v0.107.19 [v0.107.18]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.107.17...v0.107.18 [v0.107.17]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.107.16...v0.107.17 diff --git a/bamboo-specs/release.yaml b/bamboo-specs/release.yaml index 86cc16ec..a43dca2b 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:5.3' + 'dockerGo': 'adguard/golang-ubuntu:5.4' 'stages': - 'Build frontend': @@ -322,7 +322,7 @@ # need to build a few of these. 'variables': 'channel': 'beta' - 'dockerGo': 'adguard/golang-ubuntu:5.3' + 'dockerGo': 'adguard/golang-ubuntu:5.4' # release-vX.Y.Z branches are the branches from which the actual final release # is built. - '^release-v[0-9]+\.[0-9]+\.[0-9]+': @@ -337,4 +337,4 @@ # are the ones that actually get released. 'variables': 'channel': 'release' - 'dockerGo': 'adguard/golang-ubuntu:5.3' + 'dockerGo': 'adguard/golang-ubuntu:5.4' diff --git a/bamboo-specs/test.yaml b/bamboo-specs/test.yaml index ac8c67fd..0ea2df9c 100644 --- a/bamboo-specs/test.yaml +++ b/bamboo-specs/test.yaml @@ -5,7 +5,7 @@ 'key': 'AHBRTSPECS' 'name': 'AdGuard Home - Build and run tests' 'variables': - 'dockerGo': 'adguard/golang-ubuntu:5.3' + 'dockerGo': 'adguard/golang-ubuntu:5.4' 'stages': - 'Tests': diff --git a/client/src/__locales/be.json b/client/src/__locales/be.json index 19e45a4b..ca92d807 100644 --- a/client/src/__locales/be.json +++ b/client/src/__locales/be.json @@ -393,7 +393,7 @@ "encryption_issuer": "Выдавец", "encryption_hostnames": "Імёны хастоў", "encryption_reset": "Вы ўпэўнены, што хочаце скінуць налады шыфравання?", - "encryption_warning": "Увага", + "encryption_warning": "Папярэджанне", "topline_expiring_certificate": "Ваш SSL-сертыфікат хутка мінае. Абновіце <0>Налады шыфравання0>.", "topline_expired_certificate": "Ваш SSL-сертыфікат мінуў. Абновіце <0>Налады шыфравання0>.", "form_error_port_range": "Увядзіце нумар порта з інтэрвалу 80-65535", @@ -638,5 +638,8 @@ "safe_browsing": "Бяспечны інтэрнэт", "served_from_cache": "{{value}} (атрымана з кэша)", "form_error_password_length": "Пароль павінен быць не менш за {{value}} сімвалаў", - "anonymizer_notification": "<0>Заўвага:0> Ананімізацыя IP уключана. Вы можаце адключыць яго ў <1>Агульных наладах1> ." + "anonymizer_notification": "<0>Заўвага:0> Ананімізацыя IP уключана. Вы можаце адключыць яго ў <1>Агульных наладах1> .", + "confirm_dns_cache_clear": "Вы ўпэўнены, што хочаце ачысціць кэш DNS?", + "cache_cleared": "Кэш DNS паспяхова ачышчаны", + "clear_cache": "Ачысціць кэш" } diff --git a/client/src/__locales/cs.json b/client/src/__locales/cs.json index 15f79692..ccb3033b 100644 --- a/client/src/__locales/cs.json +++ b/client/src/__locales/cs.json @@ -638,5 +638,8 @@ "safe_browsing": "Bezpečné prohlížení", "served_from_cache": "{{value}} (převzato z mezipaměti)", "form_error_password_length": "Heslo musí být alespoň {{value}} znaků dlouhé", - "anonymizer_notification": "<0>Poznámka:0> Anonymizace IP je zapnuta. Můžete ji vypnout v <1>Obecných nastaveních1>." + "anonymizer_notification": "<0>Poznámka:0> Anonymizace IP je zapnuta. Můžete ji vypnout v <1>Obecných nastaveních1>.", + "confirm_dns_cache_clear": "Opravdu chcete vymazat mezipaměť DNS?", + "cache_cleared": "Mezipaměť DNS úspěšně vymazána", + "clear_cache": "Vymazat mezipaměť" } diff --git a/client/src/__locales/da.json b/client/src/__locales/da.json index 7a999346..ae074b89 100644 --- a/client/src/__locales/da.json +++ b/client/src/__locales/da.json @@ -638,5 +638,8 @@ "safe_browsing": "Sikker Browsing", "served_from_cache": "{{value}} (leveret fra cache)", "form_error_password_length": "Adgangskoden skal udgøre mindst {{value}} tegn.", - "anonymizer_notification": "<0>Bemærk:0> IP-anonymisering er aktiveret. Det kan deaktiveres via <1>Generelle indstillinger1>." + "anonymizer_notification": "<0>Bemærk:0> IP-anonymisering er aktiveret. Det kan deaktiveres via <1>Generelle indstillinger1>.", + "confirm_dns_cache_clear": "Sikker på, at DNS-cache skal ryddes?", + "cache_cleared": "DNS-cache hermed ryddet", + "clear_cache": "Ryd cache" } diff --git a/client/src/__locales/de.json b/client/src/__locales/de.json index d1d45e6b..34cdfb09 100644 --- a/client/src/__locales/de.json +++ b/client/src/__locales/de.json @@ -638,5 +638,8 @@ "safe_browsing": "Internetsicherheit", "served_from_cache": "{{value}} (aus dem Cache abgerufen)", "form_error_password_length": "Das Passwort muss mindestens {{value}} Zeichen enthalten", - "anonymizer_notification": "<0>Hinweis:0> Die IP-Anonymisierung ist aktiviert. Sie können sie in den <1>Allgemeinen Einstellungen1> deaktivieren." + "anonymizer_notification": "<0>Hinweis:0> Die IP-Anonymisierung ist aktiviert. Sie können sie in den <1>Allgemeinen Einstellungen1> deaktivieren.", + "confirm_dns_cache_clear": "Möchten Sie den DNS-Cache wirklich leeren?", + "cache_cleared": "DNS-Cache erfolgreich geleert", + "clear_cache": "Cache leeren" } diff --git a/client/src/__locales/en.json b/client/src/__locales/en.json index 7ec9c779..1771afbd 100644 --- a/client/src/__locales/en.json +++ b/client/src/__locales/en.json @@ -37,8 +37,6 @@ "dhcp_ipv6_settings": "DHCP IPv6 Settings", "form_error_required": "Required field", "form_error_ip4_format": "Invalid IPv4 address", - "form_error_ip4_range_start_format": "Invalid IPv4 address of the range start", - "form_error_ip4_range_end_format": "Invalid IPv4 address of the range end", "form_error_ip4_gateway_format": "Invalid IPv4 address of the gateway", "form_error_ip6_format": "Invalid IPv6 address", "form_error_ip_format": "Invalid IP address", @@ -51,9 +49,8 @@ "out_of_range_error": "Must be out of range \"{{start}}\"-\"{{end}}\"", "lower_range_start_error": "Must be lower than range start", "greater_range_start_error": "Must be greater than range start", - "greater_range_end_error": "Must be greater than range end", "subnet_error": "Addresses must be in one subnet", - "gateway_or_subnet_invalid": "Subnet mask invalid", + "gateway_or_subnet_invalid": "Invalid subnet mask", "dhcp_form_gateway_input": "Gateway IP", "dhcp_form_subnet_input": "Subnet mask", "dhcp_form_range_title": "Range of IP addresses", @@ -638,5 +635,8 @@ "safe_browsing": "Safe Browsing", "served_from_cache": "{{value}} (served from cache)", "form_error_password_length": "Password must be at least {{value}} characters long", - "anonymizer_notification": "<0>Note:0> IP anonymization is enabled. You can disable it in <1>General settings1>." + "anonymizer_notification": "<0>Note:0> IP anonymization is enabled. You can disable it in <1>General settings1>.", + "confirm_dns_cache_clear": "Are you sure you want to clear DNS cache?", + "cache_cleared": "DNS cache successfully cleared", + "clear_cache": "Clear cache" } diff --git a/client/src/__locales/es.json b/client/src/__locales/es.json index dc881214..5e3aedd3 100644 --- a/client/src/__locales/es.json +++ b/client/src/__locales/es.json @@ -638,5 +638,8 @@ "safe_browsing": "Navegación segura", "served_from_cache": "{{value}} (servido desde la caché)", "form_error_password_length": "La contraseña debe tener al menos {{value}} caracteres", - "anonymizer_notification": "<0>Nota:0> La anonimización de IP está habilitada. Puedes deshabilitarla en <1>Configuración general1>." + "anonymizer_notification": "<0>Nota:0> La anonimización de IP está habilitada. Puedes deshabilitarla en <1>Configuración general1>.", + "confirm_dns_cache_clear": "¿Estás seguro de que deseas borrar la caché de DNS?", + "cache_cleared": "Caché DNS borrado con éxito", + "clear_cache": "Borrar caché" } diff --git a/client/src/__locales/fi.json b/client/src/__locales/fi.json index fd02be0e..f0d4e8cf 100644 --- a/client/src/__locales/fi.json +++ b/client/src/__locales/fi.json @@ -638,5 +638,8 @@ "safe_browsing": "Turvallinen selaus", "served_from_cache": "{{value}} (jaettu välimuistista)", "form_error_password_length": "Salasanan on oltava ainakin {{value}} merkkiä", - "anonymizer_notification": "<0>Huomioi:0> IP-osoitteen anonymisointi on käytössä. Voit poistaa sen käytöstä <1>Yleisistä asetuksista1>." + "anonymizer_notification": "<0>Huomioi:0> IP-osoitteen anonymisointi on käytössä. Voit poistaa sen käytöstä <1>Yleisistä asetuksista1>.", + "confirm_dns_cache_clear": "Haluatko varmasti tyhjentää DNS-välimuistin?", + "cache_cleared": "DNS-välimuistin tyhjennys onnistui", + "clear_cache": "Tyhjennä välimuisti" } diff --git a/client/src/__locales/fr.json b/client/src/__locales/fr.json index 310f429b..ff4aed42 100644 --- a/client/src/__locales/fr.json +++ b/client/src/__locales/fr.json @@ -638,5 +638,8 @@ "safe_browsing": "Navigation sécurisée", "served_from_cache": "{{value}} (depuis le cache)", "form_error_password_length": "Le mot de passe doit comporter au moins {{value}} caractères", - "anonymizer_notification": "<0>Note :0> L'anonymisation IP est activée. Vous pouvez la désactiver dans les <1>paramètres généraux1>." + "anonymizer_notification": "<0>Note :0> L'anonymisation IP est activée. Vous pouvez la désactiver dans les <1>paramètres généraux1>.", + "confirm_dns_cache_clear": "Voulez-vous vraiment vider le cache DNS ?", + "cache_cleared": "Le cache DNS a été vidé", + "clear_cache": "Vider le cache" } diff --git a/client/src/__locales/hr.json b/client/src/__locales/hr.json index 24f9376a..b9477551 100644 --- a/client/src/__locales/hr.json +++ b/client/src/__locales/hr.json @@ -638,5 +638,8 @@ "safe_browsing": "Sigurno surfanje", "served_from_cache": "{{value}} (dohvaćeno iz predmemorije)", "form_error_password_length": "Lozinka mora imati najmanje {{value}} znakova", - "anonymizer_notification": "<0>Napomena:0>IP anonimizacija je omogućena. Možete ju onemogućiti u <1>općim postavkama1>." + "anonymizer_notification": "<0>Napomena:0>IP anonimizacija je omogućena. Možete ju onemogućiti u <1>općim postavkama1>.", + "confirm_dns_cache_clear": "Jeste li sigurni da želite očistiti DNS predmemoriju?", + "cache_cleared": "DNS predmemorija je uspješno izbrisana", + "clear_cache": "Očisti predmemoriju" } diff --git a/client/src/__locales/hu.json b/client/src/__locales/hu.json index bf408b34..534fd69e 100644 --- a/client/src/__locales/hu.json +++ b/client/src/__locales/hu.json @@ -638,5 +638,8 @@ "safe_browsing": "Biztonságos böngészés", "served_from_cache": "{{value}} (gyorsítótárból kiszolgálva)", "form_error_password_length": "A jelszó legalább {{value}} karakter hosszú kell, hogy legyen", - "anonymizer_notification": "<0>Megjegyzés:0> Az IP anonimizálás engedélyezve van. Az <1>Általános beállításoknál letilthatja1> ." + "anonymizer_notification": "<0>Megjegyzés:0> Az IP anonimizálás engedélyezve van. Az <1>Általános beállításoknál letilthatja1> .", + "confirm_dns_cache_clear": "Biztos benne, hogy törölni szeretné a DNS-gyorsítótárat?", + "cache_cleared": "A DNS gyorsítótár sikeresen törlődött", + "clear_cache": "Gyorsítótár törlése" } diff --git a/client/src/__locales/id.json b/client/src/__locales/id.json index f285d669..97530100 100644 --- a/client/src/__locales/id.json +++ b/client/src/__locales/id.json @@ -638,5 +638,8 @@ "safe_browsing": "Penjelajahan Aman", "served_from_cache": "{{value}} (disajikan dari cache)", "form_error_password_length": "Kata sandi harus minimal {{value}} karakter", - "anonymizer_notification": "<0>Catatan:0> Anonimisasi IP diaktifkan. Anda dapat menonaktifkannya di <1>Pengaturan umum1> ." + "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", + "clear_cache": "Hapus cache" } diff --git a/client/src/__locales/it.json b/client/src/__locales/it.json index f71f8a40..128fe91b 100644 --- a/client/src/__locales/it.json +++ b/client/src/__locales/it.json @@ -638,5 +638,8 @@ "safe_browsing": "Navigazione Sicura", "served_from_cache": "{{value}} (fornito dalla cache)", "form_error_password_length": "La password deve contenere almeno {{value}} caratteri", - "anonymizer_notification": "<0>Attenzione:0> L'anonimizzazione dell'IP è abilitata. Puoi disabilitarla in <1>Impostazioni generali1>." + "anonymizer_notification": "<0>Attenzione:0> L'anonimizzazione dell'IP è abilitata. Puoi disabilitarla in <1>Impostazioni generali1>.", + "confirm_dns_cache_clear": "Sei sicuro di voler cancellare la cache DNS?", + "cache_cleared": "Cache DNS è stata cancellata correttamente", + "clear_cache": "Cancella cache" } diff --git a/client/src/__locales/ja.json b/client/src/__locales/ja.json index 398b11e8..2215358d 100644 --- a/client/src/__locales/ja.json +++ b/client/src/__locales/ja.json @@ -638,5 +638,8 @@ "safe_browsing": "セーフブラウジング", "served_from_cache": "{{value}} (キャッシュから応答)", "form_error_password_length": "パスワードは{{value}}文字以上にしてください", - "anonymizer_notification": "【<0>注意0>】IPの匿名化が有効になっています。 <1>一般設定1>で無効にできます。" + "anonymizer_notification": "【<0>注意0>】IPの匿名化が有効になっています。 <1>一般設定1>で無効にできます。", + "confirm_dns_cache_clear": "DNS キャッシュをクリアしてもよろしいですか?", + "cache_cleared": "DNSキャッシュのクリア完了です。", + "clear_cache": "キャッシュをクリアする" } diff --git a/client/src/__locales/ko.json b/client/src/__locales/ko.json index de317c8a..aff7452e 100644 --- a/client/src/__locales/ko.json +++ b/client/src/__locales/ko.json @@ -638,5 +638,8 @@ "safe_browsing": "세이프 브라우징", "served_from_cache": "{{value}} (캐시에서 제공)", "form_error_password_length": "비밀번호는 {{value}}자 이상이어야 합니다", - "anonymizer_notification": "<0>참고:0> IP 익명화가 활성화되었습니다. <1>일반 설정1>에서 비활성화할 수 있습니다." + "anonymizer_notification": "<0>참고:0> IP 익명화가 활성화되었습니다. <1>일반 설정1>에서 비활성화할 수 있습니다.", + "confirm_dns_cache_clear": "정말로 DNS 캐시를 지우시겠습니까?", + "cache_cleared": "DNS 캐시를 성공적으로 지웠습니다", + "clear_cache": "캐시 지우기" } diff --git a/client/src/__locales/nl.json b/client/src/__locales/nl.json index a7722884..93566aa8 100644 --- a/client/src/__locales/nl.json +++ b/client/src/__locales/nl.json @@ -638,5 +638,8 @@ "safe_browsing": "Veilig browsen", "served_from_cache": "{{value}} (geleverd vanuit cache)", "form_error_password_length": "Wachtwoord moet minimaal {{value}} tekens lang zijn", - "anonymizer_notification": "<0>Opmerking:0> IP-anonimisering is ingeschakeld. Je kunt het uitschakelen in <1>Algemene instellingen1>." + "anonymizer_notification": "<0>Opmerking:0> IP-anonimisering is ingeschakeld. Je kunt het uitschakelen in <1>Algemene instellingen1>.", + "confirm_dns_cache_clear": "Weet je zeker dat je de DNS-cache wilt wissen?", + "cache_cleared": "DNS-cache succesvol gewist", + "clear_cache": "Cache wissen" } diff --git a/client/src/__locales/pl.json b/client/src/__locales/pl.json index d175b408..508ed9c4 100644 --- a/client/src/__locales/pl.json +++ b/client/src/__locales/pl.json @@ -638,5 +638,8 @@ "safe_browsing": "Bezpieczne przeglądanie", "served_from_cache": "{{value}} (podawane z pamięci podręcznej)", "form_error_password_length": "Hasło musi mieć co najmniej {{value}} znaków", - "anonymizer_notification": "<0>Uwaga:0> Anonimizacja IP jest włączona. Możesz ją wyłączyć w <1>Ustawieniach ogólnych1>." + "anonymizer_notification": "<0>Uwaga:0> Anonimizacja IP jest włączona. Możesz ją wyłączyć w <1>Ustawieniach ogólnych1>.", + "confirm_dns_cache_clear": "Czy na pewno chcesz wyczyścić pamięć podręczną DNS?", + "cache_cleared": "Pamięć podręczna DNS została pomyślnie wyczyszczona", + "clear_cache": "Wyczyść pamięć podręczną" } diff --git a/client/src/__locales/pt-br.json b/client/src/__locales/pt-br.json index ea2da002..cd7428ee 100644 --- a/client/src/__locales/pt-br.json +++ b/client/src/__locales/pt-br.json @@ -638,5 +638,8 @@ "safe_browsing": "Navegação segura", "served_from_cache": "{{value}} (servido do cache)", "form_error_password_length": "A senha deve ter pelo menos {{value}} caracteres", - "anonymizer_notification": "<0>Observação:0> A anonimização de IP está ativada. Você pode desativá-lo em <1>Configurações gerais1>." + "anonymizer_notification": "<0>Observação:0> A anonimização de IP está ativada. Você pode desativá-lo em <1>Configurações gerais1>.", + "confirm_dns_cache_clear": "Tem certeza de que deseja limpar o cache DNS?", + "cache_cleared": "Cache DNS limpo com sucesso", + "clear_cache": "Limpar cache" } diff --git a/client/src/__locales/pt-pt.json b/client/src/__locales/pt-pt.json index 81c92867..9905392f 100644 --- a/client/src/__locales/pt-pt.json +++ b/client/src/__locales/pt-pt.json @@ -638,5 +638,8 @@ "safe_browsing": "Navegação segura", "served_from_cache": "{{value}} (servido do cache)", "form_error_password_length": "A palavra-passe deve ter pelo menos {{value}} caracteres", - "anonymizer_notification": "<0>Observação:0> A anonimização de IP está ativada. Você pode desativá-la em <1>Definições gerais1>." + "anonymizer_notification": "<0>Observação:0> A anonimização de IP está ativada. Você pode desativá-la em <1>Definições gerais1>.", + "confirm_dns_cache_clear": "Tem certeza de que quer limpar a cache DNS?", + "cache_cleared": "O cache DNS foi apagado com sucesso", + "clear_cache": "Limpar cache" } diff --git a/client/src/__locales/ro.json b/client/src/__locales/ro.json index 82c86901..195d3f5e 100644 --- a/client/src/__locales/ro.json +++ b/client/src/__locales/ro.json @@ -638,5 +638,8 @@ "safe_browsing": "Navigare în siguranță", "served_from_cache": "{{value}} (furnizat din cache)", "form_error_password_length": "Parola trebuie să aibă cel puțin {{value}} caractere", - "anonymizer_notification": "<0>Nota:0> Anonimizarea IP este activată. Puteți să o dezactivați în <1>Setări generale1>." + "anonymizer_notification": "<0>Nota:0> Anonimizarea IP este activată. Puteți să o dezactivați în <1>Setări generale1>.", + "confirm_dns_cache_clear": "Sunteți sigur că doriți să ștergeți memoria cache DNS?", + "cache_cleared": "Cache-ul DNS a fost golit cu succes", + "clear_cache": "Goliți memoria cache" } diff --git a/client/src/__locales/ru.json b/client/src/__locales/ru.json index c1a5119b..f712bd75 100644 --- a/client/src/__locales/ru.json +++ b/client/src/__locales/ru.json @@ -638,5 +638,8 @@ "safe_browsing": "Безопасный интернет", "served_from_cache": "{{value}} (получено из кеша)", "form_error_password_length": "Пароль должен быть длиной не меньше {{value}} символов", - "anonymizer_notification": "<0>Внимание:0> включена анонимизация IP-адресов. Вы можете отключить её в разделе <1>Основные настройки1>." + "anonymizer_notification": "<0>Внимание:0> включена анонимизация IP-адресов. Вы можете отключить её в разделе <1>Основные настройки1>.", + "confirm_dns_cache_clear": "Вы уверены, что хотите очистить кеш DNS?", + "cache_cleared": "Кеш DNS успешно очищен", + "clear_cache": "Очистить кеш" } diff --git a/client/src/__locales/sk.json b/client/src/__locales/sk.json index 473557c4..b44501e6 100644 --- a/client/src/__locales/sk.json +++ b/client/src/__locales/sk.json @@ -638,5 +638,8 @@ "safe_browsing": "Bezpečné prehliadanie", "served_from_cache": "{{value}} (prevzatá z cache pamäte)", "form_error_password_length": "Heslo musí mať dĺžku aspoň {{value}} znakov", - "anonymizer_notification": "<0>Poznámka:0> Anonymizácia IP je zapnutá. Môžete ju vypnúť vo <1>Všeobecných nastaveniach1>." + "anonymizer_notification": "<0>Poznámka:0> Anonymizácia IP je zapnutá. Môžete ju vypnúť vo <1>Všeobecných nastaveniach1>.", + "confirm_dns_cache_clear": "Naozaj chcete vymazať vyrovnávaciu pamäť DNS?", + "cache_cleared": "Vyrovnávacia pamäť DNS bola úspešne vymazaná", + "clear_cache": "Vymazať vyrovnávaciu pamäť" } diff --git a/client/src/__locales/sl.json b/client/src/__locales/sl.json index 7f854f0a..bb6a60c6 100644 --- a/client/src/__locales/sl.json +++ b/client/src/__locales/sl.json @@ -638,5 +638,8 @@ "safe_browsing": "Varno brskanje", "served_from_cache": "{{value}} (postreženo iz predpomnilnika)", "form_error_password_length": "Geslo mora vsebovati najmanj {{value}} znakov", - "anonymizer_notification": "<0>Opomba:0> Anonimizacija IP je omogočena. Onemogočite ga lahko v <1>Splošnih nastavitvah1>." + "anonymizer_notification": "<0>Opomba:0> Anonimizacija IP je omogočena. Onemogočite ga lahko v <1>Splošnih nastavitvah1>.", + "confirm_dns_cache_clear": "Ali ste prepričani, da želite počistiti predpomnilnik DNS?", + "cache_cleared": "Predpomnilnik DNS je bil uspešno počiščen", + "clear_cache": "Počisti predpomnilnik" } diff --git a/client/src/__locales/sr-cs.json b/client/src/__locales/sr-cs.json index 9b676752..53b0c3e5 100644 --- a/client/src/__locales/sr-cs.json +++ b/client/src/__locales/sr-cs.json @@ -638,5 +638,8 @@ "safe_browsing": "Sigurno pregledanje", "served_from_cache": "{{value}} (posluženo iz predmemorije)", "form_error_password_length": "Lozinka mora imati najmanje {{value}} znakova", - "anonymizer_notification": "<0>Nota:0> IP prepoznavanje je omogućeno. Možete ga onemogućiti u opštim <1>postavkama1>." + "anonymizer_notification": "<0>Nota:0> IP prepoznavanje je omogućeno. Možete ga onemogućiti u opštim <1>postavkama1>.", + "confirm_dns_cache_clear": "Želite li zaista da obrišite DNS keš?", + "cache_cleared": "DNS keš je uspešno očišćen", + "clear_cache": "Obriši keš memoriju" } diff --git a/client/src/__locales/sv.json b/client/src/__locales/sv.json index 50c12d07..7715211f 100644 --- a/client/src/__locales/sv.json +++ b/client/src/__locales/sv.json @@ -638,5 +638,8 @@ "safe_browsing": "Säker surfning", "served_from_cache": "{{value}} (levereras från cache)", "form_error_password_length": "Lösenordet måste vara minst {{value}} tecken långt", - "anonymizer_notification": "<0>Observera:0> IP-anonymisering är aktiverad. Du kan inaktivera den i <1>Allmänna inställningar1>." + "anonymizer_notification": "<0>Observera:0> IP-anonymisering är aktiverad. Du kan inaktivera den i <1>Allmänna inställningar1>.", + "confirm_dns_cache_clear": "Är du säker på att du vill rensa DNS-cache?", + "cache_cleared": "DNS-cacheminnet har rensats", + "clear_cache": "Rensa cache" } diff --git a/client/src/__locales/tr.json b/client/src/__locales/tr.json index a24028f1..5396eb52 100644 --- a/client/src/__locales/tr.json +++ b/client/src/__locales/tr.json @@ -638,5 +638,8 @@ "safe_browsing": "Güvenli Gezinti", "served_from_cache": "{{value}} (önbellekten kullanıldı)", "form_error_password_length": "Parola en az {{value}} karakter uzunluğunda olmalıdır", - "anonymizer_notification": "<0>Not:0> IP anonimleştirme etkinleştirildi. Bunu <1>Genel ayarlardan1> devre dışı bırakabilirsiniz." + "anonymizer_notification": "<0>Not:0> IP anonimleştirme etkinleştirildi. Bunu <1>Genel ayarlardan1> devre dışı bırakabilirsiniz.", + "confirm_dns_cache_clear": "DNS önbelleğini temizlemek istediğinizden emin misiniz?", + "cache_cleared": "DNS önbelleği başarıyla temizlendi", + "clear_cache": "Önbelleği temizle" } diff --git a/client/src/__locales/uk.json b/client/src/__locales/uk.json index 1041ae8d..797c769b 100644 --- a/client/src/__locales/uk.json +++ b/client/src/__locales/uk.json @@ -393,7 +393,7 @@ "encryption_issuer": "Видавець", "encryption_hostnames": "Назви вузлів", "encryption_reset": "Ви впевнені, що хочете скинути налаштування шифрування?", - "encryption_warning": "Увага", + "encryption_warning": "Попередження", "topline_expiring_certificate": "Ваш сертифікат SSL скоро закінчиться. Оновіть <0>Налаштування шифрування0>.", "topline_expired_certificate": "Термін дії вашого сертифіката SSL закінчився. Оновіть <0>Налаштування шифрування0>.", "form_error_port_range": "Введіть значення порту в діапазоні 80−65535", @@ -638,5 +638,8 @@ "safe_browsing": "Безпечний перегляд", "served_from_cache": "{{value}} (отримано з кешу)", "form_error_password_length": "Пароль мусить мати принаймні {{value}} символів", - "anonymizer_notification": "<0>Примітка:0> IP-анонімізацію ввімкнено. Ви можете вимкнути його в <1>Загальні налаштування1> ." + "anonymizer_notification": "<0>Примітка:0> IP-анонімізацію ввімкнено. Ви можете вимкнути його в <1>Загальні налаштування1> .", + "confirm_dns_cache_clear": "Ви впевнені, що бажаєте очистити кеш DNS?", + "cache_cleared": "Кеш DNS успішно очищено", + "clear_cache": "Очистити кеш" } diff --git a/client/src/__locales/vi.json b/client/src/__locales/vi.json index 7674d372..174c57b2 100644 --- a/client/src/__locales/vi.json +++ b/client/src/__locales/vi.json @@ -638,5 +638,8 @@ "safe_browsing": "Duyệt web an toàn", "served_from_cache": "{{value}} (được phục vụ từ bộ nhớ cache)", "form_error_password_length": "Mật khẩu phải có ít nhất {{value}} ký tự", - "anonymizer_notification": "<0> Lưu ý:0> Tính năng ẩn danh IP được bật. Bạn có thể tắt nó trong <1> Cài đặt chung1>." + "anonymizer_notification": "<0> Lưu ý:0> Tính năng ẩn danh IP được bật. Bạn có thể tắt nó trong <1> Cài đặt chung1>.", + "confirm_dns_cache_clear": "Bạn có chắc chắn muốn xóa bộ đệm ẩn DNS không?", + "cache_cleared": "Đã xóa thành công bộ đệm DNS", + "clear_cache": "Xóa bộ nhớ cache" } diff --git a/client/src/__locales/zh-cn.json b/client/src/__locales/zh-cn.json index 5a19d904..65ddd0cc 100644 --- a/client/src/__locales/zh-cn.json +++ b/client/src/__locales/zh-cn.json @@ -638,5 +638,8 @@ "safe_browsing": "安全浏览", "served_from_cache": "{{value}}(由缓存提供)", "form_error_password_length": "密码必须至少有 {{value}} 个字符", - "anonymizer_notification": "<0>注意:0> IP 匿名化已启用。您可以在<1>常规设置1>中禁用它。" + "anonymizer_notification": "<0>注意:0> IP 匿名化已启用。您可以在<1>常规设置1>中禁用它。", + "confirm_dns_cache_clear": "您确定要清除 DNS 缓存吗?", + "cache_cleared": "已成功清除 DNS 缓存", + "clear_cache": "清除缓存" } diff --git a/client/src/__locales/zh-tw.json b/client/src/__locales/zh-tw.json index e1ae9b0a..da8f815f 100644 --- a/client/src/__locales/zh-tw.json +++ b/client/src/__locales/zh-tw.json @@ -638,5 +638,8 @@ "safe_browsing": "安全瀏覽", "served_from_cache": "{{value}} (由快取提供)", "form_error_password_length": "密碼必須為至少長 {{value}} 個字元", - "anonymizer_notification": "<0>注意:0>IP 匿名化被啟用。您可在<1>一般設定1>中禁用它。" + "anonymizer_notification": "<0>注意:0>IP 匿名化被啟用。您可在<1>一般設定1>中禁用它。", + "confirm_dns_cache_clear": "您確定您想要清除 DNS 快取嗎?", + "cache_cleared": "DNS 快取被成功地清除", + "clear_cache": "清除快取" } diff --git a/client/src/actions/dnsConfig.js b/client/src/actions/dnsConfig.js index a0b93428..f8141fd5 100644 --- a/client/src/actions/dnsConfig.js +++ b/client/src/actions/dnsConfig.js @@ -1,4 +1,5 @@ import { createAction } from 'redux-actions'; +import i18next from 'i18next'; import apiClient from '../api/Api'; import { splitByNewLine } from '../helpers/helpers'; @@ -19,6 +20,22 @@ export const getDnsConfig = () => async (dispatch) => { } }; +export const clearDnsCacheRequest = createAction('CLEAR_DNS_CACHE_REQUEST'); +export const clearDnsCacheFailure = createAction('CLEAR_DNS_CACHE_FAILURE'); +export const clearDnsCacheSuccess = createAction('CLEAR_DNS_CACHE_SUCCESS'); + +export const clearDnsCache = () => async (dispatch) => { + dispatch(clearDnsCacheRequest()); + try { + const data = await apiClient.clearCache(); + dispatch(clearDnsCacheSuccess(data)); + dispatch(addSuccessToast(i18next.t('cache_cleared'))); + } catch (error) { + dispatch(addErrorToast({ error })); + dispatch(clearDnsCacheFailure()); + } +}; + export const setDnsConfigRequest = createAction('SET_DNS_CONFIG_REQUEST'); export const setDnsConfigFailure = createAction('SET_DNS_CONFIG_FAILURE'); export const setDnsConfigSuccess = createAction('SET_DNS_CONFIG_SUCCESS'); diff --git a/client/src/api/Api.js b/client/src/api/Api.js index bc030fa1..06f40c6c 100644 --- a/client/src/api/Api.js +++ b/client/src/api/Api.js @@ -593,6 +593,14 @@ class Api { }; return this.makeRequest(path, method, config); } + + // Cache + CLEAR_CACHE = { path: 'cache_clear', method: 'POST' }; + + clearCache() { + const { path, method } = this.CLEAR_CACHE; + return this.makeRequest(path, method); + } } const apiClient = new Api(); diff --git a/client/src/components/Settings/Dhcp/FormDHCPv4.js b/client/src/components/Settings/Dhcp/FormDHCPv4.js index cb371f9f..1c3d9c60 100644 --- a/client/src/components/Settings/Dhcp/FormDHCPv4.js +++ b/client/src/components/Settings/Dhcp/FormDHCPv4.js @@ -74,7 +74,6 @@ const FormDHCPv4 = ({ className="form-control" placeholder={t(ipv4placeholders.subnet_mask)} validate={[ - validateIpv4, validateRequired, validateGatewaySubnetMask, ]} @@ -97,7 +96,6 @@ const FormDHCPv4 = ({ placeholder={t(ipv4placeholders.range_start)} validate={[ validateIpv4, - validateGatewaySubnetMask, validateIpForGatewaySubnetMask, ]} disabled={!isInterfaceIncludesIpv4} @@ -113,7 +111,6 @@ const FormDHCPv4 = ({ validate={[ validateIpv4, validateIpv4RangeEnd, - validateGatewaySubnetMask, validateIpForGatewaySubnetMask, ]} disabled={!isInterfaceIncludesIpv4} diff --git a/client/src/components/Settings/Dns/Cache/Form.js b/client/src/components/Settings/Dns/Cache/Form.js index 5b0fe6a2..0f51e117 100644 --- a/client/src/components/Settings/Dns/Cache/Form.js +++ b/client/src/components/Settings/Dns/Cache/Form.js @@ -2,10 +2,12 @@ import React from 'react'; import PropTypes from 'prop-types'; import { Field, reduxForm } from 'redux-form'; import { Trans, useTranslation } from 'react-i18next'; -import { shallowEqual, useSelector } from 'react-redux'; +import { shallowEqual, useDispatch, useSelector } from 'react-redux'; + import { renderInputField, toNumber, CheckboxField } from '../../../../helpers/form'; import { CACHE_CONFIG_FIELDS, FORM_NAME, UINT32_RANGE } from '../../../../helpers/constants'; import { replaceZeroWithEmptyString } from '../../../../helpers/helpers'; +import { clearDnsCache } from '../../../../actions/dnsConfig'; const INPUTS_FIELDS = [ { @@ -32,6 +34,7 @@ const Form = ({ handleSubmit, submitting, invalid, }) => { const { t } = useTranslation(); + const dispatch = useDispatch(); const { processingSetConfig } = useSelector((state) => state.dnsConfig, shallowEqual); const { @@ -40,6 +43,12 @@ const Form = ({ const minExceedsMax = cache_ttl_min > cache_ttl_max; + const handleClearCache = () => { + if (window.confirm(t('confirm_dns_cache_clear'))) { + dispatch(clearDnsCache()); + } + }; + return