diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 2e4c0d97..f30180e9 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1,7 +1,7 @@ 'name': 'build' 'env': - 'GO_VERSION': '1.21.8' + 'GO_VERSION': '1.22.2' 'NODE_VERSION': '16' 'on': diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index ebbe80ef..2e606520 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -1,7 +1,7 @@ 'name': 'lint' 'env': - 'GO_VERSION': '1.21.8' + 'GO_VERSION': '1.22.2' 'on': 'push': diff --git a/CHANGELOG.md b/CHANGELOG.md index aa9beda1..1395b956 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -23,6 +23,11 @@ See also the [v0.107.47 GitHub milestone][ms-v0.107.47]. NOTE: Add new changes BELOW THIS COMMENT. --> +### Security + +- Go version has been updated to prevent the possibility of exploiting the Go + vulnerabilities fixed in [Go 1.22.2][go-1.22.2]. + ### Changed - Time Zone Database is now embedded in the binary ([#6758]). @@ -31,6 +36,7 @@ NOTE: Add new changes BELOW THIS COMMENT. ### Deprecated +- Go 1.22 support. Future versions will require at least Go 1.23 to build. - Currently, AdGuard Home uses a best-effort algorithm to fix invalid IDs of filtering-rule lists on startup. This feature is deprecated, and invalid IDs will cause errors on startup in a future version. @@ -42,11 +48,17 @@ NOTE: Add new changes BELOW THIS COMMENT. - Symbolic links to config YAML are replaced by a copy of the real file by AGH after startup ([#6717]). +### Removed + +- Go 1.21 support. + [#5829]: https://github.com/AdguardTeam/AdGuardHome/issues/5829 [#6717]: https://github.com/AdguardTeam/AdGuardHome/issues/6717 [#6758]: https://github.com/AdguardTeam/AdGuardHome/issues/6758 [#6851]: https://github.com/AdguardTeam/AdGuardHome/issues/6851 +[go-1.22.2]: https://groups.google.com/g/golang-announce/c/YgW0sx8mN3M/ + diff --git a/Makefile b/Makefile index 75a68b7b..55939ff9 100644 --- a/Makefile +++ b/Makefile @@ -27,7 +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 +GOTOOLCHAIN = go1.22.2 GPG_KEY = devteam@adguard.com GPG_KEY_PASSPHRASE = not-a-real-password NPM = npm diff --git a/README.md b/README.md index a2a16910..93bb85dc 100644 --- a/README.md +++ b/README.md @@ -205,7 +205,7 @@ Run `make init` to prepare the development environment. You will need this to build AdGuard Home: -- [Go](https://golang.org/dl/) v1.20 or later; +- [Go](https://golang.org/dl/) v1.22 or later; - [Node.js](https://nodejs.org/en/download/) v16 or later; - [npm](https://www.npmjs.com/) v8 or later; - [yarn](https://yarnpkg.com/) v1.22.5 or later. diff --git a/bamboo-specs/release.yaml b/bamboo-specs/release.yaml index c82d1613..9a991bc9 100644 --- a/bamboo-specs/release.yaml +++ b/bamboo-specs/release.yaml @@ -8,7 +8,7 @@ 'variables': 'channel': 'edge' 'dockerFrontend': 'adguard/home-js-builder:1.1' - 'dockerGo': 'adguard/go-builder:1.21.8--1' + 'dockerGo': 'adguard/go-builder:1.22.2--1' 'stages': - 'Build frontend': @@ -266,7 +266,7 @@ 'variables': 'channel': 'beta' 'dockerFrontend': 'adguard/home-js-builder:1.1' - 'dockerGo': 'adguard/go-builder:1.21.8--1' + 'dockerGo': 'adguard/go-builder:1.22.2--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]+': @@ -282,4 +282,4 @@ 'variables': 'channel': 'release' 'dockerFrontend': 'adguard/home-js-builder:1.1' - 'dockerGo': 'adguard/go-builder:1.21.8--1' + 'dockerGo': 'adguard/go-builder:1.22.2--1' diff --git a/bamboo-specs/test.yaml b/bamboo-specs/test.yaml index 70415e4a..b18ab1c0 100644 --- a/bamboo-specs/test.yaml +++ b/bamboo-specs/test.yaml @@ -6,7 +6,7 @@ 'name': 'AdGuard Home - Build and run tests' 'variables': 'dockerFrontend': 'adguard/home-js-builder:1.1' - 'dockerGo': 'adguard/go-builder:1.21.8--1' + 'dockerGo': 'adguard/go-builder:1.22.2--1' 'channel': 'development' 'stages': @@ -195,5 +195,5 @@ # may need to build a few of these. 'variables': 'dockerFrontend': 'adguard/home-js-builder:1.1' - 'dockerGo': 'adguard/go-builder:1.21.8--1' + 'dockerGo': 'adguard/go-builder:1.22.2--1' 'channel': 'candidate' diff --git a/client/src/__locales/fi.json b/client/src/__locales/fi.json index 07db2ab0..753104f4 100644 --- a/client/src/__locales/fi.json +++ b/client/src/__locales/fi.json @@ -678,7 +678,7 @@ "use_saved_key": "Käytä aiemmin tallennettua avainta", "parental_control": "Lapsilukko", "safe_browsing": "Turvallinen selaus", - "served_from_cache": "{{value}} (jaettu välimuistista)", + "served_from_cache_label": "Toimitettu välimuistista", "form_error_password_length": "Salasanan on oltava {{min}} - {{max}} merkkiä pitkä", "anonymizer_notification": "<0>Huomioi: IP-osoitteen anonymisointi on käytössä. Voit poistaa sen käytöstä <1>Yleisistä asetuksista.", "confirm_dns_cache_clear": "Haluatko varmasti tyhjentää DNS-välimuistin?", diff --git a/client/src/__locales/id.json b/client/src/__locales/id.json index 3b8cb123..6a66959b 100644 --- a/client/src/__locales/id.json +++ b/client/src/__locales/id.json @@ -117,8 +117,8 @@ "refresh_statics": "Segarkan statistik", "dns_query": "Kueri DNS", "blocked_by": "<0>Diblokir oleh", - "stats_malware_phishing": "Malware/phishing diblokir", - "stats_adult": "Situs dewasa diblokir", + "stats_malware_phishing": "Malware/phishing terblokir", + "stats_adult": "Situs dewasa terblokir", "stats_query_domain": "Kueri domain teratas", "for_last_hours": "selama {{count}} jam terakhir", "for_last_hours_plural": "selama {{count}} jam terakhir", @@ -138,9 +138,9 @@ "number_of_dns_query_days_plural": "Jumlah kueri DNS yang diproses selama {{count}} hari terakhir", "number_of_dns_query_hours": "Jumlah kueri DNS diproses selama {{{count}} jam terakhir", "number_of_dns_query_hours_plural": "Jumlah kueri DNS diproses selama {{count}} jam terakhir", - "number_of_dns_query_blocked_24_hours": "Julah DNS diblokir oleh penyaring adblock dan daftar blokir hosts", - "number_of_dns_query_blocked_24_hours_by_sec": "Jumlah perminataan DNS diblokir oleh modul Kemanan Penjelajahan AdGuard", - "number_of_dns_query_blocked_24_hours_adult": "Jumlah website dewasa diblokir", + "number_of_dns_query_blocked_24_hours": "Jumlah permintaan DNS yang diblokir oleh filter adblock dan daftar hitam host", + "number_of_dns_query_blocked_24_hours_by_sec": "Jumlah permintaan DNS yang diblokir oleh modul keamanan penjelajahan AdGuard", + "number_of_dns_query_blocked_24_hours_adult": "Jumlah situs web dewasa yang diblokir", "enforced_save_search": "Paksa pencarian aman", "number_of_dns_query_to_safe_search": "Jumlah perminataan DNS ke mesin pencari yang dipaksa Pencarian Aman", "average_processing_time": "Rata-rata waktu pemrosesan", @@ -148,7 +148,7 @@ "response_time": "Waktu respons", "average_processing_time_hint": "Rata-rata waktu dalam milidetik untuk pemrosesan sebuah permintaan DNS", "block_domain_use_filters_and_hosts": "Blokir domain menggunakan filter dan file hosts", - "filters_block_toggle_hint": "Anda dapat menyiapkan aturan pemblokiran di pengaturan Penyaringan.", + "filters_block_toggle_hint": "Anda dapat menyiapkan aturan pemblokiran dalam pengaturan Filter.", "use_adguard_browsing_sec": "Gunakan layanan web Keamanan Penjelajahan AdGuard", "use_adguard_browsing_sec_hint": "AdGuard Home akan memeriksa apakah domain diblokir oleh layanan web keamanan penjelajahan. Ini akan menggunakan API pencarian yang ramah privasi untuk melakukan pemeriksaan: hanya awalan singkat dari hash nama domain SHA256 yang dikirim ke server.", "use_adguard_parental": "Gunakan layanan web kontrol orang tua AdGuard", @@ -291,7 +291,7 @@ "custom_ip": "Custom IP", "blocking_ipv4": "Blokiran IPv4", "blocking_ipv6": "Blokiran IPv6", - "blocked_response_ttl": "Respons TTL yang diblokir", + "blocked_response_ttl": "Respons TTL terblokir", "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", @@ -322,9 +322,9 @@ "rate_limit_whitelist": "Daftar pembatasan tarif yang diizinkan", "rate_limit_whitelist_desc": "Alamat IP dikecualikan dari pembatasan tarif", "rate_limit_whitelist_placeholder": "Masukkan satu alamat IP per baris", - "blocking_ipv4_desc": "Alamat IP akan dikembalikan untuk permintaan A yang diblokir", - "blocking_ipv6_desc": "Alamat IP akan dipulihkan untuk permintaan AAAA yang diblokir", - "blocking_mode_default": "Default: Tanggapi dengan alamat IP nol (0.0.0.0 untuk A; :: untuk AAAA) saat diblokir oleh aturan gaya Adblock; tanggapi dengan alamat IP yang ditentukan dalam aturan ketika diblokir oleh aturan gaya host /etc/", + "blocking_ipv4_desc": "Alamat IP yang akan dikembalikan untuk permintaan A yang diblokir", + "blocking_ipv6_desc": "Alamat IP yang akan dikembalikan untuk permintaan AAAA yang diblokir", + "blocking_mode_default": "Standar: Tanggapi dengan alamat IP nol (0.0.0.0 untuk A; :: untuk AAAA) saat diblokir oleh aturan gaya Adblock; tanggapi dengan alamat IP yang ditentukan dalam aturan ketika diblokir oleh aturan /etc/hosts-style", "blocking_mode_refused": "DITOLAK: Respon dengan kode DITOLAK", "blocking_mode_nxdomain": "NXDOMAIN: Respon pakai kode NXDOMAIN", "blocking_mode_null_ip": "Null IP: Respon pakai alamat IP kosong (0.0.0.0 untuk A; :: untuk AAAA)", @@ -621,8 +621,8 @@ "check_not_found": "Tidak di temukan di daftar penyaringan anda", "client_confirm_block": "Apa anda yakin ingin mem-blokir klien ini \"{{ip}}\"?", "client_confirm_unblock": "Apa anda yakin ingin meng-unblock klien ini \"{{ip}}\"?", - "client_blocked": "Klien \"{{ip}}\" sukses di blokir", - "client_unblocked": "Klien \"{{ip}}\" sukses di unblock", + "client_blocked": "Klien \"{{ip}}\" berhasil diblokir", + "client_unblocked": "Klien \"{{ip}}\" berhasil membuka blokir", "static_ip": "Alamat IP statis", "static_ip_desc": "AdGuard Home adalah server jadi perlu alamat IP statis agar berfungsi dengan benar. Jika tidak, pada titik tertentu, router Anda dapat menetapkan alamat IP yang berbeda untuk perangkat ini.", "set_static_ip": "Atur alamat IP statik", @@ -640,8 +640,8 @@ "show_whitelisted_responses": "Dalam Daftar Putih", "show_processed_responses": "Terproses", "blocked_safebrowsing": "Diblokir oleh Penjelajahan Aman", - "blocked_adult_websites": "Diblok oleh Kontrol Orang tua", - "blocked_threats": "Blokir Ancaman", + "blocked_adult_websites": "Diblokir oleh Kontrol Orang Tua", + "blocked_threats": "Ancaman terblokir", "allowed": "Dibolehkan", "filtered": "Tersaring", "rewritten": "Tulis ulang", diff --git a/client/src/__locales/pl.json b/client/src/__locales/pl.json index 8d0b5b14..4a9543fc 100644 --- a/client/src/__locales/pl.json +++ b/client/src/__locales/pl.json @@ -678,7 +678,7 @@ "use_saved_key": "Użyj wcześniej zapisanego klucza", "parental_control": "Kontrola rodzicielska", "safe_browsing": "Bezpieczne przeglądanie", - "served_from_cache": "{{value}} (podawane z pamięci podręcznej)", + "served_from_cache_label": "Podano z pamięci podręcznej", "form_error_password_length": "Hasło musi zawierać od {{min}} do {{max}} znaków", "anonymizer_notification": "<0>Uwaga: Anonimizacja IP jest włączona. Możesz ją wyłączyć w <1>Ustawieniach ogólnych.", "confirm_dns_cache_clear": "Czy na pewno chcesz wyczyścić pamięć podręczną DNS?", diff --git a/client/src/__locales/zh-hk.json b/client/src/__locales/zh-hk.json index ea2d792b..e8a75d40 100644 --- a/client/src/__locales/zh-hk.json +++ b/client/src/__locales/zh-hk.json @@ -1,6 +1,7 @@ { "client_settings": "用戶端設定", "example_upstream_reserved": "您可以<0>指定網域使用特定 DNS 查詢", + "example_multiple_upstreams_reserved": "多個上游 <0>for 特定網域;", "example_upstream_comment": "您可以指定註解", "upstream_parallel": "使用平行查詢,同時查詢所有上游伺服器來加速解析結果", "parallel_requests": "平行處理", @@ -8,6 +9,9 @@ "load_balancing_desc": "一次只查詢一個伺服器。AdGuard Home 會使用加權隨機取樣來選擇使用的查詢結果,以確保速度最快的伺服器能被充分運用。", "bootstrap_dns": "引導(Boostrap) DNS 伺服器", "bootstrap_dns_desc": "Bootstrap DNS 伺服器用於解析您所設定的上游 DoH/DoT 解析器的 IP 地址", + "fallback_dns_title": "備用 DNS 伺服器", + "fallback_dns_desc": "備用 DNS 伺服器列表:於主要 DNS 伺服器沒有回應時使用。語法與主要 DNS 伺服器設定欄位相同。", + "fallback_dns_placeholder": "每行輸入一個備用 DNS 伺服器", "local_ptr_title": "私人 DNS 伺服器", "local_ptr_desc": "AdGuard Home 用於區域 PTR 查詢的 DNS 伺服器。這些伺服器將用於解析具有私人 IP 位址的用戶端的主機名稱,例如 \"192.168.12.34\",使用 rDNS。如果沒有設定,AdGuard Home 將自動使用您的系統預設 DNS 解析。", "local_ptr_default_resolver": "AdGuard Home 預設使用以下作為 DNS 反解器:{{ip}}", @@ -37,17 +41,19 @@ "dhcp_ipv6_settings": "DHCP IPv6 設定", "form_error_required": "必要欄位", "form_error_ip4_format": "無效的 IPv4 格式", - "form_error_ip6_format": "無效的 IPv6 格式", "form_error_ip4_gateway_format": "閘道的 IPv4 位址無效", - "form_error_ip_format": "無效的 IP 位址", + "form_error_ip6_format": "無效的 IPv6 格式", + "form_error_ip_format": "無效的 IP 格式", "form_error_mac_format": "無效的 「MAC 位址」格式", "form_error_client_id_format": "無效的「客戶端 ID」格式", "form_error_server_name": "無效伺服器名稱", "form_error_subnet": "子網路 \"{{cidr}}\" 不包含 IP 位址 \"{{ip}}\"", "form_error_positive": "數值必須大於 0", + "form_error_gateway_ip": "租約不能使用閘道器的 IP 位址", "out_of_range_error": "必須介於 \"{{start}}\" - \"{{end}}\" 範圍之外", "lower_range_start_error": "必須小於起始值", "greater_range_start_error": "必須大於起始值", + "subnet_error": "地址必須在同一個子網路中", "gateway_or_subnet_invalid": "無效子網路", "dhcp_form_gateway_input": "閘道 IP 位址", "dhcp_form_subnet_input": "子網路遮罩", @@ -68,7 +74,9 @@ "dhcp_dynamic_ip_found": "您的網路介面 <0>{{interfaceName}} 正在使用動態 IP,要使用 DHCP 伺服器必須指定靜態 IP 給 AdGuard。\n目前您的 IP 位址 <0>{{ipAddress}},啟用 DHCP 後此 IP 將自動設定為靜態 IP 位址。", "dhcp_lease_added": "靜態租用 \"{{key}}\" 已新增成功", "dhcp_lease_deleted": "靜態租用 \"{{key}}\" 已刪除成功", + "dhcp_lease_updated": "靜態租約 \"{{key}}\" 已成功更新", "dhcp_new_static_lease": "新增靜態租用", + "dhcp_edit_static_lease": "編輯靜態租約", "dhcp_static_leases_not_found": "找不到 DHCP 靜態租用", "dhcp_add_static_lease": "新增靜態租用", "dhcp_reset_leases": "重置所有 DHCP 租約", @@ -112,7 +120,8 @@ "stats_malware_phishing": "已封鎖惡意軟體/網路釣魚", "stats_adult": "已封鎖成人網站", "stats_query_domain": "熱門查詢網域排行", - "for_last_24_hours": "過去 24 小時", + "for_last_hours": "在過去 {{count}} 小時", + "for_last_hours_plural": "在過去 {{count}} 小時裡", "for_last_days": "最近 {{count}} 天內", "for_last_days_plural": "最近 {{count}} 天內", "stats_disabled": "已禁用統計資料。您可以從<0>設定頁面打開它。", @@ -123,15 +132,20 @@ "top_clients": "熱門用戶端排行", "no_clients_found": "找不到用戶端", "general_statistics": "一般統計資料", + "top_upstreams": "熱門上游伺服器", + "no_upstreams_data_found": "找不到上游數據", "number_of_dns_query_days": "過去 {{count}} 天內 DNS 查詢總數", "number_of_dns_query_days_plural": "過去 {{count}} 天內 DNS 查詢總數", - "number_of_dns_query_24_hours": "過去 24小時內 DNS 查詢總數", + "number_of_dns_query_hours": "過去 {{count}} 小時處理的 DNS 查詢數量", + "number_of_dns_query_hours_plural": "過去 {{count}} 小時處理的 DNS 查詢數量", "number_of_dns_query_blocked_24_hours": "已被廣告過濾器與主機黑名單封鎖 DNS 查詢總數", "number_of_dns_query_blocked_24_hours_by_sec": "已被 AdGuard 瀏覽安全模組封鎖的 DNS 查詢總數", "number_of_dns_query_blocked_24_hours_adult": "已封鎖成人網站總數", "enforced_save_search": "強制使用安全搜尋", "number_of_dns_query_to_safe_search": "已強制使用安全搜尋總數", "average_processing_time": "平均的處理時間", + "average_upstream_response_time": "平均上游伺服器回應時間", + "response_time": "回應時間", "average_processing_time_hint": "處理 DNS 請求的平均時間(毫秒)", "block_domain_use_filters_and_hosts": "使用過濾器與 hosts 檔案阻擋網域查詢", "filters_block_toggle_hint": "您可在過濾器設定中設定封鎖規則。", @@ -156,6 +170,7 @@ "upstream_dns_configured_in_file": "設定在 {{path}}", "test_upstream_btn": "測試上游 DNS", "upstreams": "上游", + "upstream": "上游伺服器", "apply_btn": "套用", "disabled_filtering_toast": "已停用過濾", "enabled_filtering_toast": "已啟用過濾", @@ -164,6 +179,7 @@ "disabled_parental_toast": "已停用家長監護", "enabled_parental_toast": "已啟用家長監護", "disabled_safe_search_toast": "已停用安全搜尋", + "enabled_save_search_toast": "已啟用安全搜尋", "updated_save_search_toast": "已更新安全搜尋設定", "enabled_table_header": "啟用", "name_table_header": "名稱", @@ -206,24 +222,29 @@ "example_comment_hash": "# Also a comment", "example_regex_meaning": "使用正規表示式(Regular Expression)來阻止對應的網域查詢", "example_upstream_regular": "一般 DNS(透過 UDP)", + "example_upstream_regular_port": "一般 DNS(透過 UDP,連接埠)", + "example_upstream_udp": "一般 DNS(透過 UDP,主機名稱)", "example_upstream_dot": "<0>DNS-over-TLS(流量加密)", "example_upstream_doh": "<0>DNS-over-HTTPS(流量加密)", + "example_upstream_doh3": "使 DNS-over-HTTPS 強制使用 <0>HTTP/3 ,並禁止使用後備 HTTP/2 或更低版本;", "example_upstream_doq": "加密 <0>DNS-over-QUIC", "example_upstream_sdns": "您可以使透過 <0>DNS Stamps 來解析 <1>DNSCrypt 或 <2>DNS-over-HTTPS", "example_upstream_tcp": "一般 DNS(透過 TCP)", - "example_upstream_regular_port": "一般 DNS(透過 UDP,連接埠)", - "example_upstream_udp": "一般 DNS(透過 UDP,主機名稱)", "example_upstream_tcp_port": "一般 DNS(透過 TCP,連接埠)", "example_upstream_tcp_hostname": "一般 DNS(透過 TCP,主機名稱)", "all_lists_up_to_date_toast": "所有清單已更新至最新", + "updated_upstream_dns_toast": "已更新上游 DNS 伺服器", "dns_test_ok_toast": "設定中的 DNS 上游運作正常", "dns_test_not_ok_toast": "DNS 設定中的 \"{{key}}\" 出現錯誤,請確認是否正確輸入", + "dns_test_parsing_error_toast": "在 {{section}} 部分中:第 {{line}} 行:無法使用,請檢查您是否有正確地填寫", + "dns_test_warning_toast": "上游伺服器 \"{{key}}\" 沒有回應測試請求,可能無法正常運作", "unblock": "解除封鎖", "block": "封鎖", "disallow_this_client": "不允許此用戶端", "allow_this_client": "允許此用戶端", "block_for_this_client_only": "僅封鎖此用戶端", "unblock_for_this_client_only": "僅解除封鎖此用戶端", + "add_persistent_client": "加入到用戶端", "time_table_header": "時間", "date": "日期", "domain_name_table_header": "域名", @@ -270,6 +291,9 @@ "custom_ip": "自訂 IP 位址", "blocking_ipv4": "封鎖 IPv4", "blocking_ipv6": "封鎖 IPv6", + "blocked_response_ttl": "阻塞響應 TTL", + "blocked_response_ttl_desc": "指定客戶端應快取過濾回應的秒數", + "form_enter_blocked_response_ttl": "輸入已封鎖的回應 TTL(秒)", "dnscrypt": "DNSCrypt", "dns_over_https": "DNS-over-HTTPS", "dns_over_tls": "DNS-over-TLS", @@ -288,6 +312,16 @@ "edns_use_custom_ip": "使用自訂 EDNS IP", "edns_use_custom_ip_desc": "允許使用自訂 EDNS IP", "rate_limit_desc": "限制單一裝置每秒發出的查詢次數(設定為 0 即表示無限制)", + "rate_limit_subnet_len_ipv4": "IPv4 位址的子網路前綴長度", + "rate_limit_subnet_len_ipv4_desc": "用於速率限制的 IPv4 位址的子網路前綴長度。 預設為 24", + "rate_limit_subnet_len_ipv4_error": "IPv4 子網路前綴長度應介於 0 到 32 之間", + "rate_limit_subnet_len_ipv6": "IPv6 位址的子網路前綴長度", + "rate_limit_subnet_len_ipv6_desc": "用於速率限制的 IPv6 位址的子網路前綴長度。 預設為 56", + "rate_limit_subnet_len_ipv6_error": "IPv6 子網路前綴長度應介於 0 到 128 之間", + "form_enter_rate_limit_subnet_len": "輸入速率限制的子網路前綴長度", + "rate_limit_whitelist": "速率限制白名單", + "rate_limit_whitelist_desc": "排除在速率限制之外的 IP 位址", + "rate_limit_whitelist_placeholder": "每行輸入一個 IP 地址", "blocking_ipv4_desc": "回覆指定 IPv4 位址給被封鎖的網域的 A 紀錄查詢", "blocking_ipv6_desc": "回覆指定 IPv6 位址給被封鎖的網域的 AAAA 紀錄查詢", "blocking_mode_default": "預設:被 Adblock 規則封鎖時回應零值的 IP 位址(A 紀錄回應 0.0.0.0 ,AAAA 紀錄回應 ::);被 /etc/hosts 規則封鎖時回應規則中指定 IP 位址", @@ -391,6 +425,9 @@ "encryption_hostnames": "主機名稱", "encryption_reset": "您確定要重設加密設定嗎?", "encryption_warning": "警告", + "encryption_plain_dns_enable": "啟用一般 DNS", + "encryption_plain_dns_desc": "預設情況下已啟用一般 DNS。您可以將其停用以強制所有裝置使用加密 DNS。要執行此操作,您必須啟用至少一個加密的 DNS 協定。", + "encryption_plain_dns_error": "若要停用一般 DNS,請啟用至少一個加密的 DNS 協定", "topline_expiring_certificate": "您的 SSL 憑證即將到期。請前往<0>加密設定更新。", "topline_expired_certificate": "您的 SSL 憑證已到期。請前往<0>加密設定更新。", "form_error_port_range": "輸入範圍 80-65535 中的值", @@ -430,6 +467,7 @@ "form_add_id": "新增識別碼", "form_client_name": "輸入用戶端名稱", "name": "名稱", + "client_name": "客戶端 {{id}}", "client_global_settings": "使用全域設定", "client_deleted": "已刪除「{{key}}」", "client_added": "已新增「{{key}}」", @@ -451,6 +489,7 @@ "updates_checked": "檢查更新成功", "updates_version_equal": "AdGuard Home 是最新的版本", "check_updates_now": "立即檢查更新", + "version_request_error": "更新檢查失敗。請檢查您的網絡連線。", "dns_privacy": "DNS 隱私", "setup_dns_privacy_1": "<0>DNS-over-TLS:使用 <1>{{address}}。", "setup_dns_privacy_2": "<0>DNS-over-HTTPS:使用 <1>{{address}}。", @@ -471,6 +510,7 @@ "setup_dns_notice": "要使用 <1>DNS-over-HTTPS 或 <1>DNS-over-TLS,您必須先在 AdGuard Home 完成 <0>加密設定。", "rewrite_added": "「{{key}}」的 DNS 覆寫新增成功", "rewrite_deleted": "「{{key}}」的 DNS 覆寫刪除成功", + "rewrite_updated": "已更新 DNS 覆寫", "rewrite_add": "新增 DNS 覆寫", "rewrite_edit": "編輯 DNS 覆寫", "rewrite_not_found": "找不到 DNS 覆寫", @@ -522,6 +562,8 @@ "statistics_enable": "啟用統計數據", "ignore_domains": "已忽略網域(每行一個)", "ignore_domains_title": "已忽略網域", + "ignore_domains_desc_stats": "符合這些規則的查詢不會被計入統計資料中", + "ignore_domains_desc_query": "符合這些規則的查詢不會被寫入查詢記錄中", "interval_hours": "{{count}} 小時", "interval_hours_plural": "{{count}} 小時", "filters_configuration": "過濾器設定", @@ -631,10 +673,19 @@ "click_to_view_queries": "按一下以檢視查詢結果", "port_53_faq_link": "連接埠 53 經常被「DNSStubListener」或「systemd-resolved」服務佔用。請閱讀下列有關解決<0>這個問題的說明", "adg_will_drop_dns_queries": "AdGuard Home 將停止回應此用戶端的所有 DNS 查詢。", + "filter_allowlist": "警告:此操作同時會將規則 \"{{disallowed_rule}}\" 從允許的客戶端清單中排除。", + "last_rule_in_allowlist": "無法停用此客戶端,因為排除規則「{{disallowed_rule}}」會導致「允許的用戶端」清單停用。", + "use_saved_key": "使用先前儲存的鍵", + "parental_control": "家長監護", "safe_browsing": "安全瀏覽", - "served_from_cache": "{{value}} (由快取回應)", + "served_from_cache_label": "由快取回應", "form_error_password_length": "密碼必須至少 {{value}} 個字元長度", + "anonymizer_notification": "<0>注意: 已啟用 IP 去識別化。您可以在<1>一般設定中停用它。", + "confirm_dns_cache_clear": "您確定要清除 DNS 快取嗎?", + "cache_cleared": "DNS 快取成功清除", + "clear_cache": "清除快取", "make_static": "新增為靜態", + "theme_auto_desc": "自動(根據裝置調整)", "theme_dark_desc": "深色主題", "theme_light_desc": "淺色主題", "disable_for_seconds": "{{count}} 秒", @@ -649,11 +700,48 @@ "disable_notify_for_minutes": "暫停防護 {{count}} 分鐘", "disable_notify_for_minutes_plural": "暫停防護 {{count}} 分鐘", "disable_notify_for_hours": "暫停防護 {{count}} 小時", + "disable_notify_for_hours_plural": "停用保護 {{count}} 小時", + "disable_notify_until_tomorrow": "停用保護直至明天", + "enable_protection_timer": "保護功能將在 {{time}} 啟用", + "custom_retention_input": "輸入保存時長(單位:小時)", + "custom_rotation_input": "請輸入輪替週期(單位:小時)", + "protection_section_label": "保護", + "log_and_stats_section_label": "查詢日誌與統計資料", + "ignore_query_log": "在查詢日誌中忽略此客戶端", + "ignore_statistics": "在統計資料中忽略此客戶端", + "schedule_services": "暫停服務封鎖", + "schedule_services_desc": "設定服務封鎖過濾器的暫停排程", + "schedule_services_desc_client": "針對此用戶端,設定服務阻擋的暫停排程", + "schedule_desc": "設定已封鎖服務的閒置時段", + "schedule_invalid_select": "開始時間必須在結束時間之前", + "schedule_select_days": "選擇天數", + "schedule_timezone": "選擇時區", + "schedule_current_timezone": "目前時區:{{value}}", + "schedule_time_all_day": "全天", + "schedule_modal_description": "這個排程將會取代同一星期中所有現有的排程。每一天只能有一個閒置時段。", + "schedule_modal_time_off": "沒有封鎖服務:", + "schedule_new": "新排程", + "schedule_edit": "編輯排程", + "schedule_save": "儲存排程", + "schedule_add": "新增排程", + "schedule_remove": "移除排程", + "schedule_from": "從", + "schedule_to": "至", + "sunday": "星期日", + "monday": "星期一", + "tuesday": "星期二", + "wednesday": "星期三", + "thursday": "星期四", + "friday": "星期五", + "saturday": "星期六", "sunday_short": "週日", "monday_short": "週一", "tuesday_short": "週二", "wednesday_short": "週三", "thursday_short": "週四", "friday_short": "週五", - "saturday_short": "週六" + "saturday_short": "週六", + "upstream_dns_cache_configuration": "上游 DNS 快取設定", + "enable_upstream_dns_cache": "為此客戶端的自訂上游設定啟用 DNS 快取", + "dns_cache_size": "DNS 快取大小(bytes)" } diff --git a/client/src/helpers/filters/filters.js b/client/src/helpers/filters/filters.js index e07bf840..1484a2da 100644 --- a/client/src/helpers/filters/filters.js +++ b/client/src/helpers/filters/filters.js @@ -190,6 +190,12 @@ export default { "homepage": "https://github.com/hagezi/dns-blocklists#piracy", "source": "https://adguardteam.github.io/HostlistsRegistry/assets/filter_46.txt" }, + "hagezi_badware_hoster_blocklist": { + "name": "HaGeZi's Badware Hoster Blocklist", + "categoryId": "security", + "homepage": "https://github.com/hagezi/dns-blocklists", + "source": "https://adguardteam.github.io/HostlistsRegistry/assets/filter_55.txt" + }, "hagezi_dyndns_blocklist": { "name": "HaGeZi's DynDNS Blocklist", "categoryId": "security", @@ -226,6 +232,12 @@ export default { "homepage": "https://github.com/hagezi/dns-blocklists", "source": "https://adguardteam.github.io/HostlistsRegistry/assets/filter_51.txt" }, + "hagezi_the_worlds_most_abused_tlds": { + "name": "HaGeZi's The World's Most Abused TLDs", + "categoryId": "security", + "homepage": "https://github.com/hagezi/dns-blocklists", + "source": "https://adguardteam.github.io/HostlistsRegistry/assets/filter_56.txt" + }, "hagezi_threat_intelligence_feeds": { "name": "HaGeZi's Threat Intelligence Feeds", "categoryId": "security", diff --git a/go.mod b/go.mod index f8d12e20..e7f21b85 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module github.com/AdguardTeam/AdGuardHome -go 1.21.8 +go 1.22.2 require ( github.com/AdguardTeam/dnsproxy v0.67.0 diff --git a/internal/filtering/servicelist.go b/internal/filtering/servicelist.go index 10b639f4..745a8cb6 100644 --- a/internal/filtering/servicelist.go +++ b/internal/filtering/servicelist.go @@ -483,6 +483,16 @@ var blockedServices = []blockedService{{ "||bsky.app^", "||bsky.social^", }, +}, { + ID: "box", + Name: "Box", + IconSVG: []byte(""), + Rules: []string{ + "||box.com^", + "||box.net^", + "||boxcdn.net^", + "||boxcloud.com^", + }, }, { ID: "canais_globo", Name: "Canais Globo", @@ -669,6 +679,34 @@ var blockedServices = []blockedService{{ "||douban.fm^", "||doubanio.com^", }, +}, { + ID: "dropbox", + Name: "Dropbox", + IconSVG: []byte(""), + Rules: []string{ + "||addtodropbox.com^", + "||app.hellosign.com^", + "||dash.ai^", + "||db.tt^", + "||docsend.com^", + "||dropbox-dns.com^", + "||dropbox.com^", + "||dropbox.tech^", + "||dropbox.zendesk.com^", + "||dropboxapi.com^", + "||dropboxbusiness.com^", + "||dropboxcaptcha.com^", + "||dropboxforum.com^", + "||dropboxforums.com^", + "||dropboxinsiders.com^", + "||dropboxlegal.com^", + "||dropboxmail.com^", + "||dropboxpartners.com^", + "||dropboxstatic.com^", + "||dropboxteam.com^", + "||dropboxusercontent.com^", + "||getdropbox.com^", + }, }, { ID: "ebay", Name: "EBay", @@ -2439,8 +2477,10 @@ var blockedServices = []blockedService{{ "||bytecdn.cn^", "||bytedance.map.fastly.net^", "||bytedapm.com^", + "||bytegoofy.com^", "||byteimg.com^", "||byteoversea.com^", + "||bytescm.com^", "||douyin.com^", "||douyincdn.com^", "||douyinliving.com^", @@ -2463,6 +2503,7 @@ var blockedServices = []blockedService{{ "||ttlivecdn.com.c.bytefcdn-oversea.com^", "||ttlivecdn.com^", "||v*.tiktokcdn-eu.com^", + "||zijieapi.com^", }, }, { ID: "tinder", diff --git a/internal/tools/go.mod b/internal/tools/go.mod index 1ee456a0..a6e26c14 100644 --- a/internal/tools/go.mod +++ b/internal/tools/go.mod @@ -1,6 +1,6 @@ module github.com/AdguardTeam/AdGuardHome/internal/tools -go 1.21.8 +go 1.22.2 require ( github.com/fzipp/gocyclo v0.6.0