diff --git a/package/ctcgfw/luci-app-vssr/Makefile b/package/ctcgfw/luci-app-vssr/Makefile index 43d9196561..018b406118 100644 --- a/package/ctcgfw/luci-app-vssr/Makefile +++ b/package/ctcgfw/luci-app-vssr/Makefile @@ -1,8 +1,8 @@ include $(TOPDIR)/rules.mk PKG_NAME:=luci-app-vssr -PKG_VERSION:=1.13 -PKG_RELEASE:=20200823 +PKG_VERSION:=1.14 +PKG_RELEASE:=20200824 include $(INCLUDE_DIR)/package.mk diff --git a/package/ctcgfw/luci-app-vssr/luasrc/controller/vssr.lua b/package/ctcgfw/luci-app-vssr/luasrc/controller/vssr.lua index 8fa383f0ab..5c48e2f4ca 100644 --- a/package/ctcgfw/luci-app-vssr/luasrc/controller/vssr.lua +++ b/package/ctcgfw/luci-app-vssr/luasrc/controller/vssr.lua @@ -7,7 +7,7 @@ function index() if nixio.fs.access("/usr/bin/ssr-redir") then entry({"admin", "services", "vssr"}, - alias("admin", "services", "vssr", "client"), _("Hello World"), 10).dependent = + alias("admin", "services", "vssr", "client"), _("Hello World"), 0).dependent = true -- 首页 entry({"admin", "services", "vssr", "client"}, cbi("vssr/client"), _("SSR Client"), 10).leaf = true -- 基本设置 @@ -47,7 +47,7 @@ function index() entry({"admin", "services", "vssr", "checkport"}, call("check_port")) -- 检测单个端口并返回Ping entry({"admin", "services", "vssr", "run"}, call("act_status")) -- 检测全局服务器状态 entry({"admin", "services", "vssr", "change"}, call("change_node")) -- 切换节点 - entry({"admin", "services", "vssr", "allserver"}, call("get_servers")) -- 获取所有节点Json + --entry({"admin", "services", "vssr", "allserver"}, call("get_servers")) -- 获取所有节点Json entry({"admin", "services", "vssr", "subscribe"}, call("get_subscribe")) -- 执行订阅 entry({"admin", "services", "vssr", "flag"}, call("get_flag")) -- 获取节点国旗 iso code entry({"admin", "services", "vssr", "ip"}, call("check_ip")) -- 获取ip情况 @@ -99,10 +99,6 @@ function get_servers() uci:foreach("vssr", "servers", function(s) local e = {} e["name"] = s[".name"] - local t1 = luci.sys.exec( - "ping -c 1 -W 1 %q 2>&1 | grep -o 'time=[0-9]*.[0-9]' | awk -F '=' '{print$2}'" % - s["server"]) - e["t1"] = t1 table.insert(server_table, e) end) luci.http.prepare_content("application/json") @@ -114,14 +110,12 @@ function change_node() local e = {} local uci = luci.model.uci.cursor() local sid = luci.http.formvalue("set") - local name = "" - uci:foreach("vssr", "global", function(s) name = s[".name"] end) e.status = false e.sid = sid if sid ~= "" then - uci:set("vssr", name, "global_server", sid) + uci:set("vssr", '@global[0]', 'global_server', sid) uci:commit("vssr") - luci.sys.call("/etc/init.d/vssr restart") + luci.sys.exec("/etc/init.d/vssr reload") e.status = true end luci.http.prepare_content("application/json") diff --git a/package/ctcgfw/luci-app-vssr/luasrc/model/cbi/vssr/advanced.lua b/package/ctcgfw/luci-app-vssr/luasrc/model/cbi/vssr/advanced.lua index c938774732..78305c26c0 100644 --- a/package/ctcgfw/luci-app-vssr/luasrc/model/cbi/vssr/advanced.lua +++ b/package/ctcgfw/luci-app-vssr/luasrc/model/cbi/vssr/advanced.lua @@ -103,7 +103,7 @@ o.inputstyle = "reset" o.write = function() uci:delete_all("vssr", "servers", function(s) return true end) uci:commit("vssr") - luci.sys.call("/etc/init.d/vssr stop") + luci.sys.exec("/etc/init.d/vssr stop") luci.http.redirect(luci.dispatcher.build_url("admin", "services", "vssr", "advanced")) end diff --git a/package/ctcgfw/luci-app-vssr/luasrc/model/cbi/vssr/client-config.lua b/package/ctcgfw/luci-app-vssr/luasrc/model/cbi/vssr/client-config.lua index 592dd1a7a5..e5bf092829 100644 --- a/package/ctcgfw/luci-app-vssr/luasrc/model/cbi/vssr/client-config.lua +++ b/package/ctcgfw/luci-app-vssr/luasrc/model/cbi/vssr/client-config.lua @@ -132,7 +132,7 @@ o.description = translate( o = s:option(Value, "alias", translate("Alias(optional)")) -o = s:option(Value, "flag", translate("Country")) +o = s:option(Value, "flag", translate("Area")) o.description = translate("请自己指定。格式:cn us hk 等") o.rmempty = true diff --git a/package/ctcgfw/luci-app-vssr/luasrc/model/cbi/vssr/client.lua b/package/ctcgfw/luci-app-vssr/luasrc/model/cbi/vssr/client.lua index 37ee587612..fa1e84e409 100644 --- a/package/ctcgfw/luci-app-vssr/luasrc/model/cbi/vssr/client.lua +++ b/package/ctcgfw/luci-app-vssr/luasrc/model/cbi/vssr/client.lua @@ -6,6 +6,8 @@ local m, s, sec, o, kcp_enable local vssr = "vssr" local gfwmode=0 + + if nixio.fs.access("/etc/dnsmasq.ssr/gfw_list.conf") then gfwmode=1 end @@ -34,6 +36,9 @@ end table.sort(key_table) +local route_name = {"youtube_server","tw_video_server","netflix_server","disney_server","prime_server","tvb_server","custom_server"} +local route_label = {"Youtube Proxy","TaiWan Video Proxy","Netflix Proxy","Diseny+ Proxy","Prime Video Proxy","TVB Video Proxy","Custom Proxy"} + -- [[ Global Setting ]]-- s = m:section(TypedSection, "global",translate("Basic Settings [SS|SSR|V2ray|Trojan]")) s.anonymous = true @@ -53,46 +58,13 @@ o = s:option(Flag, "v2ray_flow", translate("Open v2ray route")) o.rmempty = false o.description = translate("When open v2ray routed,Apply may take more time.") -o = s:option(ListValue, "youtube_server", translate("Youtube Proxy")) -o:value("nil", translate("Same as Main Server")) -for _,key in pairs(key_table) do o:value(key,server_table[key]) end -o:depends("v2ray_flow", "1") -o.default = "nil" - - - -o = s:option(ListValue, "tw_video_server", translate("TaiWan Video Proxy")) -o:value("nil", translate("Same as Main Server")) -for _,key in pairs(key_table) do o:value(key,server_table[key]) end -o:depends("v2ray_flow", "1") -o.default = "nil" - - -o = s:option(ListValue, "netflix_server", translate("Netflix Proxy")) -o:value("nil", translate("Same as Main Server")) -for _,key in pairs(key_table) do o:value(key,server_table[key]) end -o:depends("v2ray_flow", "1") -o.default = "nil" - - -o = s:option(ListValue, "disney_server", translate("Diseny+ Proxy")) -o:value("nil", translate("Same as Main Server")) -for _,key in pairs(key_table) do o:value(key,server_table[key]) end -o:depends("v2ray_flow", "1") -o.default = "nil" - - -o = s:option(ListValue, "prime_server", translate("Prime Video Proxy")) -o:value("nil", translate("Same as Main Server")) -for _,key in pairs(key_table) do o:value(key,server_table[key]) end -o:depends("v2ray_flow", "1") -o.default = "nil" - -o = s:option(ListValue, "tvb_server", translate("TVB Video Proxy")) -o:value("nil", translate("Same as Main Server")) -for _,key in pairs(key_table) do o:value(key,server_table[key]) end -o:depends("v2ray_flow", "1") -o.default = "nil" +for i,v in pairs(route_name) do + o = s:option(ListValue, v, translate(route_label[i])) + o:value("nil", translate("Same as Main Server")) + for _,key in pairs(key_table) do o:value(key,server_table[key]) end + o:depends("v2ray_flow", "1") + o.default = "nil" +end o = s:option(ListValue, "threads", translate("Multi Threads Option")) o:value("0", translate("Auto Threads")) diff --git a/package/ctcgfw/luci-app-vssr/luasrc/model/cbi/vssr/control.lua b/package/ctcgfw/luci-app-vssr/luasrc/model/cbi/vssr/control.lua index 8be1a49c3b..bd841e4db4 100644 --- a/package/ctcgfw/luci-app-vssr/luasrc/model/cbi/vssr/control.lua +++ b/package/ctcgfw/luci-app-vssr/luasrc/model/cbi/vssr/control.lua @@ -85,4 +85,9 @@ o.remove = function(self, section, value) NXFS.writefile(blockconf, "") end +s:tab("proxy", translate("Custom Proxy Domain Name")) + +o = s:taboption("proxy", DynamicList, "proxy_domain_name", translate("Proxy Domain Name")) +o.datatype = "hostname" + return m \ No newline at end of file diff --git a/package/ctcgfw/luci-app-vssr/luasrc/view/vssr/ssrurl.htm b/package/ctcgfw/luci-app-vssr/luasrc/view/vssr/ssrurl.htm index 464e6b7d0a..81a92f5763 100644 --- a/package/ctcgfw/luci-app-vssr/luasrc/view/vssr/ssrurl.htm +++ b/package/ctcgfw/luci-app-vssr/luasrc/view/vssr/ssrurl.htm @@ -130,33 +130,66 @@ s.innerHTML = "<%:Import%>ShadowsocksR<%:Configuration Succeeded%>"; return false; } else if (ssu[0] == "ss") { - var ploc = ssu[1].indexOf("#"); - if (ploc > 0) { - url0 = ssu[1].substr(0, ploc); - param = ssu[1].substr(ploc + 1); - } else { - url0 = ssu[1] - } - var sstr = b64decsafe(url0); + var url0, param = ""; + var sipIndex = ssu[1].indexOf("@"); + var ploc = ssu[1].indexOf("#"); + if (ploc > 0) { + url0 = ssu[1].substr(0, ploc); + param = ssu[1].substr(ploc + 1); + } else { + url0 = ssu[1]; + } + if (sipIndex != -1) { + // SIP002 + var userInfo = b64decsafe(url0.substr(0, sipIndex)); + var temp = url0.substr(sipIndex + 1).split("/?"); + var serverInfo = temp[0].split(":"); + var server = serverInfo[0]; + var port = serverInfo[1]; + var method, password, plugin, pluginOpts; + if (temp[1]) { + var pluginInfo = decodeURIComponent(temp[1]); + var pluginIndex = pluginInfo.indexOf(";"); + var pluginNameInfo = pluginInfo.substr(0, pluginIndex); + plugin = pluginNameInfo.substr(pluginNameInfo.indexOf("=") + 1) + pluginOpts = pluginInfo.substr(pluginIndex + 1); + } - el('.type').value = "ss"; - - el('.type').dispatchEvent(event); - var team = sstr.split('@'); - console.log(param); - var part1 = team[0].split(':'); - var part2 = team[1].split(':'); - el('.server').value = part2[0]; - el('.server_port').value = part2[1]; - el('.password').value = part1[1]; - el('.encrypt_method_ss').value = part1[0]; + var userInfoSplitIndex = userInfo.indexOf(":"); + if (userInfoSplitIndex != -1) { + method = userInfo.substr(0, userInfoSplitIndex); + password = userInfo.substr(userInfoSplitIndex + 1); + } + el('.type').value = "ss"; + el('.type').dispatchEvent(event); + el('.server').value = server; + el('.server_port').value = port; + el('.password').value = password || ""; + el('.encrypt_method_ss').value = method || ""; + el('.plugin').value = plugin || ""; + el('.plugin_opts').value = pluginOpts || ""; + } else { + var sstr = b64decsafe(url0); + el('.type').value = "ss"; + el('.type').dispatchEvent(event); + var team = sstr.split('@'); + console.log(param); + var part1 = team[0].split(':'); + var part2 = team[1].split(':'); + el('.server').value = part2[0]; + el('.server_port').value = part2[1]; + el('.password').value = part1[1]; + el('.encrypt_method_ss').value = part1[0]; + el('.plugin').value = ""; + el('.plugin_opts').value = ""; + } if (param != undefined) { rema = decodeURI(param) el('.alias').value = decodeURI(param); } - getFlag(rema, part2[0], sid); //get flag iso code + getFlag(rema, server, sid); //get flag iso code s.innerHTML = "<%:Import%>Shadowsocks<%:Configuration Succeeded%>"; return false; } else if (ssu[0] == "trojan") { diff --git a/package/ctcgfw/luci-app-vssr/po/zh_Hans/vssr.po b/package/ctcgfw/luci-app-vssr/po/zh_Hans/vssr.po index 48c3cab4bc..bc9a105e01 100644 --- a/package/ctcgfw/luci-app-vssr/po/zh_Hans/vssr.po +++ b/package/ctcgfw/luci-app-vssr/po/zh_Hans/vssr.po @@ -639,6 +639,15 @@ msgstr "Prime Video 代理" msgid "TVB Video Proxy" msgstr "TVB 视频代理" +msgid "Custom Proxy" +msgstr "自定义代理" + +msgid "Custom Proxy Domain Name" +msgstr "自定义分流域名" + +msgid "Proxy Domain Name" +msgstr "需要被分流的域名" + msgid "adblock settings" msgstr "广告屏蔽设置" @@ -649,4 +658,4 @@ msgid "Licence" msgstr "许可" msgid "Area" -msgstr "区域" \ No newline at end of file +msgstr "国家或地区" diff --git a/package/ctcgfw/luci-app-vssr/root/etc/init.d/vssr b/package/ctcgfw/luci-app-vssr/root/etc/init.d/vssr index af5cc3a7b1..4882698786 100755 --- a/package/ctcgfw/luci-app-vssr/root/etc/init.d/vssr +++ b/package/ctcgfw/luci-app-vssr/root/etc/init.d/vssr @@ -34,9 +34,9 @@ switch_server=$1 MAXFD=32768 CRON_FILE=/etc/crontabs/root threads=1 -shunt_type=("global" "youtube" "tw_video" "netflix" "disney" "prime" "tvb") -shunt_port=(2080 2081 2082 2083 2084 2085 2086) -shunt_array=("youtube" "tw_video" "netflix" "disney" "prime" "tvb") +shunt_type=("global" "youtube" "tw_video" "netflix" "disney" "prime" "tvb" "custom") +shunt_port=(2080 2081 2082 2083 2084 2085 2086 2087) +shunt_array=("youtube" "tw_video" "netflix" "disney" "prime" "tvb" "custom") scount=0 uci_get_by_name() { local ret=$(uci get $NAME.$1.$2 2>/dev/null) diff --git a/package/ctcgfw/luci-app-vssr/root/usr/share/vssr/genconfig_v2ray.lua b/package/ctcgfw/luci-app-vssr/root/usr/share/vssr/genconfig_v2ray.lua index 32ab211872..84beedf7bf 100755 --- a/package/ctcgfw/luci-app-vssr/root/usr/share/vssr/genconfig_v2ray.lua +++ b/package/ctcgfw/luci-app-vssr/root/usr/share/vssr/genconfig_v2ray.lua @@ -14,6 +14,8 @@ local netflix_server = ucursor:get_first(name, 'global', 'netflix_server') local disney_server = ucursor:get_first(name, 'global', 'disney_server') local prime_server = ucursor:get_first(name, 'global', 'prime_server') local tvb_server = ucursor:get_first(name, 'global', 'tvb_server') +local custom_server = ucursor:get_first(name, 'global', 'custom_server') +local proxy_domain_name = ucursor:get_list(name,"@access_control[0]","proxy_domain_name") function gen_outbound(server_node, tags, local_ports) local bound = {} @@ -107,6 +109,7 @@ if v2ray_flow == "1" then table.insert(outbounds_table, gen_outbound(disney_server, "disney",2084)) table.insert(outbounds_table, gen_outbound(prime_server, "prime",2085)) table.insert(outbounds_table, gen_outbound(tvb_server, "tvb",2086)) + table.insert(outbounds_table, gen_outbound(custom_server, "custom",2087)) else table.insert(outbounds_table, gen_outbound(server_section, "main",local_port)) end @@ -207,6 +210,12 @@ local tvb_rule = { outboundTag = "tvb" } +local custom_rule = { + type = "field", + domain = proxy_domain_name, + outboundTag = "custom" +} + local rules_table = {} if (youtube_server ~= "nil" and v2ray_flow == "1") then @@ -233,6 +242,10 @@ if (tvb_server ~= "nil" and v2ray_flow == "1") then table.insert(rules_table, tvb_rule) end +if (custom_server ~= "nil" and v2ray_flow == "1") then + table.insert(rules_table, custom_rule) +end + local v2ray = { log = { -- error = "/var/vssrsss.log", diff --git a/package/ctcgfw/naiveproxy/src/init_env.sh b/package/ctcgfw/naiveproxy/src/init_env.sh index 0955ed0785..9119beeaf2 100755 --- a/package/ctcgfw/naiveproxy/src/init_env.sh +++ b/package/ctcgfw/naiveproxy/src/init_env.sh @@ -27,7 +27,7 @@ cd "$PWD/src" # AFDO profile [ ! -f "chrome/android/profiles/afdo.prof" ] && { AFDO_NAME="$(cat "chrome/android/profiles/newest.txt")" - [ ! -f "${dl_dir}/${AFDO_NAME}" ] && curl -L "https://storage.googleapis.com/chromeos-prebuilt/afdo-job/llvm/${AFDO_NAME}" -o "${dl_dir}/${AFDO_NAME}" + [ ! -f "${dl_dir}/${AFDO_NAME}" ] && curl -f --connect-timeout 20 --retry 5 --location --insecure "https://storage.googleapis.com/chromeos-prebuilt/afdo-job/llvm/${AFDO_NAME}" -o "${dl_dir}/${AFDO_NAME}" bzip2 -cd > "chrome/android/profiles/afdo.prof" < "${dl_dir}/${AFDO_NAME}" } @@ -35,7 +35,7 @@ cd "$PWD/src" [ ! -d "third_party/llvm-build/Release+Asserts/bin" ] && { mkdir -p "third_party/llvm-build/Release+Asserts" CLANG_REVISION="$(python3 "tools/clang/scripts/update.py" --print-revision)" - [ ! -f "${dl_dir}/clang-${CLANG_REVISION}.tgz" ] && curl -L "https://commondatastorage.googleapis.com/chromium-browser-clang/Linux_x64/clang-${CLANG_REVISION}.tgz" -o "${dl_dir}/clang-${CLANG_REVISION}.tgz" + [ ! -f "${dl_dir}/clang-${CLANG_REVISION}.tgz" ] && curl -f --connect-timeout 20 --retry 5 --location --insecure "https://commondatastorage.googleapis.com/chromium-browser-clang/Linux_x64/clang-${CLANG_REVISION}.tgz" -o "${dl_dir}/clang-${CLANG_REVISION}.tgz" tar -xzf "${dl_dir}/clang-${CLANG_REVISION}.tgz" -C "third_party/llvm-build/Release+Asserts" } @@ -43,7 +43,7 @@ cd "$PWD/src" [ ! -f "gn/out/gn" ] && { mkdir -p "gn/out" GN_VERSION="$(grep "'gn_version':" "buildtools/DEPS" | cut -d"'" -f4)" - [ ! -f "${dl_dir}/gn-${GN_VERSION}.zip" ] && curl -L "https://chrome-infra-packages.appspot.com/dl/gn/gn/linux-amd64/+/${GN_VERSION}" -o "${dl_dir}/gn-${GN_VERSION}.zip" + [ ! -f "${dl_dir}/gn-${GN_VERSION}.zip" ] && curl -f --connect-timeout 20 --retry 5 --location --insecure "https://chrome-infra-packages.appspot.com/dl/gn/gn/linux-amd64/+/${GN_VERSION}" -o "${dl_dir}/gn-${GN_VERSION}.zip" unzip -o "${dl_dir}/gn-${GN_VERSION}.zip" -d "gn/out" }