Support HTTP proxy outbounds
This commit is contained in:
@@ -11,16 +11,16 @@
|
||||
"call": "✔ Running",
|
||||
"key": "✔ Running",
|
||||
"places": [
|
||||
"src/podkop/tabs/dashboard/initController.ts:888",
|
||||
"src/podkop/tabs/dashboard/initController.ts:899"
|
||||
"src/podkop/tabs/dashboard/initController.ts:893",
|
||||
"src/podkop/tabs/dashboard/initController.ts:904"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "✘ Stopped",
|
||||
"key": "✘ Stopped",
|
||||
"places": [
|
||||
"src/podkop/tabs/dashboard/initController.ts:889",
|
||||
"src/podkop/tabs/dashboard/initController.ts:900"
|
||||
"src/podkop/tabs/dashboard/initController.ts:894",
|
||||
"src/podkop/tabs/dashboard/initController.ts:905"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -57,7 +57,7 @@
|
||||
"call": "Active Connections",
|
||||
"key": "Active Connections",
|
||||
"places": [
|
||||
"src/podkop/tabs/dashboard/initController.ts:846"
|
||||
"src/podkop/tabs/dashboard/initController.ts:851"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -396,7 +396,7 @@
|
||||
"src/podkop/tabs/diagnostic/checks/runDnsCheck.ts:27",
|
||||
"src/podkop/tabs/diagnostic/checks/runInboundsCheck.ts:162",
|
||||
"src/podkop/tabs/diagnostic/checks/runNftCheck.ts:28",
|
||||
"src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts:48",
|
||||
"src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts:31",
|
||||
"src/podkop/tabs/diagnostic/checks/runSingBoxCheck.ts:25",
|
||||
"src/podkop/tabs/diagnostic/checks/runZapret2Check.ts:27",
|
||||
"src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:27"
|
||||
@@ -440,7 +440,7 @@
|
||||
"src/podkop/tabs/diagnostic/checks/runFakeIPCheck.ts:15",
|
||||
"src/podkop/tabs/diagnostic/checks/runInboundsCheck.ts:150",
|
||||
"src/podkop/tabs/diagnostic/checks/runNftCheck.ts:13",
|
||||
"src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts:34",
|
||||
"src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts:17",
|
||||
"src/podkop/tabs/diagnostic/checks/runSingBoxCheck.ts:13",
|
||||
"src/podkop/tabs/diagnostic/checks/runZapret2Check.ts:15",
|
||||
"src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:15"
|
||||
@@ -624,7 +624,7 @@
|
||||
"call": "Connectivity probe failed",
|
||||
"key": "Connectivity probe failed",
|
||||
"places": [
|
||||
"src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts:137"
|
||||
"src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts:125"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -895,8 +895,8 @@
|
||||
"call": "Downlink",
|
||||
"key": "Downlink",
|
||||
"places": [
|
||||
"src/podkop/tabs/dashboard/initController.ts:772",
|
||||
"src/podkop/tabs/dashboard/initController.ts:810"
|
||||
"src/podkop/tabs/dashboard/initController.ts:777",
|
||||
"src/podkop/tabs/dashboard/initController.ts:815"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -1149,12 +1149,12 @@
|
||||
"call": "Failed to execute",
|
||||
"key": "Failed to execute",
|
||||
"places": [
|
||||
"src/podkop/methods/shell/index.ts:171",
|
||||
"src/podkop/methods/shell/index.ts:178",
|
||||
"src/podkop/tabs/updates/initController.ts:466",
|
||||
"src/podkop/tabs/updates/initController.ts:467",
|
||||
"src/podkop/tabs/updates/initController.ts:527",
|
||||
"src/podkop/tabs/updates/initController.ts:677"
|
||||
"src/podkop/tabs/updates/initController.ts:677",
|
||||
"src/podkop/methods/shell/index.ts:171",
|
||||
"src/podkop/methods/shell/index.ts:178"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -1210,7 +1210,9 @@
|
||||
"key": "Fastest",
|
||||
"places": [
|
||||
"src/podkop/methods/custom/getDashboardSections.ts:313",
|
||||
"src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts:93"
|
||||
"src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts:77",
|
||||
"src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts:78",
|
||||
"src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts:90"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -1456,6 +1458,83 @@
|
||||
"src/validators/validateSubnet.ts:11"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Invalid HTTP proxy URL: invalid host and port",
|
||||
"key": "Invalid HTTP proxy URL: invalid host and port",
|
||||
"places": [
|
||||
"src/validators/validateHttpProxyUrl.ts:58"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Invalid HTTP proxy URL: invalid host format",
|
||||
"key": "Invalid HTTP proxy URL: invalid host format",
|
||||
"places": [
|
||||
"src/validators/validateHttpProxyUrl.ts:90"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Invalid HTTP proxy URL: invalid port number",
|
||||
"key": "Invalid HTTP proxy URL: invalid port number",
|
||||
"places": [
|
||||
"src/validators/validateHttpProxyUrl.ts:80"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Invalid HTTP proxy URL: missing host and port",
|
||||
"key": "Invalid HTTP proxy URL: missing host and port",
|
||||
"places": [
|
||||
"src/validators/validateHttpProxyUrl.ts:50"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Invalid HTTP proxy URL: missing hostname or IP",
|
||||
"key": "Invalid HTTP proxy URL: missing hostname or IP",
|
||||
"places": [
|
||||
"src/validators/validateHttpProxyUrl.ts:65"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Invalid HTTP proxy URL: missing port",
|
||||
"key": "Invalid HTTP proxy URL: missing port",
|
||||
"places": [
|
||||
"src/validators/validateHttpProxyUrl.ts:72"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Invalid HTTP proxy URL: missing username",
|
||||
"key": "Invalid HTTP proxy URL: missing username",
|
||||
"places": [
|
||||
"src/validators/validateHttpProxyUrl.ts:42"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Invalid HTTP proxy URL: must not contain spaces",
|
||||
"key": "Invalid HTTP proxy URL: must not contain spaces",
|
||||
"places": [
|
||||
"src/validators/validateHttpProxyUrl.ts:19"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Invalid HTTP proxy URL: must start with http:// or https://",
|
||||
"key": "Invalid HTTP proxy URL: must start with http:// or https://",
|
||||
"places": [
|
||||
"src/validators/validateHttpProxyUrl.ts:10"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Invalid HTTP proxy URL: parsing failed",
|
||||
"key": "Invalid HTTP proxy URL: parsing failed",
|
||||
"places": [
|
||||
"src/validators/validateHttpProxyUrl.ts:96"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Invalid HTTP proxy URL: path, query, and fragment are not supported",
|
||||
"key": "Invalid HTTP proxy URL: path, query, and fragment are not supported",
|
||||
"places": [
|
||||
"src/validators/validateHttpProxyUrl.ts:27"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Invalid HY2 URL: insecure must be 0 or 1",
|
||||
"key": "Invalid HY2 URL: insecure must be 0 or 1",
|
||||
@@ -1975,7 +2054,7 @@
|
||||
"call": "Memory Usage",
|
||||
"key": "Memory Usage",
|
||||
"places": [
|
||||
"src/podkop/tabs/dashboard/initController.ts:850"
|
||||
"src/podkop/tabs/dashboard/initController.ts:855"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -2202,9 +2281,10 @@
|
||||
"call": "Not responding",
|
||||
"key": "Not responding",
|
||||
"places": [
|
||||
"src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts:109",
|
||||
"src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts:115",
|
||||
"src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts:143"
|
||||
"src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts:78",
|
||||
"src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts:90",
|
||||
"src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts:103",
|
||||
"src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts:131"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -3063,9 +3143,9 @@
|
||||
"call": "Service action failed",
|
||||
"key": "Service action failed",
|
||||
"places": [
|
||||
"src/podkop/tabs/diagnostic/initController.ts:571",
|
||||
"src/podkop/methods/shell/index.ts:380",
|
||||
"src/podkop/methods/shell/index.ts:401",
|
||||
"src/podkop/tabs/diagnostic/initController.ts:571"
|
||||
"src/podkop/methods/shell/index.ts:401"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -3079,7 +3159,7 @@
|
||||
"call": "Services info",
|
||||
"key": "Services info",
|
||||
"places": [
|
||||
"src/podkop/tabs/dashboard/initController.ts:883"
|
||||
"src/podkop/tabs/dashboard/initController.ts:888"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -3358,7 +3438,7 @@
|
||||
"call": "System info",
|
||||
"key": "System info",
|
||||
"places": [
|
||||
"src/podkop/tabs/dashboard/initController.ts:843"
|
||||
"src/podkop/tabs/dashboard/initController.ts:848"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -3550,7 +3630,7 @@
|
||||
"call": "Traffic",
|
||||
"key": "Traffic",
|
||||
"places": [
|
||||
"src/podkop/tabs/dashboard/initController.ts:769",
|
||||
"src/podkop/tabs/dashboard/initController.ts:774",
|
||||
"src/podkop/tabs/dashboard/partials/renderSections.ts:216"
|
||||
]
|
||||
},
|
||||
@@ -3558,7 +3638,7 @@
|
||||
"call": "Traffic Total",
|
||||
"key": "Traffic Total",
|
||||
"places": [
|
||||
"src/podkop/tabs/dashboard/initController.ts:803"
|
||||
"src/podkop/tabs/dashboard/initController.ts:808"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -3796,8 +3876,8 @@
|
||||
"call": "Uplink",
|
||||
"key": "Uplink",
|
||||
"places": [
|
||||
"src/podkop/tabs/dashboard/initController.ts:771",
|
||||
"src/podkop/tabs/dashboard/initController.ts:806"
|
||||
"src/podkop/tabs/dashboard/initController.ts:776",
|
||||
"src/podkop/tabs/dashboard/initController.ts:811"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -3809,10 +3889,10 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "URL must start with vless://, vmess://, ss://, trojan://, socks4://, socks4a://, socks5://, hysteria2://, or hy2://",
|
||||
"key": "URL must start with vless://, vmess://, ss://, trojan://, socks4://, socks4a://, socks5://, hysteria2://, or hy2://",
|
||||
"call": "URL must start with vless://, vmess://, ss://, trojan://, socks4://, socks4a://, socks5://, http://, https://, hysteria2://, or hy2://",
|
||||
"key": "URL must start with vless://, vmess://, ss://, trojan://, socks4://, socks4a://, socks5://, http://, https://, hysteria2://, or hy2://",
|
||||
"places": [
|
||||
"src/validators/validateProxyUrl.ts:42"
|
||||
"src/validators/validateProxyUrl.ts:47"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -3975,6 +4055,7 @@
|
||||
"src/validators/validateDns.ts:18",
|
||||
"src/validators/validateDomain.ts:13",
|
||||
"src/validators/validateDomain.ts:30",
|
||||
"src/validators/validateHttpProxyUrl.ts:100",
|
||||
"src/validators/validateHysteriaUrl.ts:154",
|
||||
"src/validators/validateIp.ts:8",
|
||||
"src/validators/validateOutboundJson.ts:7",
|
||||
@@ -4041,8 +4122,8 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "vless://, vmess://, ss://, trojan://, socks4/5://, hy2/hysteria2:// links",
|
||||
"key": "vless://, vmess://, ss://, trojan://, socks4/5://, hy2/hysteria2:// links",
|
||||
"call": "vless://, vmess://, ss://, trojan://, socks4/5://, http(s)://, hy2/hysteria2:// links",
|
||||
"key": "vless://, vmess://, ss://, trojan://, socks4/5://, http(s)://, hy2/hysteria2:// links",
|
||||
"places": [
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:3384"
|
||||
]
|
||||
|
||||
@@ -7,8 +7,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PODKOP PLUS\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2026-06-08 23:39+0300\n"
|
||||
"PO-Revision-Date: 2026-06-08 23:39+0300\n"
|
||||
"POT-Creation-Date: 2026-06-10 03:49+0300\n"
|
||||
"PO-Revision-Date: 2026-06-10 03:49+0300\n"
|
||||
"Last-Translator: ushan0v <ushanov2204@gmail.com>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"Language: \n"
|
||||
@@ -21,13 +21,13 @@ msgstr ""
|
||||
msgid "-- Select --"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/dashboard/initController.ts:888
|
||||
#: src/podkop/tabs/dashboard/initController.ts:899
|
||||
#: src/podkop/tabs/dashboard/initController.ts:893
|
||||
#: src/podkop/tabs/dashboard/initController.ts:904
|
||||
msgid "✔ Running"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/dashboard/initController.ts:889
|
||||
#: src/podkop/tabs/dashboard/initController.ts:900
|
||||
#: src/podkop/tabs/dashboard/initController.ts:894
|
||||
#: src/podkop/tabs/dashboard/initController.ts:905
|
||||
msgid "✘ Stopped"
|
||||
msgstr ""
|
||||
|
||||
@@ -49,7 +49,7 @@ msgstr ""
|
||||
msgid "Active"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/dashboard/initController.ts:846
|
||||
#: src/podkop/tabs/dashboard/initController.ts:851
|
||||
msgid "Active Connections"
|
||||
msgstr ""
|
||||
|
||||
@@ -247,7 +247,7 @@ msgstr ""
|
||||
#: src/podkop/tabs/diagnostic/checks/runDnsCheck.ts:27
|
||||
#: src/podkop/tabs/diagnostic/checks/runInboundsCheck.ts:162
|
||||
#: src/podkop/tabs/diagnostic/checks/runNftCheck.ts:28
|
||||
#: src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts:48
|
||||
#: src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts:31
|
||||
#: src/podkop/tabs/diagnostic/checks/runSingBoxCheck.ts:25
|
||||
#: src/podkop/tabs/diagnostic/checks/runZapret2Check.ts:27
|
||||
#: src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:27
|
||||
@@ -276,7 +276,7 @@ msgstr ""
|
||||
#: src/podkop/tabs/diagnostic/checks/runFakeIPCheck.ts:15
|
||||
#: src/podkop/tabs/diagnostic/checks/runInboundsCheck.ts:150
|
||||
#: src/podkop/tabs/diagnostic/checks/runNftCheck.ts:13
|
||||
#: src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts:34
|
||||
#: src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts:17
|
||||
#: src/podkop/tabs/diagnostic/checks/runSingBoxCheck.ts:13
|
||||
#: src/podkop/tabs/diagnostic/checks/runZapret2Check.ts:15
|
||||
#: src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:15
|
||||
@@ -391,7 +391,7 @@ msgstr ""
|
||||
msgid "Connections are unavailable"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts:137
|
||||
#: src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts:125
|
||||
msgid "Connectivity probe failed"
|
||||
msgstr ""
|
||||
|
||||
@@ -548,8 +548,8 @@ msgstr ""
|
||||
msgid "Dont Touch My DHCP!"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/dashboard/initController.ts:772
|
||||
#: src/podkop/tabs/dashboard/initController.ts:810
|
||||
#: src/podkop/tabs/dashboard/initController.ts:777
|
||||
#: src/podkop/tabs/dashboard/initController.ts:815
|
||||
msgid "Downlink"
|
||||
msgstr ""
|
||||
|
||||
@@ -697,12 +697,12 @@ msgstr ""
|
||||
msgid "Failed to copy!"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/methods/shell/index.ts:171
|
||||
#: src/podkop/methods/shell/index.ts:178
|
||||
#: src/podkop/tabs/updates/initController.ts:466
|
||||
#: src/podkop/tabs/updates/initController.ts:467
|
||||
#: src/podkop/tabs/updates/initController.ts:527
|
||||
#: src/podkop/tabs/updates/initController.ts:677
|
||||
#: src/podkop/methods/shell/index.ts:171
|
||||
#: src/podkop/methods/shell/index.ts:178
|
||||
msgid "Failed to execute"
|
||||
msgstr ""
|
||||
|
||||
@@ -737,7 +737,9 @@ msgid "Fallback on unknown DC"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/methods/custom/getDashboardSections.ts:313
|
||||
#: src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts:93
|
||||
#: src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts:77
|
||||
#: src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts:78
|
||||
#: src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts:90
|
||||
msgid "Fastest"
|
||||
msgstr ""
|
||||
|
||||
@@ -882,6 +884,50 @@ msgstr ""
|
||||
msgid "Invalid format. Use X.X.X.X or X.X.X.X/Y"
|
||||
msgstr ""
|
||||
|
||||
#: src/validators/validateHttpProxyUrl.ts:58
|
||||
msgid "Invalid HTTP proxy URL: invalid host and port"
|
||||
msgstr ""
|
||||
|
||||
#: src/validators/validateHttpProxyUrl.ts:90
|
||||
msgid "Invalid HTTP proxy URL: invalid host format"
|
||||
msgstr ""
|
||||
|
||||
#: src/validators/validateHttpProxyUrl.ts:80
|
||||
msgid "Invalid HTTP proxy URL: invalid port number"
|
||||
msgstr ""
|
||||
|
||||
#: src/validators/validateHttpProxyUrl.ts:50
|
||||
msgid "Invalid HTTP proxy URL: missing host and port"
|
||||
msgstr ""
|
||||
|
||||
#: src/validators/validateHttpProxyUrl.ts:65
|
||||
msgid "Invalid HTTP proxy URL: missing hostname or IP"
|
||||
msgstr ""
|
||||
|
||||
#: src/validators/validateHttpProxyUrl.ts:72
|
||||
msgid "Invalid HTTP proxy URL: missing port"
|
||||
msgstr ""
|
||||
|
||||
#: src/validators/validateHttpProxyUrl.ts:42
|
||||
msgid "Invalid HTTP proxy URL: missing username"
|
||||
msgstr ""
|
||||
|
||||
#: src/validators/validateHttpProxyUrl.ts:19
|
||||
msgid "Invalid HTTP proxy URL: must not contain spaces"
|
||||
msgstr ""
|
||||
|
||||
#: src/validators/validateHttpProxyUrl.ts:10
|
||||
msgid "Invalid HTTP proxy URL: must start with http:// or https://"
|
||||
msgstr ""
|
||||
|
||||
#: src/validators/validateHttpProxyUrl.ts:96
|
||||
msgid "Invalid HTTP proxy URL: parsing failed"
|
||||
msgstr ""
|
||||
|
||||
#: src/validators/validateHttpProxyUrl.ts:27
|
||||
msgid "Invalid HTTP proxy URL: path, query, and fragment are not supported"
|
||||
msgstr ""
|
||||
|
||||
#: src/validators/validateHysteriaUrl.ts:107
|
||||
msgid "Invalid HY2 URL: insecure must be 0 or 1"
|
||||
msgstr ""
|
||||
@@ -1181,7 +1227,7 @@ msgstr ""
|
||||
msgid "Maximum response time delta in milliseconds"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/dashboard/initController.ts:850
|
||||
#: src/podkop/tabs/dashboard/initController.ts:855
|
||||
msgid "Memory Usage"
|
||||
msgstr ""
|
||||
|
||||
@@ -1315,9 +1361,10 @@ msgstr ""
|
||||
msgid "Not required for this listen address"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts:109
|
||||
#: src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts:115
|
||||
#: src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts:143
|
||||
#: src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts:78
|
||||
#: src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts:90
|
||||
#: src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts:103
|
||||
#: src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts:131
|
||||
msgid "Not responding"
|
||||
msgstr ""
|
||||
|
||||
@@ -1816,9 +1863,9 @@ msgstr ""
|
||||
msgid "Servers with names matching these regular expressions will not be tested by URLTest"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:571
|
||||
#: src/podkop/methods/shell/index.ts:380
|
||||
#: src/podkop/methods/shell/index.ts:401
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:571
|
||||
msgid "Service action failed"
|
||||
msgstr ""
|
||||
|
||||
@@ -1826,7 +1873,7 @@ msgstr ""
|
||||
msgid "Service list"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/dashboard/initController.ts:883
|
||||
#: src/podkop/tabs/dashboard/initController.ts:888
|
||||
msgid "Services info"
|
||||
msgstr ""
|
||||
|
||||
@@ -1988,7 +2035,7 @@ msgstr ""
|
||||
msgid "Successfully copied!"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/dashboard/initController.ts:843
|
||||
#: src/podkop/tabs/dashboard/initController.ts:848
|
||||
msgid "System info"
|
||||
msgstr ""
|
||||
|
||||
@@ -2102,12 +2149,12 @@ msgstr ""
|
||||
msgid "tiny"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/dashboard/initController.ts:769
|
||||
#: src/podkop/tabs/dashboard/initController.ts:774
|
||||
#: src/podkop/tabs/dashboard/partials/renderSections.ts:216
|
||||
msgid "Traffic"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/dashboard/initController.ts:803
|
||||
#: src/podkop/tabs/dashboard/initController.ts:808
|
||||
msgid "Traffic Total"
|
||||
msgstr ""
|
||||
|
||||
@@ -2252,8 +2299,8 @@ msgstr ""
|
||||
msgid "Update subscriptions"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/dashboard/initController.ts:771
|
||||
#: src/podkop/tabs/dashboard/initController.ts:806
|
||||
#: src/podkop/tabs/dashboard/initController.ts:776
|
||||
#: src/podkop/tabs/dashboard/initController.ts:811
|
||||
msgid "Uplink"
|
||||
msgstr ""
|
||||
|
||||
@@ -2262,8 +2309,8 @@ msgstr ""
|
||||
msgid "Uploaded"
|
||||
msgstr ""
|
||||
|
||||
#: src/validators/validateProxyUrl.ts:42
|
||||
msgid "URL must start with vless://, vmess://, ss://, trojan://, socks4://, socks4a://, socks5://, hysteria2://, or hy2://"
|
||||
#: src/validators/validateProxyUrl.ts:47
|
||||
msgid "URL must start with vless://, vmess://, ss://, trojan://, socks4://, socks4a://, socks5://, http://, https://, hysteria2://, or hy2://"
|
||||
msgstr ""
|
||||
|
||||
#: src/validators/validateUrl.ts:17
|
||||
@@ -2362,6 +2409,7 @@ msgstr ""
|
||||
#: src/validators/validateDns.ts:18
|
||||
#: src/validators/validateDomain.ts:13
|
||||
#: src/validators/validateDomain.ts:30
|
||||
#: src/validators/validateHttpProxyUrl.ts:100
|
||||
#: src/validators/validateHysteriaUrl.ts:154
|
||||
#: src/validators/validateIp.ts:8
|
||||
#: src/validators/validateOutboundJson.ts:7
|
||||
@@ -2408,7 +2456,7 @@ msgid "VLESS flow"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:3384
|
||||
msgid "vless://, vmess://, ss://, trojan://, socks4/5://, hy2/hysteria2:// links"
|
||||
msgid "vless://, vmess://, ss://, trojan://, socks4/5://, http(s)://, hy2/hysteria2:// links"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runInboundsCheck.ts:70
|
||||
|
||||
@@ -7,8 +7,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PODKOP PLUS\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2026-06-08 02:39+0300\n"
|
||||
"PO-Revision-Date: 2026-06-08 02:39+0300\n"
|
||||
"POT-Creation-Date: 2026-06-10 06:49+0300\n"
|
||||
"PO-Revision-Date: 2026-06-10 06:49+0300\n"
|
||||
"Last-Translator: ushan0v\n"
|
||||
"Language-Team: none\n"
|
||||
"Language: ru\n"
|
||||
@@ -608,6 +608,39 @@ msgstr "Неверный домен"
|
||||
msgid "Invalid format. Use X.X.X.X or X.X.X.X/Y"
|
||||
msgstr "Неверный формат. Используйте X.X.X.X или X.X.X.X/Y"
|
||||
|
||||
msgid "Invalid HTTP proxy URL: invalid host and port"
|
||||
msgstr "Неверный URL HTTP proxy: неверный хост и порт"
|
||||
|
||||
msgid "Invalid HTTP proxy URL: invalid host format"
|
||||
msgstr "Неверный URL HTTP proxy: неверный формат хоста"
|
||||
|
||||
msgid "Invalid HTTP proxy URL: invalid port number"
|
||||
msgstr "Неверный URL HTTP proxy: неверный номер порта"
|
||||
|
||||
msgid "Invalid HTTP proxy URL: missing host and port"
|
||||
msgstr "Неверный URL HTTP proxy: отсутствуют хост и порт"
|
||||
|
||||
msgid "Invalid HTTP proxy URL: missing hostname or IP"
|
||||
msgstr "Неверный URL HTTP proxy: отсутствует имя хоста или IP-адрес"
|
||||
|
||||
msgid "Invalid HTTP proxy URL: missing port"
|
||||
msgstr "Неверный URL HTTP proxy: отсутствует порт"
|
||||
|
||||
msgid "Invalid HTTP proxy URL: missing username"
|
||||
msgstr "Неверный URL HTTP proxy: отсутствует имя пользователя"
|
||||
|
||||
msgid "Invalid HTTP proxy URL: must not contain spaces"
|
||||
msgstr "Неверный URL HTTP proxy: не должен содержать пробелов"
|
||||
|
||||
msgid "Invalid HTTP proxy URL: must start with http:// or https://"
|
||||
msgstr "Неверный URL HTTP proxy: должен начинаться с http:// или https://"
|
||||
|
||||
msgid "Invalid HTTP proxy URL: parsing failed"
|
||||
msgstr "Неверный URL HTTP proxy: ошибка разбора"
|
||||
|
||||
msgid "Invalid HTTP proxy URL: path, query, and fragment are not supported"
|
||||
msgstr "Неверный URL HTTP proxy: путь, query и fragment не поддерживаются"
|
||||
|
||||
msgid "Invalid HY2 URL: insecure must be 0 or 1"
|
||||
msgstr "Неверный URL Hysteria2: параметр insecure должен быть 0 или 1"
|
||||
|
||||
@@ -1580,8 +1613,8 @@ msgstr "Исходящий"
|
||||
msgid "Uploaded"
|
||||
msgstr "Отдано"
|
||||
|
||||
msgid "URL must start with vless://, vmess://, ss://, trojan://, socks4://, socks4a://, socks5://, hysteria2://, or hy2://"
|
||||
msgstr "URL должен начинаться с vless://, vmess://, ss://, trojan://, socks4://, socks4a://, socks5://, hysteria2:// или hy2://"
|
||||
msgid "URL must start with vless://, vmess://, ss://, trojan://, socks4://, socks4a://, socks5://, http://, https://, hysteria2://, or hy2://"
|
||||
msgstr "URL должен начинаться с vless://, vmess://, ss://, trojan://, socks4://, socks4a://, socks5://, http://, https://, hysteria2:// или hy2://"
|
||||
|
||||
msgid "URL must use one of the following protocols:"
|
||||
msgstr "URL должен использовать один из следующих протоколов:"
|
||||
@@ -1667,8 +1700,8 @@ msgstr "Видимое имя этой секции"
|
||||
msgid "VLESS flow"
|
||||
msgstr "VLESS flow"
|
||||
|
||||
msgid "vless://, vmess://, ss://, trojan://, socks4/5://, hy2/hysteria2:// links"
|
||||
msgstr "ссылки vless://, vmess://, ss://, trojan://, socks4/5://, hy2/hysteria2://"
|
||||
msgid "vless://, vmess://, ss://, trojan://, socks4/5://, http(s)://, hy2/hysteria2:// links"
|
||||
msgstr "ссылки vless://, vmess://, ss://, trojan://, socks4/5://, http(s)://, hy2/hysteria2://"
|
||||
|
||||
msgid "WAN"
|
||||
msgstr "WAN"
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
const COPYABLE_PROXY_URI_RE =
|
||||
/^(vless|vmess|trojan|ss|ssr|hysteria2|hy2|tuic|socks4|socks4a|socks5):\/\//i;
|
||||
const HTTP_PROXY_URI_RE =
|
||||
/^https?:\/\/(?:[^/@\s]+(?::[^/@\s]*)?@)?[^:/?#@\s]+:(\d{1,5})$/i;
|
||||
|
||||
const COPYABLE_PROXY_OUTBOUND_TYPES = new Set([
|
||||
'vless',
|
||||
@@ -16,10 +18,22 @@ const COPYABLE_PROXY_OUTBOUND_TYPES = new Set([
|
||||
'socks4',
|
||||
'socks4a',
|
||||
'socks5',
|
||||
'http',
|
||||
]);
|
||||
|
||||
export function isCopyableProxyLink(link?: string) {
|
||||
return COPYABLE_PROXY_URI_RE.test((link || '').trim());
|
||||
const value = (link || '').trim();
|
||||
if (COPYABLE_PROXY_URI_RE.test(value)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
const httpProxy = value.match(HTTP_PROXY_URI_RE);
|
||||
if (!httpProxy) {
|
||||
return false;
|
||||
}
|
||||
|
||||
const port = Number(httpProxy[1]);
|
||||
return Number.isInteger(port) && port >= 1 && port <= 65535;
|
||||
}
|
||||
|
||||
export function isCopyableProxyOutboundType(type?: string) {
|
||||
|
||||
@@ -16,6 +16,8 @@ const copyableLinks = [
|
||||
'socks4://example.com:1080',
|
||||
'socks4a://example.com:1080',
|
||||
'socks5://user:pass@example.com:1080',
|
||||
'http://example.com:80',
|
||||
'https://user:pass@example.com:443',
|
||||
];
|
||||
|
||||
const nonCopyableLinks = [
|
||||
@@ -24,6 +26,8 @@ const nonCopyableLinks = [
|
||||
'block',
|
||||
'urltest',
|
||||
'https://example.com/subscription',
|
||||
'https://example.com',
|
||||
'http://example.com:99999',
|
||||
'wireguard://example.com',
|
||||
];
|
||||
|
||||
@@ -47,6 +51,7 @@ describe('isCopyableProxyOutboundType', () => {
|
||||
expect(isCopyableProxyOutboundType('shadowsocks')).toBe(true);
|
||||
expect(isCopyableProxyOutboundType('hysteria2')).toBe(true);
|
||||
expect(isCopyableProxyOutboundType('socks')).toBe(true);
|
||||
expect(isCopyableProxyOutboundType('http')).toBe(true);
|
||||
});
|
||||
|
||||
it('rejects group, service and routing-only outbound types', () => {
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
import { describe, expect, it } from 'vitest';
|
||||
import { validateHttpProxyUrl } from '../validateHttpProxyUrl';
|
||||
|
||||
const validUrls = [
|
||||
['http ipv4', 'http://127.0.0.1:80'],
|
||||
['http domain', 'http://proxy.example.com:8080'],
|
||||
['https auth', 'https://user:pass@example.com:443'],
|
||||
['uppercase auth and host', 'https://USER:PASSWORD@Example.COM:8443'],
|
||||
];
|
||||
|
||||
const invalidUrls = [
|
||||
['missing port', 'http://example.com'],
|
||||
['missing host', 'http://:8080'],
|
||||
['invalid port', 'http://example.com:99999'],
|
||||
['path present', 'https://example.com:443/path'],
|
||||
['query present', 'https://example.com:443?token=abc'],
|
||||
['space present', 'http://exa mple.com:80'],
|
||||
['empty username', 'http://:pass@example.com:80'],
|
||||
['unsupported scheme', 'socks5://example.com:1080'],
|
||||
];
|
||||
|
||||
describe('validateHttpProxyUrl', () => {
|
||||
describe.each(validUrls)('valid URL: %s', (_desc, url) => {
|
||||
it('returns valid=true', () => {
|
||||
expect(validateHttpProxyUrl(url).valid).toBe(true);
|
||||
});
|
||||
});
|
||||
|
||||
describe.each(invalidUrls)('invalid URL: %s', (_desc, url) => {
|
||||
it('returns valid=false', () => {
|
||||
expect(validateHttpProxyUrl(url).valid).toBe(false);
|
||||
});
|
||||
});
|
||||
});
|
||||
@@ -31,6 +31,8 @@ const validUrls = [
|
||||
['socks4', 'socks4://127.0.0.1:1080'],
|
||||
['socks4a', 'socks4a://example.com:1080'],
|
||||
['socks5', 'socks5://user:pass@example.com:1080'],
|
||||
['http proxy', 'http://127.0.0.1:80'],
|
||||
['https proxy', 'https://user:pass@example.com:443'],
|
||||
['hysteria2', 'hysteria2://password@example.com:443'],
|
||||
['hy2', 'hy2://password@example.com:443'],
|
||||
];
|
||||
@@ -50,11 +52,19 @@ describe('validateProxyUrl', () => {
|
||||
});
|
||||
|
||||
it('returns a clear error for unsupported protocols', () => {
|
||||
const res = validateProxyUrl('http://example.com');
|
||||
const res = validateProxyUrl('wireguard://example.com');
|
||||
|
||||
expect(res.valid).toBe(false);
|
||||
expect(res.message).toContain('vmess://');
|
||||
expect(res.message).toContain('socks4a://');
|
||||
expect(res.message).toContain('http://');
|
||||
expect(res.message).toContain('hy2://');
|
||||
});
|
||||
|
||||
it('rejects HTTP URLs that look like subscription URLs rather than proxy endpoints', () => {
|
||||
const res = validateProxyUrl('https://example.com/subscription');
|
||||
|
||||
expect(res.valid).toBe(false);
|
||||
expect(res.message).toContain('path');
|
||||
});
|
||||
});
|
||||
|
||||
@@ -0,0 +1,101 @@
|
||||
import { ValidationResult } from './types';
|
||||
import { validateDomain } from './validateDomain';
|
||||
import { validateIPV4 } from './validateIp';
|
||||
|
||||
export function validateHttpProxyUrl(url: string): ValidationResult {
|
||||
try {
|
||||
if (!/^https?:\/\//.test(url)) {
|
||||
return {
|
||||
valid: false,
|
||||
message: _(
|
||||
'Invalid HTTP proxy URL: must start with http:// or https://',
|
||||
),
|
||||
};
|
||||
}
|
||||
|
||||
if (!url || /\s/.test(url)) {
|
||||
return {
|
||||
valid: false,
|
||||
message: _('Invalid HTTP proxy URL: must not contain spaces'),
|
||||
};
|
||||
}
|
||||
|
||||
const body = url.replace(/^https?:\/\//, '');
|
||||
if (/[/?#]/.test(body)) {
|
||||
return {
|
||||
valid: false,
|
||||
message: _(
|
||||
'Invalid HTTP proxy URL: path, query, and fragment are not supported',
|
||||
),
|
||||
};
|
||||
}
|
||||
|
||||
const atIndex = body.lastIndexOf('@');
|
||||
const credentials = atIndex >= 0 ? body.slice(0, atIndex) : '';
|
||||
const hostPortPart = atIndex >= 0 ? body.slice(atIndex + 1) : body;
|
||||
|
||||
if (credentials) {
|
||||
const [username] = credentials.split(':');
|
||||
if (!username) {
|
||||
return {
|
||||
valid: false,
|
||||
message: _('Invalid HTTP proxy URL: missing username'),
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
if (!hostPortPart) {
|
||||
return {
|
||||
valid: false,
|
||||
message: _('Invalid HTTP proxy URL: missing host and port'),
|
||||
};
|
||||
}
|
||||
|
||||
const [host, port, extra] = hostPortPart.split(':');
|
||||
if (extra !== undefined) {
|
||||
return {
|
||||
valid: false,
|
||||
message: _('Invalid HTTP proxy URL: invalid host and port'),
|
||||
};
|
||||
}
|
||||
|
||||
if (!host) {
|
||||
return {
|
||||
valid: false,
|
||||
message: _('Invalid HTTP proxy URL: missing hostname or IP'),
|
||||
};
|
||||
}
|
||||
|
||||
if (!port) {
|
||||
return {
|
||||
valid: false,
|
||||
message: _('Invalid HTTP proxy URL: missing port'),
|
||||
};
|
||||
}
|
||||
|
||||
const portNum = Number(port);
|
||||
if (!Number.isInteger(portNum) || portNum < 1 || portNum > 65535) {
|
||||
return {
|
||||
valid: false,
|
||||
message: _('Invalid HTTP proxy URL: invalid port number'),
|
||||
};
|
||||
}
|
||||
|
||||
const ipv4Result = validateIPV4(host);
|
||||
const domainResult = validateDomain(host);
|
||||
|
||||
if (!ipv4Result.valid && !domainResult.valid) {
|
||||
return {
|
||||
valid: false,
|
||||
message: _('Invalid HTTP proxy URL: invalid host format'),
|
||||
};
|
||||
}
|
||||
} catch (_e) {
|
||||
return {
|
||||
valid: false,
|
||||
message: _('Invalid HTTP proxy URL: parsing failed'),
|
||||
};
|
||||
}
|
||||
|
||||
return { valid: true, message: _('Valid') };
|
||||
}
|
||||
@@ -5,6 +5,7 @@ import { validateVmessUrl } from './validateVmessUrl';
|
||||
import { validateTrojanUrl } from './validateTrojanUrl';
|
||||
import { validateSocksUrl } from './validateSocksUrl';
|
||||
import { validateHysteria2Url } from './validateHysteriaUrl';
|
||||
import { validateHttpProxyUrl } from './validateHttpProxyUrl';
|
||||
|
||||
// TODO refactor current validation and add tests
|
||||
export function validateProxyUrl(url: string): ValidationResult {
|
||||
@@ -30,6 +31,10 @@ export function validateProxyUrl(url: string): ValidationResult {
|
||||
return validateSocksUrl(trimmedUrl);
|
||||
}
|
||||
|
||||
if (/^https?:\/\//.test(trimmedUrl)) {
|
||||
return validateHttpProxyUrl(trimmedUrl);
|
||||
}
|
||||
|
||||
if (
|
||||
trimmedUrl.startsWith('hysteria2://') ||
|
||||
trimmedUrl.startsWith('hy2://')
|
||||
@@ -40,7 +45,7 @@ export function validateProxyUrl(url: string): ValidationResult {
|
||||
return {
|
||||
valid: false,
|
||||
message: _(
|
||||
'URL must start with vless://, vmess://, ss://, trojan://, socks4://, socks4a://, socks5://, hysteria2://, or hy2://',
|
||||
'URL must start with vless://, vmess://, ss://, trojan://, socks4://, socks4a://, socks5://, http://, https://, hysteria2://, or hy2://',
|
||||
),
|
||||
};
|
||||
}
|
||||
|
||||
@@ -621,6 +621,93 @@ function validateHysteria2Url(url) {
|
||||
}
|
||||
}
|
||||
|
||||
// src/validators/validateHttpProxyUrl.ts
|
||||
function validateHttpProxyUrl(url) {
|
||||
try {
|
||||
if (!/^https?:\/\//.test(url)) {
|
||||
return {
|
||||
valid: false,
|
||||
message: _(
|
||||
"Invalid HTTP proxy URL: must start with http:// or https://"
|
||||
)
|
||||
};
|
||||
}
|
||||
if (!url || /\s/.test(url)) {
|
||||
return {
|
||||
valid: false,
|
||||
message: _("Invalid HTTP proxy URL: must not contain spaces")
|
||||
};
|
||||
}
|
||||
const body = url.replace(/^https?:\/\//, "");
|
||||
if (/[/?#]/.test(body)) {
|
||||
return {
|
||||
valid: false,
|
||||
message: _(
|
||||
"Invalid HTTP proxy URL: path, query, and fragment are not supported"
|
||||
)
|
||||
};
|
||||
}
|
||||
const atIndex = body.lastIndexOf("@");
|
||||
const credentials = atIndex >= 0 ? body.slice(0, atIndex) : "";
|
||||
const hostPortPart = atIndex >= 0 ? body.slice(atIndex + 1) : body;
|
||||
if (credentials) {
|
||||
const [username] = credentials.split(":");
|
||||
if (!username) {
|
||||
return {
|
||||
valid: false,
|
||||
message: _("Invalid HTTP proxy URL: missing username")
|
||||
};
|
||||
}
|
||||
}
|
||||
if (!hostPortPart) {
|
||||
return {
|
||||
valid: false,
|
||||
message: _("Invalid HTTP proxy URL: missing host and port")
|
||||
};
|
||||
}
|
||||
const [host, port, extra] = hostPortPart.split(":");
|
||||
if (extra !== void 0) {
|
||||
return {
|
||||
valid: false,
|
||||
message: _("Invalid HTTP proxy URL: invalid host and port")
|
||||
};
|
||||
}
|
||||
if (!host) {
|
||||
return {
|
||||
valid: false,
|
||||
message: _("Invalid HTTP proxy URL: missing hostname or IP")
|
||||
};
|
||||
}
|
||||
if (!port) {
|
||||
return {
|
||||
valid: false,
|
||||
message: _("Invalid HTTP proxy URL: missing port")
|
||||
};
|
||||
}
|
||||
const portNum = Number(port);
|
||||
if (!Number.isInteger(portNum) || portNum < 1 || portNum > 65535) {
|
||||
return {
|
||||
valid: false,
|
||||
message: _("Invalid HTTP proxy URL: invalid port number")
|
||||
};
|
||||
}
|
||||
const ipv4Result = validateIPV4(host);
|
||||
const domainResult = validateDomain(host);
|
||||
if (!ipv4Result.valid && !domainResult.valid) {
|
||||
return {
|
||||
valid: false,
|
||||
message: _("Invalid HTTP proxy URL: invalid host format")
|
||||
};
|
||||
}
|
||||
} catch (_e) {
|
||||
return {
|
||||
valid: false,
|
||||
message: _("Invalid HTTP proxy URL: parsing failed")
|
||||
};
|
||||
}
|
||||
return { valid: true, message: _("Valid") };
|
||||
}
|
||||
|
||||
// src/validators/validateProxyUrl.ts
|
||||
function validateProxyUrl(url) {
|
||||
const trimmedUrl = url.trim();
|
||||
@@ -639,13 +726,16 @@ function validateProxyUrl(url) {
|
||||
if (/^socks(4|4a|5):\/\//.test(trimmedUrl)) {
|
||||
return validateSocksUrl(trimmedUrl);
|
||||
}
|
||||
if (/^https?:\/\//.test(trimmedUrl)) {
|
||||
return validateHttpProxyUrl(trimmedUrl);
|
||||
}
|
||||
if (trimmedUrl.startsWith("hysteria2://") || trimmedUrl.startsWith("hy2://")) {
|
||||
return validateHysteria2Url(trimmedUrl);
|
||||
}
|
||||
return {
|
||||
valid: false,
|
||||
message: _(
|
||||
"URL must start with vless://, vmess://, ss://, trojan://, socks4://, socks4a://, socks5://, hysteria2://, or hy2://"
|
||||
"URL must start with vless://, vmess://, ss://, trojan://, socks4://, socks4a://, socks5://, http://, https://, hysteria2://, or hy2://"
|
||||
)
|
||||
};
|
||||
}
|
||||
@@ -928,8 +1018,18 @@ function insertIf(condition, elements) {
|
||||
|
||||
// src/helpers/isCopyableProxyLink.ts
|
||||
var COPYABLE_PROXY_URI_RE = /^(vless|vmess|trojan|ss|ssr|hysteria2|hy2|tuic|socks4|socks4a|socks5):\/\//i;
|
||||
var HTTP_PROXY_URI_RE = /^https?:\/\/(?:[^/@\s]+(?::[^/@\s]*)?@)?[^:/?#@\s]+:(\d{1,5})$/i;
|
||||
function isCopyableProxyLink(link) {
|
||||
return COPYABLE_PROXY_URI_RE.test((link || "").trim());
|
||||
const value = (link || "").trim();
|
||||
if (COPYABLE_PROXY_URI_RE.test(value)) {
|
||||
return true;
|
||||
}
|
||||
const httpProxy = value.match(HTTP_PROXY_URI_RE);
|
||||
if (!httpProxy) {
|
||||
return false;
|
||||
}
|
||||
const port = Number(httpProxy[1]);
|
||||
return Number.isInteger(port) && port >= 1 && port <= 65535;
|
||||
}
|
||||
|
||||
// src/icons/renderLoaderCircleIcon24.ts
|
||||
|
||||
@@ -3381,7 +3381,7 @@ function createSectionContent(section) {
|
||||
form.DynamicList,
|
||||
"selector_proxy_links",
|
||||
_("Connection URL"),
|
||||
_("vless://, vmess://, ss://, trojan://, socks4/5://, hy2/hysteria2:// links"),
|
||||
_("vless://, vmess://, ss://, trojan://, socks4/5://, http(s)://, hy2/hysteria2:// links"),
|
||||
);
|
||||
o.depends("action", "proxy");
|
||||
o.modalonly = true;
|
||||
|
||||
@@ -7,8 +7,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PODKOP PLUS\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2026-06-08 02:39+0300\n"
|
||||
"PO-Revision-Date: 2026-06-08 02:39+0300\n"
|
||||
"POT-Creation-Date: 2026-06-10 06:49+0300\n"
|
||||
"PO-Revision-Date: 2026-06-10 06:49+0300\n"
|
||||
"Last-Translator: ushan0v\n"
|
||||
"Language-Team: none\n"
|
||||
"Language: ru\n"
|
||||
@@ -608,6 +608,39 @@ msgstr "Неверный домен"
|
||||
msgid "Invalid format. Use X.X.X.X or X.X.X.X/Y"
|
||||
msgstr "Неверный формат. Используйте X.X.X.X или X.X.X.X/Y"
|
||||
|
||||
msgid "Invalid HTTP proxy URL: invalid host and port"
|
||||
msgstr "Неверный URL HTTP proxy: неверный хост и порт"
|
||||
|
||||
msgid "Invalid HTTP proxy URL: invalid host format"
|
||||
msgstr "Неверный URL HTTP proxy: неверный формат хоста"
|
||||
|
||||
msgid "Invalid HTTP proxy URL: invalid port number"
|
||||
msgstr "Неверный URL HTTP proxy: неверный номер порта"
|
||||
|
||||
msgid "Invalid HTTP proxy URL: missing host and port"
|
||||
msgstr "Неверный URL HTTP proxy: отсутствуют хост и порт"
|
||||
|
||||
msgid "Invalid HTTP proxy URL: missing hostname or IP"
|
||||
msgstr "Неверный URL HTTP proxy: отсутствует имя хоста или IP-адрес"
|
||||
|
||||
msgid "Invalid HTTP proxy URL: missing port"
|
||||
msgstr "Неверный URL HTTP proxy: отсутствует порт"
|
||||
|
||||
msgid "Invalid HTTP proxy URL: missing username"
|
||||
msgstr "Неверный URL HTTP proxy: отсутствует имя пользователя"
|
||||
|
||||
msgid "Invalid HTTP proxy URL: must not contain spaces"
|
||||
msgstr "Неверный URL HTTP proxy: не должен содержать пробелов"
|
||||
|
||||
msgid "Invalid HTTP proxy URL: must start with http:// or https://"
|
||||
msgstr "Неверный URL HTTP proxy: должен начинаться с http:// или https://"
|
||||
|
||||
msgid "Invalid HTTP proxy URL: parsing failed"
|
||||
msgstr "Неверный URL HTTP proxy: ошибка разбора"
|
||||
|
||||
msgid "Invalid HTTP proxy URL: path, query, and fragment are not supported"
|
||||
msgstr "Неверный URL HTTP proxy: путь, query и fragment не поддерживаются"
|
||||
|
||||
msgid "Invalid HY2 URL: insecure must be 0 or 1"
|
||||
msgstr "Неверный URL Hysteria2: параметр insecure должен быть 0 или 1"
|
||||
|
||||
@@ -1580,8 +1613,8 @@ msgstr "Исходящий"
|
||||
msgid "Uploaded"
|
||||
msgstr "Отдано"
|
||||
|
||||
msgid "URL must start with vless://, vmess://, ss://, trojan://, socks4://, socks4a://, socks5://, hysteria2://, or hy2://"
|
||||
msgstr "URL должен начинаться с vless://, vmess://, ss://, trojan://, socks4://, socks4a://, socks5://, hysteria2:// или hy2://"
|
||||
msgid "URL must start with vless://, vmess://, ss://, trojan://, socks4://, socks4a://, socks5://, http://, https://, hysteria2://, or hy2://"
|
||||
msgstr "URL должен начинаться с vless://, vmess://, ss://, trojan://, socks4://, socks4a://, socks5://, http://, https://, hysteria2:// или hy2://"
|
||||
|
||||
msgid "URL must use one of the following protocols:"
|
||||
msgstr "URL должен использовать один из следующих протоколов:"
|
||||
@@ -1667,8 +1700,8 @@ msgstr "Видимое имя этой секции"
|
||||
msgid "VLESS flow"
|
||||
msgstr "VLESS flow"
|
||||
|
||||
msgid "vless://, vmess://, ss://, trojan://, socks4/5://, hy2/hysteria2:// links"
|
||||
msgstr "ссылки vless://, vmess://, ss://, trojan://, socks4/5://, hy2/hysteria2://"
|
||||
msgid "vless://, vmess://, ss://, trojan://, socks4/5://, http(s)://, hy2/hysteria2:// links"
|
||||
msgstr "ссылки vless://, vmess://, ss://, trojan://, socks4/5://, http(s)://, hy2/hysteria2://"
|
||||
|
||||
msgid "WAN"
|
||||
msgstr "WAN"
|
||||
|
||||
@@ -7,8 +7,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PODKOP PLUS\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2026-06-08 23:39+0300\n"
|
||||
"PO-Revision-Date: 2026-06-08 23:39+0300\n"
|
||||
"POT-Creation-Date: 2026-06-10 03:49+0300\n"
|
||||
"PO-Revision-Date: 2026-06-10 03:49+0300\n"
|
||||
"Last-Translator: ushan0v <ushanov2204@gmail.com>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"Language: \n"
|
||||
@@ -21,13 +21,13 @@ msgstr ""
|
||||
msgid "-- Select --"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/dashboard/initController.ts:888
|
||||
#: src/podkop/tabs/dashboard/initController.ts:899
|
||||
#: src/podkop/tabs/dashboard/initController.ts:893
|
||||
#: src/podkop/tabs/dashboard/initController.ts:904
|
||||
msgid "✔ Running"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/dashboard/initController.ts:889
|
||||
#: src/podkop/tabs/dashboard/initController.ts:900
|
||||
#: src/podkop/tabs/dashboard/initController.ts:894
|
||||
#: src/podkop/tabs/dashboard/initController.ts:905
|
||||
msgid "✘ Stopped"
|
||||
msgstr ""
|
||||
|
||||
@@ -49,7 +49,7 @@ msgstr ""
|
||||
msgid "Active"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/dashboard/initController.ts:846
|
||||
#: src/podkop/tabs/dashboard/initController.ts:851
|
||||
msgid "Active Connections"
|
||||
msgstr ""
|
||||
|
||||
@@ -247,7 +247,7 @@ msgstr ""
|
||||
#: src/podkop/tabs/diagnostic/checks/runDnsCheck.ts:27
|
||||
#: src/podkop/tabs/diagnostic/checks/runInboundsCheck.ts:162
|
||||
#: src/podkop/tabs/diagnostic/checks/runNftCheck.ts:28
|
||||
#: src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts:48
|
||||
#: src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts:31
|
||||
#: src/podkop/tabs/diagnostic/checks/runSingBoxCheck.ts:25
|
||||
#: src/podkop/tabs/diagnostic/checks/runZapret2Check.ts:27
|
||||
#: src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:27
|
||||
@@ -276,7 +276,7 @@ msgstr ""
|
||||
#: src/podkop/tabs/diagnostic/checks/runFakeIPCheck.ts:15
|
||||
#: src/podkop/tabs/diagnostic/checks/runInboundsCheck.ts:150
|
||||
#: src/podkop/tabs/diagnostic/checks/runNftCheck.ts:13
|
||||
#: src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts:34
|
||||
#: src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts:17
|
||||
#: src/podkop/tabs/diagnostic/checks/runSingBoxCheck.ts:13
|
||||
#: src/podkop/tabs/diagnostic/checks/runZapret2Check.ts:15
|
||||
#: src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:15
|
||||
@@ -391,7 +391,7 @@ msgstr ""
|
||||
msgid "Connections are unavailable"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts:137
|
||||
#: src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts:125
|
||||
msgid "Connectivity probe failed"
|
||||
msgstr ""
|
||||
|
||||
@@ -548,8 +548,8 @@ msgstr ""
|
||||
msgid "Dont Touch My DHCP!"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/dashboard/initController.ts:772
|
||||
#: src/podkop/tabs/dashboard/initController.ts:810
|
||||
#: src/podkop/tabs/dashboard/initController.ts:777
|
||||
#: src/podkop/tabs/dashboard/initController.ts:815
|
||||
msgid "Downlink"
|
||||
msgstr ""
|
||||
|
||||
@@ -697,12 +697,12 @@ msgstr ""
|
||||
msgid "Failed to copy!"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/methods/shell/index.ts:171
|
||||
#: src/podkop/methods/shell/index.ts:178
|
||||
#: src/podkop/tabs/updates/initController.ts:466
|
||||
#: src/podkop/tabs/updates/initController.ts:467
|
||||
#: src/podkop/tabs/updates/initController.ts:527
|
||||
#: src/podkop/tabs/updates/initController.ts:677
|
||||
#: src/podkop/methods/shell/index.ts:171
|
||||
#: src/podkop/methods/shell/index.ts:178
|
||||
msgid "Failed to execute"
|
||||
msgstr ""
|
||||
|
||||
@@ -737,7 +737,9 @@ msgid "Fallback on unknown DC"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/methods/custom/getDashboardSections.ts:313
|
||||
#: src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts:93
|
||||
#: src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts:77
|
||||
#: src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts:78
|
||||
#: src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts:90
|
||||
msgid "Fastest"
|
||||
msgstr ""
|
||||
|
||||
@@ -882,6 +884,50 @@ msgstr ""
|
||||
msgid "Invalid format. Use X.X.X.X or X.X.X.X/Y"
|
||||
msgstr ""
|
||||
|
||||
#: src/validators/validateHttpProxyUrl.ts:58
|
||||
msgid "Invalid HTTP proxy URL: invalid host and port"
|
||||
msgstr ""
|
||||
|
||||
#: src/validators/validateHttpProxyUrl.ts:90
|
||||
msgid "Invalid HTTP proxy URL: invalid host format"
|
||||
msgstr ""
|
||||
|
||||
#: src/validators/validateHttpProxyUrl.ts:80
|
||||
msgid "Invalid HTTP proxy URL: invalid port number"
|
||||
msgstr ""
|
||||
|
||||
#: src/validators/validateHttpProxyUrl.ts:50
|
||||
msgid "Invalid HTTP proxy URL: missing host and port"
|
||||
msgstr ""
|
||||
|
||||
#: src/validators/validateHttpProxyUrl.ts:65
|
||||
msgid "Invalid HTTP proxy URL: missing hostname or IP"
|
||||
msgstr ""
|
||||
|
||||
#: src/validators/validateHttpProxyUrl.ts:72
|
||||
msgid "Invalid HTTP proxy URL: missing port"
|
||||
msgstr ""
|
||||
|
||||
#: src/validators/validateHttpProxyUrl.ts:42
|
||||
msgid "Invalid HTTP proxy URL: missing username"
|
||||
msgstr ""
|
||||
|
||||
#: src/validators/validateHttpProxyUrl.ts:19
|
||||
msgid "Invalid HTTP proxy URL: must not contain spaces"
|
||||
msgstr ""
|
||||
|
||||
#: src/validators/validateHttpProxyUrl.ts:10
|
||||
msgid "Invalid HTTP proxy URL: must start with http:// or https://"
|
||||
msgstr ""
|
||||
|
||||
#: src/validators/validateHttpProxyUrl.ts:96
|
||||
msgid "Invalid HTTP proxy URL: parsing failed"
|
||||
msgstr ""
|
||||
|
||||
#: src/validators/validateHttpProxyUrl.ts:27
|
||||
msgid "Invalid HTTP proxy URL: path, query, and fragment are not supported"
|
||||
msgstr ""
|
||||
|
||||
#: src/validators/validateHysteriaUrl.ts:107
|
||||
msgid "Invalid HY2 URL: insecure must be 0 or 1"
|
||||
msgstr ""
|
||||
@@ -1181,7 +1227,7 @@ msgstr ""
|
||||
msgid "Maximum response time delta in milliseconds"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/dashboard/initController.ts:850
|
||||
#: src/podkop/tabs/dashboard/initController.ts:855
|
||||
msgid "Memory Usage"
|
||||
msgstr ""
|
||||
|
||||
@@ -1315,9 +1361,10 @@ msgstr ""
|
||||
msgid "Not required for this listen address"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts:109
|
||||
#: src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts:115
|
||||
#: src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts:143
|
||||
#: src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts:78
|
||||
#: src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts:90
|
||||
#: src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts:103
|
||||
#: src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts:131
|
||||
msgid "Not responding"
|
||||
msgstr ""
|
||||
|
||||
@@ -1816,9 +1863,9 @@ msgstr ""
|
||||
msgid "Servers with names matching these regular expressions will not be tested by URLTest"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:571
|
||||
#: src/podkop/methods/shell/index.ts:380
|
||||
#: src/podkop/methods/shell/index.ts:401
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:571
|
||||
msgid "Service action failed"
|
||||
msgstr ""
|
||||
|
||||
@@ -1826,7 +1873,7 @@ msgstr ""
|
||||
msgid "Service list"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/dashboard/initController.ts:883
|
||||
#: src/podkop/tabs/dashboard/initController.ts:888
|
||||
msgid "Services info"
|
||||
msgstr ""
|
||||
|
||||
@@ -1988,7 +2035,7 @@ msgstr ""
|
||||
msgid "Successfully copied!"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/dashboard/initController.ts:843
|
||||
#: src/podkop/tabs/dashboard/initController.ts:848
|
||||
msgid "System info"
|
||||
msgstr ""
|
||||
|
||||
@@ -2102,12 +2149,12 @@ msgstr ""
|
||||
msgid "tiny"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/dashboard/initController.ts:769
|
||||
#: src/podkop/tabs/dashboard/initController.ts:774
|
||||
#: src/podkop/tabs/dashboard/partials/renderSections.ts:216
|
||||
msgid "Traffic"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/dashboard/initController.ts:803
|
||||
#: src/podkop/tabs/dashboard/initController.ts:808
|
||||
msgid "Traffic Total"
|
||||
msgstr ""
|
||||
|
||||
@@ -2252,8 +2299,8 @@ msgstr ""
|
||||
msgid "Update subscriptions"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/dashboard/initController.ts:771
|
||||
#: src/podkop/tabs/dashboard/initController.ts:806
|
||||
#: src/podkop/tabs/dashboard/initController.ts:776
|
||||
#: src/podkop/tabs/dashboard/initController.ts:811
|
||||
msgid "Uplink"
|
||||
msgstr ""
|
||||
|
||||
@@ -2262,8 +2309,8 @@ msgstr ""
|
||||
msgid "Uploaded"
|
||||
msgstr ""
|
||||
|
||||
#: src/validators/validateProxyUrl.ts:42
|
||||
msgid "URL must start with vless://, vmess://, ss://, trojan://, socks4://, socks4a://, socks5://, hysteria2://, or hy2://"
|
||||
#: src/validators/validateProxyUrl.ts:47
|
||||
msgid "URL must start with vless://, vmess://, ss://, trojan://, socks4://, socks4a://, socks5://, http://, https://, hysteria2://, or hy2://"
|
||||
msgstr ""
|
||||
|
||||
#: src/validators/validateUrl.ts:17
|
||||
@@ -2362,6 +2409,7 @@ msgstr ""
|
||||
#: src/validators/validateDns.ts:18
|
||||
#: src/validators/validateDomain.ts:13
|
||||
#: src/validators/validateDomain.ts:30
|
||||
#: src/validators/validateHttpProxyUrl.ts:100
|
||||
#: src/validators/validateHysteriaUrl.ts:154
|
||||
#: src/validators/validateIp.ts:8
|
||||
#: src/validators/validateOutboundJson.ts:7
|
||||
@@ -2408,7 +2456,7 @@ msgid "VLESS flow"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:3384
|
||||
msgid "vless://, vmess://, ss://, trojan://, socks4/5://, hy2/hysteria2:// links"
|
||||
msgid "vless://, vmess://, ss://, trojan://, socks4/5://, http(s)://, hy2/hysteria2:// links"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runInboundsCheck.ts:70
|
||||
|
||||
@@ -108,6 +108,32 @@ sing_box_cf_add_proxy_outbound() {
|
||||
local scheme
|
||||
scheme="$(url_get_scheme "$url")"
|
||||
case "$scheme" in
|
||||
http | https)
|
||||
local tag host port path userinfo username password tls_enabled
|
||||
|
||||
tag=$(get_outbound_tag_by_section "$section")
|
||||
host=$(url_get_host "$url")
|
||||
port=$(url_get_port "$url")
|
||||
path=$(url_get_path "$url")
|
||||
if [ -z "$host" ] || [ -z "$port" ] || { [ -n "$path" ] && [ "$path" != "/" ]; } || [ "${url#*\?}" != "$url" ]; then
|
||||
log "Invalid HTTP proxy URL: host and explicit port are required; path and query are not supported. Aborted." "fatal"
|
||||
exit 1
|
||||
fi
|
||||
userinfo=$(url_get_userinfo "$url")
|
||||
if [ -n "$userinfo" ]; then
|
||||
case "$userinfo" in
|
||||
*:*)
|
||||
username="${userinfo%%:*}"
|
||||
password="${userinfo#*:}"
|
||||
;;
|
||||
*)
|
||||
username="$userinfo"
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
[ "$scheme" = "https" ] && tls_enabled=1 || tls_enabled=0
|
||||
config=$(sing_box_cm_add_http_outbound "$config" "$tag" "$host" "$port" "$username" "$password" "$tls_enabled")
|
||||
;;
|
||||
socks4 | socks4a | socks5)
|
||||
local tag host port version userinfo username password udp_over_tcp
|
||||
|
||||
|
||||
@@ -389,7 +389,7 @@ function valid_hysteria2_server_ports(value) {
|
||||
|
||||
function type_requires_server(proxy_type) {
|
||||
return proxy_type == "vless" || proxy_type == "vmess" || proxy_type == "trojan" ||
|
||||
proxy_type == "shadowsocks" || proxy_type == "socks" || proxy_type == "hysteria2";
|
||||
proxy_type == "shadowsocks" || proxy_type == "socks" || proxy_type == "http" || proxy_type == "hysteria2";
|
||||
}
|
||||
|
||||
function supported_flow(flow) {
|
||||
@@ -445,7 +445,7 @@ function prefilter_skip_reason(outbound, supports_xhttp, plugin_supports) {
|
||||
proxy_type == "dns" || proxy_type == "block")
|
||||
return "non-proxy outbound type: " + proxy_type;
|
||||
if (proxy_type != "vless" && proxy_type != "vmess" && proxy_type != "trojan" &&
|
||||
proxy_type != "shadowsocks" && proxy_type != "socks" && proxy_type != "hysteria2")
|
||||
proxy_type != "shadowsocks" && proxy_type != "socks" && proxy_type != "http" && proxy_type != "hysteria2")
|
||||
return "unsupported type: " + proxy_type;
|
||||
if (type_requires_server(proxy_type) && !non_empty_string(outbound.server))
|
||||
return "missing or empty server";
|
||||
|
||||
@@ -117,6 +117,10 @@ sing_box_cm_add_socks_outbound() {
|
||||
sing_box_cm_ucode add-socks-outbound "$1" "$2" "$3" "$4" "$5" "$6" "$7" "$8" "$9"
|
||||
}
|
||||
|
||||
sing_box_cm_add_http_outbound() {
|
||||
sing_box_cm_ucode add-http-outbound "$1" "$2" "$3" "$4" "$5" "$6" "$7"
|
||||
}
|
||||
|
||||
sing_box_cm_add_shadowsocks_outbound() {
|
||||
sing_box_cm_ucode add-shadowsocks-outbound "$1" "$2" "$3" "$4" "$5" "$6" "$7" "$8" "$9" "${10}"
|
||||
}
|
||||
|
||||
@@ -616,6 +616,20 @@ function add_socks_outbound(config, args) {
|
||||
add_outbound(config, outbound);
|
||||
}
|
||||
|
||||
function add_http_outbound(config, args) {
|
||||
let outbound = {
|
||||
type: "http",
|
||||
tag: as_string(args[0]),
|
||||
server: as_string(args[1]),
|
||||
server_port: number_arg(args[2])
|
||||
};
|
||||
optional_string(outbound, "username", args[3]);
|
||||
optional_string(outbound, "password", args[4]);
|
||||
if (bool_arg(args[5]))
|
||||
outbound.tls = { enabled: true };
|
||||
add_outbound(config, outbound);
|
||||
}
|
||||
|
||||
function add_shadowsocks_outbound(config, args) {
|
||||
let outbound = {
|
||||
type: "shadowsocks",
|
||||
@@ -1072,6 +1086,7 @@ let handlers = {
|
||||
"set-inbound-transport": set_transport_for_inbound,
|
||||
"add-direct-outbound": add_direct_outbound,
|
||||
"add-socks-outbound": add_socks_outbound,
|
||||
"add-http-outbound": add_http_outbound,
|
||||
"add-shadowsocks-outbound": add_shadowsocks_outbound,
|
||||
"add-vless-outbound": add_vless_outbound,
|
||||
"add-trojan-outbound": add_trojan_outbound,
|
||||
|
||||
@@ -1433,6 +1433,16 @@ function parse_clash_record(record) {
|
||||
outbound.password = as_string(record.password);
|
||||
return outbound;
|
||||
}
|
||||
if (proxy_type == "http" || proxy_type == "https") {
|
||||
let outbound = { type: "http", tag: name, server: server, server_port: port };
|
||||
if (as_string(record.username) != "")
|
||||
outbound.username = as_string(record.username);
|
||||
if (as_string(record.password) != "")
|
||||
outbound.password = as_string(record.password);
|
||||
if (proxy_type == "https" || is_true(record.tls))
|
||||
outbound.tls = { enabled: true };
|
||||
return outbound;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user