Add source rulesets and mixed domain/IP list support

This commit is contained in:
ushan0v
2026-04-12 06:15:36 +03:00
parent 820fa6a1c5
commit f017865245
13 changed files with 1069 additions and 500 deletions
File diff suppressed because it is too large Load Diff
+148 -134
View File
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: PODKOP PLUS\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-04-11 22:33+0300\n"
"PO-Revision-Date: 2026-04-11 22:33+0300\n"
"POT-Creation-Date: 2026-04-12 03:08+0300\n"
"PO-Revision-Date: 2026-04-12 03:08+0300\n"
"Last-Translator: ushan0v <ushan0v@users.noreply.github.com>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
@@ -36,7 +36,7 @@ msgstr ""
msgid "A latency-tested group of proxy URLs for this node"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1702
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1731
msgid "A latency-tested group of proxy URLs for this section"
msgstr ""
@@ -44,12 +44,12 @@ msgstr ""
msgid "A manual group of proxy URLs for this node"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1684
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1713
msgid "A manual group of proxy URLs for this section"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1526
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1558
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1551
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1583
msgid "Action"
msgstr ""
@@ -61,15 +61,19 @@ msgstr ""
msgid "Add a section"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2086
msgid "Add URLs or local paths to .srs lists"
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2130
msgid "Add URLs or local paths to .lst lists"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2115
msgid "Add URLs or local paths to .srs / .json lists"
msgstr ""
#: src/podkop/tabs/diagnostic/checks/runNftCheck.ts:106
msgid "Additional marking rules found"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:249
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:253
msgid "Allows access to YACD from the WAN. Make sure to open the appropriate port in your firewall."
msgstr ""
@@ -78,7 +82,7 @@ msgid "An error occurred while saving the form:"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:170
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1797
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1826
msgid "Applicable for SOCKS and Shadowsocks links"
msgstr ""
@@ -110,7 +114,7 @@ msgstr ""
msgid "Bootsrap DNS"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:47
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:51
msgid "Bootstrap DNS server"
msgstr ""
@@ -122,15 +126,15 @@ msgstr ""
msgid "Browser is using FakeIP correctly"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1991
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2020
msgid "Built-in rule sets"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:354
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:382
msgid "Cache File Path"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:368
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:396
msgid "Cache file path cannot be empty"
msgstr ""
@@ -176,11 +180,11 @@ msgstr ""
msgid "Close"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1514
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1539
msgid "Conditions"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:341
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:369
msgid "Config File Path"
msgstr ""
@@ -188,16 +192,16 @@ msgstr ""
msgid "Configuration for Podkop Plus service"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1639
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1668
msgid "Connection"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1622
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1651
msgid "Connection Type"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:19
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1625
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1654
msgid "Connection URL"
msgstr ""
@@ -217,11 +221,11 @@ msgstr ""
msgid "Dashboard currently unavailable"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:224
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:228
msgid "Delay in milliseconds before reloading Podkop Plus after interface UP"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:231
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:235
msgid "Delay value cannot be empty"
msgstr ""
@@ -242,11 +246,11 @@ msgstr ""
msgid "Disable autostart"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:267
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:271
msgid "Disable QUIC"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:268
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:272
msgid "Disable the QUIC protocol to improve compatibility or fix issues with video streaming"
msgstr ""
@@ -259,18 +263,18 @@ msgid "DNS on router"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:227
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1862
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:17
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1891
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:21
msgid "DNS over HTTPS (DoH)"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:228
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1863
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:18
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1892
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:22
msgid "DNS over TLS (DoT)"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1860
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1889
msgid "DNS protocol"
msgstr ""
@@ -278,20 +282,20 @@ msgstr ""
msgid "DNS Protocol"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:14
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:18
msgid "DNS Protocol Type"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:70
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:74
msgid "DNS Rewrite TTL"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1878
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1907
msgid "DNS server"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:238
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:26
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:30
msgid "DNS Server"
msgstr ""
@@ -303,19 +307,23 @@ msgstr ""
msgid "Do not panic, everything can be fixed, just..."
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1961
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2129
msgid "Domain and IP Lists"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1990
msgid "Domain keyword"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1968
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1997
msgid "Domain regex"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1933
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1962
msgid "Domains"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:332
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:360
msgid "Dont Touch My DHCP!"
msgstr ""
@@ -328,15 +336,15 @@ msgstr ""
msgid "Download"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:300
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:328
msgid "Download external rule sets through one of the enabled proxy sections"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:290
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:318
msgid "Download Lists via Proxy/VPN"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:299
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:327
msgid "Download Lists via specific proxy section"
msgstr ""
@@ -344,7 +352,7 @@ msgstr ""
msgid "Download Node"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:291
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:319
msgid "Downloading all lists via specific Proxy/VPN"
msgstr ""
@@ -360,7 +368,7 @@ msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:8
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:10
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1516
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1541
msgid "Enable"
msgstr ""
@@ -368,7 +376,7 @@ msgstr ""
msgid "Enable a dedicated DNS resolver when this node uses an interface"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1849
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1878
msgid "Enable a dedicated DNS resolver when this section uses an interface"
msgstr ""
@@ -376,56 +384,56 @@ msgstr ""
msgid "Enable autostart"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1900
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1929
msgid "Enable Mixed Proxy"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:128
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:132
msgid "Enable Output Network Interface"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:239
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:243
msgid "Enable YACD"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:248
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:252
msgid "Enable YACD WAN Access"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:52
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1662
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1691
msgid "Enter a complete sing-box outbound object"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:103
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1723
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1752
msgid "Every 3 minutes"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:101
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1721
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1750
msgid "Every 30 seconds"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:104
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1724
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1753
msgid "Every 5 minutes"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:102
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1722
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1751
msgid "Every minute"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1947
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1976
msgid "Exact full domain"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:408
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:436
msgid "Exclude NTP"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:409
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:437
msgid "Exclude NTP protocol traffic from the tunnel to prevent it from being routed through the proxy or VPN"
msgstr ""
@@ -433,7 +441,7 @@ msgstr ""
msgid "Expecting: %s"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1901
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1930
msgid "Expose this section as a local HTTP+SOCKS proxy"
msgstr ""
@@ -475,7 +483,7 @@ msgstr ""
msgid "How often this remote rule set should be refreshed"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1623
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1652
msgid "How to configure the proxy connection for this section"
msgstr ""
@@ -485,20 +493,20 @@ msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:23
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:179
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1629
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1808
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1658
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1837
msgid "Interface"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:191
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:195
msgid "Interface Monitoring"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:223
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:227
msgid "Interface Monitoring Delay"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:192
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:196
msgid "Interface monitoring for Bad WAN"
msgstr ""
@@ -579,7 +587,7 @@ msgstr ""
msgid "Invalid path format. Path must start with \"/\" and contain valid characters"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1928
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1957
#: src/validators/validateShadowsocksUrl.ts:85
msgid "Invalid port number. Must be between 1 and 65535"
msgstr ""
@@ -685,7 +693,7 @@ msgstr ""
msgid "IP address 0.0.0.0 is not allowed"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1940
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1969
msgid "IPs"
msgstr ""
@@ -701,7 +709,11 @@ msgstr ""
msgid "Latest"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:278
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1504
msgid "List must be a direct .lst URL or a local .lst path"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:282
msgid "List Update Frequency"
msgstr ""
@@ -713,7 +725,7 @@ msgstr ""
msgid "Local file path to a sing-box rule set"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:390
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:418
msgid "Log Level"
msgstr ""
@@ -721,32 +733,32 @@ msgstr ""
msgid "Main DNS"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1941
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1970
msgid "Match destination IPs or subnets"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1962
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1991
msgid "Match domains containing a substring"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1934
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1963
msgid "Match domains including all subdomains"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1969
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1998
msgid "Match domains using a regular expression"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1948
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1977
msgid "Match only one exact full domain name"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1976
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2005
msgid "Match source IPs or subnets"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:114
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1735
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1764
msgid "Maximum response time delta in milliseconds"
msgstr ""
@@ -754,20 +766,20 @@ msgstr ""
msgid "Memory Usage"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1912
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1941
msgid "Mixed Proxy Port"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:200
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:204
msgid "Monitored Interfaces"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:136
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1757
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1786
msgid "Must be a number in the range of 50 - 1000"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1588
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1617
msgid "NFQWS Strategy"
msgstr ""
@@ -792,7 +804,7 @@ msgstr ""
msgid "Not implement yet"
msgstr ""
#: src/podkop/tabs/diagnostic/initController.ts:523
#: src/podkop/tabs/diagnostic/initController.ts:525
msgid "not installed"
msgstr ""
@@ -829,8 +841,8 @@ msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:22
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:51
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1628
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1661
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1657
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1690
msgid "Outbound JSON"
msgstr ""
@@ -838,7 +850,7 @@ msgstr ""
msgid "Outdated"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:137
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:141
msgid "Output Network Interface"
msgstr ""
@@ -850,15 +862,15 @@ msgstr ""
msgid "Path cannot be empty"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:372
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:400
msgid "Path must be absolute (start with /)"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:381
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:409
msgid "Path must contain at least one directory (like /tmp/cache.db)"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:376
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:404
msgid "Path must end with cache.db"
msgstr ""
@@ -879,15 +891,15 @@ msgstr ""
msgid "Podkop Plus Settings"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:333
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:361
msgid "Podkop Plus will not modify your DHCP configuration"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1920
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1949
msgid "Port cannot be empty"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1913
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1942
msgid "Port for the local mixed proxy of this section"
msgstr ""
@@ -903,7 +915,7 @@ msgstr ""
msgid "Proxy traffic is routed via FakeIP"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2030
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2059
msgid "Regional options cannot be used together"
msgstr ""
@@ -915,7 +927,7 @@ msgstr ""
msgid "Remote URL to a sing-box rule set"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1848
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1877
msgid "Resolver for interface outbound"
msgstr ""
@@ -943,21 +955,19 @@ msgstr ""
msgid "Router DNS is routed through sing-box"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:419
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:447
msgid "Routing Excluded IPs"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1468
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1477
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1480
msgid "Rule set must be a direct .srs URL or a local .srs path"
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1496
msgid "Rule set must be a direct .srs / .json URL or a local .srs / .json path"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:48
msgid "Rule set URL"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2085
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2114
msgid "Rule sets"
msgstr ""
@@ -989,7 +999,7 @@ msgstr ""
msgid "Run Diagnostic"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2049
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2078
msgid "Russia inside restrictions"
msgstr ""
@@ -997,7 +1007,7 @@ msgstr ""
msgid "Save error"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:259
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:263
msgid "Secret key for authenticating remote access to YACD when WAN access is enabled."
msgstr ""
@@ -1005,7 +1015,7 @@ msgstr ""
msgid "Section"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1545
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1570
msgid "Section name"
msgstr ""
@@ -1013,47 +1023,43 @@ msgstr ""
msgid "Sections"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1992
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2021
msgid "Select a predefined list for routing"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:15
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:19
msgid "Select DNS protocol to use"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:279
msgid "Select how often the domain or subnet lists are updated automatically"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:27
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:31
msgid "Select or enter DNS server address"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:355
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:383
msgid "Select or enter path for sing-box cache file. Change this ONLY if you know what you are doing"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:342
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:370
msgid "Select path for sing-box config file. Change this ONLY if you know what you are doing"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:391
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:419
msgid "Select the log level for sing-box"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:92
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:96
msgid "Select the network interface from which the traffic will originate"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:138
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:142
msgid "Select the network interface to which the traffic will originate"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:201
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:205
msgid "Select the WAN interfaces to be monitored"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1683
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1712
msgid "Selector connections"
msgstr ""
@@ -1061,7 +1067,7 @@ msgstr ""
msgid "Selector Links"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1995
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2024
msgid "Service list"
msgstr ""
@@ -1070,7 +1076,7 @@ msgid "Services info"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:394
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1513
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1538
msgid "Settings"
msgstr ""
@@ -1107,15 +1113,15 @@ msgstr ""
msgid "Source file"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1975
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2004
msgid "Source IPs"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:91
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:95
msgid "Source Network Interface"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:420
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:448
msgid "Specify a local IP address to be excluded from routing"
msgstr ""
@@ -1151,7 +1157,7 @@ msgstr ""
msgid "The desync fwmark is managed by Podkop Plus for loop prevention and must not be overridden here."
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:48
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:52
msgid "The DNS server used to look up the IP address of an upstream DNS server"
msgstr ""
@@ -1180,7 +1186,7 @@ msgstr ""
msgid "This option requires a value."
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:71
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:75
msgid "Time in seconds for DNS record caching (default: 60)"
msgstr ""
@@ -1196,11 +1202,11 @@ msgstr ""
msgid "Troubleshooting"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:82
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:86
msgid "TTL must be a positive number"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:77
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:81
msgid "TTL value cannot be empty"
msgstr ""
@@ -1208,12 +1214,12 @@ msgstr ""
msgid "Type"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:19
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:23
msgid "UDP (Unprotected DNS)"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:169
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1796
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1825
msgid "UDP over TCP"
msgstr ""
@@ -1265,11 +1271,11 @@ msgstr ""
msgid "URL must use one of the following protocols:"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1701
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1730
msgid "URLTest connections"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1719
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1748
msgid "URLTest interval"
msgstr ""
@@ -1281,7 +1287,7 @@ msgstr ""
msgid "URLTest Links"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1734
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1763
msgid "URLTest tolerance"
msgstr ""
@@ -1290,7 +1296,7 @@ msgid "URLTest Tolerance"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:139
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1764
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1793
msgid "URLTest URL"
msgstr ""
@@ -1298,10 +1304,18 @@ msgstr ""
msgid "Use a network interface as the outbound for this node"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1809
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1838
msgid "Use a network interface as the outbound for this section"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:312
msgid "Use sing-box duration format like 1d, 12h or 30m"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:283
msgid "Use sing-box duration format. Leave empty to disable automatic updates."
msgstr ""
#: src/validators/validateDns.ts:14
#: src/validators/validateDns.ts:18
#: src/validators/validateDomain.ts:13
@@ -1330,32 +1344,32 @@ msgstr ""
msgid "View logs"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1546
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1571
msgid "Visible name of this section"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:32
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1640
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1669
msgid "vless://, ss://, trojan://, socks4/5://, hy2/hysteria2:// links"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2032
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2061
msgid "Warning: %s cannot be used together with %s. Previous selections have been removed."
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2051
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2080
msgid "Warning: Russia inside can only be used with %s. %s already in Russia inside and have been removed from selection."
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1559
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1584
msgid "What Podkop Plus should do when this section matches"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:258
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:262
msgid "YACD Secret Key"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:129
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:133
msgid "You can select Output Network Interface, by default autodetect"
msgstr ""
+21 -9
View File
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: PODKOP PLUS\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-04-11 01:33+0300\n"
"PO-Revision-Date: 2026-04-11 01:33+0300\n"
"POT-Creation-Date: 2026-04-12 06:08+0300\n"
"PO-Revision-Date: 2026-04-12 06:08+0300\n"
"Last-Translator: ushan0v\n"
"Language-Team: none\n"
"Language: ru\n"
@@ -47,8 +47,11 @@ msgstr "Активные соединения"
msgid "Add a section"
msgstr "Добавить секцию"
msgid "Add URLs or local paths to .srs lists"
msgstr "Добавляйте URL или локальные пути к спискам .srs"
msgid "Add URLs or local paths to .lst lists"
msgstr "Добавляйте URL или локальные пути к спискам .lst"
msgid "Add URLs or local paths to .srs / .json lists"
msgstr "Добавляйте URL или локальные пути к спискам .srs / .json"
msgid "Additional marking rules found"
msgstr "Найдены дополнительные правила маркировки"
@@ -215,6 +218,9 @@ msgstr "Адрес DNS-сервера не может быть пустым"
msgid "Do not panic, everything can be fixed, just..."
msgstr "Не паникуйте, всё можно исправить, просто..."
msgid "Domain and IP Lists"
msgstr "Списки доменов и IPs"
msgid "Domain keyword"
msgstr "Ключевое слово домена"
@@ -497,6 +503,9 @@ msgstr "Ключевое слово не должно содержать про
msgid "Latest"
msgstr "Последняя"
msgid "List must be a direct .lst URL or a local .lst path"
msgstr "Список должен быть прямым URL на .lst или локальным путём к .lst"
msgid "List Update Frequency"
msgstr "Частота обновления списков"
@@ -668,8 +677,8 @@ msgstr "DNS роутера проходит через sing-box"
msgid "Routing Excluded IPs"
msgstr "Исключённые из маршрутизации IP-адреса"
msgid "Rule set must be a direct .srs URL or a local .srs path"
msgstr "Набор правил должен быть прямым URL на .srs или локальным путём к .srs"
msgid "Rule set must be a direct .srs / .json URL or a local .srs / .json path"
msgstr "Набор правил должен быть прямым URL на .srs / .json или локальным путём к .srs / .json"
msgid "Rule set URL"
msgstr "URL набора правил"
@@ -722,9 +731,6 @@ msgstr "Выберите предустановленный набор прав
msgid "Select DNS protocol to use"
msgstr "Выберите протокол DNS"
msgid "Select how often the domain or subnet lists are updated automatically"
msgstr "Выберите частоту автоматического обновления списков доменов или подсетей."
msgid "Select or enter DNS server address"
msgstr "Выберите или введите адрес DNS-сервера"
@@ -923,6 +929,12 @@ msgstr "Использовать сетевой интерфейс как outbou
msgid "Use a network interface as the outbound for this section"
msgstr "Использовать сетевой интерфейс как outbound для этой секции"
msgid "Use sing-box duration format like 1d, 12h or 30m"
msgstr "Используйте формат длительности sing-box, например 1d, 12h или 30m"
msgid "Use sing-box duration format. Leave empty to disable automatic updates."
msgstr "Используйте формат длительности sing-box. Оставьте поле пустым, чтобы отключить автоматическое обновление."
msgid "Valid"
msgstr "Валидно"
@@ -518,7 +518,9 @@ function renderDiagnosticSystemInfoWidget() {
},
{
key: 'Zapret',
value: diagnosticsSystemInfo.zapret_installed
value: diagnosticsSystemInfo.loading
? 'loading'
: diagnosticsSystemInfo.zapret_installed
? diagnosticsSystemInfo.zapret_version
: _('not installed'),
},
+2
View File
@@ -111,6 +111,8 @@ export namespace Podkop {
proxy_config_type?: ProxyConfigType;
node?: string;
rule_set?: string[];
domain_ip_lists?: string[];
update_interval?: string;
proxy_string?: string;
nfqws_opt?: string;
selector_proxy_links?: string[];
@@ -4762,7 +4762,7 @@ function renderDiagnosticSystemInfoWidget() {
},
{
key: "Zapret",
value: diagnosticsSystemInfo.zapret_installed ? diagnosticsSystemInfo.zapret_version : _("not installed")
value: diagnosticsSystemInfo.loading ? "loading" : diagnosticsSystemInfo.zapret_installed ? diagnosticsSystemInfo.zapret_version : _("not installed")
},
{
key: "OS",
@@ -1454,30 +1454,55 @@ function isBuiltinRulesetValue(value) {
return Object.prototype.hasOwnProperty.call(main.DOMAIN_LIST_OPTIONS, value);
}
function validateCustomRulesetReference(value) {
function normalizeReferenceForExtensionCheck(value) {
return `${value || ""}`.split(/[?#]/, 1)[0].toLowerCase();
}
function hasAllowedReferenceExtension(value, extensions) {
const normalized = normalizeReferenceForExtensionCheck(value);
return extensions.some((extension) => normalized.endsWith(extension));
}
function validateFileReference(value, extensions, errorMessage) {
if (!value || value.length === 0) {
return true;
}
if (value.startsWith("http://") || value.startsWith("https://")) {
const validation = main.validateUrl(value);
if (validation.valid && value.endsWith(".srs")) {
if (validation.valid && hasAllowedReferenceExtension(value, extensions)) {
return true;
}
return _("Rule set must be a direct .srs URL or a local .srs path");
return errorMessage;
}
if (value.startsWith("/")) {
const validation = main.validatePath(value);
if (validation.valid && value.endsWith(".srs")) {
if (validation.valid && hasAllowedReferenceExtension(value, extensions)) {
return true;
}
return _("Rule set must be a direct .srs URL or a local .srs path");
return errorMessage;
}
return _("Rule set must be a direct .srs URL or a local .srs path");
return errorMessage;
}
function validateCustomRulesetReference(value) {
return validateFileReference(
value,
[".srs", ".json"],
_("Rule set must be a direct .srs / .json URL or a local .srs / .json path"),
);
}
function validatePlainListReference(value) {
return validateFileReference(
value,
[".lst"],
_("List must be a direct .lst URL or a local .lst path"),
);
}
function getRulesetReferences(section_id) {
@@ -1562,9 +1587,13 @@ function createSectionContent(section) {
o.default = "proxy";
o.rmempty = false;
o.modalonly = true;
o.load = function () {
o.cfgvalue = function (section_id) {
return getRuleResolvedAction(section_id);
};
o.load = function (section_id) {
return ensureZapretAvailabilityLoaded().then(() => {
populateActionOptionValues(this);
return this.cfgvalue(section_id);
});
};
{
@@ -2083,7 +2112,7 @@ function createSectionContent(section) {
form.DynamicList,
"rule_set",
_("Rule sets"),
_("Add URLs or local paths to .srs lists"),
_("Add URLs or local paths to .srs / .json lists"),
);
ruleSetOption.modalonly = true;
ruleSetOption.load = function (section_id) {
@@ -2092,6 +2121,21 @@ function createSectionContent(section) {
ruleSetOption.validate = function (_section_id, value) {
return validateCustomRulesetReference(value);
};
const domainIpListsOption = section.taboption(
"conditions",
form.DynamicList,
"domain_ip_lists",
_("Domain and IP Lists"),
_("Add URLs or local paths to .lst lists"),
);
domainIpListsOption.modalonly = true;
domainIpListsOption.load = function (section_id) {
return getConfigListValues(section_id, "domain_ip_lists");
};
domainIpListsOption.validate = function (_section_id, value) {
return validatePlainListReference(value);
};
}
const EntryPoint = {
@@ -7,6 +7,10 @@
const UCI_PACKAGE = main.PODKOP_UCI_PACKAGE;
function isSingBoxDuration(value) {
return /^([0-9]+(?:\.[0-9]+)?(?:ns|us|ms|s|m|h|d))+$/.test(value);
}
function createSettingsContent(section) {
let o = section.option(
form.ListValue,
@@ -273,16 +277,40 @@ function createSettingsContent(section) {
o.rmempty = false;
o = section.option(
form.ListValue,
form.Value,
"update_interval",
_("List Update Frequency"),
_("Select how often the domain or subnet lists are updated automatically"),
_(
"Use sing-box duration format. Leave empty to disable automatic updates.",
),
);
Object.entries(main.UPDATE_INTERVAL_OPTIONS).forEach(([key, label]) => {
o.value(key, _(label));
});
o.default = "1d";
o.rmempty = false;
o.placeholder = "1d";
o.rmempty = true;
o.cfgvalue = function (section_id) {
return uci.get(UCI_PACKAGE, section_id, "update_interval") || "";
};
o.write = function (section_id, value) {
const normalized = value ? `${value}`.trim() : "";
if (normalized.length) {
uci.set(UCI_PACKAGE, section_id, "update_interval", normalized);
} else {
uci.unset(UCI_PACKAGE, section_id, "update_interval");
}
};
o.validate = function (_section_id, value) {
const normalized = value ? `${value}`.trim() : "";
if (!normalized.length) {
return true;
}
if (isSingBoxDuration(normalized)) {
return true;
}
return _("Use sing-box duration format like 1d, 12h or 30m");
};
o = section.option(
form.Flag,
+21 -9
View File
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: PODKOP PLUS\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-04-11 01:33+0300\n"
"PO-Revision-Date: 2026-04-11 01:33+0300\n"
"POT-Creation-Date: 2026-04-12 06:08+0300\n"
"PO-Revision-Date: 2026-04-12 06:08+0300\n"
"Last-Translator: ushan0v\n"
"Language-Team: none\n"
"Language: ru\n"
@@ -47,8 +47,11 @@ msgstr "Активные соединения"
msgid "Add a section"
msgstr "Добавить секцию"
msgid "Add URLs or local paths to .srs lists"
msgstr "Добавляйте URL или локальные пути к спискам .srs"
msgid "Add URLs or local paths to .lst lists"
msgstr "Добавляйте URL или локальные пути к спискам .lst"
msgid "Add URLs or local paths to .srs / .json lists"
msgstr "Добавляйте URL или локальные пути к спискам .srs / .json"
msgid "Additional marking rules found"
msgstr "Найдены дополнительные правила маркировки"
@@ -215,6 +218,9 @@ msgstr "Адрес DNS-сервера не может быть пустым"
msgid "Do not panic, everything can be fixed, just..."
msgstr "Не паникуйте, всё можно исправить, просто..."
msgid "Domain and IP Lists"
msgstr "Списки доменов и IPs"
msgid "Domain keyword"
msgstr "Ключевое слово домена"
@@ -497,6 +503,9 @@ msgstr "Ключевое слово не должно содержать про
msgid "Latest"
msgstr "Последняя"
msgid "List must be a direct .lst URL or a local .lst path"
msgstr "Список должен быть прямым URL на .lst или локальным путём к .lst"
msgid "List Update Frequency"
msgstr "Частота обновления списков"
@@ -668,8 +677,8 @@ msgstr "DNS роутера проходит через sing-box"
msgid "Routing Excluded IPs"
msgstr "Исключённые из маршрутизации IP-адреса"
msgid "Rule set must be a direct .srs URL or a local .srs path"
msgstr "Набор правил должен быть прямым URL на .srs или локальным путём к .srs"
msgid "Rule set must be a direct .srs / .json URL or a local .srs / .json path"
msgstr "Набор правил должен быть прямым URL на .srs / .json или локальным путём к .srs / .json"
msgid "Rule set URL"
msgstr "URL набора правил"
@@ -722,9 +731,6 @@ msgstr "Выберите предустановленный набор прав
msgid "Select DNS protocol to use"
msgstr "Выберите протокол DNS"
msgid "Select how often the domain or subnet lists are updated automatically"
msgstr "Выберите частоту автоматического обновления списков доменов или подсетей."
msgid "Select or enter DNS server address"
msgstr "Выберите или введите адрес DNS-сервера"
@@ -923,6 +929,12 @@ msgstr "Использовать сетевой интерфейс как outbou
msgid "Use a network interface as the outbound for this section"
msgstr "Использовать сетевой интерфейс как outbound для этой секции"
msgid "Use sing-box duration format like 1d, 12h or 30m"
msgstr "Используйте формат длительности sing-box, например 1d, 12h или 30m"
msgid "Use sing-box duration format. Leave empty to disable automatic updates."
msgstr "Используйте формат длительности sing-box. Оставьте поле пустым, чтобы отключить автоматическое обновление."
msgid "Valid"
msgstr "Валидно"
+148 -134
View File
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: PODKOP PLUS\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-04-11 22:33+0300\n"
"PO-Revision-Date: 2026-04-11 22:33+0300\n"
"POT-Creation-Date: 2026-04-12 03:08+0300\n"
"PO-Revision-Date: 2026-04-12 03:08+0300\n"
"Last-Translator: ushan0v <ushan0v@users.noreply.github.com>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
@@ -36,7 +36,7 @@ msgstr ""
msgid "A latency-tested group of proxy URLs for this node"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1702
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1731
msgid "A latency-tested group of proxy URLs for this section"
msgstr ""
@@ -44,12 +44,12 @@ msgstr ""
msgid "A manual group of proxy URLs for this node"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1684
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1713
msgid "A manual group of proxy URLs for this section"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1526
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1558
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1551
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1583
msgid "Action"
msgstr ""
@@ -61,15 +61,19 @@ msgstr ""
msgid "Add a section"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2086
msgid "Add URLs or local paths to .srs lists"
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2130
msgid "Add URLs or local paths to .lst lists"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2115
msgid "Add URLs or local paths to .srs / .json lists"
msgstr ""
#: src/podkop/tabs/diagnostic/checks/runNftCheck.ts:106
msgid "Additional marking rules found"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:249
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:253
msgid "Allows access to YACD from the WAN. Make sure to open the appropriate port in your firewall."
msgstr ""
@@ -78,7 +82,7 @@ msgid "An error occurred while saving the form:"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:170
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1797
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1826
msgid "Applicable for SOCKS and Shadowsocks links"
msgstr ""
@@ -110,7 +114,7 @@ msgstr ""
msgid "Bootsrap DNS"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:47
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:51
msgid "Bootstrap DNS server"
msgstr ""
@@ -122,15 +126,15 @@ msgstr ""
msgid "Browser is using FakeIP correctly"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1991
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2020
msgid "Built-in rule sets"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:354
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:382
msgid "Cache File Path"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:368
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:396
msgid "Cache file path cannot be empty"
msgstr ""
@@ -176,11 +180,11 @@ msgstr ""
msgid "Close"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1514
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1539
msgid "Conditions"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:341
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:369
msgid "Config File Path"
msgstr ""
@@ -188,16 +192,16 @@ msgstr ""
msgid "Configuration for Podkop Plus service"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1639
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1668
msgid "Connection"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1622
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1651
msgid "Connection Type"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:19
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1625
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1654
msgid "Connection URL"
msgstr ""
@@ -217,11 +221,11 @@ msgstr ""
msgid "Dashboard currently unavailable"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:224
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:228
msgid "Delay in milliseconds before reloading Podkop Plus after interface UP"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:231
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:235
msgid "Delay value cannot be empty"
msgstr ""
@@ -242,11 +246,11 @@ msgstr ""
msgid "Disable autostart"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:267
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:271
msgid "Disable QUIC"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:268
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:272
msgid "Disable the QUIC protocol to improve compatibility or fix issues with video streaming"
msgstr ""
@@ -259,18 +263,18 @@ msgid "DNS on router"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:227
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1862
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:17
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1891
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:21
msgid "DNS over HTTPS (DoH)"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:228
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1863
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:18
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1892
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:22
msgid "DNS over TLS (DoT)"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1860
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1889
msgid "DNS protocol"
msgstr ""
@@ -278,20 +282,20 @@ msgstr ""
msgid "DNS Protocol"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:14
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:18
msgid "DNS Protocol Type"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:70
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:74
msgid "DNS Rewrite TTL"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1878
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1907
msgid "DNS server"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:238
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:26
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:30
msgid "DNS Server"
msgstr ""
@@ -303,19 +307,23 @@ msgstr ""
msgid "Do not panic, everything can be fixed, just..."
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1961
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2129
msgid "Domain and IP Lists"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1990
msgid "Domain keyword"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1968
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1997
msgid "Domain regex"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1933
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1962
msgid "Domains"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:332
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:360
msgid "Dont Touch My DHCP!"
msgstr ""
@@ -328,15 +336,15 @@ msgstr ""
msgid "Download"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:300
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:328
msgid "Download external rule sets through one of the enabled proxy sections"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:290
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:318
msgid "Download Lists via Proxy/VPN"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:299
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:327
msgid "Download Lists via specific proxy section"
msgstr ""
@@ -344,7 +352,7 @@ msgstr ""
msgid "Download Node"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:291
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:319
msgid "Downloading all lists via specific Proxy/VPN"
msgstr ""
@@ -360,7 +368,7 @@ msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:8
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:10
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1516
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1541
msgid "Enable"
msgstr ""
@@ -368,7 +376,7 @@ msgstr ""
msgid "Enable a dedicated DNS resolver when this node uses an interface"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1849
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1878
msgid "Enable a dedicated DNS resolver when this section uses an interface"
msgstr ""
@@ -376,56 +384,56 @@ msgstr ""
msgid "Enable autostart"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1900
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1929
msgid "Enable Mixed Proxy"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:128
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:132
msgid "Enable Output Network Interface"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:239
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:243
msgid "Enable YACD"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:248
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:252
msgid "Enable YACD WAN Access"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:52
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1662
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1691
msgid "Enter a complete sing-box outbound object"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:103
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1723
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1752
msgid "Every 3 minutes"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:101
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1721
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1750
msgid "Every 30 seconds"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:104
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1724
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1753
msgid "Every 5 minutes"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:102
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1722
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1751
msgid "Every minute"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1947
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1976
msgid "Exact full domain"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:408
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:436
msgid "Exclude NTP"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:409
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:437
msgid "Exclude NTP protocol traffic from the tunnel to prevent it from being routed through the proxy or VPN"
msgstr ""
@@ -433,7 +441,7 @@ msgstr ""
msgid "Expecting: %s"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1901
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1930
msgid "Expose this section as a local HTTP+SOCKS proxy"
msgstr ""
@@ -475,7 +483,7 @@ msgstr ""
msgid "How often this remote rule set should be refreshed"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1623
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1652
msgid "How to configure the proxy connection for this section"
msgstr ""
@@ -485,20 +493,20 @@ msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:23
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:179
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1629
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1808
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1658
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1837
msgid "Interface"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:191
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:195
msgid "Interface Monitoring"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:223
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:227
msgid "Interface Monitoring Delay"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:192
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:196
msgid "Interface monitoring for Bad WAN"
msgstr ""
@@ -579,7 +587,7 @@ msgstr ""
msgid "Invalid path format. Path must start with \"/\" and contain valid characters"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1928
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1957
#: src/validators/validateShadowsocksUrl.ts:85
msgid "Invalid port number. Must be between 1 and 65535"
msgstr ""
@@ -685,7 +693,7 @@ msgstr ""
msgid "IP address 0.0.0.0 is not allowed"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1940
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1969
msgid "IPs"
msgstr ""
@@ -701,7 +709,11 @@ msgstr ""
msgid "Latest"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:278
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1504
msgid "List must be a direct .lst URL or a local .lst path"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:282
msgid "List Update Frequency"
msgstr ""
@@ -713,7 +725,7 @@ msgstr ""
msgid "Local file path to a sing-box rule set"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:390
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:418
msgid "Log Level"
msgstr ""
@@ -721,32 +733,32 @@ msgstr ""
msgid "Main DNS"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1941
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1970
msgid "Match destination IPs or subnets"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1962
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1991
msgid "Match domains containing a substring"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1934
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1963
msgid "Match domains including all subdomains"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1969
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1998
msgid "Match domains using a regular expression"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1948
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1977
msgid "Match only one exact full domain name"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1976
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2005
msgid "Match source IPs or subnets"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:114
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1735
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1764
msgid "Maximum response time delta in milliseconds"
msgstr ""
@@ -754,20 +766,20 @@ msgstr ""
msgid "Memory Usage"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1912
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1941
msgid "Mixed Proxy Port"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:200
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:204
msgid "Monitored Interfaces"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:136
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1757
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1786
msgid "Must be a number in the range of 50 - 1000"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1588
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1617
msgid "NFQWS Strategy"
msgstr ""
@@ -792,7 +804,7 @@ msgstr ""
msgid "Not implement yet"
msgstr ""
#: src/podkop/tabs/diagnostic/initController.ts:523
#: src/podkop/tabs/diagnostic/initController.ts:525
msgid "not installed"
msgstr ""
@@ -829,8 +841,8 @@ msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:22
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:51
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1628
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1661
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1657
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1690
msgid "Outbound JSON"
msgstr ""
@@ -838,7 +850,7 @@ msgstr ""
msgid "Outdated"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:137
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:141
msgid "Output Network Interface"
msgstr ""
@@ -850,15 +862,15 @@ msgstr ""
msgid "Path cannot be empty"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:372
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:400
msgid "Path must be absolute (start with /)"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:381
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:409
msgid "Path must contain at least one directory (like /tmp/cache.db)"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:376
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:404
msgid "Path must end with cache.db"
msgstr ""
@@ -879,15 +891,15 @@ msgstr ""
msgid "Podkop Plus Settings"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:333
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:361
msgid "Podkop Plus will not modify your DHCP configuration"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1920
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1949
msgid "Port cannot be empty"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1913
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1942
msgid "Port for the local mixed proxy of this section"
msgstr ""
@@ -903,7 +915,7 @@ msgstr ""
msgid "Proxy traffic is routed via FakeIP"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2030
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2059
msgid "Regional options cannot be used together"
msgstr ""
@@ -915,7 +927,7 @@ msgstr ""
msgid "Remote URL to a sing-box rule set"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1848
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1877
msgid "Resolver for interface outbound"
msgstr ""
@@ -943,21 +955,19 @@ msgstr ""
msgid "Router DNS is routed through sing-box"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:419
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:447
msgid "Routing Excluded IPs"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1468
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1477
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1480
msgid "Rule set must be a direct .srs URL or a local .srs path"
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1496
msgid "Rule set must be a direct .srs / .json URL or a local .srs / .json path"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:48
msgid "Rule set URL"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2085
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2114
msgid "Rule sets"
msgstr ""
@@ -989,7 +999,7 @@ msgstr ""
msgid "Run Diagnostic"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2049
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2078
msgid "Russia inside restrictions"
msgstr ""
@@ -997,7 +1007,7 @@ msgstr ""
msgid "Save error"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:259
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:263
msgid "Secret key for authenticating remote access to YACD when WAN access is enabled."
msgstr ""
@@ -1005,7 +1015,7 @@ msgstr ""
msgid "Section"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1545
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1570
msgid "Section name"
msgstr ""
@@ -1013,47 +1023,43 @@ msgstr ""
msgid "Sections"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1992
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2021
msgid "Select a predefined list for routing"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:15
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:19
msgid "Select DNS protocol to use"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:279
msgid "Select how often the domain or subnet lists are updated automatically"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:27
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:31
msgid "Select or enter DNS server address"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:355
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:383
msgid "Select or enter path for sing-box cache file. Change this ONLY if you know what you are doing"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:342
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:370
msgid "Select path for sing-box config file. Change this ONLY if you know what you are doing"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:391
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:419
msgid "Select the log level for sing-box"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:92
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:96
msgid "Select the network interface from which the traffic will originate"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:138
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:142
msgid "Select the network interface to which the traffic will originate"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:201
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:205
msgid "Select the WAN interfaces to be monitored"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1683
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1712
msgid "Selector connections"
msgstr ""
@@ -1061,7 +1067,7 @@ msgstr ""
msgid "Selector Links"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1995
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2024
msgid "Service list"
msgstr ""
@@ -1070,7 +1076,7 @@ msgid "Services info"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:394
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1513
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1538
msgid "Settings"
msgstr ""
@@ -1107,15 +1113,15 @@ msgstr ""
msgid "Source file"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1975
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2004
msgid "Source IPs"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:91
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:95
msgid "Source Network Interface"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:420
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:448
msgid "Specify a local IP address to be excluded from routing"
msgstr ""
@@ -1151,7 +1157,7 @@ msgstr ""
msgid "The desync fwmark is managed by Podkop Plus for loop prevention and must not be overridden here."
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:48
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:52
msgid "The DNS server used to look up the IP address of an upstream DNS server"
msgstr ""
@@ -1180,7 +1186,7 @@ msgstr ""
msgid "This option requires a value."
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:71
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:75
msgid "Time in seconds for DNS record caching (default: 60)"
msgstr ""
@@ -1196,11 +1202,11 @@ msgstr ""
msgid "Troubleshooting"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:82
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:86
msgid "TTL must be a positive number"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:77
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:81
msgid "TTL value cannot be empty"
msgstr ""
@@ -1208,12 +1214,12 @@ msgstr ""
msgid "Type"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:19
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:23
msgid "UDP (Unprotected DNS)"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:169
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1796
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1825
msgid "UDP over TCP"
msgstr ""
@@ -1265,11 +1271,11 @@ msgstr ""
msgid "URL must use one of the following protocols:"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1701
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1730
msgid "URLTest connections"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1719
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1748
msgid "URLTest interval"
msgstr ""
@@ -1281,7 +1287,7 @@ msgstr ""
msgid "URLTest Links"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1734
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1763
msgid "URLTest tolerance"
msgstr ""
@@ -1290,7 +1296,7 @@ msgid "URLTest Tolerance"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:139
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1764
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1793
msgid "URLTest URL"
msgstr ""
@@ -1298,10 +1304,18 @@ msgstr ""
msgid "Use a network interface as the outbound for this node"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1809
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1838
msgid "Use a network interface as the outbound for this section"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:312
msgid "Use sing-box duration format like 1d, 12h or 30m"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:283
msgid "Use sing-box duration format. Leave empty to disable automatic updates."
msgstr ""
#: src/validators/validateDns.ts:14
#: src/validators/validateDns.ts:18
#: src/validators/validateDomain.ts:13
@@ -1330,32 +1344,32 @@ msgstr ""
msgid "View logs"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1546
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1571
msgid "Visible name of this section"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:32
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1640
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1669
msgid "vless://, ss://, trojan://, socks4/5://, hy2/hysteria2:// links"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2032
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2061
msgid "Warning: %s cannot be used together with %s. Previous selections have been removed."
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2051
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2080
msgid "Warning: Russia inside can only be used with %s. %s already in Russia inside and have been removed from selection."
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1559
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1584
msgid "What Podkop Plus should do when this section matches"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:258
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:262
msgid "YACD Secret Key"
msgstr ""
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:129
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:133
msgid "You can select Output Network Interface, by default autodetect"
msgstr ""
+434 -59
View File
@@ -36,6 +36,11 @@ check_required_file "$PODKOP_LIB/rulesets.sh"
PODKOP_INTERNAL_CONFIG_TRIGGER_GUARD="/var/run/podkop-plus.internal-config-change"
PODKOP_RUNTIME_STATE_DIR="/var/run/podkop-plus"
PODKOP_RELOAD_STATE_FILE="$PODKOP_RUNTIME_STATE_DIR/reload-state"
PODKOP_LIST_UPDATE_STATE_FILE="$PODKOP_RUNTIME_STATE_DIR/list-update.timestamp"
PODKOP_LIST_UPDATE_CRON_MARKER="# podkop-plus-list-update"
# sing-box falls back to 1d when update_interval is empty, so use a large
# duration to emulate disabled automatic refreshes for remote rule sets.
SING_BOX_DISABLED_UPDATE_INTERVAL="876000h"
PODKOP_RELOAD_STATE_FORMAT=1
PODKOP_NFT_POPULATE_ENABLED=1
PODKOP_ZAPRET_MISSING_WARNING_EMITTED=0
@@ -119,7 +124,7 @@ build_dnsmasq_signature() {
append_sing_box_rule_signature() {
local section="$1"
local action proxy_config_type domain domain_suffix domain_keyword domain_regex ip_cidr source_ip_cidr \
community_lists rule_set mixed_proxy_enabled mixed_proxy_port
community_lists rule_set domain_ip_lists mixed_proxy_enabled mixed_proxy_port
rule_is_enabled "$section" || return 0
@@ -197,6 +202,7 @@ append_sing_box_rule_signature() {
source_ip_cidr="$(get_rule_condition_commas_string "$section" "source_ip_cidr" "subnets")"
config_get community_lists "$section" "community_lists"
config_get rule_set "$section" "rule_set"
config_get domain_ip_lists "$section" "domain_ip_lists"
signature_add "rule.$section.domain" "$domain"
signature_add "rule.$section.domain_suffix" "$domain_suffix"
@@ -206,6 +212,7 @@ append_sing_box_rule_signature() {
signature_add "rule.$section.source_ip_cidr" "$source_ip_cidr"
signature_add "rule.$section.community_lists" "$community_lists"
signature_add "rule.$section.rule_set" "$rule_set"
signature_add "rule.$section.domain_ip_lists" "$domain_ip_lists"
}
build_sing_box_signature() {
@@ -222,7 +229,7 @@ build_sing_box_signature() {
config_get output_network_interface "settings" "output_network_interface"
config_get_bool disable_quic "settings" "disable_quic" 0
config_get routing_excluded_ips "settings" "routing_excluded_ips"
config_get update_interval "settings" "update_interval" "1d"
config_get update_interval "settings" "update_interval"
config_get cache_path "settings" "cache_path" "/tmp/sing-box/cache.db"
config_get config_path "settings" "config_path"
config_get log_level "settings" "log_level" "warn"
@@ -304,7 +311,7 @@ build_zapret_queue_signature() {
append_zapret_runtime_signature() {
local section="$1"
local domain domain_suffix community_lists rule_set user_domain_list_type items
local domain domain_suffix community_lists rule_set domain_ip_lists user_domain_list_type items
rule_is_enabled "$section" || return 0
[ "$(get_rule_action "$section")" = "zapret" ] || return 0
@@ -313,6 +320,7 @@ append_zapret_runtime_signature() {
domain_suffix="$(get_rule_condition_commas_string "$section" "domain_suffix" "domains")"
config_get community_lists "$section" "community_lists"
config_get rule_set "$section" "rule_set"
config_get domain_ip_lists "$section" "domain_ip_lists"
config_get user_domain_list_type "$section" "user_domain_list_type" "disabled"
signature_add "zapret.$section.nfqws_opt" "$(get_rule_nfqws_opt "$section")"
@@ -320,6 +328,7 @@ append_zapret_runtime_signature() {
signature_add "zapret.$section.domain_suffix" "$domain_suffix"
signature_add "zapret.$section.community_lists" "$community_lists"
signature_add "zapret.$section.rule_set" "$rule_set"
signature_add "zapret.$section.domain_ip_lists" "$domain_ip_lists"
signature_add "zapret.$section.user_domain_list_type" "$user_domain_list_type"
config_get items "$section" "local_domain_lists"
signature_add "zapret.$section.local_domain_lists" "$items"
@@ -342,17 +351,19 @@ build_zapret_runtime_signature() {
append_list_update_signature() {
local section="$1"
local community_lists remote_domain_lists remote_subnet_lists
local community_lists remote_domain_lists remote_subnet_lists domain_ip_lists
rule_is_enabled "$section" || return 0
config_get community_lists "$section" "community_lists"
config_get remote_domain_lists "$section" "remote_domain_lists"
config_get remote_subnet_lists "$section" "remote_subnet_lists"
config_get domain_ip_lists "$section" "domain_ip_lists"
signature_add "lists.$section.community_lists" "$community_lists"
signature_add "lists.$section.remote_domain_lists" "$remote_domain_lists"
signature_add "lists.$section.remote_subnet_lists" "$remote_subnet_lists"
signature_add "lists.$section.domain_ip_lists" "$domain_ip_lists"
}
build_list_update_signature() {
@@ -365,12 +376,46 @@ build_cron_signature() {
local update_interval
signature_begin
config_get update_interval "settings" "update_interval" "1d"
config_get update_interval "settings" "update_interval"
signature_add "settings.update_interval" "$update_interval"
config_foreach append_list_update_signature "rule"
signature_finish
}
list_has_remote_references() {
local items="$1"
local item
for item in $items; do
case "$item" in
http://* | https://*)
return 0
;;
esac
done
return 1
}
get_settings_update_interval() {
local update_interval
config_get update_interval "settings" "update_interval"
printf '%s\n' "$update_interval"
}
get_remote_ruleset_update_interval() {
local update_interval
update_interval="$(get_settings_update_interval)"
if [ -n "$update_interval" ]; then
printf '%s\n' "$update_interval"
else
printf '%s\n' "$SING_BOX_DISABLED_UPDATE_INTERVAL"
fi
}
capture_reload_state() {
config_load "$PODKOP_CONFIG"
RELOAD_STATE_RESTART_SIGNATURE="$(build_restart_signature)"
@@ -402,14 +447,18 @@ EOF
enabled_rule_has_list_sources() {
local section="$1"
local community_lists remote_domain_lists remote_subnet_lists
local community_lists remote_domain_lists remote_subnet_lists domain_ip_lists
rule_is_enabled "$section" || return 0
config_get community_lists "$section" "community_lists"
config_get remote_domain_lists "$section" "remote_domain_lists"
config_get remote_subnet_lists "$section" "remote_subnet_lists"
config_get domain_ip_lists "$section" "domain_ip_lists"
if [ -n "$community_lists" ] || [ -n "$remote_domain_lists" ] || [ -n "$remote_subnet_lists" ]; then
if [ -n "$community_lists" ] ||
[ -n "$remote_domain_lists" ] ||
[ -n "$remote_subnet_lists" ] ||
list_has_remote_references "$domain_ip_lists"; then
RELOAD_LIST_SOURCES_PRESENT=1
fi
}
@@ -422,13 +471,16 @@ has_list_update_sources() {
enabled_rule_has_nft_list_sources() {
local section="$1"
local community_lists remote_subnet_lists
local community_lists remote_subnet_lists domain_ip_lists
rule_is_enabled "$section" || return 0
config_get community_lists "$section" "community_lists"
config_get remote_subnet_lists "$section" "remote_subnet_lists"
config_get domain_ip_lists "$section" "domain_ip_lists"
if [ -n "$community_lists" ] || [ -n "$remote_subnet_lists" ]; then
if [ -n "$community_lists" ] ||
[ -n "$remote_subnet_lists" ] ||
list_has_remote_references "$domain_ip_lists"; then
RELOAD_NFT_LIST_SOURCES_PRESENT=1
fi
}
@@ -465,7 +517,7 @@ rebuild_nft_runtime() {
}
refresh_list_update_cron() {
local cron_job
local cron_job update_interval
remove_cron_job
@@ -473,8 +525,14 @@ refresh_list_update_cron() {
return 0
fi
update_interval="$(get_settings_update_interval)"
if [ -z "$update_interval" ]; then
log "Remote list auto-update is disabled"
return 0
fi
cron_job="$(build_list_update_cron_job)" || return 1
crontab -l | {
crontab -l 2> /dev/null | {
cat
echo "$cron_job"
} | crontab -
@@ -1063,6 +1121,7 @@ validate_service() {
validate_ruleset_reference() {
local reference="$1"
local extension
if [ -z "$reference" ]; then
return 0
@@ -1073,7 +1132,13 @@ validate_ruleset_reference() {
fi
case "$reference" in
http://*.srs | https://*.srs | /*.srs)
http://* | https://*)
extension="$(url_get_file_extension "$reference")"
if [ "$extension" = "srs" ] || [ "$extension" = "json" ]; then
return 0
fi
;;
/*.srs | /*.json)
return 0
;;
esac
@@ -1082,6 +1147,28 @@ validate_ruleset_reference() {
exit 1
}
validate_plain_domain_ip_list_reference() {
local reference="$1"
local extension
if [ -z "$reference" ]; then
return 0
fi
case "$reference" in
http://* | https://*)
extension="$(url_get_file_extension "$reference")"
[ "$extension" = "lst" ] && return 0
;;
/*.lst)
return 0
;;
esac
log "Unknown plain list reference '$reference'. Aborted." "fatal"
exit 1
}
ruleset_kind_from_reference_hint() {
local reference="$1"
@@ -1143,9 +1230,32 @@ detect_local_binary_ruleset_kind() {
echo "$kind"
}
detect_local_source_ruleset_kind() {
local filepath="$1"
local kind
kind="$(ruleset_kind_from_reference_hint "$filepath")"
if [ "$kind" != "unknown" ]; then
echo "$kind"
return 0
fi
if ! file_exists "$filepath"; then
echo "unknown"
return 0
fi
if json_ruleset_has_domain_matchers "$filepath"; then
echo "domains"
else
echo "subnets"
fi
}
detect_inline_ruleset_reference_kind() {
local reference="$1"
local kind
local extension
kind="$(ruleset_kind_from_reference_hint "$reference")"
if [ "$kind" != "unknown" ]; then
@@ -1157,8 +1267,17 @@ detect_inline_ruleset_reference_kind() {
/*.srs)
detect_local_binary_ruleset_kind "$reference"
;;
http://*.srs|https://*.srs)
echo "domains"
/*.json)
detect_local_source_ruleset_kind "$reference"
;;
http://* | https://*)
extension="$(url_get_file_extension "$reference")"
[ "$extension" = "srs" ] || [ "$extension" = "json" ] || {
echo "unknown"
return 0
}
[ "$kind" = "unknown" ] && kind="domains"
echo "$kind"
;;
*)
echo "unknown"
@@ -1181,6 +1300,7 @@ process_validate_rule() {
fi
config_list_foreach "$section" "community_lists" validate_service
config_list_foreach "$section" "rule_set" validate_ruleset_reference
config_list_foreach "$section" "domain_ip_lists" validate_plain_domain_ip_list_reference
return 0
fi
@@ -1189,6 +1309,7 @@ process_validate_rule() {
config_list_foreach "$section" "community_lists" validate_service
config_list_foreach "$section" "rule_set" validate_ruleset_reference
config_list_foreach "$section" "domain_ip_lists" validate_plain_domain_ip_list_reference
}
br_netfilter_disable() {
@@ -1286,7 +1407,7 @@ ensure_builtin_ruleset() {
if ! ruleset_registered "$tag"; then
local detour update_interval url
detour="$(get_download_detour_tag)"
config_get update_interval "settings" "update_interval" "1d"
update_interval="$(get_remote_ruleset_update_interval)"
url="$SRS_MAIN_URL/$name.srs"
config=$(sing_box_cm_add_remote_ruleset "$config" "$tag" "binary" "$url" "$detour" "$update_interval")
register_ruleset_tag "$tag"
@@ -1313,20 +1434,21 @@ ensure_custom_ruleset() {
config_get path "$section" "path"
config_get url "$section" "url"
config_get outbound "$section" "outbound"
config_get update_interval "$section" "update_interval" "1d"
config_get update_interval "$section" "update_interval"
case "$type" in
local)
if [ "$format" = "binary" ]; then
kind="$(detect_local_binary_ruleset_kind "$path")"
else
kind="$(ruleset_kind_from_reference_hint "$path")"
kind="$(detect_local_source_ruleset_kind "$path")"
fi
config=$(sing_box_cm_add_local_ruleset "$config" "$tag" "$format" "$path")
;;
remote)
kind="$(ruleset_kind_from_reference_hint "$url")"
[ "$kind" = "unknown" ] && kind="domains"
[ -z "$update_interval" ] && update_interval="$SING_BOX_DISABLED_UPDATE_INTERVAL"
[ -n "$outbound" ] && detour="$(get_outbound_tag_by_section "$outbound")"
config=$(sing_box_cm_add_remote_ruleset "$config" "$tag" "$format" "$url" "$detour" "$update_interval")
;;
@@ -1343,7 +1465,7 @@ ensure_custom_ruleset() {
ensure_inline_custom_ruleset() {
local reference="$1"
local tag hash detour update_interval
local tag hash detour update_interval extension
hash="$(printf '%s' "$reference" | md5sum | cut -c1-12)"
tag="inline-custom-$hash-ruleset"
@@ -1351,15 +1473,29 @@ ensure_inline_custom_ruleset() {
ENSURED_RULESET_KIND="$(detect_inline_ruleset_reference_kind "$reference")"
if ! ruleset_registered "$tag"; then
config_get update_interval "settings" "update_interval" "1d"
update_interval="$(get_remote_ruleset_update_interval)"
case "$reference" in
/*.srs)
config=$(sing_box_cm_add_local_ruleset "$config" "$tag" "binary" "$reference")
;;
http://*.srs | https://*.srs)
/*.json)
config=$(sing_box_cm_add_local_ruleset "$config" "$tag" "source" "$reference")
;;
http://* | https://*)
extension="$(url_get_file_extension "$reference")"
detour="$(get_download_detour_tag)"
config=$(sing_box_cm_add_remote_ruleset "$config" "$tag" "binary" "$reference" "$detour" "$update_interval")
case "$extension" in
srs)
config=$(sing_box_cm_add_remote_ruleset "$config" "$tag" "binary" "$reference" "$detour" "$update_interval")
;;
json)
config=$(sing_box_cm_add_remote_ruleset "$config" "$tag" "source" "$reference" "$detour" "$update_interval")
;;
*)
return 1
;;
esac
;;
*)
return 1
@@ -1570,39 +1706,119 @@ dnsmasq_restore() {
}
build_list_update_cron_job() {
local update_interval cron_job
local update_interval
config_get update_interval "settings" "update_interval"
case "$update_interval" in
"1h")
cron_job="13 * * * * $PODKOP_BIN list_update"
;;
"3h")
cron_job="13 */3 * * * $PODKOP_BIN list_update"
;;
"12h")
cron_job="13 */12 * * * $PODKOP_BIN list_update"
;;
"1d")
cron_job="13 9 * * * $PODKOP_BIN list_update"
;;
"3d")
cron_job="13 9 */3 * * $PODKOP_BIN list_update"
;;
*)
log "Invalid update_interval value: $update_interval"
update_interval="$(get_settings_update_interval)"
[ -n "$update_interval" ] || return 1
if ! duration_to_seconds "$update_interval" >/dev/null 2>&1; then
log "Invalid update_interval value: $update_interval" "error"
return 1
;;
esac
fi
printf '%s\n' "$cron_job"
printf '* * * * * %s list_update_if_due %s\n' "$PODKOP_BIN" "$PODKOP_LIST_UPDATE_CRON_MARKER"
}
remove_cron_job() {
(crontab -l | grep -v "$PODKOP_BIN list_update") | crontab -
(crontab -l 2>/dev/null | grep -Fv "$PODKOP_LIST_UPDATE_CRON_MARKER") | crontab -
log "The cron job removed"
}
duration_to_seconds() {
local input="$1"
local rest value remainder unit multiplier total
[ -n "$input" ] || return 1
rest="$input"
total="0"
while [ -n "$rest" ]; do
value="$(printf '%s' "$rest" | sed -n 's/^\([0-9][0-9]*\(\.[0-9][0-9]*\)\?\).*/\1/p')"
[ -n "$value" ] || return 1
remainder="${rest#$value}"
case "$remainder" in
ns*)
unit="ns"
multiplier="0.000000001"
;;
us*)
unit="us"
multiplier="0.000001"
;;
ms*)
unit="ms"
multiplier="0.001"
;;
s*)
unit="s"
multiplier="1"
;;
m*)
unit="m"
multiplier="60"
;;
h*)
unit="h"
multiplier="3600"
;;
d*)
unit="d"
multiplier="86400"
;;
*)
return 1
;;
esac
rest="${remainder#$unit}"
total="$(awk -v total="$total" -v value="$value" -v multiplier="$multiplier" 'BEGIN { printf "%.9f", total + (value * multiplier) }')" || return 1
done
awk -v total="$total" 'BEGIN { if (total <= 0) exit 1; printf "%d\n", int(total + 0.5) }' || return 1
}
read_list_update_timestamp() {
sed -n '1p' "$PODKOP_LIST_UPDATE_STATE_FILE" 2>/dev/null
}
write_list_update_timestamp() {
local timestamp="$1"
mkdir -p "$PODKOP_RUNTIME_STATE_DIR"
printf '%s\n' "$timestamp" > "$PODKOP_LIST_UPDATE_STATE_FILE"
}
list_update_if_due() {
local update_interval interval_seconds now last_run
config_load "$PODKOP_CONFIG_NAME"
update_interval="$(get_settings_update_interval)"
[ -n "$update_interval" ] || return 0
interval_seconds="$(duration_to_seconds "$update_interval")" || {
log "Invalid update_interval value: $update_interval" "error"
return 1
}
now="$(date +%s 2>/dev/null)"
last_run="$(read_list_update_timestamp)"
case "$now" in
'' | *[!0-9]*) return 1 ;;
esac
case "$last_run" in
'' | *[!0-9]*) last_run=0 ;;
esac
if [ "$last_run" -gt 0 ] && [ $((now - last_run)) -lt "$interval_seconds" ]; then
return 0
fi
list_update
}
list_update() {
echolog "🔄 Starting lists update..."
@@ -1673,19 +1889,32 @@ list_update() {
echolog "📥 Downloading and processing lists..."
config_foreach import_builtin_subnets_from_rule "rule"
config_foreach import_domains_from_remote_domain_lists "rule"
config_foreach import_subnets_from_remote_subnet_lists "rule"
# Keep arbitrary .srs rule_set references inside sing-box only.
local update_status now
update_status=0
config_foreach rebuild_domain_ip_lists_from_rule "rule" || update_status=1
config_foreach import_builtin_subnets_from_rule "rule" || update_status=1
config_foreach import_domains_from_remote_domain_lists "rule" || update_status=1
config_foreach import_subnets_from_remote_subnet_lists "rule" || update_status=1
# Keep arbitrary .srs / .json rule_set references inside sing-box only.
# Mirroring them into nft via decompile/import regressed compared to the
# original Podkop behavior and causes long-running list updates plus
# unstable routing when third-party SRS files are large or incompatible.
if [ $? -eq 0 ]; then
if [ "$update_status" -eq 0 ]; then
now="$(date +%s 2>/dev/null)"
case "$now" in
'' | *[!0-9]*) ;;
*)
write_list_update_timestamp "$now"
;;
esac
echolog "✅ Lists update completed successfully"
else
echolog "❌ Lists update failed"
fi
[ "$update_status" -eq 0 ] || return 1
}
# sing-box funcs
@@ -2195,9 +2424,130 @@ configure_rule_set_reference_handler() {
fi
}
get_domain_ip_list_ruleset_tag() {
local section="$1"
local kind="$2"
get_ruleset_tag "$section" "lists" "$kind"
}
get_domain_ip_list_ruleset_path() {
local section="$1"
local kind="$2"
printf '%s/%s.json\n' "$TMP_RULESET_FOLDER" "$(get_domain_ip_list_ruleset_tag "$section" "$kind")"
}
reset_domain_ip_list_rulesets() {
local section="$1"
local domain_ruleset_filepath subnet_ruleset_filepath
domain_ruleset_filepath="$(get_domain_ip_list_ruleset_path "$section" "domains")"
subnet_ruleset_filepath="$(get_domain_ip_list_ruleset_path "$section" "subnets")"
rm -f "$domain_ruleset_filepath" "$subnet_ruleset_filepath"
create_source_rule_set "$domain_ruleset_filepath" >/dev/null 2>&1
create_source_rule_set "$subnet_ruleset_filepath" >/dev/null 2>&1
}
ensure_domain_ip_list_rulesets() {
local section="$1"
local route_rule_tag="$2"
local domain_ruleset_tag subnet_ruleset_tag domain_ruleset_filepath subnet_ruleset_filepath
domain_ruleset_tag="$(get_domain_ip_list_ruleset_tag "$section" "domains")"
subnet_ruleset_tag="$(get_domain_ip_list_ruleset_tag "$section" "subnets")"
domain_ruleset_filepath="$(get_domain_ip_list_ruleset_path "$section" "domains")"
subnet_ruleset_filepath="$(get_domain_ip_list_ruleset_path "$section" "subnets")"
config=$(sing_box_cm_add_local_ruleset "$config" "$domain_ruleset_tag" "source" "$domain_ruleset_filepath")
config=$(sing_box_cm_patch_route_rule "$config" "$route_rule_tag" "rule_set" "$domain_ruleset_tag")
config=$(sing_box_cm_patch_dns_route_rule "$config" "$SB_FAKEIP_RULESET_DNS_RULE_TAG" "rule_set" "$domain_ruleset_tag")
config=$(sing_box_cm_add_local_ruleset "$config" "$subnet_ruleset_tag" "source" "$subnet_ruleset_filepath")
config=$(sing_box_cm_patch_route_rule "$config" "$route_rule_tag" "rule_set" "$subnet_ruleset_tag")
}
import_domain_ip_list_file_into_rulesets() {
local filepath="$1"
local section="$2"
local domains_tmpfile subnets_tmpfile domain_ruleset_filepath subnet_ruleset_filepath
[ -f "$filepath" ] || return 0
domains_tmpfile="$(mktemp)"
subnets_tmpfile="$(mktemp)"
domain_ruleset_filepath="$(get_domain_ip_list_ruleset_path "$section" "domains")"
subnet_ruleset_filepath="$(get_domain_ip_list_ruleset_path "$section" "subnets")"
split_domain_or_subnet_file "$filepath" "$domains_tmpfile" "$subnets_tmpfile"
import_plain_domain_list_to_local_source_ruleset_chunked "$domains_tmpfile" "$domain_ruleset_filepath"
import_plain_subnet_list_to_local_source_ruleset_chunked "$subnets_tmpfile" "$subnet_ruleset_filepath"
nft_add_set_elements_from_file_chunked "$subnets_tmpfile" "$NFT_TABLE_NAME" "$NFT_COMMON_SET_NAME"
rm -f "$domains_tmpfile" "$subnets_tmpfile"
}
import_domain_ip_list_reference_into_rulesets() {
local reference="$1"
local section="$2"
local tmpfile http_proxy_address
case "$reference" in
http://* | https://*)
tmpfile="$(mktemp)"
http_proxy_address="$(get_service_proxy_address)"
download_to_file "$reference" "$tmpfile" "$http_proxy_address"
if [ $? -eq 0 ] && [ -s "$tmpfile" ]; then
convert_crlf_to_lf "$tmpfile"
import_domain_ip_list_file_into_rulesets "$tmpfile" "$section"
else
log "Download $reference list failed" "error"
fi
rm -f "$tmpfile"
;;
*)
import_domain_ip_list_file_into_rulesets "$reference" "$section"
;;
esac
}
configure_domain_ip_lists() {
local section="$1"
local route_rule_tag="$2"
reset_domain_ip_list_rulesets "$section"
ensure_domain_ip_list_rulesets "$section" "$route_rule_tag"
config_list_foreach "$section" "domain_ip_lists" configure_domain_ip_lists_reference_handler "$section"
}
configure_domain_ip_lists_reference_handler() {
local reference="$1"
local section="$2"
case "$reference" in
http://* | https://*) return 0 ;;
esac
import_domain_ip_list_reference_into_rulesets "$reference" "$section"
}
rebuild_domain_ip_lists_from_rule() {
local section="$1"
local references
rule_is_enabled "$section" || return 0
config_get references "$section" "domain_ip_lists"
[ -n "$references" ] || return 0
reset_domain_ip_list_rulesets "$section"
config_list_foreach "$section" "domain_ip_lists" import_domain_ip_list_reference_into_rulesets "$section"
}
rule_has_primary_matchers() {
local section="$1"
local domain domain_suffix domain_keyword domain_regex ip_cidr source_ip_cidr community_lists rule_set
local domain domain_suffix domain_keyword domain_regex ip_cidr source_ip_cidr community_lists rule_set domain_ip_lists
domain="$(get_rule_condition_commas_string "$section" "domain" "domains")"
domain_suffix="$(get_rule_condition_commas_string "$section" "domain_suffix" "domains")"
@@ -2207,6 +2557,7 @@ rule_has_primary_matchers() {
source_ip_cidr="$(get_rule_condition_commas_string "$section" "source_ip_cidr" "subnets")"
config_get community_lists "$section" "community_lists"
config_get rule_set "$section" "rule_set"
config_get domain_ip_lists "$section" "domain_ip_lists"
if [ -n "$domain" ] ||
[ -n "$domain_suffix" ] ||
@@ -2215,7 +2566,8 @@ rule_has_primary_matchers() {
[ -n "$ip_cidr" ] ||
[ -n "$source_ip_cidr" ] ||
[ -n "$community_lists" ] ||
[ -n "$rule_set" ]; then
[ -n "$rule_set" ] ||
[ -n "$domain_ip_lists" ]; then
return 0
fi
@@ -2283,8 +2635,13 @@ configure_route_rule_handler() {
config=$(sing_box_cm_patch_route_rule "$config" "$route_rule_tag" "source_ip_cidr" "$source_ip_values_json")
fi
local domain_ip_lists
config_get domain_ip_lists "$section" "domain_ip_lists"
config_list_foreach "$section" "community_lists" configure_community_list_handler "$section" "$route_rule_tag"
config_list_foreach "$section" "rule_set" configure_rule_set_reference_handler "$route_rule_tag"
if [ -n "$domain_ip_lists" ]; then
configure_domain_ip_lists "$section" "$route_rule_tag"
fi
}
include_source_ips_in_routing_handler() {
@@ -2443,7 +2800,7 @@ configure_community_list_handler() {
format="binary"
url="$SRS_MAIN_URL/$tag.srs"
detour="$(get_download_detour_tag)"
config_get update_interval "settings" "update_interval" "1d"
update_interval="$(get_remote_ruleset_update_interval)"
config=$(sing_box_cm_add_remote_ruleset "$config" "$ruleset_tag" "$format" "$url" "$detour" "$update_interval")
config=$(sing_box_cm_patch_route_rule "$config" "$route_rule_tag" "rule_set" "$ruleset_tag")
@@ -2576,7 +2933,7 @@ configure_remote_domain_or_subnet_list_handler() {
ruleset_tag=$(get_ruleset_tag "$section" "$basename" "remote-$type")
format="$(get_ruleset_format_by_file_extension "$file_extension")"
detour="$(get_download_detour_tag)"
config_get update_interval "settings" "update_interval" "1d"
update_interval="$(get_remote_ruleset_update_interval)"
config=$(sing_box_cm_add_remote_ruleset "$config" "$ruleset_tag" "$format" "$url" "$detour" "$update_interval")
config=$(sing_box_cm_patch_route_rule "$config" "$route_rule_tag" "rule_set" "$ruleset_tag")
@@ -2747,13 +3104,25 @@ import_inline_custom_ruleset_subnets_from_rule() {
import_inline_custom_ruleset_subnets_reference_handler() {
local reference="$1"
local extension
case "$reference" in
/*.srs)
import_custom_ruleset_subnets_from_local "$reference" "binary"
;;
http://*.srs | https://*.srs)
import_custom_ruleset_subnets_from_remote "$reference" "binary"
/*.json)
import_custom_ruleset_subnets_from_local "$reference" "source"
;;
http://* | https://*)
extension="$(url_get_file_extension "$reference")"
case "$extension" in
srs)
import_custom_ruleset_subnets_from_remote "$reference" "binary"
;;
json)
import_custom_ruleset_subnets_from_remote "$reference" "source"
;;
esac
;;
esac
}
@@ -3144,7 +3513,7 @@ section_by_connection_type_exists() {
section_has_enabled_lists() {
local section="$1"
local domain domain_suffix domain_keyword domain_regex community_lists user_domain_list_type user_subnet_list_type \
local_domain_lists local_subnet_lists remote_domain_lists remote_subnet_lists
local_domain_lists local_subnet_lists remote_domain_lists remote_subnet_lists domain_ip_lists
rule_is_enabled "$section" || return 1
@@ -3159,6 +3528,7 @@ section_has_enabled_lists() {
config_get local_subnet_lists "$section" "local_subnet_lists"
config_get remote_domain_lists "$section" "remote_domain_lists"
config_get remote_subnet_lists "$section" "remote_subnet_lists"
config_get domain_ip_lists "$section" "domain_ip_lists"
if [ -n "$domain" ] ||
[ -n "$domain_suffix" ] ||
@@ -3170,7 +3540,8 @@ section_has_enabled_lists() {
[ -n "$local_domain_lists" ] ||
[ -n "$local_subnet_lists" ] ||
[ -n "$remote_domain_lists" ] ||
[ -n "$remote_subnet_lists" ]; then
[ -n "$remote_subnet_lists" ] ||
[ -n "$domain_ip_lists" ]; then
return 0
else
return 1
@@ -4449,7 +4820,8 @@ Available commands:
disable Disable Podkop Plus autostart
uninstall Remove Podkop Plus files installed outside opkg/apk
main Run main Podkop Plus process
list_update Update domain lists
list_update Update remote lists
list_update_if_due Update remote lists only when the configured interval has elapsed
check_proxy Check proxy connectivity
check_nft Check NFT rules
check_nft_rules Check NFT rules status
@@ -4505,6 +4877,9 @@ main)
list_update)
list_update
;;
list_update_if_due)
list_update_if_due
;;
check_proxy)
check_proxy
;;
+40 -1
View File
@@ -183,6 +183,7 @@ url_get_basename() {
local url="$1"
local filename="${url##*/}"
filename="${filename%%[?#]*}"
local basename="${filename%%.*}"
echo "$basename"
@@ -193,8 +194,9 @@ url_get_file_extension() {
local url="$1"
local basename="${url##*/}"
basename="${basename%%[?#]*}"
case "$basename" in
*.*) echo "${basename##*.}" ;;
*.*) echo "${basename##*.}" | tr '[:upper:]' '[:lower:]' ;;
*) echo "" ;;
esac
}
@@ -355,3 +357,40 @@ parse_domain_or_subnet_file_to_comma_string() {
echo "$result"
}
#######################################
# Splits a plain list file into separate domain and subnet files.
# Invalid items are skipped.
# Arguments:
# $1 - Path to the input file
# $2 - Output file for domains
# $3 - Output file for IPv4 / IPv4 CIDR entries
#######################################
split_domain_or_subnet_file() {
local filepath="$1"
local domains_output="$2"
local subnets_output="$3"
local line
: > "$domains_output"
: > "$subnets_output"
while IFS= read -r line; do
line=$(printf "%s\n" "$line" | sed -e 's/[[:space:]]*\/\/.*$//' -e 's/[[:space:]]*#.*$//')
line=$(echo "$line" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')
[ -z "$line" ] && continue
if is_domain_suffix "$line"; then
printf '%s\n' "$line" >> "$domains_output"
continue
fi
if is_ipv4_ip_or_ipv4_cidr "$line"; then
printf '%s\n' "$line" >> "$subnets_output"
continue
fi
log "'$line' is neither a valid domain nor IPv4 / IPv4 CIDR" "debug"
done < "$filepath"
}
+1
View File
@@ -857,6 +857,7 @@ build_generated_zapret_hostlist() {
config_list_foreach "$section" "local_domain_lists" _append_zapret_hostlist_reference_handler "$tmpfile"
config_list_foreach "$section" "remote_domain_lists" _append_zapret_hostlist_reference_handler "$tmpfile"
config_list_foreach "$section" "rule_set" _append_zapret_hostlist_reference_handler "$tmpfile"
config_list_foreach "$section" "domain_ip_lists" _append_zapret_hostlist_reference_handler "$tmpfile"
config_get user_domain_list_type "$section" "user_domain_list_type" "disabled"
case "$user_domain_list_type" in