mirror of
https://github.com/itdoginfo/podkop.git
synced 2025-12-06 19:46:52 +03:00
Compare commits
19 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
288b8d4cc2 | ||
|
|
e014396ae2 | ||
|
|
694e4ca35a | ||
|
|
788c539e16 | ||
|
|
743cba8936 | ||
|
|
d1d703764c | ||
|
|
2efd415305 | ||
|
|
407b19b3ed | ||
|
|
c3fac995d5 | ||
|
|
21ecfbbeca | ||
|
|
2918487845 | ||
|
|
ac258c53c0 | ||
|
|
9a389c47bf | ||
|
|
7cd70468c5 | ||
|
|
13d27dab21 | ||
|
|
9f8f032dce | ||
|
|
8301f4c271 | ||
|
|
c4078c8242 | ||
|
|
e0d149f03a |
@@ -38,7 +38,7 @@
|
||||
"call": "Additional marking rules found",
|
||||
"key": "Additional marking rules found",
|
||||
"places": [
|
||||
"src/podkop/tabs/diagnostic/checks/runNftCheck.ts:117"
|
||||
"src/podkop/tabs/diagnostic/checks/runNftCheck.ts:106"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -62,11 +62,18 @@
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:437"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Available actions",
|
||||
"key": "Available actions",
|
||||
"places": [
|
||||
"src/podkop/tabs/diagnostic/partials/renderAvailableActions.ts:43"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Bootsrap DNS",
|
||||
"key": "Bootsrap DNS",
|
||||
"places": [
|
||||
"src/podkop/tabs/diagnostic/checks/runDnsCheck.ts:72"
|
||||
"src/podkop/tabs/diagnostic/checks/runDnsCheck.ts:65"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -80,77 +87,70 @@
|
||||
"call": "Browser is not using FakeIP",
|
||||
"key": "Browser is not using FakeIP",
|
||||
"places": [
|
||||
"src/podkop/tabs/diagnostic/checks/runFakeIPCheck.ts:81"
|
||||
"src/podkop/tabs/diagnostic/checks/runFakeIPCheck.ts:58"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Browser is using FakeIP correctly",
|
||||
"key": "Browser is using FakeIP correctly",
|
||||
"places": [
|
||||
"src/podkop/tabs/diagnostic/checks/runFakeIPCheck.ts:80"
|
||||
"src/podkop/tabs/diagnostic/checks/runFakeIPCheck.ts:57"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Cache File Path",
|
||||
"key": "Cache File Path",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:322"
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:329"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Cache file path cannot be empty",
|
||||
"key": "Cache file path cannot be empty",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:336"
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:343"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Cannot receive DNS checks result",
|
||||
"key": "Cannot receive DNS checks result",
|
||||
"call": "Cannot receive checks result",
|
||||
"key": "Cannot receive checks result",
|
||||
"places": [
|
||||
"src/podkop/tabs/diagnostic/checks/runDnsCheck.ts:26"
|
||||
"src/podkop/tabs/diagnostic/checks/runDnsCheck.ts:27",
|
||||
"src/podkop/tabs/diagnostic/checks/runNftCheck.ts:28",
|
||||
"src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts:27",
|
||||
"src/podkop/tabs/diagnostic/checks/runSingBoxCheck.ts:25"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Cannot receive nftables checks result",
|
||||
"key": "Cannot receive nftables checks result",
|
||||
"call": "Checking, please wait",
|
||||
"key": "Checking, please wait",
|
||||
"places": [
|
||||
"src/podkop/tabs/diagnostic/checks/runNftCheck.ts:27"
|
||||
"src/podkop/tabs/diagnostic/checks/runDnsCheck.ts:15",
|
||||
"src/podkop/tabs/diagnostic/checks/runFakeIPCheck.ts:15",
|
||||
"src/podkop/tabs/diagnostic/checks/runNftCheck.ts:13",
|
||||
"src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts:15",
|
||||
"src/podkop/tabs/diagnostic/checks/runSingBoxCheck.ts:13"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Cannot receive Sing-box checks result",
|
||||
"key": "Cannot receive Sing-box checks result",
|
||||
"call": "checks",
|
||||
"key": "checks",
|
||||
"places": [
|
||||
"src/podkop/tabs/diagnostic/checks/runSingBoxCheck.ts:24"
|
||||
"src/podkop/tabs/diagnostic/helpers/getCheckTitle.ts:2"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Checking dns, please wait",
|
||||
"key": "Checking dns, please wait",
|
||||
"call": "Checks failed",
|
||||
"key": "Checks failed",
|
||||
"places": [
|
||||
"src/podkop/tabs/diagnostic/checks/runDnsCheck.ts:14"
|
||||
"src/podkop/tabs/diagnostic/helpers/getMeta.ts:26"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Checking FakeIP, please wait",
|
||||
"key": "Checking FakeIP, please wait",
|
||||
"call": "Checks passed",
|
||||
"key": "Checks passed",
|
||||
"places": [
|
||||
"src/podkop/tabs/diagnostic/checks/runFakeIPCheck.ts:14"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Checking nftables, please wait",
|
||||
"key": "Checking nftables, please wait",
|
||||
"places": [
|
||||
"src/podkop/tabs/diagnostic/checks/runNftCheck.ts:12"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Checking sing-box, please wait",
|
||||
"key": "Checking sing-box, please wait",
|
||||
"places": [
|
||||
"src/podkop/tabs/diagnostic/checks/runSingBoxCheck.ts:12"
|
||||
"src/podkop/tabs/diagnostic/helpers/getMeta.ts:13"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -178,7 +178,7 @@
|
||||
"call": "Config File Path",
|
||||
"key": "Config File Path",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:309"
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:316"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -241,21 +241,21 @@
|
||||
"call": "Delay in milliseconds before reloading podkop after interface UP",
|
||||
"key": "Delay in milliseconds before reloading podkop after interface UP",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:215"
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:222"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Delay value cannot be empty",
|
||||
"key": "Delay value cannot be empty",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:222"
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:229"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "DHCP has DNS server",
|
||||
"key": "DHCP has DNS server",
|
||||
"places": [
|
||||
"src/podkop/tabs/diagnostic/checks/runDnsCheck.ts:89"
|
||||
"src/podkop/tabs/diagnostic/checks/runDnsCheck.ts:82"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -276,14 +276,14 @@
|
||||
"call": "Disable QUIC",
|
||||
"key": "Disable QUIC",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:239"
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:246"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Disable the QUIC protocol to improve compatibility or fix issues with video streaming",
|
||||
"key": "Disable the QUIC protocol to improve compatibility or fix issues with video streaming",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:240"
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:247"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -294,25 +294,11 @@
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:382"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "DNS checks",
|
||||
"key": "DNS checks",
|
||||
"places": [
|
||||
"src/podkop/tabs/diagnostic/checks/contstants.ts:14"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "DNS checks passed",
|
||||
"key": "DNS checks passed",
|
||||
"places": [
|
||||
"src/podkop/tabs/diagnostic/checks/runDnsCheck.ts:64"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "DNS on router",
|
||||
"key": "DNS on router",
|
||||
"places": [
|
||||
"src/podkop/tabs/diagnostic/checks/runDnsCheck.ts:84"
|
||||
"src/podkop/tabs/diagnostic/checks/runDnsCheck.ts:77"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -361,6 +347,13 @@
|
||||
"src/validators/validateDns.ts:7"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Do not panic, everything can be fixed, just...",
|
||||
"key": "Do not panic, everything can be fixed, just...",
|
||||
"places": [
|
||||
"src/podkop/tabs/diagnostic/partials/renderWikiDisclaimer.ts:26"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Domain Resolver",
|
||||
"key": "Domain Resolver",
|
||||
@@ -372,7 +365,7 @@
|
||||
"call": "Dont Touch My DHCP!",
|
||||
"key": "Dont Touch My DHCP!",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:300"
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:307"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -394,28 +387,28 @@
|
||||
"call": "Download Lists via Proxy/VPN",
|
||||
"key": "Download Lists via Proxy/VPN",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:262"
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:269"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Download Lists via specific proxy section",
|
||||
"key": "Download Lists via specific proxy section",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:271"
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:278"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Downloading all lists via main Proxy/VPN",
|
||||
"key": "Downloading all lists via main Proxy/VPN",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:263"
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:270"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Downloading all lists via specific Proxy/VPN",
|
||||
"key": "Downloading all lists via specific Proxy/VPN",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:272"
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:279"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -465,7 +458,7 @@
|
||||
"call": "Enable YACD",
|
||||
"key": "Enable YACD",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:230"
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:237"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -500,14 +493,14 @@
|
||||
"call": "Exclude NTP",
|
||||
"key": "Exclude NTP",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:358"
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:365"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Exclude NTP protocol traffic from the tunnel to prevent it from being routed through the proxy or VPN",
|
||||
"key": "Exclude NTP protocol traffic from the tunnel to prevent it from being routed through the proxy or VPN",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:359"
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:366"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -518,31 +511,15 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "FakeIP checks",
|
||||
"key": "FakeIP checks",
|
||||
"call": "Failed to execute!",
|
||||
"key": "Failed to execute!",
|
||||
"places": [
|
||||
"src/podkop/tabs/diagnostic/checks/contstants.ts:29"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "FakeIP checks failed",
|
||||
"key": "FakeIP checks failed",
|
||||
"places": [
|
||||
"src/podkop/tabs/diagnostic/checks/runFakeIPCheck.ts:57"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "FakeIP checks partially passed",
|
||||
"key": "FakeIP checks partially passed",
|
||||
"places": [
|
||||
"src/podkop/tabs/diagnostic/checks/runFakeIPCheck.ts:51"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "FakeIP checks passed",
|
||||
"key": "FakeIP checks passed",
|
||||
"places": [
|
||||
"src/podkop/tabs/diagnostic/checks/runFakeIPCheck.ts:44"
|
||||
"src/podkop/tabs/diagnostic/initController.ts:227",
|
||||
"src/podkop/tabs/diagnostic/initController.ts:231",
|
||||
"src/podkop/tabs/diagnostic/initController.ts:261",
|
||||
"src/podkop/tabs/diagnostic/initController.ts:265",
|
||||
"src/podkop/tabs/diagnostic/initController.ts:299",
|
||||
"src/podkop/tabs/diagnostic/initController.ts:303"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -570,7 +547,7 @@
|
||||
"call": "Global check",
|
||||
"key": "Global check",
|
||||
"places": [
|
||||
"src/podkop/tabs/diagnostic/initController.ts:218"
|
||||
"src/podkop/tabs/diagnostic/initController.ts:222"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -584,28 +561,28 @@
|
||||
"call": "Interface Monitoring",
|
||||
"key": "Interface Monitoring",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:182"
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:189"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Interface Monitoring Delay",
|
||||
"key": "Interface Monitoring Delay",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:214"
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:221"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Interface monitoring for Bad WAN",
|
||||
"key": "Interface monitoring for Bad WAN",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:183"
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:190"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Invalid DNS server format. Examples: 8.8.8.8 or dns.example.com or dns.example.com/nicedns for DoH",
|
||||
"key": "Invalid DNS server format. Examples: 8.8.8.8 or dns.example.com or dns.example.com/nicedns for DoH",
|
||||
"places": [
|
||||
"src/validators/validateDns.ts:20"
|
||||
"src/validators/validateDns.ts:23"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -809,7 +786,7 @@
|
||||
"call": "Invalid VLESS URL: parsing failed",
|
||||
"key": "Invalid VLESS URL: parsing failed",
|
||||
"places": [
|
||||
"src/validators/validateVlessUrl.ts:109"
|
||||
"src/validators/validateVlessUrl.ts:110"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -819,18 +796,25 @@
|
||||
"src/validators/validateSubnet.ts:18"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Issues detected",
|
||||
"key": "Issues detected",
|
||||
"places": [
|
||||
"src/podkop/tabs/diagnostic/helpers/getMeta.ts:20"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Latest",
|
||||
"key": "Latest",
|
||||
"places": [
|
||||
"src/podkop/tabs/diagnostic/initController.ts:404"
|
||||
"src/podkop/tabs/diagnostic/initController.ts:453"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "List Update Frequency",
|
||||
"key": "List Update Frequency",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:250"
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:257"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -851,7 +835,7 @@
|
||||
"call": "Main DNS",
|
||||
"key": "Main DNS",
|
||||
"places": [
|
||||
"src/podkop/tabs/diagnostic/checks/runDnsCheck.ts:79"
|
||||
"src/podkop/tabs/diagnostic/checks/runDnsCheck.ts:72"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -872,7 +856,7 @@
|
||||
"call": "Monitored Interfaces",
|
||||
"key": "Monitored Interfaces",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:191"
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:198"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -882,32 +866,11 @@
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:120"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Nftables checks",
|
||||
"key": "Nftables checks",
|
||||
"places": [
|
||||
"src/podkop/tabs/diagnostic/checks/contstants.ts:24"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Nftables checks partially passed",
|
||||
"key": "Nftables checks partially passed",
|
||||
"places": [
|
||||
"src/podkop/tabs/diagnostic/checks/runNftCheck.ts:75"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Nftables checks passed",
|
||||
"key": "Nftables checks passed",
|
||||
"places": [
|
||||
"src/podkop/tabs/diagnostic/checks/runNftCheck.ts:74"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "No other marking rules found",
|
||||
"key": "No other marking rules found",
|
||||
"places": [
|
||||
"src/podkop/tabs/diagnostic/checks/runNftCheck.ts:116"
|
||||
"src/podkop/tabs/diagnostic/checks/runNftCheck.ts:105"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -917,6 +880,14 @@
|
||||
"src/podkop/tabs/diagnostic/partials/renderCheckSection.ts:189"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Not responding",
|
||||
"key": "Not responding",
|
||||
"places": [
|
||||
"src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts:59",
|
||||
"src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts:79"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Not running",
|
||||
"key": "Not running",
|
||||
@@ -924,7 +895,8 @@
|
||||
"src/podkop/tabs/diagnostic/diagnostic.store.ts:55",
|
||||
"src/podkop/tabs/diagnostic/diagnostic.store.ts:63",
|
||||
"src/podkop/tabs/diagnostic/diagnostic.store.ts:71",
|
||||
"src/podkop/tabs/diagnostic/diagnostic.store.ts:79"
|
||||
"src/podkop/tabs/diagnostic/diagnostic.store.ts:79",
|
||||
"src/podkop/tabs/diagnostic/diagnostic.store.ts:87"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -959,7 +931,7 @@
|
||||
"call": "Outdated",
|
||||
"key": "Outdated",
|
||||
"places": [
|
||||
"src/podkop/tabs/diagnostic/initController.ts:394"
|
||||
"src/podkop/tabs/diagnostic/initController.ts:443"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -980,21 +952,32 @@
|
||||
"call": "Path must be absolute (start with /)",
|
||||
"key": "Path must be absolute (start with /)",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:340"
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:347"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Path must contain at least one directory (like /tmp/cache.db)",
|
||||
"key": "Path must contain at least one directory (like /tmp/cache.db)",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:349"
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:356"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Path must end with cache.db",
|
||||
"key": "Path must end with cache.db",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:344"
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:351"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Pending",
|
||||
"key": "Pending",
|
||||
"places": [
|
||||
"src/podkop/tabs/diagnostic/diagnostic.store.ts:103",
|
||||
"src/podkop/tabs/diagnostic/diagnostic.store.ts:111",
|
||||
"src/podkop/tabs/diagnostic/diagnostic.store.ts:119",
|
||||
"src/podkop/tabs/diagnostic/diagnostic.store.ts:127",
|
||||
"src/podkop/tabs/diagnostic/diagnostic.store.ts:135"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -1015,7 +998,7 @@
|
||||
"call": "Podkop will not modify your DHCP configuration",
|
||||
"key": "Podkop will not modify your DHCP configuration",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:301"
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:308"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -1029,24 +1012,14 @@
|
||||
"call": "Proxy traffic is not routed via FakeIP",
|
||||
"key": "Proxy traffic is not routed via FakeIP",
|
||||
"places": [
|
||||
"src/podkop/tabs/diagnostic/checks/runFakeIPCheck.ts:89"
|
||||
"src/podkop/tabs/diagnostic/checks/runFakeIPCheck.ts:66"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Proxy traffic is routed via FakeIP",
|
||||
"key": "Proxy traffic is routed via FakeIP",
|
||||
"places": [
|
||||
"src/podkop/tabs/diagnostic/checks/runFakeIPCheck.ts:88"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Queued",
|
||||
"key": "Queued",
|
||||
"places": [
|
||||
"src/podkop/tabs/diagnostic/diagnostic.store.ts:95",
|
||||
"src/podkop/tabs/diagnostic/diagnostic.store.ts:103",
|
||||
"src/podkop/tabs/diagnostic/diagnostic.store.ts:111",
|
||||
"src/podkop/tabs/diagnostic/diagnostic.store.ts:119"
|
||||
"src/podkop/tabs/diagnostic/checks/runFakeIPCheck.ts:65"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -1081,63 +1054,63 @@
|
||||
"call": "Router DNS is not routed through sing-box",
|
||||
"key": "Router DNS is not routed through sing-box",
|
||||
"places": [
|
||||
"src/podkop/tabs/diagnostic/checks/runFakeIPCheck.ts:74"
|
||||
"src/podkop/tabs/diagnostic/checks/runFakeIPCheck.ts:51"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Router DNS is routed through sing-box",
|
||||
"key": "Router DNS is routed through sing-box",
|
||||
"places": [
|
||||
"src/podkop/tabs/diagnostic/checks/runFakeIPCheck.ts:73"
|
||||
"src/podkop/tabs/diagnostic/checks/runFakeIPCheck.ts:50"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Routing Excluded IPs",
|
||||
"key": "Routing Excluded IPs",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:369"
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:376"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Rules mangle counters",
|
||||
"key": "Rules mangle counters",
|
||||
"places": [
|
||||
"src/podkop/tabs/diagnostic/checks/runNftCheck.ts:90"
|
||||
"src/podkop/tabs/diagnostic/checks/runNftCheck.ts:79"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Rules mangle exist",
|
||||
"key": "Rules mangle exist",
|
||||
"places": [
|
||||
"src/podkop/tabs/diagnostic/checks/runNftCheck.ts:85"
|
||||
"src/podkop/tabs/diagnostic/checks/runNftCheck.ts:74"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Rules mangle output counters",
|
||||
"key": "Rules mangle output counters",
|
||||
"places": [
|
||||
"src/podkop/tabs/diagnostic/checks/runNftCheck.ts:100"
|
||||
"src/podkop/tabs/diagnostic/checks/runNftCheck.ts:89"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Rules mangle output exist",
|
||||
"key": "Rules mangle output exist",
|
||||
"places": [
|
||||
"src/podkop/tabs/diagnostic/checks/runNftCheck.ts:95"
|
||||
"src/podkop/tabs/diagnostic/checks/runNftCheck.ts:84"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Rules proxy counters",
|
||||
"key": "Rules proxy counters",
|
||||
"places": [
|
||||
"src/podkop/tabs/diagnostic/checks/runNftCheck.ts:110"
|
||||
"src/podkop/tabs/diagnostic/checks/runNftCheck.ts:99"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Rules proxy exist",
|
||||
"key": "Rules proxy exist",
|
||||
"places": [
|
||||
"src/podkop/tabs/diagnostic/checks/runNftCheck.ts:105"
|
||||
"src/podkop/tabs/diagnostic/checks/runNftCheck.ts:94"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -1186,7 +1159,7 @@
|
||||
"call": "Select how often the domain or subnet lists are updated automatically",
|
||||
"key": "Select how often the domain or subnet lists are updated automatically",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:251"
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:258"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -1215,14 +1188,14 @@
|
||||
"call": "Select or enter path for sing-box cache file. Change this ONLY if you know what you are doing",
|
||||
"key": "Select or enter path for sing-box cache file. Change this ONLY if you know what you are doing",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:323"
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:330"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Select path for sing-box config file. Change this ONLY if you know what you are doing",
|
||||
"key": "Select path for sing-box config file. Change this ONLY if you know what you are doing",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:310"
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:317"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -1264,7 +1237,7 @@
|
||||
"call": "Select the WAN interfaces to be monitored",
|
||||
"key": "Select the WAN interfaces to be monitored",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:192"
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:199"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -1285,7 +1258,7 @@
|
||||
"call": "Show sing-box config",
|
||||
"key": "Show sing-box config",
|
||||
"places": [
|
||||
"src/podkop/tabs/diagnostic/initController.ts:278",
|
||||
"src/podkop/tabs/diagnostic/initController.ts:290",
|
||||
"src/podkop/tabs/diagnostic/partials/renderAvailableActions.ts:116"
|
||||
]
|
||||
},
|
||||
@@ -1300,56 +1273,42 @@
|
||||
"call": "Sing-box autostart disabled",
|
||||
"key": "Sing-box autostart disabled",
|
||||
"places": [
|
||||
"src/podkop/tabs/diagnostic/checks/runSingBoxCheck.ts:86"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Sing-box checks",
|
||||
"key": "Sing-box checks",
|
||||
"places": [
|
||||
"src/podkop/tabs/diagnostic/checks/contstants.ts:19"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Sing-box checks passed",
|
||||
"key": "Sing-box checks passed",
|
||||
"places": [
|
||||
"src/podkop/tabs/diagnostic/checks/runSingBoxCheck.ts:66"
|
||||
"src/podkop/tabs/diagnostic/checks/runSingBoxCheck.ts:77"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Sing-box installed",
|
||||
"key": "Sing-box installed",
|
||||
"places": [
|
||||
"src/podkop/tabs/diagnostic/checks/runSingBoxCheck.ts:71"
|
||||
"src/podkop/tabs/diagnostic/checks/runSingBoxCheck.ts:62"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Sing-box listening ports",
|
||||
"key": "Sing-box listening ports",
|
||||
"places": [
|
||||
"src/podkop/tabs/diagnostic/checks/runSingBoxCheck.ts:96"
|
||||
"src/podkop/tabs/diagnostic/checks/runSingBoxCheck.ts:87"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Sing-box process running",
|
||||
"key": "Sing-box process running",
|
||||
"places": [
|
||||
"src/podkop/tabs/diagnostic/checks/runSingBoxCheck.ts:91"
|
||||
"src/podkop/tabs/diagnostic/checks/runSingBoxCheck.ts:82"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Sing-box service exist",
|
||||
"key": "Sing-box service exist",
|
||||
"places": [
|
||||
"src/podkop/tabs/diagnostic/checks/runSingBoxCheck.ts:81"
|
||||
"src/podkop/tabs/diagnostic/checks/runSingBoxCheck.ts:72"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Sing-box version >= 1.12.4",
|
||||
"key": "Sing-box version >= 1.12.4",
|
||||
"places": [
|
||||
"src/podkop/tabs/diagnostic/checks/runSingBoxCheck.ts:76"
|
||||
"src/podkop/tabs/diagnostic/checks/runSingBoxCheck.ts:67"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -1363,7 +1322,7 @@
|
||||
"call": "Specify a local IP address to be excluded from routing",
|
||||
"key": "Specify a local IP address to be excluded from routing",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:370"
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:377"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -1423,11 +1382,18 @@
|
||||
"src/podkop/tabs/dashboard/initController.ts:301"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "System information",
|
||||
"key": "System information",
|
||||
"places": [
|
||||
"src/podkop/tabs/diagnostic/partials/renderSystemInfo.ts:21"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Table exist",
|
||||
"key": "Table exist",
|
||||
"places": [
|
||||
"src/podkop/tabs/diagnostic/checks/runNftCheck.ts:80"
|
||||
"src/podkop/tabs/diagnostic/checks/runNftCheck.ts:69"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -1479,6 +1445,13 @@
|
||||
"src/podkop/tabs/dashboard/initController.ts:265"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Troubleshooting",
|
||||
"key": "Troubleshooting",
|
||||
"places": [
|
||||
"src/podkop/tabs/diagnostic/partials/renderWikiDisclaimer.ts:25"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "TTL must be a positive number",
|
||||
"key": "TTL must be a positive number",
|
||||
@@ -1512,13 +1485,13 @@
|
||||
"call": "unknown",
|
||||
"key": "unknown",
|
||||
"places": [
|
||||
"src/podkop/tabs/diagnostic/initController.ts:34",
|
||||
"src/podkop/tabs/diagnostic/initController.ts:35",
|
||||
"src/podkop/tabs/diagnostic/initController.ts:36",
|
||||
"src/podkop/tabs/diagnostic/initController.ts:37",
|
||||
"src/podkop/tabs/diagnostic/initController.ts:38",
|
||||
"src/podkop/tabs/diagnostic/initController.ts:39",
|
||||
"src/podkop/tabs/diagnostic/initController.ts:373"
|
||||
"src/podkop/tabs/diagnostic/initController.ts:40",
|
||||
"src/podkop/tabs/diagnostic/initController.ts:41",
|
||||
"src/podkop/tabs/diagnostic/initController.ts:42",
|
||||
"src/podkop/tabs/diagnostic/initController.ts:43",
|
||||
"src/podkop/tabs/diagnostic/initController.ts:417"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -1540,7 +1513,7 @@
|
||||
"call": "URL must start with vless://, ss://, trojan://, or socks4/5://",
|
||||
"key": "URL must start with vless://, ss://, trojan://, or socks4/5://",
|
||||
"places": [
|
||||
"src/validators/validateProxyUrl.ts:27"
|
||||
"src/validators/validateProxyUrl.ts:29"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -1610,8 +1583,8 @@
|
||||
"call": "Valid",
|
||||
"key": "Valid",
|
||||
"places": [
|
||||
"src/validators/validateDns.ts:11",
|
||||
"src/validators/validateDns.ts:15",
|
||||
"src/validators/validateDns.ts:14",
|
||||
"src/validators/validateDns.ts:18",
|
||||
"src/validators/validateDomain.ts:13",
|
||||
"src/validators/validateDomain.ts:30",
|
||||
"src/validators/validateIp.ts:8",
|
||||
@@ -1622,7 +1595,7 @@
|
||||
"src/validators/validateSubnet.ts:38",
|
||||
"src/validators/validateTrojanUrl.ts:59",
|
||||
"src/validators/validateUrl.ts:16",
|
||||
"src/validators/validateVlessUrl.ts:107"
|
||||
"src/validators/validateVlessUrl.ts:108"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -1637,10 +1610,17 @@
|
||||
"call": "View logs",
|
||||
"key": "View logs",
|
||||
"places": [
|
||||
"src/podkop/tabs/diagnostic/initController.ts:248",
|
||||
"src/podkop/tabs/diagnostic/initController.ts:256",
|
||||
"src/podkop/tabs/diagnostic/partials/renderAvailableActions.ts:107"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Visit Wiki",
|
||||
"key": "Visit Wiki",
|
||||
"places": [
|
||||
"src/podkop/tabs/diagnostic/partials/renderWikiDisclaimer.ts:31"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Warning: %s cannot be used together with %s. Previous selections have been removed.",
|
||||
"key": "Warning: %s cannot be used together with %s. Previous selections have been removed.",
|
||||
|
||||
@@ -7,8 +7,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PODKOP\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-10-21 20:02+0300\n"
|
||||
"PO-Revision-Date: 2025-10-21 20:02+0300\n"
|
||||
"POT-Creation-Date: 2025-10-25 22:08+0300\n"
|
||||
"PO-Revision-Date: 2025-10-25 22:08+0300\n"
|
||||
"Last-Translator: divocat <divocatt@gmail.com>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"Language: \n"
|
||||
@@ -36,7 +36,7 @@ msgstr ""
|
||||
msgid "Active Connections"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runNftCheck.ts:117
|
||||
#: src/podkop/tabs/diagnostic/checks/runNftCheck.ts:106
|
||||
msgid "Additional marking rules found"
|
||||
msgstr ""
|
||||
|
||||
@@ -52,7 +52,11 @@ msgstr ""
|
||||
msgid "At least one valid subnet or IP must be specified. Comments-only content is not allowed."
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runDnsCheck.ts:72
|
||||
#: src/podkop/tabs/diagnostic/partials/renderAvailableActions.ts:43
|
||||
msgid "Available actions"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runDnsCheck.ts:65
|
||||
msgid "Bootsrap DNS"
|
||||
msgstr ""
|
||||
|
||||
@@ -60,48 +64,47 @@ msgstr ""
|
||||
msgid "Bootstrap DNS server"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runFakeIPCheck.ts:81
|
||||
#: src/podkop/tabs/diagnostic/checks/runFakeIPCheck.ts:58
|
||||
msgid "Browser is not using FakeIP"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runFakeIPCheck.ts:80
|
||||
#: src/podkop/tabs/diagnostic/checks/runFakeIPCheck.ts:57
|
||||
msgid "Browser is using FakeIP correctly"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:322
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:329
|
||||
msgid "Cache File Path"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:336
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:343
|
||||
msgid "Cache file path cannot be empty"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runDnsCheck.ts:26
|
||||
msgid "Cannot receive DNS checks result"
|
||||
#: src/podkop/tabs/diagnostic/checks/runDnsCheck.ts:27
|
||||
#: src/podkop/tabs/diagnostic/checks/runNftCheck.ts:28
|
||||
#: src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts:27
|
||||
#: src/podkop/tabs/diagnostic/checks/runSingBoxCheck.ts:25
|
||||
msgid "Cannot receive checks result"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runNftCheck.ts:27
|
||||
msgid "Cannot receive nftables checks result"
|
||||
#: src/podkop/tabs/diagnostic/checks/runDnsCheck.ts:15
|
||||
#: src/podkop/tabs/diagnostic/checks/runFakeIPCheck.ts:15
|
||||
#: src/podkop/tabs/diagnostic/checks/runNftCheck.ts:13
|
||||
#: src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts:15
|
||||
#: src/podkop/tabs/diagnostic/checks/runSingBoxCheck.ts:13
|
||||
msgid "Checking, please wait"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runSingBoxCheck.ts:24
|
||||
msgid "Cannot receive Sing-box checks result"
|
||||
#: src/podkop/tabs/diagnostic/helpers/getCheckTitle.ts:2
|
||||
msgid "checks"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runDnsCheck.ts:14
|
||||
msgid "Checking dns, please wait"
|
||||
#: src/podkop/tabs/diagnostic/helpers/getMeta.ts:26
|
||||
msgid "Checks failed"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runFakeIPCheck.ts:14
|
||||
msgid "Checking FakeIP, please wait"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runNftCheck.ts:12
|
||||
msgid "Checking nftables, please wait"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runSingBoxCheck.ts:12
|
||||
msgid "Checking sing-box, please wait"
|
||||
#: src/podkop/tabs/diagnostic/helpers/getMeta.ts:13
|
||||
msgid "Checks passed"
|
||||
msgstr ""
|
||||
|
||||
#: src/validators/validateSubnet.ts:33
|
||||
@@ -116,7 +119,7 @@ msgstr ""
|
||||
msgid "Community Lists"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:309
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:316
|
||||
msgid "Config File Path"
|
||||
msgstr ""
|
||||
|
||||
@@ -152,15 +155,15 @@ msgstr ""
|
||||
msgid "Dashboard currently unavailable"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:215
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:222
|
||||
msgid "Delay in milliseconds before reloading podkop after interface UP"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:222
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:229
|
||||
msgid "Delay value cannot be empty"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runDnsCheck.ts:89
|
||||
#: src/podkop/tabs/diagnostic/checks/runDnsCheck.ts:82
|
||||
msgid "DHCP has DNS server"
|
||||
msgstr ""
|
||||
|
||||
@@ -172,11 +175,11 @@ msgstr ""
|
||||
msgid "Disable autostart"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:239
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:246
|
||||
msgid "Disable QUIC"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:240
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:247
|
||||
msgid "Disable the QUIC protocol to improve compatibility or fix issues with video streaming"
|
||||
msgstr ""
|
||||
|
||||
@@ -185,15 +188,7 @@ msgstr ""
|
||||
msgid "Disabled"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/contstants.ts:14
|
||||
msgid "DNS checks"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runDnsCheck.ts:64
|
||||
msgid "DNS checks passed"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runDnsCheck.ts:84
|
||||
#: src/podkop/tabs/diagnostic/checks/runDnsCheck.ts:77
|
||||
msgid "DNS on router"
|
||||
msgstr ""
|
||||
|
||||
@@ -225,11 +220,15 @@ msgstr ""
|
||||
msgid "DNS server address cannot be empty"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/partials/renderWikiDisclaimer.ts:26
|
||||
msgid "Do not panic, everything can be fixed, just..."
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:166
|
||||
msgid "Domain Resolver"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:300
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:307
|
||||
msgid "Dont Touch My DHCP!"
|
||||
msgstr ""
|
||||
|
||||
@@ -242,19 +241,19 @@ msgstr ""
|
||||
msgid "Download"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:262
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:269
|
||||
msgid "Download Lists via Proxy/VPN"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:271
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:278
|
||||
msgid "Download Lists via specific proxy section"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:263
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:270
|
||||
msgid "Downloading all lists via main Proxy/VPN"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:272
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:279
|
||||
msgid "Downloading all lists via specific Proxy/VPN"
|
||||
msgstr ""
|
||||
|
||||
@@ -283,7 +282,7 @@ msgstr ""
|
||||
msgid "Enable the mixed proxy, allowing this section to route traffic through both HTTP and SOCKS proxies"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:230
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:237
|
||||
msgid "Enable YACD"
|
||||
msgstr ""
|
||||
|
||||
@@ -303,11 +302,11 @@ msgstr ""
|
||||
msgid "Enter subnets in CIDR notation (e.g. 103.21.244.0/22) or single IP addresses"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:358
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:365
|
||||
msgid "Exclude NTP"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:359
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:366
|
||||
msgid "Exclude NTP protocol traffic from the tunnel to prevent it from being routed through the proxy or VPN"
|
||||
msgstr ""
|
||||
|
||||
@@ -315,20 +314,13 @@ msgstr ""
|
||||
msgid "Failed to copy!"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/contstants.ts:29
|
||||
msgid "FakeIP checks"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runFakeIPCheck.ts:57
|
||||
msgid "FakeIP checks failed"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runFakeIPCheck.ts:51
|
||||
msgid "FakeIP checks partially passed"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runFakeIPCheck.ts:44
|
||||
msgid "FakeIP checks passed"
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:227
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:231
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:261
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:265
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:299
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:303
|
||||
msgid "Failed to execute!"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/methods/custom/getDashboardSections.ts:117
|
||||
@@ -343,7 +335,7 @@ msgstr ""
|
||||
msgid "Get global check"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:218
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:222
|
||||
msgid "Global check"
|
||||
msgstr ""
|
||||
|
||||
@@ -351,19 +343,19 @@ msgstr ""
|
||||
msgid "HTTP error"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:182
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:189
|
||||
msgid "Interface Monitoring"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:214
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:221
|
||||
msgid "Interface Monitoring Delay"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:183
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:190
|
||||
msgid "Interface monitoring for Bad WAN"
|
||||
msgstr ""
|
||||
|
||||
#: src/validators/validateDns.ts:20
|
||||
#: src/validators/validateDns.ts:23
|
||||
msgid "Invalid DNS server format. Examples: 8.8.8.8 or dns.example.com or dns.example.com/nicedns for DoH"
|
||||
msgstr ""
|
||||
|
||||
@@ -480,7 +472,7 @@ msgstr ""
|
||||
msgid "Invalid URL format"
|
||||
msgstr ""
|
||||
|
||||
#: src/validators/validateVlessUrl.ts:109
|
||||
#: src/validators/validateVlessUrl.ts:110
|
||||
msgid "Invalid VLESS URL: parsing failed"
|
||||
msgstr ""
|
||||
|
||||
@@ -488,11 +480,15 @@ msgstr ""
|
||||
msgid "IP address 0.0.0.0 is not allowed"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:404
|
||||
#: src/podkop/tabs/diagnostic/helpers/getMeta.ts:20
|
||||
msgid "Issues detected"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:453
|
||||
msgid "Latest"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:250
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:257
|
||||
msgid "List Update Frequency"
|
||||
msgstr ""
|
||||
|
||||
@@ -504,7 +500,7 @@ msgstr ""
|
||||
msgid "Local Subnet Lists"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runDnsCheck.ts:79
|
||||
#: src/podkop/tabs/diagnostic/checks/runDnsCheck.ts:72
|
||||
msgid "Main DNS"
|
||||
msgstr ""
|
||||
|
||||
@@ -516,7 +512,7 @@ msgstr ""
|
||||
msgid "Mixed Proxy Port"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:191
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:198
|
||||
msgid "Monitored Interfaces"
|
||||
msgstr ""
|
||||
|
||||
@@ -524,19 +520,7 @@ msgstr ""
|
||||
msgid "Network Interface"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/contstants.ts:24
|
||||
msgid "Nftables checks"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runNftCheck.ts:75
|
||||
msgid "Nftables checks partially passed"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runNftCheck.ts:74
|
||||
msgid "Nftables checks passed"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runNftCheck.ts:116
|
||||
#: src/podkop/tabs/diagnostic/checks/runNftCheck.ts:105
|
||||
msgid "No other marking rules found"
|
||||
msgstr ""
|
||||
|
||||
@@ -544,10 +528,16 @@ msgstr ""
|
||||
msgid "Not implement yet"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts:59
|
||||
#: src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts:79
|
||||
msgid "Not responding"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:55
|
||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:63
|
||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:71
|
||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:79
|
||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:87
|
||||
msgid "Not running"
|
||||
msgstr ""
|
||||
|
||||
@@ -567,7 +557,7 @@ msgstr ""
|
||||
msgid "Outbound JSON must contain at least \"type\", \"server\" and \"server_port\" fields"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:394
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:443
|
||||
msgid "Outdated"
|
||||
msgstr ""
|
||||
|
||||
@@ -579,18 +569,26 @@ msgstr ""
|
||||
msgid "Path cannot be empty"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:340
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:347
|
||||
msgid "Path must be absolute (start with /)"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:349
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:356
|
||||
msgid "Path must contain at least one directory (like /tmp/cache.db)"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:344
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:351
|
||||
msgid "Path must end with cache.db"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:103
|
||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:111
|
||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:119
|
||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:127
|
||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:135
|
||||
msgid "Pending"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/dashboard/initController.ts:340
|
||||
msgid "Podkop"
|
||||
msgstr ""
|
||||
@@ -599,7 +597,7 @@ msgstr ""
|
||||
msgid "Podkop Settings"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:301
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:308
|
||||
msgid "Podkop will not modify your DHCP configuration"
|
||||
msgstr ""
|
||||
|
||||
@@ -607,21 +605,14 @@ msgstr ""
|
||||
msgid "Proxy Configuration URL"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runFakeIPCheck.ts:89
|
||||
#: src/podkop/tabs/diagnostic/checks/runFakeIPCheck.ts:66
|
||||
msgid "Proxy traffic is not routed via FakeIP"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runFakeIPCheck.ts:88
|
||||
#: src/podkop/tabs/diagnostic/checks/runFakeIPCheck.ts:65
|
||||
msgid "Proxy traffic is routed via FakeIP"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:95
|
||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:103
|
||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:111
|
||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:119
|
||||
msgid "Queued"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:245
|
||||
msgid "Regional options cannot be used together"
|
||||
msgstr ""
|
||||
@@ -638,39 +629,39 @@ msgstr ""
|
||||
msgid "Restart podkop"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runFakeIPCheck.ts:74
|
||||
#: src/podkop/tabs/diagnostic/checks/runFakeIPCheck.ts:51
|
||||
msgid "Router DNS is not routed through sing-box"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runFakeIPCheck.ts:73
|
||||
#: src/podkop/tabs/diagnostic/checks/runFakeIPCheck.ts:50
|
||||
msgid "Router DNS is routed through sing-box"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:369
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:376
|
||||
msgid "Routing Excluded IPs"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runNftCheck.ts:90
|
||||
#: src/podkop/tabs/diagnostic/checks/runNftCheck.ts:79
|
||||
msgid "Rules mangle counters"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runNftCheck.ts:85
|
||||
#: src/podkop/tabs/diagnostic/checks/runNftCheck.ts:74
|
||||
msgid "Rules mangle exist"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runNftCheck.ts:100
|
||||
#: src/podkop/tabs/diagnostic/checks/runNftCheck.ts:89
|
||||
msgid "Rules mangle output counters"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runNftCheck.ts:95
|
||||
#: src/podkop/tabs/diagnostic/checks/runNftCheck.ts:84
|
||||
msgid "Rules mangle output exist"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runNftCheck.ts:110
|
||||
#: src/podkop/tabs/diagnostic/checks/runNftCheck.ts:99
|
||||
msgid "Rules proxy counters"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runNftCheck.ts:105
|
||||
#: src/podkop/tabs/diagnostic/checks/runNftCheck.ts:94
|
||||
msgid "Rules proxy exist"
|
||||
msgstr ""
|
||||
|
||||
@@ -698,7 +689,7 @@ msgstr ""
|
||||
msgid "Select DNS protocol to use"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:251
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:258
|
||||
msgid "Select how often the domain or subnet lists are updated automatically"
|
||||
msgstr ""
|
||||
|
||||
@@ -715,11 +706,11 @@ msgstr ""
|
||||
msgid "Select or enter DNS server address"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:323
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:330
|
||||
msgid "Select or enter path for sing-box cache file. Change this ONLY if you know what you are doing"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:310
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:317
|
||||
msgid "Select path for sing-box config file. Change this ONLY if you know what you are doing"
|
||||
msgstr ""
|
||||
|
||||
@@ -743,7 +734,7 @@ msgstr ""
|
||||
msgid "Select the network interface to which the traffic will originate"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:192
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:199
|
||||
msgid "Select the WAN interfaces to be monitored"
|
||||
msgstr ""
|
||||
|
||||
@@ -755,7 +746,7 @@ msgstr ""
|
||||
msgid "Settings"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:278
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:290
|
||||
#: src/podkop/tabs/diagnostic/partials/renderAvailableActions.ts:116
|
||||
msgid "Show sing-box config"
|
||||
msgstr ""
|
||||
@@ -764,35 +755,27 @@ msgstr ""
|
||||
msgid "Sing-box"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runSingBoxCheck.ts:86
|
||||
#: src/podkop/tabs/diagnostic/checks/runSingBoxCheck.ts:77
|
||||
msgid "Sing-box autostart disabled"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/contstants.ts:19
|
||||
msgid "Sing-box checks"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runSingBoxCheck.ts:66
|
||||
msgid "Sing-box checks passed"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runSingBoxCheck.ts:71
|
||||
#: src/podkop/tabs/diagnostic/checks/runSingBoxCheck.ts:62
|
||||
msgid "Sing-box installed"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runSingBoxCheck.ts:96
|
||||
#: src/podkop/tabs/diagnostic/checks/runSingBoxCheck.ts:87
|
||||
msgid "Sing-box listening ports"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runSingBoxCheck.ts:91
|
||||
#: src/podkop/tabs/diagnostic/checks/runSingBoxCheck.ts:82
|
||||
msgid "Sing-box process running"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runSingBoxCheck.ts:81
|
||||
#: src/podkop/tabs/diagnostic/checks/runSingBoxCheck.ts:72
|
||||
msgid "Sing-box service exist"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runSingBoxCheck.ts:76
|
||||
#: src/podkop/tabs/diagnostic/checks/runSingBoxCheck.ts:67
|
||||
msgid "Sing-box version >= 1.12.4"
|
||||
msgstr ""
|
||||
|
||||
@@ -800,7 +783,7 @@ msgstr ""
|
||||
msgid "Source Network Interface"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:370
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:377
|
||||
msgid "Specify a local IP address to be excluded from routing"
|
||||
msgstr ""
|
||||
|
||||
@@ -837,7 +820,11 @@ msgstr ""
|
||||
msgid "System info"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runNftCheck.ts:80
|
||||
#: src/podkop/tabs/diagnostic/partials/renderSystemInfo.ts:21
|
||||
msgid "System information"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runNftCheck.ts:69
|
||||
msgid "Table exist"
|
||||
msgstr ""
|
||||
|
||||
@@ -869,6 +856,10 @@ msgstr ""
|
||||
msgid "Traffic Total"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/partials/renderWikiDisclaimer.ts:25
|
||||
msgid "Troubleshooting"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:80
|
||||
msgid "TTL must be a positive number"
|
||||
msgstr ""
|
||||
@@ -886,13 +877,13 @@ msgstr ""
|
||||
msgid "UDP over TCP"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:34
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:35
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:36
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:37
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:38
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:39
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:373
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:40
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:41
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:42
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:43
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:417
|
||||
msgid "unknown"
|
||||
msgstr ""
|
||||
|
||||
@@ -905,7 +896,7 @@ msgstr ""
|
||||
msgid "Uplink"
|
||||
msgstr ""
|
||||
|
||||
#: src/validators/validateProxyUrl.ts:27
|
||||
#: src/validators/validateProxyUrl.ts:29
|
||||
msgid "URL must start with vless://, ss://, trojan://, or socks4/5://"
|
||||
msgstr ""
|
||||
|
||||
@@ -945,8 +936,8 @@ msgstr ""
|
||||
msgid "User Subnets List"
|
||||
msgstr ""
|
||||
|
||||
#: src/validators/validateDns.ts:11
|
||||
#: src/validators/validateDns.ts:15
|
||||
#: src/validators/validateDns.ts:14
|
||||
#: src/validators/validateDns.ts:18
|
||||
#: src/validators/validateDomain.ts:13
|
||||
#: src/validators/validateDomain.ts:30
|
||||
#: src/validators/validateIp.ts:8
|
||||
@@ -957,7 +948,7 @@ msgstr ""
|
||||
#: src/validators/validateSubnet.ts:38
|
||||
#: src/validators/validateTrojanUrl.ts:59
|
||||
#: src/validators/validateUrl.ts:16
|
||||
#: src/validators/validateVlessUrl.ts:107
|
||||
#: src/validators/validateVlessUrl.ts:108
|
||||
msgid "Valid"
|
||||
msgstr ""
|
||||
|
||||
@@ -966,11 +957,15 @@ msgstr ""
|
||||
msgid "Validation errors:"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:248
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:256
|
||||
#: src/podkop/tabs/diagnostic/partials/renderAvailableActions.ts:107
|
||||
msgid "View logs"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/partials/renderWikiDisclaimer.ts:31
|
||||
msgid "Visit Wiki"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:247
|
||||
msgid "Warning: %s cannot be used together with %s. Previous selections have been removed."
|
||||
msgstr ""
|
||||
|
||||
@@ -7,8 +7,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PODKOP\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-10-21 23:02+0300\n"
|
||||
"PO-Revision-Date: 2025-10-21 23:02+0300\n"
|
||||
"POT-Creation-Date: 2025-10-25 01:08+0300\n"
|
||||
"PO-Revision-Date: 2025-10-25 01:08+0300\n"
|
||||
"Last-Translator: divocat\n"
|
||||
"Language-Team: none\n"
|
||||
"Language: ru\n"
|
||||
@@ -44,6 +44,9 @@ msgstr "Необходимо указать хотя бы один действ
|
||||
msgid "At least one valid subnet or IP must be specified. Comments-only content is not allowed."
|
||||
msgstr "Необходимо указать хотя бы одну действительную подсеть или IP. Только комментарии недопустимы."
|
||||
|
||||
msgid "Available actions"
|
||||
msgstr "Доступные действия"
|
||||
|
||||
msgid "Bootsrap DNS"
|
||||
msgstr "Bootstrap DNS"
|
||||
|
||||
@@ -62,26 +65,20 @@ msgstr "Путь к файлу кэша"
|
||||
msgid "Cache file path cannot be empty"
|
||||
msgstr "Путь к файлу кэша не может быть пустым"
|
||||
|
||||
msgid "Cannot receive DNS checks result"
|
||||
msgstr "Не удалось получить результаты проверки DNS"
|
||||
msgid "Cannot receive checks result"
|
||||
msgstr "Не удалось получить результаты проверки"
|
||||
|
||||
msgid "Cannot receive nftables checks result"
|
||||
msgstr "Не удалось получить результаты проверки nftables"
|
||||
msgid "Checking, please wait"
|
||||
msgstr "Проверяем, пожалуйста подождите"
|
||||
|
||||
msgid "Cannot receive Sing-box checks result"
|
||||
msgstr "Не удалось получить результаты проверки Sing-box"
|
||||
msgid "checks"
|
||||
msgstr "проверки"
|
||||
|
||||
msgid "Checking dns, please wait"
|
||||
msgstr "Проверка dns, пожалуйста подождите"
|
||||
msgid "Checks failed"
|
||||
msgstr "Проверки не выполнены"
|
||||
|
||||
msgid "Checking FakeIP, please wait"
|
||||
msgstr "Проверка FakeIP, пожалуйста подождите"
|
||||
|
||||
msgid "Checking nftables, please wait"
|
||||
msgstr "Проверка nftables, пожалуйста подождите"
|
||||
|
||||
msgid "Checking sing-box, please wait"
|
||||
msgstr "Проверка sing-box, пожалуйста подождите"
|
||||
msgid "Checks passed"
|
||||
msgstr "Проверки пройдены"
|
||||
|
||||
msgid "CIDR must be between 0 and 32"
|
||||
msgstr "CIDR должен быть между 0 и 32"
|
||||
@@ -143,12 +140,6 @@ msgstr "Отключить QUIC протокол для улучшения со
|
||||
msgid "Disabled"
|
||||
msgstr "Отключено"
|
||||
|
||||
msgid "DNS checks"
|
||||
msgstr "DNS проверки"
|
||||
|
||||
msgid "DNS checks passed"
|
||||
msgstr "DNS проверки успешно завершены"
|
||||
|
||||
msgid "DNS on router"
|
||||
msgstr "DNS на роутере"
|
||||
|
||||
@@ -170,6 +161,9 @@ msgstr "DNS-сервер"
|
||||
msgid "DNS server address cannot be empty"
|
||||
msgstr "Адрес DNS-сервера не может быть пустым"
|
||||
|
||||
msgid "Do not panic, everything can be fixed, just..."
|
||||
msgstr "Не паникуйте, всё можно исправить, просто..."
|
||||
|
||||
msgid "Domain Resolver"
|
||||
msgstr "Резолвер доменов"
|
||||
|
||||
@@ -236,17 +230,8 @@ msgstr "Исключите трафик протокола NTP из туннел
|
||||
msgid "Failed to copy!"
|
||||
msgstr "Не удалось скопировать!"
|
||||
|
||||
msgid "FakeIP checks"
|
||||
msgstr "Проверка FakeIP"
|
||||
|
||||
msgid "FakeIP checks failed"
|
||||
msgstr "Проверки FakeIP не пройдены"
|
||||
|
||||
msgid "FakeIP checks partially passed"
|
||||
msgstr "Проверка FakeIP частично пройдена"
|
||||
|
||||
msgid "FakeIP checks passed"
|
||||
msgstr "Проверки FakeIP пройдены"
|
||||
msgid "Failed to execute!"
|
||||
msgstr "Не удалось выполнить!"
|
||||
|
||||
msgid "Fastest"
|
||||
msgstr "Самый быстрый"
|
||||
@@ -365,6 +350,9 @@ msgstr "Неверный URL VLESS: ошибка разбора"
|
||||
msgid "IP address 0.0.0.0 is not allowed"
|
||||
msgstr "IP-адрес 0.0.0.0 не допускается"
|
||||
|
||||
msgid "Issues detected"
|
||||
msgstr "Обнаружены проблемы"
|
||||
|
||||
msgid "Latest"
|
||||
msgstr "Последняя"
|
||||
|
||||
@@ -392,21 +380,15 @@ msgstr "Наблюдаемые интерфейсы"
|
||||
msgid "Network Interface"
|
||||
msgstr "Сетевой интерфейс"
|
||||
|
||||
msgid "Nftables checks"
|
||||
msgstr "Проверки Nftables"
|
||||
|
||||
msgid "Nftables checks partially passed"
|
||||
msgstr "Проверки Nftables частично пройдена"
|
||||
|
||||
msgid "Nftables checks passed"
|
||||
msgstr "Nftables проверки успешно завершены"
|
||||
|
||||
msgid "No other marking rules found"
|
||||
msgstr "Другие правила маркировки не найдены"
|
||||
|
||||
msgid "Not implement yet"
|
||||
msgstr "Ещё не реализовано"
|
||||
|
||||
msgid "Not responding"
|
||||
msgstr "Не отвечает"
|
||||
|
||||
msgid "Not running"
|
||||
msgstr "Не запущено"
|
||||
|
||||
@@ -440,6 +422,9 @@ msgstr "Путь должен содержать хотя бы одну дире
|
||||
msgid "Path must end with cache.db"
|
||||
msgstr "Путь должен заканчиваться на cache.db"
|
||||
|
||||
msgid "Pending"
|
||||
msgstr "Ожидает запуска"
|
||||
|
||||
msgid "Podkop"
|
||||
msgstr "Podkop"
|
||||
|
||||
@@ -458,17 +443,14 @@ msgstr "Прокси-трафик не маршрутизируется чере
|
||||
msgid "Proxy traffic is routed via FakeIP"
|
||||
msgstr "Прокси-трафик направляется через FakeIP"
|
||||
|
||||
msgid "Queued"
|
||||
msgstr "В очереди"
|
||||
|
||||
msgid "Regional options cannot be used together"
|
||||
msgstr "Нельзя использовать несколько региональных опций одновременно"
|
||||
|
||||
msgid "Remote Domain Lists"
|
||||
msgstr "Удалённые списки доменов"
|
||||
msgstr "Внешние списки доменов"
|
||||
|
||||
msgid "Remote Subnet Lists"
|
||||
msgstr "Удалённые списки подсетей"
|
||||
msgstr "Внешние списки подсетей"
|
||||
|
||||
msgid "Restart podkop"
|
||||
msgstr "Перезапустить Podkop"
|
||||
@@ -569,12 +551,6 @@ msgstr "Sing-box"
|
||||
msgid "Sing-box autostart disabled"
|
||||
msgstr "Автостарт sing-box отключен"
|
||||
|
||||
msgid "Sing-box checks"
|
||||
msgstr "Sing-box проверки"
|
||||
|
||||
msgid "Sing-box checks passed"
|
||||
msgstr "Sing-box проверки успешно завершены"
|
||||
|
||||
msgid "Sing-box installed"
|
||||
msgstr "Sing-box установлен"
|
||||
|
||||
@@ -600,10 +576,10 @@ msgid "Specify local IP addresses or subnets whose traffic will always be routed
|
||||
msgstr "Укажите локальные IP-адреса или подсети, трафик которых всегда будет направляться через настроенный маршрут."
|
||||
|
||||
msgid "Specify remote URLs to download and use domain lists"
|
||||
msgstr "Укажите удаленные URL-адреса для загрузки и использования списков доменов."
|
||||
msgstr "Укажите URL-адреса для загрузки и использования списков доменов."
|
||||
|
||||
msgid "Specify remote URLs to download and use subnet lists"
|
||||
msgstr "Укажите удаленные URL-адреса для загрузки и использования списков подсетей."
|
||||
msgstr "Укажите URL-адреса для загрузки и использования списков подсетей."
|
||||
|
||||
msgid "Specify the path to the list file located on the router filesystem"
|
||||
msgstr "Укажите путь к файлу списка, расположенному в файловой системе маршрутизатора."
|
||||
@@ -620,11 +596,14 @@ msgstr "Успешно скопировано!"
|
||||
msgid "System info"
|
||||
msgstr "Системная информация"
|
||||
|
||||
msgid "System information"
|
||||
msgstr "Системная информация"
|
||||
|
||||
msgid "Table exist"
|
||||
msgstr "Таблица существует"
|
||||
|
||||
msgid "Test latency"
|
||||
msgstr "Измерить задержки"
|
||||
msgstr "Тестирование задержки"
|
||||
|
||||
msgid "Text List"
|
||||
msgstr "Текстовый список"
|
||||
@@ -644,6 +623,9 @@ msgstr "Трафик"
|
||||
msgid "Traffic Total"
|
||||
msgstr "Всего трафика"
|
||||
|
||||
msgid "Troubleshooting"
|
||||
msgstr "Устранение неполадок"
|
||||
|
||||
msgid "TTL must be a positive number"
|
||||
msgstr "TTL должно быть положительным числом"
|
||||
|
||||
@@ -704,6 +686,9 @@ msgstr "Ошибки валидации:"
|
||||
msgid "View logs"
|
||||
msgstr "Посмотреть логи"
|
||||
|
||||
msgid "Visit Wiki"
|
||||
msgstr "Перейти в wiki"
|
||||
|
||||
msgid "Warning: %s cannot be used together with %s. Previous selections have been removed."
|
||||
msgstr "Предупреждение: %s нельзя использовать вместе с %s. Предыдущие варианты были удалены."
|
||||
|
||||
|
||||
@@ -15,3 +15,4 @@ export * from './renderCircleCheckBigIcon24';
|
||||
export * from './renderSquareChartGanttIcon24';
|
||||
export * from './renderCogIcon24';
|
||||
export * from './renderSearchIcon24';
|
||||
export * from './renderBookOpenTextIcon24';
|
||||
|
||||
28
fe-app-podkop/src/icons/renderBookOpenTextIcon24.ts
Normal file
28
fe-app-podkop/src/icons/renderBookOpenTextIcon24.ts
Normal file
@@ -0,0 +1,28 @@
|
||||
import { svgEl } from '../helpers';
|
||||
|
||||
export function renderBookOpenTextIcon24() {
|
||||
const NS = 'http://www.w3.org/2000/svg';
|
||||
return svgEl(
|
||||
'svg',
|
||||
{
|
||||
xmlns: NS,
|
||||
viewBox: '0 0 24 24',
|
||||
fill: 'none',
|
||||
stroke: 'currentColor',
|
||||
'stroke-width': '2',
|
||||
'stroke-linecap': 'round',
|
||||
'stroke-linejoin': 'round',
|
||||
class: 'lucide lucide-book-open-text-icon lucide-book-open-text',
|
||||
},
|
||||
[
|
||||
svgEl('path', { d: 'M12 7v14' }),
|
||||
svgEl('path', { d: 'M16 12h2' }),
|
||||
svgEl('path', { d: 'M16 8h2' }),
|
||||
svgEl('path', {
|
||||
d: 'M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z',
|
||||
}),
|
||||
svgEl('path', { d: 'M6 12h2' }),
|
||||
svgEl('path', { d: 'M6 8h2' }),
|
||||
],
|
||||
);
|
||||
}
|
||||
@@ -9,7 +9,7 @@ export async function callBaseMethod<T>(
|
||||
const response = await executeShellCommand({
|
||||
command,
|
||||
args: [method as string, ...args],
|
||||
timeout: 10000,
|
||||
timeout: 15000,
|
||||
});
|
||||
|
||||
if (response.stdout) {
|
||||
|
||||
@@ -29,15 +29,15 @@ export const PodkopShellMethods = {
|
||||
Podkop.AvailableClashAPIMethods.GET_PROXIES,
|
||||
]),
|
||||
getClashApiProxyLatency: async (tag: string) =>
|
||||
callBaseMethod<unknown>(Podkop.AvailableMethods.CLASH_API, [
|
||||
Podkop.AvailableClashAPIMethods.GET_PROXY_LATENCY,
|
||||
tag,
|
||||
]),
|
||||
callBaseMethod<Podkop.GetClashApiProxyLatency>(
|
||||
Podkop.AvailableMethods.CLASH_API,
|
||||
[Podkop.AvailableClashAPIMethods.GET_PROXY_LATENCY, tag],
|
||||
),
|
||||
getClashApiGroupLatency: async (tag: string) =>
|
||||
callBaseMethod<unknown>(Podkop.AvailableMethods.CLASH_API, [
|
||||
Podkop.AvailableClashAPIMethods.GET_GROUP_LATENCY,
|
||||
tag,
|
||||
]),
|
||||
callBaseMethod<Podkop.GetClashApiGroupLatency>(
|
||||
Podkop.AvailableMethods.CLASH_API,
|
||||
[Podkop.AvailableClashAPIMethods.GET_GROUP_LATENCY, tag],
|
||||
),
|
||||
setClashApiGroupProxy: async (group: string, proxy: string) =>
|
||||
callBaseMethod<unknown>(Podkop.AvailableMethods.CLASH_API, [
|
||||
Podkop.AvailableClashAPIMethods.SET_GROUP_PROXY,
|
||||
|
||||
@@ -1,8 +1,11 @@
|
||||
import { getCheckTitle } from '../helpers/getCheckTitle';
|
||||
|
||||
export enum DIAGNOSTICS_CHECKS {
|
||||
DNS = 'DNS',
|
||||
SINGBOX = 'SINGBOX',
|
||||
NFT = 'NFT',
|
||||
FAKEIP = 'FAKEIP',
|
||||
OUTBOUNDS = 'OUTBOUNDS',
|
||||
}
|
||||
|
||||
export const DIAGNOSTICS_CHECKS_MAP: Record<
|
||||
@@ -11,22 +14,27 @@ export const DIAGNOSTICS_CHECKS_MAP: Record<
|
||||
> = {
|
||||
[DIAGNOSTICS_CHECKS.DNS]: {
|
||||
order: 1,
|
||||
title: _('DNS checks'),
|
||||
title: getCheckTitle('DNS'),
|
||||
code: DIAGNOSTICS_CHECKS.DNS,
|
||||
},
|
||||
[DIAGNOSTICS_CHECKS.SINGBOX]: {
|
||||
order: 2,
|
||||
title: _('Sing-box checks'),
|
||||
title: getCheckTitle('Sing-box'),
|
||||
code: DIAGNOSTICS_CHECKS.SINGBOX,
|
||||
},
|
||||
[DIAGNOSTICS_CHECKS.NFT]: {
|
||||
order: 3,
|
||||
title: _('Nftables checks'),
|
||||
title: getCheckTitle('Nftables'),
|
||||
code: DIAGNOSTICS_CHECKS.NFT,
|
||||
},
|
||||
[DIAGNOSTICS_CHECKS.FAKEIP]: {
|
||||
[DIAGNOSTICS_CHECKS.OUTBOUNDS]: {
|
||||
order: 4,
|
||||
title: _('FakeIP checks'),
|
||||
title: getCheckTitle('Outbounds'),
|
||||
code: DIAGNOSTICS_CHECKS.OUTBOUNDS,
|
||||
},
|
||||
[DIAGNOSTICS_CHECKS.FAKEIP]: {
|
||||
order: 5,
|
||||
title: getCheckTitle('FakeIP'),
|
||||
code: DIAGNOSTICS_CHECKS.FAKEIP,
|
||||
},
|
||||
};
|
||||
|
||||
@@ -3,6 +3,7 @@ import { DIAGNOSTICS_CHECKS_MAP } from './contstants';
|
||||
import { PodkopShellMethods } from '../../../methods';
|
||||
import { IDiagnosticsChecksItem } from '../../../services';
|
||||
import { updateCheckStore } from './updateCheckStore';
|
||||
import { getMeta } from '../helpers/getMeta';
|
||||
|
||||
export async function runDnsCheck() {
|
||||
const { order, title, code } = DIAGNOSTICS_CHECKS_MAP.DNS;
|
||||
@@ -11,7 +12,7 @@ export async function runDnsCheck() {
|
||||
order,
|
||||
code,
|
||||
title,
|
||||
description: _('Checking dns, please wait'),
|
||||
description: _('Checking, please wait'),
|
||||
state: 'loading',
|
||||
items: [],
|
||||
});
|
||||
@@ -23,7 +24,7 @@ export async function runDnsCheck() {
|
||||
order,
|
||||
code,
|
||||
title,
|
||||
description: _('Cannot receive DNS checks result'),
|
||||
description: _('Cannot receive checks result'),
|
||||
state: 'error',
|
||||
items: [],
|
||||
});
|
||||
@@ -45,27 +46,19 @@ export async function runDnsCheck() {
|
||||
Boolean(data.bootstrap_dns_status) ||
|
||||
Boolean(data.dns_status);
|
||||
|
||||
function getStatus() {
|
||||
if (allGood) {
|
||||
return 'success';
|
||||
}
|
||||
|
||||
if (atLeastOneGood) {
|
||||
return 'warning';
|
||||
}
|
||||
|
||||
return 'error';
|
||||
}
|
||||
const { state, description } = getMeta({ atLeastOneGood, allGood });
|
||||
|
||||
updateCheckStore({
|
||||
order,
|
||||
code,
|
||||
title,
|
||||
description: _('DNS checks passed'),
|
||||
state: getStatus(),
|
||||
description,
|
||||
state,
|
||||
items: [
|
||||
...insertIf<IDiagnosticsChecksItem>(
|
||||
data.dns_type === 'doh' || data.dns_type === 'dot',
|
||||
data.dns_type === 'doh' ||
|
||||
data.dns_type === 'dot' ||
|
||||
!data.bootstrap_dns_status,
|
||||
[
|
||||
{
|
||||
state: data.bootstrap_dns_status ? 'success' : 'error',
|
||||
|
||||
@@ -3,6 +3,7 @@ import { DIAGNOSTICS_CHECKS_MAP } from './contstants';
|
||||
import { PodkopShellMethods, RemoteFakeIPMethods } from '../../../methods';
|
||||
import { IDiagnosticsChecksItem } from '../../../services';
|
||||
import { updateCheckStore } from './updateCheckStore';
|
||||
import { getMeta } from '../helpers/getMeta';
|
||||
|
||||
export async function runFakeIPCheck() {
|
||||
const { order, title, code } = DIAGNOSTICS_CHECKS_MAP.FAKEIP;
|
||||
@@ -11,7 +12,7 @@ export async function runFakeIPCheck() {
|
||||
order,
|
||||
code,
|
||||
title,
|
||||
description: _('Checking FakeIP, please wait'),
|
||||
description: _('Checking, please wait'),
|
||||
state: 'loading',
|
||||
items: [],
|
||||
});
|
||||
@@ -34,31 +35,7 @@ export async function runFakeIPCheck() {
|
||||
const atLeastOneGood =
|
||||
checks.router && checks.browserFakeIP && checks.differentIP;
|
||||
|
||||
function getMeta(): {
|
||||
description: string;
|
||||
state: 'loading' | 'warning' | 'success' | 'error' | 'skipped';
|
||||
} {
|
||||
if (allGood) {
|
||||
return {
|
||||
state: 'success',
|
||||
description: _('FakeIP checks passed'),
|
||||
};
|
||||
}
|
||||
|
||||
if (atLeastOneGood) {
|
||||
return {
|
||||
state: 'warning',
|
||||
description: _('FakeIP checks partially passed'),
|
||||
};
|
||||
}
|
||||
|
||||
return {
|
||||
state: 'error',
|
||||
description: _('FakeIP checks failed'),
|
||||
};
|
||||
}
|
||||
|
||||
const { state, description } = getMeta();
|
||||
const { state, description } = getMeta({ atLeastOneGood, allGood });
|
||||
|
||||
updateCheckStore({
|
||||
order,
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import { DIAGNOSTICS_CHECKS_MAP } from './contstants';
|
||||
import { RemoteFakeIPMethods, PodkopShellMethods } from '../../../methods';
|
||||
import { updateCheckStore } from './updateCheckStore';
|
||||
import { getMeta } from '../helpers/getMeta';
|
||||
|
||||
export async function runNftCheck() {
|
||||
const { order, title, code } = DIAGNOSTICS_CHECKS_MAP.NFT;
|
||||
@@ -9,7 +10,7 @@ export async function runNftCheck() {
|
||||
order,
|
||||
code,
|
||||
title,
|
||||
description: _('Checking nftables, please wait'),
|
||||
description: _('Checking, please wait'),
|
||||
state: 'loading',
|
||||
items: [],
|
||||
});
|
||||
@@ -24,7 +25,7 @@ export async function runNftCheck() {
|
||||
order,
|
||||
code,
|
||||
title,
|
||||
description: _('Cannot receive nftables checks result'),
|
||||
description: _('Cannot receive checks result'),
|
||||
state: 'error',
|
||||
items: [],
|
||||
});
|
||||
@@ -54,26 +55,14 @@ export async function runNftCheck() {
|
||||
Boolean(data.rules_proxy_counters) ||
|
||||
!data.rules_other_mark_exist;
|
||||
|
||||
function getStatus() {
|
||||
if (allGood) {
|
||||
return 'success';
|
||||
}
|
||||
|
||||
if (atLeastOneGood) {
|
||||
return 'warning';
|
||||
}
|
||||
|
||||
return 'error';
|
||||
}
|
||||
const { state, description } = getMeta({ atLeastOneGood, allGood });
|
||||
|
||||
updateCheckStore({
|
||||
order,
|
||||
code,
|
||||
title,
|
||||
description: allGood
|
||||
? _('Nftables checks passed')
|
||||
: _('Nftables checks partially passed'),
|
||||
state: getStatus(),
|
||||
description,
|
||||
state,
|
||||
items: [
|
||||
{
|
||||
state: data.table_exist ? 'success' : 'error',
|
||||
|
||||
@@ -0,0 +1,131 @@
|
||||
import { DIAGNOSTICS_CHECKS_MAP } from './contstants';
|
||||
import { PodkopShellMethods } from '../../../methods';
|
||||
import { updateCheckStore } from './updateCheckStore';
|
||||
import { getMeta } from '../helpers/getMeta';
|
||||
import { getDashboardSections } from '../../../methods/custom/getDashboardSections';
|
||||
import { IDiagnosticsChecksItem } from '../../../services';
|
||||
|
||||
export async function runSectionsCheck() {
|
||||
const { order, title, code } = DIAGNOSTICS_CHECKS_MAP.OUTBOUNDS;
|
||||
|
||||
updateCheckStore({
|
||||
order,
|
||||
code,
|
||||
title,
|
||||
description: _('Checking, please wait'),
|
||||
state: 'loading',
|
||||
items: [],
|
||||
});
|
||||
|
||||
const sections = await getDashboardSections();
|
||||
|
||||
if (!sections.success) {
|
||||
updateCheckStore({
|
||||
order,
|
||||
code,
|
||||
title,
|
||||
description: _('Cannot receive checks result'),
|
||||
state: 'error',
|
||||
items: [],
|
||||
});
|
||||
|
||||
throw new Error('Sections checks failed');
|
||||
}
|
||||
|
||||
const items = (await Promise.all(
|
||||
sections.data.map(async (section) => {
|
||||
async function getLatency() {
|
||||
if (section.withTagSelect) {
|
||||
const latencyGroup = await PodkopShellMethods.getClashApiGroupLatency(
|
||||
section.code,
|
||||
);
|
||||
|
||||
const selectedOutbound = section.outbounds.find(
|
||||
(item) => item.selected,
|
||||
);
|
||||
const isUrlTest = selectedOutbound?.type === 'URLTest';
|
||||
|
||||
const success = latencyGroup.success && !latencyGroup.data.message;
|
||||
|
||||
if (success) {
|
||||
if (isUrlTest) {
|
||||
const latency = Object.values(latencyGroup.data)
|
||||
.map((item) => (item ? `${item}ms` : 'n/a'))
|
||||
.join(' / ');
|
||||
|
||||
return {
|
||||
success: true,
|
||||
latency: `[${_('Fastest')}] ${latency}`,
|
||||
};
|
||||
}
|
||||
|
||||
const selectedProxyDelay =
|
||||
latencyGroup.data?.[selectedOutbound?.code ?? ''];
|
||||
|
||||
if (selectedProxyDelay) {
|
||||
return {
|
||||
success: true,
|
||||
latency: `[${selectedOutbound?.code ?? ''}] ${selectedProxyDelay}ms`,
|
||||
};
|
||||
}
|
||||
|
||||
return {
|
||||
success: false,
|
||||
latency: `[${selectedOutbound?.code ?? ''}] ${_('Not responding')}`,
|
||||
};
|
||||
}
|
||||
|
||||
return {
|
||||
success: false,
|
||||
latency: _('Not responding'),
|
||||
};
|
||||
}
|
||||
|
||||
const latencyProxy = await PodkopShellMethods.getClashApiProxyLatency(
|
||||
section.code,
|
||||
);
|
||||
|
||||
const success = latencyProxy.success && !latencyProxy.data.message;
|
||||
|
||||
if (success) {
|
||||
return {
|
||||
success: true,
|
||||
latency: `${latencyProxy.data.delay} ms`,
|
||||
};
|
||||
}
|
||||
|
||||
return {
|
||||
success: false,
|
||||
latency: _('Not responding'),
|
||||
};
|
||||
}
|
||||
|
||||
const { latency, success } = await getLatency();
|
||||
|
||||
return {
|
||||
state: success ? 'success' : 'error',
|
||||
key: section.displayName,
|
||||
value: latency,
|
||||
};
|
||||
}),
|
||||
)) as Array<IDiagnosticsChecksItem>;
|
||||
|
||||
const allGood = items.every((item) => item.state === 'success');
|
||||
|
||||
const atLeastOneGood = items.some((item) => item.state === 'success');
|
||||
|
||||
const { state, description } = getMeta({ atLeastOneGood, allGood });
|
||||
|
||||
updateCheckStore({
|
||||
order,
|
||||
code,
|
||||
title,
|
||||
description,
|
||||
state,
|
||||
items,
|
||||
});
|
||||
|
||||
if (!atLeastOneGood) {
|
||||
throw new Error('Sections checks failed');
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
import { DIAGNOSTICS_CHECKS_MAP } from './contstants';
|
||||
import { PodkopShellMethods } from '../../../methods';
|
||||
import { updateCheckStore } from './updateCheckStore';
|
||||
import { getMeta } from '../helpers/getMeta';
|
||||
|
||||
export async function runSingBoxCheck() {
|
||||
const { order, title, code } = DIAGNOSTICS_CHECKS_MAP.SINGBOX;
|
||||
@@ -9,7 +10,7 @@ export async function runSingBoxCheck() {
|
||||
order,
|
||||
code,
|
||||
title,
|
||||
description: _('Checking sing-box, please wait'),
|
||||
description: _('Checking, please wait'),
|
||||
state: 'loading',
|
||||
items: [],
|
||||
});
|
||||
@@ -21,7 +22,7 @@ export async function runSingBoxCheck() {
|
||||
order,
|
||||
code,
|
||||
title,
|
||||
description: _('Cannot receive Sing-box checks result'),
|
||||
description: _('Cannot receive checks result'),
|
||||
state: 'error',
|
||||
items: [],
|
||||
});
|
||||
@@ -47,24 +48,14 @@ export async function runSingBoxCheck() {
|
||||
Boolean(data.sing_box_process_running) ||
|
||||
Boolean(data.sing_box_ports_listening);
|
||||
|
||||
function getStatus() {
|
||||
if (allGood) {
|
||||
return 'success';
|
||||
}
|
||||
|
||||
if (atLeastOneGood) {
|
||||
return 'warning';
|
||||
}
|
||||
|
||||
return 'error';
|
||||
}
|
||||
const { state, description } = getMeta({ atLeastOneGood, allGood });
|
||||
|
||||
updateCheckStore({
|
||||
order,
|
||||
code,
|
||||
title,
|
||||
description: _('Sing-box checks passed'),
|
||||
state: getStatus(),
|
||||
description,
|
||||
state,
|
||||
items: [
|
||||
{
|
||||
state: data.sing_box_installed ? 'success' : 'error',
|
||||
|
||||
@@ -72,6 +72,14 @@ export const initialDiagnosticStore: Pick<
|
||||
items: [],
|
||||
state: 'skipped',
|
||||
},
|
||||
{
|
||||
code: DIAGNOSTICS_CHECKS.OUTBOUNDS,
|
||||
title: DIAGNOSTICS_CHECKS_MAP.OUTBOUNDS.title,
|
||||
order: DIAGNOSTICS_CHECKS_MAP.OUTBOUNDS.order,
|
||||
description: _('Not running'),
|
||||
items: [],
|
||||
state: 'skipped',
|
||||
},
|
||||
{
|
||||
code: DIAGNOSTICS_CHECKS.FAKEIP,
|
||||
title: DIAGNOSTICS_CHECKS_MAP.FAKEIP.title,
|
||||
@@ -92,7 +100,7 @@ export const loadingDiagnosticsChecksStore: Pick<
|
||||
code: DIAGNOSTICS_CHECKS.DNS,
|
||||
title: DIAGNOSTICS_CHECKS_MAP.DNS.title,
|
||||
order: DIAGNOSTICS_CHECKS_MAP.DNS.order,
|
||||
description: _('Queued'),
|
||||
description: _('Pending'),
|
||||
items: [],
|
||||
state: 'skipped',
|
||||
},
|
||||
@@ -100,7 +108,7 @@ export const loadingDiagnosticsChecksStore: Pick<
|
||||
code: DIAGNOSTICS_CHECKS.SINGBOX,
|
||||
title: DIAGNOSTICS_CHECKS_MAP.SINGBOX.title,
|
||||
order: DIAGNOSTICS_CHECKS_MAP.SINGBOX.order,
|
||||
description: _('Queued'),
|
||||
description: _('Pending'),
|
||||
items: [],
|
||||
state: 'skipped',
|
||||
},
|
||||
@@ -108,7 +116,15 @@ export const loadingDiagnosticsChecksStore: Pick<
|
||||
code: DIAGNOSTICS_CHECKS.NFT,
|
||||
title: DIAGNOSTICS_CHECKS_MAP.NFT.title,
|
||||
order: DIAGNOSTICS_CHECKS_MAP.NFT.order,
|
||||
description: _('Queued'),
|
||||
description: _('Pending'),
|
||||
items: [],
|
||||
state: 'skipped',
|
||||
},
|
||||
{
|
||||
code: DIAGNOSTICS_CHECKS.OUTBOUNDS,
|
||||
title: DIAGNOSTICS_CHECKS_MAP.OUTBOUNDS.title,
|
||||
order: DIAGNOSTICS_CHECKS_MAP.OUTBOUNDS.order,
|
||||
description: _('Pending'),
|
||||
items: [],
|
||||
state: 'skipped',
|
||||
},
|
||||
@@ -116,7 +132,7 @@ export const loadingDiagnosticsChecksStore: Pick<
|
||||
code: DIAGNOSTICS_CHECKS.FAKEIP,
|
||||
title: DIAGNOSTICS_CHECKS_MAP.FAKEIP.title,
|
||||
order: DIAGNOSTICS_CHECKS_MAP.FAKEIP.order,
|
||||
description: _('Queued'),
|
||||
description: _('Pending'),
|
||||
items: [],
|
||||
state: 'skipped',
|
||||
},
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
export function getCheckTitle(name: string) {
|
||||
return `${name} ${_('checks')}`;
|
||||
}
|
||||
28
fe-app-podkop/src/podkop/tabs/diagnostic/helpers/getMeta.ts
Normal file
28
fe-app-podkop/src/podkop/tabs/diagnostic/helpers/getMeta.ts
Normal file
@@ -0,0 +1,28 @@
|
||||
interface IGetMetaProps {
|
||||
allGood: boolean;
|
||||
atLeastOneGood: boolean;
|
||||
}
|
||||
|
||||
export function getMeta({ allGood, atLeastOneGood }: IGetMetaProps): {
|
||||
description: string;
|
||||
state: 'loading' | 'warning' | 'success' | 'error' | 'skipped';
|
||||
} {
|
||||
if (allGood) {
|
||||
return {
|
||||
state: 'success',
|
||||
description: _('Checks passed'),
|
||||
};
|
||||
}
|
||||
|
||||
if (atLeastOneGood) {
|
||||
return {
|
||||
state: 'warning',
|
||||
description: _('Issues detected'),
|
||||
};
|
||||
}
|
||||
|
||||
return {
|
||||
state: 'error',
|
||||
description: _('Checks failed'),
|
||||
};
|
||||
}
|
||||
@@ -16,6 +16,10 @@ import { PodkopShellMethods } from '../../methods';
|
||||
import { fetchServicesInfo } from '../../fetchers';
|
||||
import { normalizeCompiledVersion } from '../../../helpers/normalizeCompiledVersion';
|
||||
import { renderModal } from '../../../partials';
|
||||
import { PODKOP_LUCI_APP_VERSION } from '../../../constants';
|
||||
import { showToast } from '../../../helpers/showToast';
|
||||
import { renderWikiDisclaimer } from './partials/renderWikiDisclaimer';
|
||||
import { runSectionsCheck } from './checks/runSectionsCheck';
|
||||
|
||||
async function fetchSystemInfo() {
|
||||
const systemInfo = await PodkopShellMethods.getSystemInfo();
|
||||
@@ -218,9 +222,13 @@ async function handleShowGlobalCheck() {
|
||||
_('Global check'),
|
||||
renderModal(globalCheck.data as string, 'global_check'),
|
||||
);
|
||||
} else {
|
||||
logger.error('[DIAGNOSTIC]', 'handleShowGlobalCheck - e', globalCheck);
|
||||
showToast(_('Failed to execute!'), 'error');
|
||||
}
|
||||
} catch (e) {
|
||||
logger.error('[DIAGNOSTIC]', 'handleShowGlobalCheck - e', e);
|
||||
showToast(_('Failed to execute!'), 'error');
|
||||
} finally {
|
||||
store.set({
|
||||
diagnosticsActions: {
|
||||
@@ -248,9 +256,13 @@ async function handleViewLogs() {
|
||||
_('View logs'),
|
||||
renderModal(viewLogs.data as string, 'view_logs'),
|
||||
);
|
||||
} else {
|
||||
logger.error('[DIAGNOSTIC]', 'handleViewLogs - e', viewLogs);
|
||||
showToast(_('Failed to execute!'), 'error');
|
||||
}
|
||||
} catch (e) {
|
||||
logger.error('[DIAGNOSTIC]', 'handleViewLogs - e', e);
|
||||
showToast(_('Failed to execute!'), 'error');
|
||||
} finally {
|
||||
store.set({
|
||||
diagnosticsActions: {
|
||||
@@ -278,9 +290,17 @@ async function handleShowSingBoxConfig() {
|
||||
_('Show sing-box config'),
|
||||
renderModal(showSingBoxConfig.data as string, 'show_sing_box_config'),
|
||||
);
|
||||
} else {
|
||||
logger.error(
|
||||
'[DIAGNOSTIC]',
|
||||
'handleShowSingBoxConfig - e',
|
||||
showSingBoxConfig,
|
||||
);
|
||||
showToast(_('Failed to execute!'), 'error');
|
||||
}
|
||||
} catch (e) {
|
||||
logger.error('[DIAGNOSTIC]', 'handleShowSingBoxConfig - e', e);
|
||||
showToast(_('Failed to execute!'), 'error');
|
||||
} finally {
|
||||
store.set({
|
||||
diagnosticsActions: {
|
||||
@@ -291,6 +311,30 @@ async function handleShowSingBoxConfig() {
|
||||
}
|
||||
}
|
||||
|
||||
function renderWikiDisclaimerWidget() {
|
||||
const diagnosticsChecks = store.get().diagnosticsChecks;
|
||||
|
||||
function getWikiKind() {
|
||||
const allResults = diagnosticsChecks.map((check) => check.state);
|
||||
|
||||
if (allResults.includes('error')) {
|
||||
return 'error';
|
||||
}
|
||||
|
||||
if (allResults.includes('warning')) {
|
||||
return 'warning';
|
||||
}
|
||||
|
||||
return 'default';
|
||||
}
|
||||
|
||||
const container = document.getElementById('pdk_diagnostic-page-wiki');
|
||||
|
||||
return preserveScrollForPage(() => {
|
||||
container!.replaceChildren(renderWikiDisclaimer(getWikiKind()));
|
||||
});
|
||||
}
|
||||
|
||||
function renderDiagnosticAvailableActionsWidget() {
|
||||
const diagnosticsActions = store.get().diagnosticsActions;
|
||||
const servicesInfoWidget = store.get().servicesInfoWidget;
|
||||
@@ -387,6 +431,11 @@ function renderDiagnosticSystemInfoWidget() {
|
||||
}
|
||||
|
||||
if (version !== `v${diagnosticsSystemInfo.podkop_latest_version}`) {
|
||||
logger.debug(
|
||||
'[DIAGNOSTIC]',
|
||||
'diagnosticsSystemInfo',
|
||||
diagnosticsSystemInfo,
|
||||
);
|
||||
return {
|
||||
key: 'Podkop',
|
||||
value: version,
|
||||
@@ -412,7 +461,7 @@ function renderDiagnosticSystemInfoWidget() {
|
||||
getPodkopVersionRow(),
|
||||
{
|
||||
key: 'Luci App',
|
||||
value: normalizeCompiledVersion(diagnosticsSystemInfo.luci_app_version),
|
||||
value: normalizeCompiledVersion(PODKOP_LUCI_APP_VERSION),
|
||||
},
|
||||
{
|
||||
key: 'Sing-box',
|
||||
@@ -441,6 +490,7 @@ async function onStoreUpdate(
|
||||
) {
|
||||
if (diff.diagnosticsChecks) {
|
||||
renderDiagnosticsChecks();
|
||||
renderWikiDisclaimerWidget();
|
||||
}
|
||||
|
||||
if (diff.diagnosticsRunAction) {
|
||||
@@ -469,6 +519,8 @@ async function runChecks() {
|
||||
|
||||
await runNftCheck();
|
||||
|
||||
await runSectionsCheck();
|
||||
|
||||
await runFakeIPCheck();
|
||||
} catch (e) {
|
||||
logger.error('[DIAGNOSTIC]', 'runChecks - e', e);
|
||||
@@ -496,6 +548,9 @@ function onPageMount() {
|
||||
// Initial system info render
|
||||
renderDiagnosticSystemInfoWidget();
|
||||
|
||||
// Initial Wiki disclaimer render
|
||||
renderWikiDisclaimerWidget();
|
||||
|
||||
// Initial services info fetch
|
||||
fetchServicesInfo();
|
||||
|
||||
|
||||
@@ -40,7 +40,7 @@ export function renderAvailableActions({
|
||||
showSingBoxConfig,
|
||||
}: IRenderAvailableActionsProps) {
|
||||
return E('div', { class: 'pdk_diagnostic-page__right-bar__actions' }, [
|
||||
E('b', {}, 'Available actions'),
|
||||
E('b', {}, _('Available actions')),
|
||||
...insertIf(restart.visible, [
|
||||
renderButton({
|
||||
classNames: ['cbi-button-apply'],
|
||||
|
||||
@@ -18,7 +18,7 @@ export function renderSystemInfo({ items }: IRenderSystemInfoProps) {
|
||||
E(
|
||||
'b',
|
||||
{ class: 'pdk_diagnostic-page__right-bar__system-info__title' },
|
||||
'System information',
|
||||
_('System information'),
|
||||
),
|
||||
...items.map((item) => {
|
||||
const tagClass = [
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
import { renderBookOpenTextIcon24 } from '../../../../icons';
|
||||
import { renderButton } from '../../../../partials';
|
||||
import { insertIf } from '../../../../helpers';
|
||||
|
||||
export function renderWikiDisclaimer(kind: 'default' | 'error' | 'warning') {
|
||||
const iconWrap = E('span', {
|
||||
class: 'pdk_diagnostic-page__right-bar__wiki__icon',
|
||||
});
|
||||
iconWrap.appendChild(renderBookOpenTextIcon24());
|
||||
|
||||
const className = [
|
||||
'pdk_diagnostic-page__right-bar__wiki',
|
||||
...insertIf(kind === 'error', [
|
||||
'pdk_diagnostic-page__right-bar__wiki--error',
|
||||
]),
|
||||
...insertIf(kind === 'warning', [
|
||||
'pdk_diagnostic-page__right-bar__wiki--warning',
|
||||
]),
|
||||
].join(' ');
|
||||
|
||||
return E('div', { class: className }, [
|
||||
E('div', { class: 'pdk_diagnostic-page__right-bar__wiki__content' }, [
|
||||
iconWrap,
|
||||
E('div', { class: 'pdk_diagnostic-page__right-bar__wiki__texts' }, [
|
||||
E('b', {}, _('Troubleshooting')),
|
||||
E('div', {}, _('Do not panic, everything can be fixed, just...')),
|
||||
]),
|
||||
]),
|
||||
renderButton({
|
||||
classNames: ['cbi-button-save'],
|
||||
text: _('Visit Wiki'),
|
||||
onClick: () =>
|
||||
window.open(
|
||||
'https://podkop.net/docs/troubleshooting/?utm_source=podkop',
|
||||
'_blank',
|
||||
'noopener,noreferrer',
|
||||
),
|
||||
}),
|
||||
]);
|
||||
}
|
||||
@@ -8,6 +8,7 @@ export function render() {
|
||||
}),
|
||||
]),
|
||||
E('div', { class: 'pdk_diagnostic-page__right-bar' }, [
|
||||
E('div', { id: 'pdk_diagnostic-page-wiki' }),
|
||||
E('div', { id: 'pdk_diagnostic-page-actions' }),
|
||||
E('div', { id: 'pdk_diagnostic-page-system-info' }),
|
||||
]),
|
||||
|
||||
@@ -28,6 +28,31 @@ export const styles = `
|
||||
grid-row-gap: 10px;
|
||||
}
|
||||
|
||||
.pdk_diagnostic-page__right-bar__wiki {
|
||||
border: 2px var(--background-color-low, lightgray) solid;
|
||||
border-radius: 4px;
|
||||
padding: 10px;
|
||||
|
||||
display: grid;
|
||||
grid-template-columns: auto;
|
||||
grid-row-gap: 10px;
|
||||
}
|
||||
|
||||
.pdk_diagnostic-page__right-bar__wiki--warning {
|
||||
border: 2px var(--warn-color-medium, orange) solid;
|
||||
}
|
||||
.pdk_diagnostic-page__right-bar__wiki--error {
|
||||
border: 2px var(--error-color-medium, red) solid;
|
||||
}
|
||||
|
||||
.pdk_diagnostic-page__right-bar__wiki__content {
|
||||
display: grid;
|
||||
grid-template-columns: 1fr 5fr;
|
||||
grid-column-gap: 10px;
|
||||
}
|
||||
|
||||
.pdk_diagnostic-page__right-bar__wiki__texts {}
|
||||
|
||||
.pdk_diagnostic-page__right-bar__actions {
|
||||
border: 2px var(--background-color-low, lightgray) solid;
|
||||
border-radius: 4px;
|
||||
|
||||
@@ -196,4 +196,11 @@ export namespace Podkop {
|
||||
openwrt_version: string;
|
||||
device_model: string;
|
||||
}
|
||||
|
||||
export interface GetClashApiProxyLatency {
|
||||
delay: number;
|
||||
message?: string;
|
||||
}
|
||||
|
||||
export type GetClashApiGroupLatency = Record<string, number>;
|
||||
}
|
||||
|
||||
@@ -3,7 +3,18 @@ import { validateDNS } from '../validateDns.js';
|
||||
import { invalidIPs, validIPs } from './validateIp.test';
|
||||
import { invalidDomains, validDomains } from './validateDomain.test';
|
||||
|
||||
const validDns = [...validIPs, ...validDomains];
|
||||
export const additionalValidDns = [
|
||||
['Google DNS (port 53)', '8.8.8.8:53'],
|
||||
['Google DNS (port 5353)', '8.8.8.8:5353'],
|
||||
['Cloudflare DNS (port 853)', '1.1.1.1:853'],
|
||||
['Cloudflare domain (port 853)', 'cloudflare-dns.com:853'],
|
||||
['DoH IP', '1.1.1.1/dns-query'],
|
||||
['DoH IP with port 443', '1.1.1.1:443/dns-query'],
|
||||
['DoH domain', 'cloudflare-dns.com/dns-query'],
|
||||
['DoH domain with port 443', 'cloudflare-dns.com:443/dns-query'],
|
||||
];
|
||||
|
||||
const validDns = [...validIPs, ...validDomains, ...additionalValidDns];
|
||||
|
||||
const invalidDns = [...invalidIPs, ...invalidDomains];
|
||||
|
||||
|
||||
@@ -7,11 +7,14 @@ export function validateDNS(value: string): ValidationResult {
|
||||
return { valid: false, message: _('DNS server address cannot be empty') };
|
||||
}
|
||||
|
||||
if (validateIPV4(value).valid) {
|
||||
const cleanedValueWithoutPort = value.replace(/:(\d+)(?=\/|$)/, '');
|
||||
const cleanedIpWithoutPath = cleanedValueWithoutPort.split('/')[0];
|
||||
|
||||
if (validateIPV4(cleanedIpWithoutPath).valid) {
|
||||
return { valid: true, message: _('Valid') };
|
||||
}
|
||||
|
||||
if (validateDomain(value).valid) {
|
||||
if (validateDomain(cleanedValueWithoutPort).valid) {
|
||||
return { valid: true, message: _('Valid') };
|
||||
}
|
||||
|
||||
|
||||
@@ -6,20 +6,22 @@ import { validateSocksUrl } from './validateSocksUrl';
|
||||
|
||||
// TODO refactor current validation and add tests
|
||||
export function validateProxyUrl(url: string): ValidationResult {
|
||||
if (url.startsWith('ss://')) {
|
||||
return validateShadowsocksUrl(url);
|
||||
const trimmedUrl = url.trim();
|
||||
|
||||
if (trimmedUrl.startsWith('ss://')) {
|
||||
return validateShadowsocksUrl(trimmedUrl);
|
||||
}
|
||||
|
||||
if (url.startsWith('vless://')) {
|
||||
return validateVlessUrl(url);
|
||||
if (trimmedUrl.startsWith('vless://')) {
|
||||
return validateVlessUrl(trimmedUrl);
|
||||
}
|
||||
|
||||
if (url.startsWith('trojan://')) {
|
||||
return validateTrojanUrl(url);
|
||||
if (trimmedUrl.startsWith('trojan://')) {
|
||||
return validateTrojanUrl(trimmedUrl);
|
||||
}
|
||||
|
||||
if (/^socks(4|4a|5):\/\//.test(url)) {
|
||||
return validateSocksUrl(url);
|
||||
if (/^socks(4|4a|5):\/\//.test(trimmedUrl)) {
|
||||
return validateSocksUrl(trimmedUrl);
|
||||
}
|
||||
|
||||
return {
|
||||
|
||||
@@ -43,7 +43,8 @@ export function validateVlessUrl(url: string): ValidationResult {
|
||||
if (!port)
|
||||
return { valid: false, message: 'Invalid VLESS URL: missing port' };
|
||||
|
||||
const portNum = Number(port);
|
||||
const cleanedPort = port.replace('/', '');
|
||||
const portNum = Number(cleanedPort);
|
||||
if (!Number.isInteger(portNum) || portNum < 1 || portNum > 65535)
|
||||
return {
|
||||
valid: false,
|
||||
|
||||
@@ -90,6 +90,7 @@ update_config() {
|
||||
mv /etc/config/podkop /etc/config/podkop-070
|
||||
wget -O /etc/config/podkop https://raw.githubusercontent.com/itdoginfo/podkop/refs/heads/main/podkop/files/etc/config/podkop
|
||||
msg "Podkop config has been reset to default. Your old config saved in /etc/config/podkop-070"
|
||||
break
|
||||
;;
|
||||
*)
|
||||
msg "Exit"
|
||||
|
||||
@@ -40,10 +40,12 @@ function validateDNS(value) {
|
||||
if (!value) {
|
||||
return { valid: false, message: _("DNS server address cannot be empty") };
|
||||
}
|
||||
if (validateIPV4(value).valid) {
|
||||
const cleanedValueWithoutPort = value.replace(/:(\d+)(?=\/|$)/, "");
|
||||
const cleanedIpWithoutPath = cleanedValueWithoutPort.split("/")[0];
|
||||
if (validateIPV4(cleanedIpWithoutPath).valid) {
|
||||
return { valid: true, message: _("Valid") };
|
||||
}
|
||||
if (validateDomain(value).valid) {
|
||||
if (validateDomain(cleanedValueWithoutPort).valid) {
|
||||
return { valid: true, message: _("Valid") };
|
||||
}
|
||||
return {
|
||||
@@ -259,7 +261,8 @@ function validateVlessUrl(url) {
|
||||
return { valid: false, message: "Invalid VLESS URL: missing hostname" };
|
||||
if (!port)
|
||||
return { valid: false, message: "Invalid VLESS URL: missing port" };
|
||||
const portNum = Number(port);
|
||||
const cleanedPort = port.replace("/", "");
|
||||
const portNum = Number(cleanedPort);
|
||||
if (!Number.isInteger(portNum) || portNum < 1 || portNum > 65535)
|
||||
return {
|
||||
valid: false,
|
||||
@@ -451,17 +454,18 @@ function validateSocksUrl(url) {
|
||||
|
||||
// src/validators/validateProxyUrl.ts
|
||||
function validateProxyUrl(url) {
|
||||
if (url.startsWith("ss://")) {
|
||||
return validateShadowsocksUrl(url);
|
||||
const trimmedUrl = url.trim();
|
||||
if (trimmedUrl.startsWith("ss://")) {
|
||||
return validateShadowsocksUrl(trimmedUrl);
|
||||
}
|
||||
if (url.startsWith("vless://")) {
|
||||
return validateVlessUrl(url);
|
||||
if (trimmedUrl.startsWith("vless://")) {
|
||||
return validateVlessUrl(trimmedUrl);
|
||||
}
|
||||
if (url.startsWith("trojan://")) {
|
||||
return validateTrojanUrl(url);
|
||||
if (trimmedUrl.startsWith("trojan://")) {
|
||||
return validateTrojanUrl(trimmedUrl);
|
||||
}
|
||||
if (/^socks(4|4a|5):\/\//.test(url)) {
|
||||
return validateSocksUrl(url);
|
||||
if (/^socks(4|4a|5):\/\//.test(trimmedUrl)) {
|
||||
return validateSocksUrl(trimmedUrl);
|
||||
}
|
||||
return {
|
||||
valid: false,
|
||||
@@ -486,7 +490,7 @@ async function callBaseMethod(method, args = [], command = "/usr/bin/podkop") {
|
||||
const response = await executeShellCommand({
|
||||
command,
|
||||
args: [method, ...args],
|
||||
timeout: 1e4
|
||||
timeout: 15e3
|
||||
});
|
||||
if (response.stdout) {
|
||||
try {
|
||||
@@ -559,14 +563,14 @@ var PodkopShellMethods = {
|
||||
getClashApiProxies: async () => callBaseMethod(Podkop.AvailableMethods.CLASH_API, [
|
||||
Podkop.AvailableClashAPIMethods.GET_PROXIES
|
||||
]),
|
||||
getClashApiProxyLatency: async (tag) => callBaseMethod(Podkop.AvailableMethods.CLASH_API, [
|
||||
Podkop.AvailableClashAPIMethods.GET_PROXY_LATENCY,
|
||||
tag
|
||||
]),
|
||||
getClashApiGroupLatency: async (tag) => callBaseMethod(Podkop.AvailableMethods.CLASH_API, [
|
||||
Podkop.AvailableClashAPIMethods.GET_GROUP_LATENCY,
|
||||
tag
|
||||
]),
|
||||
getClashApiProxyLatency: async (tag) => callBaseMethod(
|
||||
Podkop.AvailableMethods.CLASH_API,
|
||||
[Podkop.AvailableClashAPIMethods.GET_PROXY_LATENCY, tag]
|
||||
),
|
||||
getClashApiGroupLatency: async (tag) => callBaseMethod(
|
||||
Podkop.AvailableMethods.CLASH_API,
|
||||
[Podkop.AvailableClashAPIMethods.GET_GROUP_LATENCY, tag]
|
||||
),
|
||||
setClashApiGroupProxy: async (group, proxy) => callBaseMethod(Podkop.AvailableMethods.CLASH_API, [
|
||||
Podkop.AvailableClashAPIMethods.SET_GROUP_PROXY,
|
||||
group,
|
||||
@@ -978,26 +982,36 @@ var TabService = class _TabService {
|
||||
};
|
||||
var TabServiceInstance = TabService.getInstance();
|
||||
|
||||
// src/podkop/tabs/diagnostic/helpers/getCheckTitle.ts
|
||||
function getCheckTitle(name) {
|
||||
return `${name} ${_("checks")}`;
|
||||
}
|
||||
|
||||
// src/podkop/tabs/diagnostic/checks/contstants.ts
|
||||
var DIAGNOSTICS_CHECKS_MAP = {
|
||||
["DNS" /* DNS */]: {
|
||||
order: 1,
|
||||
title: _("DNS checks"),
|
||||
title: getCheckTitle("DNS"),
|
||||
code: "DNS" /* DNS */
|
||||
},
|
||||
["SINGBOX" /* SINGBOX */]: {
|
||||
order: 2,
|
||||
title: _("Sing-box checks"),
|
||||
title: getCheckTitle("Sing-box"),
|
||||
code: "SINGBOX" /* SINGBOX */
|
||||
},
|
||||
["NFT" /* NFT */]: {
|
||||
order: 3,
|
||||
title: _("Nftables checks"),
|
||||
title: getCheckTitle("Nftables"),
|
||||
code: "NFT" /* NFT */
|
||||
},
|
||||
["FAKEIP" /* FAKEIP */]: {
|
||||
["OUTBOUNDS" /* OUTBOUNDS */]: {
|
||||
order: 4,
|
||||
title: _("FakeIP checks"),
|
||||
title: getCheckTitle("Outbounds"),
|
||||
code: "OUTBOUNDS" /* OUTBOUNDS */
|
||||
},
|
||||
["FAKEIP" /* FAKEIP */]: {
|
||||
order: 5,
|
||||
title: getCheckTitle("FakeIP"),
|
||||
code: "FAKEIP" /* FAKEIP */
|
||||
}
|
||||
};
|
||||
@@ -1065,6 +1079,14 @@ var initialDiagnosticStore = {
|
||||
items: [],
|
||||
state: "skipped"
|
||||
},
|
||||
{
|
||||
code: "OUTBOUNDS" /* OUTBOUNDS */,
|
||||
title: DIAGNOSTICS_CHECKS_MAP.OUTBOUNDS.title,
|
||||
order: DIAGNOSTICS_CHECKS_MAP.OUTBOUNDS.order,
|
||||
description: _("Not running"),
|
||||
items: [],
|
||||
state: "skipped"
|
||||
},
|
||||
{
|
||||
code: "FAKEIP" /* FAKEIP */,
|
||||
title: DIAGNOSTICS_CHECKS_MAP.FAKEIP.title,
|
||||
@@ -1081,7 +1103,7 @@ var loadingDiagnosticsChecksStore = {
|
||||
code: "DNS" /* DNS */,
|
||||
title: DIAGNOSTICS_CHECKS_MAP.DNS.title,
|
||||
order: DIAGNOSTICS_CHECKS_MAP.DNS.order,
|
||||
description: _("Queued"),
|
||||
description: _("Pending"),
|
||||
items: [],
|
||||
state: "skipped"
|
||||
},
|
||||
@@ -1089,7 +1111,7 @@ var loadingDiagnosticsChecksStore = {
|
||||
code: "SINGBOX" /* SINGBOX */,
|
||||
title: DIAGNOSTICS_CHECKS_MAP.SINGBOX.title,
|
||||
order: DIAGNOSTICS_CHECKS_MAP.SINGBOX.order,
|
||||
description: _("Queued"),
|
||||
description: _("Pending"),
|
||||
items: [],
|
||||
state: "skipped"
|
||||
},
|
||||
@@ -1097,7 +1119,15 @@ var loadingDiagnosticsChecksStore = {
|
||||
code: "NFT" /* NFT */,
|
||||
title: DIAGNOSTICS_CHECKS_MAP.NFT.title,
|
||||
order: DIAGNOSTICS_CHECKS_MAP.NFT.order,
|
||||
description: _("Queued"),
|
||||
description: _("Pending"),
|
||||
items: [],
|
||||
state: "skipped"
|
||||
},
|
||||
{
|
||||
code: "OUTBOUNDS" /* OUTBOUNDS */,
|
||||
title: DIAGNOSTICS_CHECKS_MAP.OUTBOUNDS.title,
|
||||
order: DIAGNOSTICS_CHECKS_MAP.OUTBOUNDS.order,
|
||||
description: _("Pending"),
|
||||
items: [],
|
||||
state: "skipped"
|
||||
},
|
||||
@@ -1105,7 +1135,7 @@ var loadingDiagnosticsChecksStore = {
|
||||
code: "FAKEIP" /* FAKEIP */,
|
||||
title: DIAGNOSTICS_CHECKS_MAP.FAKEIP.title,
|
||||
order: DIAGNOSTICS_CHECKS_MAP.FAKEIP.order,
|
||||
description: _("Queued"),
|
||||
description: _("Pending"),
|
||||
items: [],
|
||||
state: "skipped"
|
||||
}
|
||||
@@ -2335,6 +2365,7 @@ function render2() {
|
||||
})
|
||||
]),
|
||||
E("div", { class: "pdk_diagnostic-page__right-bar" }, [
|
||||
E("div", { id: "pdk_diagnostic-page-wiki" }),
|
||||
E("div", { id: "pdk_diagnostic-page-actions" }),
|
||||
E("div", { id: "pdk_diagnostic-page-system-info" })
|
||||
])
|
||||
@@ -2355,6 +2386,26 @@ function updateCheckStore(check, minified) {
|
||||
});
|
||||
}
|
||||
|
||||
// src/podkop/tabs/diagnostic/helpers/getMeta.ts
|
||||
function getMeta({ allGood, atLeastOneGood }) {
|
||||
if (allGood) {
|
||||
return {
|
||||
state: "success",
|
||||
description: _("Checks passed")
|
||||
};
|
||||
}
|
||||
if (atLeastOneGood) {
|
||||
return {
|
||||
state: "warning",
|
||||
description: _("Issues detected")
|
||||
};
|
||||
}
|
||||
return {
|
||||
state: "error",
|
||||
description: _("Checks failed")
|
||||
};
|
||||
}
|
||||
|
||||
// src/podkop/tabs/diagnostic/checks/runDnsCheck.ts
|
||||
async function runDnsCheck() {
|
||||
const { order, title, code } = DIAGNOSTICS_CHECKS_MAP.DNS;
|
||||
@@ -2362,7 +2413,7 @@ async function runDnsCheck() {
|
||||
order,
|
||||
code,
|
||||
title,
|
||||
description: _("Checking dns, please wait"),
|
||||
description: _("Checking, please wait"),
|
||||
state: "loading",
|
||||
items: []
|
||||
});
|
||||
@@ -2372,7 +2423,7 @@ async function runDnsCheck() {
|
||||
order,
|
||||
code,
|
||||
title,
|
||||
description: _("Cannot receive DNS checks result"),
|
||||
description: _("Cannot receive checks result"),
|
||||
state: "error",
|
||||
items: []
|
||||
});
|
||||
@@ -2381,24 +2432,16 @@ async function runDnsCheck() {
|
||||
const data = dnsChecks.data;
|
||||
const allGood = Boolean(data.dns_on_router) && Boolean(data.dhcp_config_status) && Boolean(data.bootstrap_dns_status) && Boolean(data.dns_status);
|
||||
const atLeastOneGood = Boolean(data.dns_on_router) || Boolean(data.dhcp_config_status) || Boolean(data.bootstrap_dns_status) || Boolean(data.dns_status);
|
||||
function getStatus() {
|
||||
if (allGood) {
|
||||
return "success";
|
||||
}
|
||||
if (atLeastOneGood) {
|
||||
return "warning";
|
||||
}
|
||||
return "error";
|
||||
}
|
||||
const { state, description } = getMeta({ atLeastOneGood, allGood });
|
||||
updateCheckStore({
|
||||
order,
|
||||
code,
|
||||
title,
|
||||
description: _("DNS checks passed"),
|
||||
state: getStatus(),
|
||||
description,
|
||||
state,
|
||||
items: [
|
||||
...insertIf(
|
||||
data.dns_type === "doh" || data.dns_type === "dot",
|
||||
data.dns_type === "doh" || data.dns_type === "dot" || !data.bootstrap_dns_status,
|
||||
[
|
||||
{
|
||||
state: data.bootstrap_dns_status ? "success" : "error",
|
||||
@@ -2436,7 +2479,7 @@ async function runSingBoxCheck() {
|
||||
order,
|
||||
code,
|
||||
title,
|
||||
description: _("Checking sing-box, please wait"),
|
||||
description: _("Checking, please wait"),
|
||||
state: "loading",
|
||||
items: []
|
||||
});
|
||||
@@ -2446,7 +2489,7 @@ async function runSingBoxCheck() {
|
||||
order,
|
||||
code,
|
||||
title,
|
||||
description: _("Cannot receive Sing-box checks result"),
|
||||
description: _("Cannot receive checks result"),
|
||||
state: "error",
|
||||
items: []
|
||||
});
|
||||
@@ -2455,21 +2498,13 @@ async function runSingBoxCheck() {
|
||||
const data = singBoxChecks.data;
|
||||
const allGood = Boolean(data.sing_box_installed) && Boolean(data.sing_box_version_ok) && Boolean(data.sing_box_service_exist) && Boolean(data.sing_box_autostart_disabled) && Boolean(data.sing_box_process_running) && Boolean(data.sing_box_ports_listening);
|
||||
const atLeastOneGood = Boolean(data.sing_box_installed) || Boolean(data.sing_box_version_ok) || Boolean(data.sing_box_service_exist) || Boolean(data.sing_box_autostart_disabled) || Boolean(data.sing_box_process_running) || Boolean(data.sing_box_ports_listening);
|
||||
function getStatus() {
|
||||
if (allGood) {
|
||||
return "success";
|
||||
}
|
||||
if (atLeastOneGood) {
|
||||
return "warning";
|
||||
}
|
||||
return "error";
|
||||
}
|
||||
const { state, description } = getMeta({ atLeastOneGood, allGood });
|
||||
updateCheckStore({
|
||||
order,
|
||||
code,
|
||||
title,
|
||||
description: _("Sing-box checks passed"),
|
||||
state: getStatus(),
|
||||
description,
|
||||
state,
|
||||
items: [
|
||||
{
|
||||
state: data.sing_box_installed ? "success" : "error",
|
||||
@@ -2515,7 +2550,7 @@ async function runNftCheck() {
|
||||
order,
|
||||
code,
|
||||
title,
|
||||
description: _("Checking nftables, please wait"),
|
||||
description: _("Checking, please wait"),
|
||||
state: "loading",
|
||||
items: []
|
||||
});
|
||||
@@ -2527,7 +2562,7 @@ async function runNftCheck() {
|
||||
order,
|
||||
code,
|
||||
title,
|
||||
description: _("Cannot receive nftables checks result"),
|
||||
description: _("Cannot receive checks result"),
|
||||
state: "error",
|
||||
items: []
|
||||
});
|
||||
@@ -2536,21 +2571,13 @@ async function runNftCheck() {
|
||||
const data = nftablesChecks.data;
|
||||
const allGood = Boolean(data.table_exist) && Boolean(data.rules_mangle_exist) && Boolean(data.rules_mangle_counters) && Boolean(data.rules_mangle_output_exist) && Boolean(data.rules_mangle_output_counters) && Boolean(data.rules_proxy_exist) && Boolean(data.rules_proxy_counters) && !data.rules_other_mark_exist;
|
||||
const atLeastOneGood = Boolean(data.table_exist) || Boolean(data.rules_mangle_exist) || Boolean(data.rules_mangle_counters) || Boolean(data.rules_mangle_output_exist) || Boolean(data.rules_mangle_output_counters) || Boolean(data.rules_proxy_exist) || Boolean(data.rules_proxy_counters) || !data.rules_other_mark_exist;
|
||||
function getStatus() {
|
||||
if (allGood) {
|
||||
return "success";
|
||||
}
|
||||
if (atLeastOneGood) {
|
||||
return "warning";
|
||||
}
|
||||
return "error";
|
||||
}
|
||||
const { state, description } = getMeta({ atLeastOneGood, allGood });
|
||||
updateCheckStore({
|
||||
order,
|
||||
code,
|
||||
title,
|
||||
description: allGood ? _("Nftables checks passed") : _("Nftables checks partially passed"),
|
||||
state: getStatus(),
|
||||
description,
|
||||
state,
|
||||
items: [
|
||||
{
|
||||
state: data.table_exist ? "success" : "error",
|
||||
@@ -2606,7 +2633,7 @@ async function runFakeIPCheck() {
|
||||
order,
|
||||
code,
|
||||
title,
|
||||
description: _("Checking FakeIP, please wait"),
|
||||
description: _("Checking, please wait"),
|
||||
state: "loading",
|
||||
items: []
|
||||
});
|
||||
@@ -2620,25 +2647,7 @@ async function runFakeIPCheck() {
|
||||
};
|
||||
const allGood = checks.router || checks.browserFakeIP || checks.differentIP;
|
||||
const atLeastOneGood = checks.router && checks.browserFakeIP && checks.differentIP;
|
||||
function getMeta() {
|
||||
if (allGood) {
|
||||
return {
|
||||
state: "success",
|
||||
description: _("FakeIP checks passed")
|
||||
};
|
||||
}
|
||||
if (atLeastOneGood) {
|
||||
return {
|
||||
state: "warning",
|
||||
description: _("FakeIP checks partially passed")
|
||||
};
|
||||
}
|
||||
return {
|
||||
state: "error",
|
||||
description: _("FakeIP checks failed")
|
||||
};
|
||||
}
|
||||
const { state, description } = getMeta();
|
||||
const { state, description } = getMeta({ atLeastOneGood, allGood });
|
||||
updateCheckStore({
|
||||
order,
|
||||
code,
|
||||
@@ -3211,6 +3220,34 @@ function renderSearchIcon24() {
|
||||
);
|
||||
}
|
||||
|
||||
// src/icons/renderBookOpenTextIcon24.ts
|
||||
function renderBookOpenTextIcon24() {
|
||||
const NS = "http://www.w3.org/2000/svg";
|
||||
return svgEl(
|
||||
"svg",
|
||||
{
|
||||
xmlns: NS,
|
||||
viewBox: "0 0 24 24",
|
||||
fill: "none",
|
||||
stroke: "currentColor",
|
||||
"stroke-width": "2",
|
||||
"stroke-linecap": "round",
|
||||
"stroke-linejoin": "round",
|
||||
class: "lucide lucide-book-open-text-icon lucide-book-open-text"
|
||||
},
|
||||
[
|
||||
svgEl("path", { d: "M12 7v14" }),
|
||||
svgEl("path", { d: "M16 12h2" }),
|
||||
svgEl("path", { d: "M16 8h2" }),
|
||||
svgEl("path", {
|
||||
d: "M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z"
|
||||
}),
|
||||
svgEl("path", { d: "M6 12h2" }),
|
||||
svgEl("path", { d: "M6 8h2" })
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
// src/partials/button/renderButton.ts
|
||||
function renderButton({
|
||||
classNames = [],
|
||||
@@ -3341,7 +3378,7 @@ function renderAvailableActions({
|
||||
showSingBoxConfig
|
||||
}) {
|
||||
return E("div", { class: "pdk_diagnostic-page__right-bar__actions" }, [
|
||||
E("b", {}, "Available actions"),
|
||||
E("b", {}, _("Available actions")),
|
||||
...insertIf(restart.visible, [
|
||||
renderButton({
|
||||
classNames: ["cbi-button-apply"],
|
||||
@@ -3599,7 +3636,7 @@ function renderSystemInfo({ items }) {
|
||||
E(
|
||||
"b",
|
||||
{ class: "pdk_diagnostic-page__right-bar__system-info__title" },
|
||||
"System information"
|
||||
_("System information")
|
||||
),
|
||||
...items.map((item) => {
|
||||
const tagClass = [
|
||||
@@ -3634,6 +3671,140 @@ function normalizeCompiledVersion(version) {
|
||||
return version;
|
||||
}
|
||||
|
||||
// src/podkop/tabs/diagnostic/partials/renderWikiDisclaimer.ts
|
||||
function renderWikiDisclaimer(kind) {
|
||||
const iconWrap = E("span", {
|
||||
class: "pdk_diagnostic-page__right-bar__wiki__icon"
|
||||
});
|
||||
iconWrap.appendChild(renderBookOpenTextIcon24());
|
||||
const className = [
|
||||
"pdk_diagnostic-page__right-bar__wiki",
|
||||
...insertIf(kind === "error", [
|
||||
"pdk_diagnostic-page__right-bar__wiki--error"
|
||||
]),
|
||||
...insertIf(kind === "warning", [
|
||||
"pdk_diagnostic-page__right-bar__wiki--warning"
|
||||
])
|
||||
].join(" ");
|
||||
return E("div", { class: className }, [
|
||||
E("div", { class: "pdk_diagnostic-page__right-bar__wiki__content" }, [
|
||||
iconWrap,
|
||||
E("div", { class: "pdk_diagnostic-page__right-bar__wiki__texts" }, [
|
||||
E("b", {}, _("Troubleshooting")),
|
||||
E("div", {}, _("Do not panic, everything can be fixed, just..."))
|
||||
])
|
||||
]),
|
||||
renderButton({
|
||||
classNames: ["cbi-button-save"],
|
||||
text: _("Visit Wiki"),
|
||||
onClick: () => window.open(
|
||||
"https://podkop.net/docs/troubleshooting/?utm_source=podkop",
|
||||
"_blank",
|
||||
"noopener,noreferrer"
|
||||
)
|
||||
})
|
||||
]);
|
||||
}
|
||||
|
||||
// src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts
|
||||
async function runSectionsCheck() {
|
||||
const { order, title, code } = DIAGNOSTICS_CHECKS_MAP.OUTBOUNDS;
|
||||
updateCheckStore({
|
||||
order,
|
||||
code,
|
||||
title,
|
||||
description: _("Checking, please wait"),
|
||||
state: "loading",
|
||||
items: []
|
||||
});
|
||||
const sections = await getDashboardSections();
|
||||
if (!sections.success) {
|
||||
updateCheckStore({
|
||||
order,
|
||||
code,
|
||||
title,
|
||||
description: _("Cannot receive checks result"),
|
||||
state: "error",
|
||||
items: []
|
||||
});
|
||||
throw new Error("Sections checks failed");
|
||||
}
|
||||
const items = await Promise.all(
|
||||
sections.data.map(async (section) => {
|
||||
async function getLatency() {
|
||||
if (section.withTagSelect) {
|
||||
const latencyGroup = await PodkopShellMethods.getClashApiGroupLatency(
|
||||
section.code
|
||||
);
|
||||
const selectedOutbound = section.outbounds.find(
|
||||
(item) => item.selected
|
||||
);
|
||||
const isUrlTest = selectedOutbound?.type === "URLTest";
|
||||
const success3 = latencyGroup.success && !latencyGroup.data.message;
|
||||
if (success3) {
|
||||
if (isUrlTest) {
|
||||
const latency2 = Object.values(latencyGroup.data).map((item) => item ? `${item}ms` : "n/a").join(" / ");
|
||||
return {
|
||||
success: true,
|
||||
latency: `[${_("Fastest")}] ${latency2}`
|
||||
};
|
||||
}
|
||||
const selectedProxyDelay = latencyGroup.data?.[selectedOutbound?.code ?? ""];
|
||||
if (selectedProxyDelay) {
|
||||
return {
|
||||
success: true,
|
||||
latency: `[${selectedOutbound?.code ?? ""}] ${selectedProxyDelay}ms`
|
||||
};
|
||||
}
|
||||
return {
|
||||
success: false,
|
||||
latency: `[${selectedOutbound?.code ?? ""}] ${_("Not responding")}`
|
||||
};
|
||||
}
|
||||
return {
|
||||
success: false,
|
||||
latency: _("Not responding")
|
||||
};
|
||||
}
|
||||
const latencyProxy = await PodkopShellMethods.getClashApiProxyLatency(
|
||||
section.code
|
||||
);
|
||||
const success2 = latencyProxy.success && !latencyProxy.data.message;
|
||||
if (success2) {
|
||||
return {
|
||||
success: true,
|
||||
latency: `${latencyProxy.data.delay} ms`
|
||||
};
|
||||
}
|
||||
return {
|
||||
success: false,
|
||||
latency: _("Not responding")
|
||||
};
|
||||
}
|
||||
const { latency, success } = await getLatency();
|
||||
return {
|
||||
state: success ? "success" : "error",
|
||||
key: section.displayName,
|
||||
value: latency
|
||||
};
|
||||
})
|
||||
);
|
||||
const allGood = items.every((item) => item.state === "success");
|
||||
const atLeastOneGood = items.some((item) => item.state === "success");
|
||||
const { state, description } = getMeta({ atLeastOneGood, allGood });
|
||||
updateCheckStore({
|
||||
order,
|
||||
code,
|
||||
title,
|
||||
description,
|
||||
state,
|
||||
items
|
||||
});
|
||||
if (!atLeastOneGood) {
|
||||
throw new Error("Sections checks failed");
|
||||
}
|
||||
}
|
||||
|
||||
// src/podkop/tabs/diagnostic/initController.ts
|
||||
async function fetchSystemInfo() {
|
||||
const systemInfo = await PodkopShellMethods.getSystemInfo();
|
||||
@@ -3813,9 +3984,13 @@ async function handleShowGlobalCheck() {
|
||||
_("Global check"),
|
||||
renderModal(globalCheck.data, "global_check")
|
||||
);
|
||||
} else {
|
||||
logger.error("[DIAGNOSTIC]", "handleShowGlobalCheck - e", globalCheck);
|
||||
showToast(_("Failed to execute!"), "error");
|
||||
}
|
||||
} catch (e) {
|
||||
logger.error("[DIAGNOSTIC]", "handleShowGlobalCheck - e", e);
|
||||
showToast(_("Failed to execute!"), "error");
|
||||
} finally {
|
||||
store.set({
|
||||
diagnosticsActions: {
|
||||
@@ -3840,9 +4015,13 @@ async function handleViewLogs() {
|
||||
_("View logs"),
|
||||
renderModal(viewLogs.data, "view_logs")
|
||||
);
|
||||
} else {
|
||||
logger.error("[DIAGNOSTIC]", "handleViewLogs - e", viewLogs);
|
||||
showToast(_("Failed to execute!"), "error");
|
||||
}
|
||||
} catch (e) {
|
||||
logger.error("[DIAGNOSTIC]", "handleViewLogs - e", e);
|
||||
showToast(_("Failed to execute!"), "error");
|
||||
} finally {
|
||||
store.set({
|
||||
diagnosticsActions: {
|
||||
@@ -3867,9 +4046,17 @@ async function handleShowSingBoxConfig() {
|
||||
_("Show sing-box config"),
|
||||
renderModal(showSingBoxConfig.data, "show_sing_box_config")
|
||||
);
|
||||
} else {
|
||||
logger.error(
|
||||
"[DIAGNOSTIC]",
|
||||
"handleShowSingBoxConfig - e",
|
||||
showSingBoxConfig
|
||||
);
|
||||
showToast(_("Failed to execute!"), "error");
|
||||
}
|
||||
} catch (e) {
|
||||
logger.error("[DIAGNOSTIC]", "handleShowSingBoxConfig - e", e);
|
||||
showToast(_("Failed to execute!"), "error");
|
||||
} finally {
|
||||
store.set({
|
||||
diagnosticsActions: {
|
||||
@@ -3879,6 +4066,23 @@ async function handleShowSingBoxConfig() {
|
||||
});
|
||||
}
|
||||
}
|
||||
function renderWikiDisclaimerWidget() {
|
||||
const diagnosticsChecks = store.get().diagnosticsChecks;
|
||||
function getWikiKind() {
|
||||
const allResults = diagnosticsChecks.map((check) => check.state);
|
||||
if (allResults.includes("error")) {
|
||||
return "error";
|
||||
}
|
||||
if (allResults.includes("warning")) {
|
||||
return "warning";
|
||||
}
|
||||
return "default";
|
||||
}
|
||||
const container = document.getElementById("pdk_diagnostic-page-wiki");
|
||||
return preserveScrollForPage(() => {
|
||||
container.replaceChildren(renderWikiDisclaimer(getWikiKind()));
|
||||
});
|
||||
}
|
||||
function renderDiagnosticAvailableActionsWidget() {
|
||||
const diagnosticsActions = store.get().diagnosticsActions;
|
||||
const servicesInfoWidget = store.get().servicesInfoWidget;
|
||||
@@ -3962,6 +4166,11 @@ function renderDiagnosticSystemInfoWidget() {
|
||||
};
|
||||
}
|
||||
if (version !== `v${diagnosticsSystemInfo.podkop_latest_version}`) {
|
||||
logger.debug(
|
||||
"[DIAGNOSTIC]",
|
||||
"diagnosticsSystemInfo",
|
||||
diagnosticsSystemInfo
|
||||
);
|
||||
return {
|
||||
key: "Podkop",
|
||||
value: version,
|
||||
@@ -3985,7 +4194,7 @@ function renderDiagnosticSystemInfoWidget() {
|
||||
getPodkopVersionRow(),
|
||||
{
|
||||
key: "Luci App",
|
||||
value: normalizeCompiledVersion(diagnosticsSystemInfo.luci_app_version)
|
||||
value: normalizeCompiledVersion(PODKOP_LUCI_APP_VERSION)
|
||||
},
|
||||
{
|
||||
key: "Sing-box",
|
||||
@@ -4008,6 +4217,7 @@ function renderDiagnosticSystemInfoWidget() {
|
||||
async function onStoreUpdate2(next, prev, diff) {
|
||||
if (diff.diagnosticsChecks) {
|
||||
renderDiagnosticsChecks();
|
||||
renderWikiDisclaimerWidget();
|
||||
}
|
||||
if (diff.diagnosticsRunAction) {
|
||||
renderDiagnosticRunActionWidget();
|
||||
@@ -4028,6 +4238,7 @@ async function runChecks() {
|
||||
await runDnsCheck();
|
||||
await runSingBoxCheck();
|
||||
await runNftCheck();
|
||||
await runSectionsCheck();
|
||||
await runFakeIPCheck();
|
||||
} catch (e) {
|
||||
logger.error("[DIAGNOSTIC]", "runChecks - e", e);
|
||||
@@ -4042,6 +4253,7 @@ function onPageMount2() {
|
||||
renderDiagnosticRunActionWidget();
|
||||
renderDiagnosticAvailableActionsWidget();
|
||||
renderDiagnosticSystemInfoWidget();
|
||||
renderWikiDisclaimerWidget();
|
||||
fetchServicesInfo();
|
||||
fetchSystemInfo();
|
||||
}
|
||||
@@ -4120,6 +4332,31 @@ var styles4 = `
|
||||
grid-row-gap: 10px;
|
||||
}
|
||||
|
||||
.pdk_diagnostic-page__right-bar__wiki {
|
||||
border: 2px var(--background-color-low, lightgray) solid;
|
||||
border-radius: 4px;
|
||||
padding: 10px;
|
||||
|
||||
display: grid;
|
||||
grid-template-columns: auto;
|
||||
grid-row-gap: 10px;
|
||||
}
|
||||
|
||||
.pdk_diagnostic-page__right-bar__wiki--warning {
|
||||
border: 2px var(--warn-color-medium, orange) solid;
|
||||
}
|
||||
.pdk_diagnostic-page__right-bar__wiki--error {
|
||||
border: 2px var(--error-color-medium, red) solid;
|
||||
}
|
||||
|
||||
.pdk_diagnostic-page__right-bar__wiki__content {
|
||||
display: grid;
|
||||
grid-template-columns: 1fr 5fr;
|
||||
grid-column-gap: 10px;
|
||||
}
|
||||
|
||||
.pdk_diagnostic-page__right-bar__wiki__texts {}
|
||||
|
||||
.pdk_diagnostic-page__right-bar__actions {
|
||||
border: 2px var(--background-color-low, lightgray) solid;
|
||||
border-radius: 4px;
|
||||
|
||||
@@ -241,7 +241,7 @@ function createSectionContent(section) {
|
||||
(v) => v === lastSelected || !main.REGIONAL_OPTIONS.includes(v),
|
||||
);
|
||||
notifications.push(
|
||||
E("p", { class: "alert-message warning" }, [
|
||||
E("p", {}, [
|
||||
E("strong", {}, _("Regional options cannot be used together")),
|
||||
E("br"),
|
||||
_(
|
||||
|
||||
@@ -7,8 +7,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PODKOP\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-10-21 23:02+0300\n"
|
||||
"PO-Revision-Date: 2025-10-21 23:02+0300\n"
|
||||
"POT-Creation-Date: 2025-10-25 01:08+0300\n"
|
||||
"PO-Revision-Date: 2025-10-25 01:08+0300\n"
|
||||
"Last-Translator: divocat\n"
|
||||
"Language-Team: none\n"
|
||||
"Language: ru\n"
|
||||
@@ -44,6 +44,9 @@ msgstr "Необходимо указать хотя бы один действ
|
||||
msgid "At least one valid subnet or IP must be specified. Comments-only content is not allowed."
|
||||
msgstr "Необходимо указать хотя бы одну действительную подсеть или IP. Только комментарии недопустимы."
|
||||
|
||||
msgid "Available actions"
|
||||
msgstr "Доступные действия"
|
||||
|
||||
msgid "Bootsrap DNS"
|
||||
msgstr "Bootstrap DNS"
|
||||
|
||||
@@ -62,26 +65,20 @@ msgstr "Путь к файлу кэша"
|
||||
msgid "Cache file path cannot be empty"
|
||||
msgstr "Путь к файлу кэша не может быть пустым"
|
||||
|
||||
msgid "Cannot receive DNS checks result"
|
||||
msgstr "Не удалось получить результаты проверки DNS"
|
||||
msgid "Cannot receive checks result"
|
||||
msgstr "Не удалось получить результаты проверки"
|
||||
|
||||
msgid "Cannot receive nftables checks result"
|
||||
msgstr "Не удалось получить результаты проверки nftables"
|
||||
msgid "Checking, please wait"
|
||||
msgstr "Проверяем, пожалуйста подождите"
|
||||
|
||||
msgid "Cannot receive Sing-box checks result"
|
||||
msgstr "Не удалось получить результаты проверки Sing-box"
|
||||
msgid "checks"
|
||||
msgstr "проверки"
|
||||
|
||||
msgid "Checking dns, please wait"
|
||||
msgstr "Проверка dns, пожалуйста подождите"
|
||||
msgid "Checks failed"
|
||||
msgstr "Проверки не выполнены"
|
||||
|
||||
msgid "Checking FakeIP, please wait"
|
||||
msgstr "Проверка FakeIP, пожалуйста подождите"
|
||||
|
||||
msgid "Checking nftables, please wait"
|
||||
msgstr "Проверка nftables, пожалуйста подождите"
|
||||
|
||||
msgid "Checking sing-box, please wait"
|
||||
msgstr "Проверка sing-box, пожалуйста подождите"
|
||||
msgid "Checks passed"
|
||||
msgstr "Проверки пройдены"
|
||||
|
||||
msgid "CIDR must be between 0 and 32"
|
||||
msgstr "CIDR должен быть между 0 и 32"
|
||||
@@ -143,12 +140,6 @@ msgstr "Отключить QUIC протокол для улучшения со
|
||||
msgid "Disabled"
|
||||
msgstr "Отключено"
|
||||
|
||||
msgid "DNS checks"
|
||||
msgstr "DNS проверки"
|
||||
|
||||
msgid "DNS checks passed"
|
||||
msgstr "DNS проверки успешно завершены"
|
||||
|
||||
msgid "DNS on router"
|
||||
msgstr "DNS на роутере"
|
||||
|
||||
@@ -170,6 +161,9 @@ msgstr "DNS-сервер"
|
||||
msgid "DNS server address cannot be empty"
|
||||
msgstr "Адрес DNS-сервера не может быть пустым"
|
||||
|
||||
msgid "Do not panic, everything can be fixed, just..."
|
||||
msgstr "Не паникуйте, всё можно исправить, просто..."
|
||||
|
||||
msgid "Domain Resolver"
|
||||
msgstr "Резолвер доменов"
|
||||
|
||||
@@ -236,17 +230,8 @@ msgstr "Исключите трафик протокола NTP из туннел
|
||||
msgid "Failed to copy!"
|
||||
msgstr "Не удалось скопировать!"
|
||||
|
||||
msgid "FakeIP checks"
|
||||
msgstr "Проверка FakeIP"
|
||||
|
||||
msgid "FakeIP checks failed"
|
||||
msgstr "Проверки FakeIP не пройдены"
|
||||
|
||||
msgid "FakeIP checks partially passed"
|
||||
msgstr "Проверка FakeIP частично пройдена"
|
||||
|
||||
msgid "FakeIP checks passed"
|
||||
msgstr "Проверки FakeIP пройдены"
|
||||
msgid "Failed to execute!"
|
||||
msgstr "Не удалось выполнить!"
|
||||
|
||||
msgid "Fastest"
|
||||
msgstr "Самый быстрый"
|
||||
@@ -365,6 +350,9 @@ msgstr "Неверный URL VLESS: ошибка разбора"
|
||||
msgid "IP address 0.0.0.0 is not allowed"
|
||||
msgstr "IP-адрес 0.0.0.0 не допускается"
|
||||
|
||||
msgid "Issues detected"
|
||||
msgstr "Обнаружены проблемы"
|
||||
|
||||
msgid "Latest"
|
||||
msgstr "Последняя"
|
||||
|
||||
@@ -392,21 +380,15 @@ msgstr "Наблюдаемые интерфейсы"
|
||||
msgid "Network Interface"
|
||||
msgstr "Сетевой интерфейс"
|
||||
|
||||
msgid "Nftables checks"
|
||||
msgstr "Проверки Nftables"
|
||||
|
||||
msgid "Nftables checks partially passed"
|
||||
msgstr "Проверки Nftables частично пройдена"
|
||||
|
||||
msgid "Nftables checks passed"
|
||||
msgstr "Nftables проверки успешно завершены"
|
||||
|
||||
msgid "No other marking rules found"
|
||||
msgstr "Другие правила маркировки не найдены"
|
||||
|
||||
msgid "Not implement yet"
|
||||
msgstr "Ещё не реализовано"
|
||||
|
||||
msgid "Not responding"
|
||||
msgstr "Не отвечает"
|
||||
|
||||
msgid "Not running"
|
||||
msgstr "Не запущено"
|
||||
|
||||
@@ -440,6 +422,9 @@ msgstr "Путь должен содержать хотя бы одну дире
|
||||
msgid "Path must end with cache.db"
|
||||
msgstr "Путь должен заканчиваться на cache.db"
|
||||
|
||||
msgid "Pending"
|
||||
msgstr "Ожидает запуска"
|
||||
|
||||
msgid "Podkop"
|
||||
msgstr "Podkop"
|
||||
|
||||
@@ -458,17 +443,14 @@ msgstr "Прокси-трафик не маршрутизируется чере
|
||||
msgid "Proxy traffic is routed via FakeIP"
|
||||
msgstr "Прокси-трафик направляется через FakeIP"
|
||||
|
||||
msgid "Queued"
|
||||
msgstr "В очереди"
|
||||
|
||||
msgid "Regional options cannot be used together"
|
||||
msgstr "Нельзя использовать несколько региональных опций одновременно"
|
||||
|
||||
msgid "Remote Domain Lists"
|
||||
msgstr "Удалённые списки доменов"
|
||||
msgstr "Внешние списки доменов"
|
||||
|
||||
msgid "Remote Subnet Lists"
|
||||
msgstr "Удалённые списки подсетей"
|
||||
msgstr "Внешние списки подсетей"
|
||||
|
||||
msgid "Restart podkop"
|
||||
msgstr "Перезапустить Podkop"
|
||||
@@ -569,12 +551,6 @@ msgstr "Sing-box"
|
||||
msgid "Sing-box autostart disabled"
|
||||
msgstr "Автостарт sing-box отключен"
|
||||
|
||||
msgid "Sing-box checks"
|
||||
msgstr "Sing-box проверки"
|
||||
|
||||
msgid "Sing-box checks passed"
|
||||
msgstr "Sing-box проверки успешно завершены"
|
||||
|
||||
msgid "Sing-box installed"
|
||||
msgstr "Sing-box установлен"
|
||||
|
||||
@@ -600,10 +576,10 @@ msgid "Specify local IP addresses or subnets whose traffic will always be routed
|
||||
msgstr "Укажите локальные IP-адреса или подсети, трафик которых всегда будет направляться через настроенный маршрут."
|
||||
|
||||
msgid "Specify remote URLs to download and use domain lists"
|
||||
msgstr "Укажите удаленные URL-адреса для загрузки и использования списков доменов."
|
||||
msgstr "Укажите URL-адреса для загрузки и использования списков доменов."
|
||||
|
||||
msgid "Specify remote URLs to download and use subnet lists"
|
||||
msgstr "Укажите удаленные URL-адреса для загрузки и использования списков подсетей."
|
||||
msgstr "Укажите URL-адреса для загрузки и использования списков подсетей."
|
||||
|
||||
msgid "Specify the path to the list file located on the router filesystem"
|
||||
msgstr "Укажите путь к файлу списка, расположенному в файловой системе маршрутизатора."
|
||||
@@ -620,11 +596,14 @@ msgstr "Успешно скопировано!"
|
||||
msgid "System info"
|
||||
msgstr "Системная информация"
|
||||
|
||||
msgid "System information"
|
||||
msgstr "Системная информация"
|
||||
|
||||
msgid "Table exist"
|
||||
msgstr "Таблица существует"
|
||||
|
||||
msgid "Test latency"
|
||||
msgstr "Измерить задержки"
|
||||
msgstr "Тестирование задержки"
|
||||
|
||||
msgid "Text List"
|
||||
msgstr "Текстовый список"
|
||||
@@ -644,6 +623,9 @@ msgstr "Трафик"
|
||||
msgid "Traffic Total"
|
||||
msgstr "Всего трафика"
|
||||
|
||||
msgid "Troubleshooting"
|
||||
msgstr "Устранение неполадок"
|
||||
|
||||
msgid "TTL must be a positive number"
|
||||
msgstr "TTL должно быть положительным числом"
|
||||
|
||||
@@ -704,6 +686,9 @@ msgstr "Ошибки валидации:"
|
||||
msgid "View logs"
|
||||
msgstr "Посмотреть логи"
|
||||
|
||||
msgid "Visit Wiki"
|
||||
msgstr "Перейти в wiki"
|
||||
|
||||
msgid "Warning: %s cannot be used together with %s. Previous selections have been removed."
|
||||
msgstr "Предупреждение: %s нельзя использовать вместе с %s. Предыдущие варианты были удалены."
|
||||
|
||||
|
||||
@@ -7,8 +7,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PODKOP\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-10-21 20:02+0300\n"
|
||||
"PO-Revision-Date: 2025-10-21 20:02+0300\n"
|
||||
"POT-Creation-Date: 2025-10-25 22:08+0300\n"
|
||||
"PO-Revision-Date: 2025-10-25 22:08+0300\n"
|
||||
"Last-Translator: divocat <divocatt@gmail.com>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"Language: \n"
|
||||
@@ -36,7 +36,7 @@ msgstr ""
|
||||
msgid "Active Connections"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runNftCheck.ts:117
|
||||
#: src/podkop/tabs/diagnostic/checks/runNftCheck.ts:106
|
||||
msgid "Additional marking rules found"
|
||||
msgstr ""
|
||||
|
||||
@@ -52,7 +52,11 @@ msgstr ""
|
||||
msgid "At least one valid subnet or IP must be specified. Comments-only content is not allowed."
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runDnsCheck.ts:72
|
||||
#: src/podkop/tabs/diagnostic/partials/renderAvailableActions.ts:43
|
||||
msgid "Available actions"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runDnsCheck.ts:65
|
||||
msgid "Bootsrap DNS"
|
||||
msgstr ""
|
||||
|
||||
@@ -60,48 +64,47 @@ msgstr ""
|
||||
msgid "Bootstrap DNS server"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runFakeIPCheck.ts:81
|
||||
#: src/podkop/tabs/diagnostic/checks/runFakeIPCheck.ts:58
|
||||
msgid "Browser is not using FakeIP"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runFakeIPCheck.ts:80
|
||||
#: src/podkop/tabs/diagnostic/checks/runFakeIPCheck.ts:57
|
||||
msgid "Browser is using FakeIP correctly"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:322
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:329
|
||||
msgid "Cache File Path"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:336
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:343
|
||||
msgid "Cache file path cannot be empty"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runDnsCheck.ts:26
|
||||
msgid "Cannot receive DNS checks result"
|
||||
#: src/podkop/tabs/diagnostic/checks/runDnsCheck.ts:27
|
||||
#: src/podkop/tabs/diagnostic/checks/runNftCheck.ts:28
|
||||
#: src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts:27
|
||||
#: src/podkop/tabs/diagnostic/checks/runSingBoxCheck.ts:25
|
||||
msgid "Cannot receive checks result"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runNftCheck.ts:27
|
||||
msgid "Cannot receive nftables checks result"
|
||||
#: src/podkop/tabs/diagnostic/checks/runDnsCheck.ts:15
|
||||
#: src/podkop/tabs/diagnostic/checks/runFakeIPCheck.ts:15
|
||||
#: src/podkop/tabs/diagnostic/checks/runNftCheck.ts:13
|
||||
#: src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts:15
|
||||
#: src/podkop/tabs/diagnostic/checks/runSingBoxCheck.ts:13
|
||||
msgid "Checking, please wait"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runSingBoxCheck.ts:24
|
||||
msgid "Cannot receive Sing-box checks result"
|
||||
#: src/podkop/tabs/diagnostic/helpers/getCheckTitle.ts:2
|
||||
msgid "checks"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runDnsCheck.ts:14
|
||||
msgid "Checking dns, please wait"
|
||||
#: src/podkop/tabs/diagnostic/helpers/getMeta.ts:26
|
||||
msgid "Checks failed"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runFakeIPCheck.ts:14
|
||||
msgid "Checking FakeIP, please wait"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runNftCheck.ts:12
|
||||
msgid "Checking nftables, please wait"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runSingBoxCheck.ts:12
|
||||
msgid "Checking sing-box, please wait"
|
||||
#: src/podkop/tabs/diagnostic/helpers/getMeta.ts:13
|
||||
msgid "Checks passed"
|
||||
msgstr ""
|
||||
|
||||
#: src/validators/validateSubnet.ts:33
|
||||
@@ -116,7 +119,7 @@ msgstr ""
|
||||
msgid "Community Lists"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:309
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:316
|
||||
msgid "Config File Path"
|
||||
msgstr ""
|
||||
|
||||
@@ -152,15 +155,15 @@ msgstr ""
|
||||
msgid "Dashboard currently unavailable"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:215
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:222
|
||||
msgid "Delay in milliseconds before reloading podkop after interface UP"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:222
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:229
|
||||
msgid "Delay value cannot be empty"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runDnsCheck.ts:89
|
||||
#: src/podkop/tabs/diagnostic/checks/runDnsCheck.ts:82
|
||||
msgid "DHCP has DNS server"
|
||||
msgstr ""
|
||||
|
||||
@@ -172,11 +175,11 @@ msgstr ""
|
||||
msgid "Disable autostart"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:239
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:246
|
||||
msgid "Disable QUIC"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:240
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:247
|
||||
msgid "Disable the QUIC protocol to improve compatibility or fix issues with video streaming"
|
||||
msgstr ""
|
||||
|
||||
@@ -185,15 +188,7 @@ msgstr ""
|
||||
msgid "Disabled"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/contstants.ts:14
|
||||
msgid "DNS checks"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runDnsCheck.ts:64
|
||||
msgid "DNS checks passed"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runDnsCheck.ts:84
|
||||
#: src/podkop/tabs/diagnostic/checks/runDnsCheck.ts:77
|
||||
msgid "DNS on router"
|
||||
msgstr ""
|
||||
|
||||
@@ -225,11 +220,15 @@ msgstr ""
|
||||
msgid "DNS server address cannot be empty"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/partials/renderWikiDisclaimer.ts:26
|
||||
msgid "Do not panic, everything can be fixed, just..."
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:166
|
||||
msgid "Domain Resolver"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:300
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:307
|
||||
msgid "Dont Touch My DHCP!"
|
||||
msgstr ""
|
||||
|
||||
@@ -242,19 +241,19 @@ msgstr ""
|
||||
msgid "Download"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:262
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:269
|
||||
msgid "Download Lists via Proxy/VPN"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:271
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:278
|
||||
msgid "Download Lists via specific proxy section"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:263
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:270
|
||||
msgid "Downloading all lists via main Proxy/VPN"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:272
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:279
|
||||
msgid "Downloading all lists via specific Proxy/VPN"
|
||||
msgstr ""
|
||||
|
||||
@@ -283,7 +282,7 @@ msgstr ""
|
||||
msgid "Enable the mixed proxy, allowing this section to route traffic through both HTTP and SOCKS proxies"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:230
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:237
|
||||
msgid "Enable YACD"
|
||||
msgstr ""
|
||||
|
||||
@@ -303,11 +302,11 @@ msgstr ""
|
||||
msgid "Enter subnets in CIDR notation (e.g. 103.21.244.0/22) or single IP addresses"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:358
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:365
|
||||
msgid "Exclude NTP"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:359
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:366
|
||||
msgid "Exclude NTP protocol traffic from the tunnel to prevent it from being routed through the proxy or VPN"
|
||||
msgstr ""
|
||||
|
||||
@@ -315,20 +314,13 @@ msgstr ""
|
||||
msgid "Failed to copy!"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/contstants.ts:29
|
||||
msgid "FakeIP checks"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runFakeIPCheck.ts:57
|
||||
msgid "FakeIP checks failed"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runFakeIPCheck.ts:51
|
||||
msgid "FakeIP checks partially passed"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runFakeIPCheck.ts:44
|
||||
msgid "FakeIP checks passed"
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:227
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:231
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:261
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:265
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:299
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:303
|
||||
msgid "Failed to execute!"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/methods/custom/getDashboardSections.ts:117
|
||||
@@ -343,7 +335,7 @@ msgstr ""
|
||||
msgid "Get global check"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:218
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:222
|
||||
msgid "Global check"
|
||||
msgstr ""
|
||||
|
||||
@@ -351,19 +343,19 @@ msgstr ""
|
||||
msgid "HTTP error"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:182
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:189
|
||||
msgid "Interface Monitoring"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:214
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:221
|
||||
msgid "Interface Monitoring Delay"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:183
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:190
|
||||
msgid "Interface monitoring for Bad WAN"
|
||||
msgstr ""
|
||||
|
||||
#: src/validators/validateDns.ts:20
|
||||
#: src/validators/validateDns.ts:23
|
||||
msgid "Invalid DNS server format. Examples: 8.8.8.8 or dns.example.com or dns.example.com/nicedns for DoH"
|
||||
msgstr ""
|
||||
|
||||
@@ -480,7 +472,7 @@ msgstr ""
|
||||
msgid "Invalid URL format"
|
||||
msgstr ""
|
||||
|
||||
#: src/validators/validateVlessUrl.ts:109
|
||||
#: src/validators/validateVlessUrl.ts:110
|
||||
msgid "Invalid VLESS URL: parsing failed"
|
||||
msgstr ""
|
||||
|
||||
@@ -488,11 +480,15 @@ msgstr ""
|
||||
msgid "IP address 0.0.0.0 is not allowed"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:404
|
||||
#: src/podkop/tabs/diagnostic/helpers/getMeta.ts:20
|
||||
msgid "Issues detected"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:453
|
||||
msgid "Latest"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:250
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:257
|
||||
msgid "List Update Frequency"
|
||||
msgstr ""
|
||||
|
||||
@@ -504,7 +500,7 @@ msgstr ""
|
||||
msgid "Local Subnet Lists"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runDnsCheck.ts:79
|
||||
#: src/podkop/tabs/diagnostic/checks/runDnsCheck.ts:72
|
||||
msgid "Main DNS"
|
||||
msgstr ""
|
||||
|
||||
@@ -516,7 +512,7 @@ msgstr ""
|
||||
msgid "Mixed Proxy Port"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:191
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:198
|
||||
msgid "Monitored Interfaces"
|
||||
msgstr ""
|
||||
|
||||
@@ -524,19 +520,7 @@ msgstr ""
|
||||
msgid "Network Interface"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/contstants.ts:24
|
||||
msgid "Nftables checks"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runNftCheck.ts:75
|
||||
msgid "Nftables checks partially passed"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runNftCheck.ts:74
|
||||
msgid "Nftables checks passed"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runNftCheck.ts:116
|
||||
#: src/podkop/tabs/diagnostic/checks/runNftCheck.ts:105
|
||||
msgid "No other marking rules found"
|
||||
msgstr ""
|
||||
|
||||
@@ -544,10 +528,16 @@ msgstr ""
|
||||
msgid "Not implement yet"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts:59
|
||||
#: src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts:79
|
||||
msgid "Not responding"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:55
|
||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:63
|
||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:71
|
||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:79
|
||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:87
|
||||
msgid "Not running"
|
||||
msgstr ""
|
||||
|
||||
@@ -567,7 +557,7 @@ msgstr ""
|
||||
msgid "Outbound JSON must contain at least \"type\", \"server\" and \"server_port\" fields"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:394
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:443
|
||||
msgid "Outdated"
|
||||
msgstr ""
|
||||
|
||||
@@ -579,18 +569,26 @@ msgstr ""
|
||||
msgid "Path cannot be empty"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:340
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:347
|
||||
msgid "Path must be absolute (start with /)"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:349
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:356
|
||||
msgid "Path must contain at least one directory (like /tmp/cache.db)"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:344
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:351
|
||||
msgid "Path must end with cache.db"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:103
|
||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:111
|
||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:119
|
||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:127
|
||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:135
|
||||
msgid "Pending"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/dashboard/initController.ts:340
|
||||
msgid "Podkop"
|
||||
msgstr ""
|
||||
@@ -599,7 +597,7 @@ msgstr ""
|
||||
msgid "Podkop Settings"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:301
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:308
|
||||
msgid "Podkop will not modify your DHCP configuration"
|
||||
msgstr ""
|
||||
|
||||
@@ -607,21 +605,14 @@ msgstr ""
|
||||
msgid "Proxy Configuration URL"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runFakeIPCheck.ts:89
|
||||
#: src/podkop/tabs/diagnostic/checks/runFakeIPCheck.ts:66
|
||||
msgid "Proxy traffic is not routed via FakeIP"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runFakeIPCheck.ts:88
|
||||
#: src/podkop/tabs/diagnostic/checks/runFakeIPCheck.ts:65
|
||||
msgid "Proxy traffic is routed via FakeIP"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:95
|
||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:103
|
||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:111
|
||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:119
|
||||
msgid "Queued"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:245
|
||||
msgid "Regional options cannot be used together"
|
||||
msgstr ""
|
||||
@@ -638,39 +629,39 @@ msgstr ""
|
||||
msgid "Restart podkop"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runFakeIPCheck.ts:74
|
||||
#: src/podkop/tabs/diagnostic/checks/runFakeIPCheck.ts:51
|
||||
msgid "Router DNS is not routed through sing-box"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runFakeIPCheck.ts:73
|
||||
#: src/podkop/tabs/diagnostic/checks/runFakeIPCheck.ts:50
|
||||
msgid "Router DNS is routed through sing-box"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:369
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:376
|
||||
msgid "Routing Excluded IPs"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runNftCheck.ts:90
|
||||
#: src/podkop/tabs/diagnostic/checks/runNftCheck.ts:79
|
||||
msgid "Rules mangle counters"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runNftCheck.ts:85
|
||||
#: src/podkop/tabs/diagnostic/checks/runNftCheck.ts:74
|
||||
msgid "Rules mangle exist"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runNftCheck.ts:100
|
||||
#: src/podkop/tabs/diagnostic/checks/runNftCheck.ts:89
|
||||
msgid "Rules mangle output counters"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runNftCheck.ts:95
|
||||
#: src/podkop/tabs/diagnostic/checks/runNftCheck.ts:84
|
||||
msgid "Rules mangle output exist"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runNftCheck.ts:110
|
||||
#: src/podkop/tabs/diagnostic/checks/runNftCheck.ts:99
|
||||
msgid "Rules proxy counters"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runNftCheck.ts:105
|
||||
#: src/podkop/tabs/diagnostic/checks/runNftCheck.ts:94
|
||||
msgid "Rules proxy exist"
|
||||
msgstr ""
|
||||
|
||||
@@ -698,7 +689,7 @@ msgstr ""
|
||||
msgid "Select DNS protocol to use"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:251
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:258
|
||||
msgid "Select how often the domain or subnet lists are updated automatically"
|
||||
msgstr ""
|
||||
|
||||
@@ -715,11 +706,11 @@ msgstr ""
|
||||
msgid "Select or enter DNS server address"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:323
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:330
|
||||
msgid "Select or enter path for sing-box cache file. Change this ONLY if you know what you are doing"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:310
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:317
|
||||
msgid "Select path for sing-box config file. Change this ONLY if you know what you are doing"
|
||||
msgstr ""
|
||||
|
||||
@@ -743,7 +734,7 @@ msgstr ""
|
||||
msgid "Select the network interface to which the traffic will originate"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:192
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:199
|
||||
msgid "Select the WAN interfaces to be monitored"
|
||||
msgstr ""
|
||||
|
||||
@@ -755,7 +746,7 @@ msgstr ""
|
||||
msgid "Settings"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:278
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:290
|
||||
#: src/podkop/tabs/diagnostic/partials/renderAvailableActions.ts:116
|
||||
msgid "Show sing-box config"
|
||||
msgstr ""
|
||||
@@ -764,35 +755,27 @@ msgstr ""
|
||||
msgid "Sing-box"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runSingBoxCheck.ts:86
|
||||
#: src/podkop/tabs/diagnostic/checks/runSingBoxCheck.ts:77
|
||||
msgid "Sing-box autostart disabled"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/contstants.ts:19
|
||||
msgid "Sing-box checks"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runSingBoxCheck.ts:66
|
||||
msgid "Sing-box checks passed"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runSingBoxCheck.ts:71
|
||||
#: src/podkop/tabs/diagnostic/checks/runSingBoxCheck.ts:62
|
||||
msgid "Sing-box installed"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runSingBoxCheck.ts:96
|
||||
#: src/podkop/tabs/diagnostic/checks/runSingBoxCheck.ts:87
|
||||
msgid "Sing-box listening ports"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runSingBoxCheck.ts:91
|
||||
#: src/podkop/tabs/diagnostic/checks/runSingBoxCheck.ts:82
|
||||
msgid "Sing-box process running"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runSingBoxCheck.ts:81
|
||||
#: src/podkop/tabs/diagnostic/checks/runSingBoxCheck.ts:72
|
||||
msgid "Sing-box service exist"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runSingBoxCheck.ts:76
|
||||
#: src/podkop/tabs/diagnostic/checks/runSingBoxCheck.ts:67
|
||||
msgid "Sing-box version >= 1.12.4"
|
||||
msgstr ""
|
||||
|
||||
@@ -800,7 +783,7 @@ msgstr ""
|
||||
msgid "Source Network Interface"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:370
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:377
|
||||
msgid "Specify a local IP address to be excluded from routing"
|
||||
msgstr ""
|
||||
|
||||
@@ -837,7 +820,11 @@ msgstr ""
|
||||
msgid "System info"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runNftCheck.ts:80
|
||||
#: src/podkop/tabs/diagnostic/partials/renderSystemInfo.ts:21
|
||||
msgid "System information"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runNftCheck.ts:69
|
||||
msgid "Table exist"
|
||||
msgstr ""
|
||||
|
||||
@@ -869,6 +856,10 @@ msgstr ""
|
||||
msgid "Traffic Total"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/partials/renderWikiDisclaimer.ts:25
|
||||
msgid "Troubleshooting"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:80
|
||||
msgid "TTL must be a positive number"
|
||||
msgstr ""
|
||||
@@ -886,13 +877,13 @@ msgstr ""
|
||||
msgid "UDP over TCP"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:34
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:35
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:36
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:37
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:38
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:39
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:373
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:40
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:41
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:42
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:43
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:417
|
||||
msgid "unknown"
|
||||
msgstr ""
|
||||
|
||||
@@ -905,7 +896,7 @@ msgstr ""
|
||||
msgid "Uplink"
|
||||
msgstr ""
|
||||
|
||||
#: src/validators/validateProxyUrl.ts:27
|
||||
#: src/validators/validateProxyUrl.ts:29
|
||||
msgid "URL must start with vless://, ss://, trojan://, or socks4/5://"
|
||||
msgstr ""
|
||||
|
||||
@@ -945,8 +936,8 @@ msgstr ""
|
||||
msgid "User Subnets List"
|
||||
msgstr ""
|
||||
|
||||
#: src/validators/validateDns.ts:11
|
||||
#: src/validators/validateDns.ts:15
|
||||
#: src/validators/validateDns.ts:14
|
||||
#: src/validators/validateDns.ts:18
|
||||
#: src/validators/validateDomain.ts:13
|
||||
#: src/validators/validateDomain.ts:30
|
||||
#: src/validators/validateIp.ts:8
|
||||
@@ -957,7 +948,7 @@ msgstr ""
|
||||
#: src/validators/validateSubnet.ts:38
|
||||
#: src/validators/validateTrojanUrl.ts:59
|
||||
#: src/validators/validateUrl.ts:16
|
||||
#: src/validators/validateVlessUrl.ts:107
|
||||
#: src/validators/validateVlessUrl.ts:108
|
||||
msgid "Valid"
|
||||
msgstr ""
|
||||
|
||||
@@ -966,11 +957,15 @@ msgstr ""
|
||||
msgid "Validation errors:"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:248
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:256
|
||||
#: src/podkop/tabs/diagnostic/partials/renderAvailableActions.ts:107
|
||||
msgid "View logs"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/partials/renderWikiDisclaimer.ts:31
|
||||
msgid "Visit Wiki"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:247
|
||||
msgid "Warning: %s cannot be used together with %s. Previous selections have been removed."
|
||||
msgstr ""
|
||||
|
||||
@@ -767,7 +767,7 @@ sing_box_configure_route() {
|
||||
configure_common_reject_route_rule
|
||||
|
||||
local routing_excluded_ips
|
||||
config_get_bool routing_excluded_ips "settings" "routing_excluded_ips"
|
||||
config_get routing_excluded_ips "settings" "routing_excluded_ips"
|
||||
if [ -n "$routing_excluded_ips" ]; then
|
||||
rule_tag="$(gen_id)"
|
||||
config=$(sing_box_cm_add_route_rule "$config" "$rule_tag" "$SB_TPROXY_INBOUND_TAG" "$SB_DIRECT_OUTBOUND_TAG")
|
||||
@@ -1684,16 +1684,10 @@ show_config() {
|
||||
tmp_config=$(mktemp)
|
||||
|
||||
sed -e 's/\(option proxy_string\).*/\1 '\''MASKED'\''/g' \
|
||||
-e 's/\(option outbound_json\).*/\1 '\''MASKED'\''/g' \
|
||||
-e 's/\(option second_proxy_string\).*/\1 '\''MASKED'\''/g' \
|
||||
-e 's/\(option second_outbound_json\).*/\1 '\''MASKED'\''/g' \
|
||||
-e 's/\(vless:\/\/[^@]*@\)/vless:\/\/MASKED@/g' \
|
||||
-e 's/\(ss:\/\/[^@]*@\)/ss:\/\/MASKED@/g' \
|
||||
-e 's/\(pbk=[^&]*\)/pbk=MASKED/g' \
|
||||
-e 's/\(sid=[^&]*\)/sid=MASKED/g' \
|
||||
-e 's/\(option dns_server '\''[^'\'']*\.dns\.nextdns\.io'\''\)/option dns_server '\''MASKED.dns.nextdns.io'\''/g' \
|
||||
-e "s|\(option dns_server 'dns\.nextdns\.io\)/[^']*|\1/MASKED|" \
|
||||
-e '/option outbound_json/,/^}/c\ option outbound_json '\''MASKED'\''' \
|
||||
-e 's/\(list urltest_proxy_links\).*/\1 '\''MASKED'\''/g' \
|
||||
-e "s@\\(option dns_server '[^/]*\\)/[^']*'@\\1/MASKED'@g" \
|
||||
-e "s@\\(option domain_resolver_dns_server '[^/]*\\)/[^']*'@\\1/MASKED'@g" \
|
||||
"$PODKOP_CONFIG" > "$tmp_config"
|
||||
|
||||
cat "$tmp_config"
|
||||
|
||||
Reference in New Issue
Block a user