From 75f2f9940f4b197c5dd2c27297b56e211f9c9858 Mon Sep 17 00:00:00 2001 From: CN_SZTL Date: Thu, 20 Feb 2020 15:04:43 +0800 Subject: [PATCH] luci-app-vssr: sync with upstream source --- package/ctcgfw/luci-app-vssr/LICENSE | 21 ++ package/ctcgfw/luci-app-vssr/Makefile | 12 +- .../luci-app-vssr/luasrc/controller/vssr.lua | 2 +- .../luasrc/model/cbi/vssr/servers-list.lua | 25 +- .../luci-app-vssr/luasrc/view/vssr/ssrurl.htm | 14 +- .../luci-app-vssr/root/usr/bin/vssr-switch | 242 +++++++++--------- .../root/usr/share/vssr/subscribe.lua | 4 + .../root/www/luci-static/vssr/css/vssr.css | 2 +- 8 files changed, 163 insertions(+), 159 deletions(-) create mode 100644 package/ctcgfw/luci-app-vssr/LICENSE diff --git a/package/ctcgfw/luci-app-vssr/LICENSE b/package/ctcgfw/luci-app-vssr/LICENSE new file mode 100644 index 0000000000..c1c854b909 --- /dev/null +++ b/package/ctcgfw/luci-app-vssr/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2019-2020 johnrosen1 + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/package/ctcgfw/luci-app-vssr/Makefile b/package/ctcgfw/luci-app-vssr/Makefile index cffa00c9ba..a62b3290f4 100644 --- a/package/ctcgfw/luci-app-vssr/Makefile +++ b/package/ctcgfw/luci-app-vssr/Makefile @@ -1,12 +1,12 @@ include $(TOPDIR)/rules.mk PKG_NAME:=luci-app-vssr -PKG_VERSION:=1.10 -PKG_RELEASE:=20200219-4 +PKG_VERSION:=1.11 +PKG_RELEASE:=20200220-4 PKG_CONFIG_DEPENDS:= CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks \ CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_V2ray \ - CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_Trojan \ + CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_Trojan \ CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_Kcptun:kcptun \ CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_ShadowsocksR_Server \ CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_Server \ @@ -17,8 +17,8 @@ PKG_CONFIG_DEPENDS:= CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks \ CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_dnsforwarder \ CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_ChinaDNS \ CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_haproxy \ - CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_udpspeeder \ - CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_udp2raw-tunnel \ + CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_udpspeeder \ + CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_udp2raw-tunnel \ CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_privoxy \ CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_simple-obfs\ CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_simple-obfs-server\ @@ -120,7 +120,7 @@ define Package/luci-app-vssr SUBMENU:=3. Applications TITLE:=A New SS/SSR/V2Ray/Trojan LuCI interface PKGARCH:=all - DEPENDS:=+shadowsocksr-libev-alt +ipset +ip-full +iptables-mod-tproxy +dnsmasq-full +coreutils +coreutils-base64 +bash +pdnsd-alt +wget +luasocket +jshn +lua-cjson +coreutils-nohup +python3-maxminddb +curl \ + DEPENDS:=+shadowsocksr-libev-alt +ipset +ip-full +iptables-mod-tproxy +dnsmasq-full +coreutils +coreutils-base64 +bash +pdnsd-alt +wget +lua +luasocket +jshn +lua-cjson +coreutils-nohup +python3-maxminddb +curl \ +PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks:shadowsocks-libev-ss-redir \ +PACKAGE_$(PKG_NAME)_INCLUDE_V2ray:v2ray \ +PACKAGE_$(PKG_NAME)_INCLUDE_Trojan:trojan \ diff --git a/package/ctcgfw/luci-app-vssr/luasrc/controller/vssr.lua b/package/ctcgfw/luci-app-vssr/luasrc/controller/vssr.lua index 3fc82abe03..81ef0e3709 100644 --- a/package/ctcgfw/luci-app-vssr/luasrc/controller/vssr.lua +++ b/package/ctcgfw/luci-app-vssr/luasrc/controller/vssr.lua @@ -10,7 +10,7 @@ end if nixio.fs.access("/usr/bin/ssr-redir") then entry({"admin", "vpn"}, firstchild(), "VPN", 45).dependent = false entry({"admin", "vpn", "vssr"}, - alias("admin", "vpn", "vssr", "client"), _("vssr"), 10).dependent = + alias("admin", "vpn", "vssr", "client"), _("Hello World"), 10).dependent = true -- 首页 entry({"admin", "vpn", "vssr", "client"}, cbi("vssr/client"), _("SSR Client"), 10).leaf = true -- 基本设置 diff --git a/package/ctcgfw/luci-app-vssr/luasrc/model/cbi/vssr/servers-list.lua b/package/ctcgfw/luci-app-vssr/luasrc/model/cbi/vssr/servers-list.lua index 5d08a9ebc6..53ada80780 100644 --- a/package/ctcgfw/luci-app-vssr/luasrc/model/cbi/vssr/servers-list.lua +++ b/package/ctcgfw/luci-app-vssr/luasrc/model/cbi/vssr/servers-list.lua @@ -36,38 +36,31 @@ function s.create(...) end o = s:option(DummyValue, "type", translate("Type")) -function o.cfgvalue(...) - return Value.cfgvalue(...) or translate("") -end +o.width="1%" o = s:option(DummyValue, "alias", translate("Alias")) -function o.cfgvalue(...) - return Value.cfgvalue(...) or translate("None") -end +o.width="1%" o = s:option(DummyValue, "server", translate("Server Address")) -function o.cfgvalue(...) - return Value.cfgvalue(...) or "?" -end +o.width="30%" o = s:option(DummyValue, "server_port", translate("Server Port")) -function o.cfgvalue(...) - return Value.cfgvalue(...) or "?" -end +o.width="30%" o = s:option(DummyValue,"security",translate("Encrypt Method")) -o.width="10%" - +o.width="1%" +o = s:option(Flag, "switch_enable", translate("Enable Auto Switch")) +o.width="1%" o = s:option(DummyValue, "server_port", translate("Socket Connected")) o.template="vssr/socket" -o.width="10%" +o.width="1%" o = s:option(DummyValue,"server",translate("Ping Latency")) o.template="vssr/ping1" -o.width="10%" +o.width="1%" m:append(Template("vssr/server_list")) 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 df50aef5a3..5991e3d02b 100644 --- a/package/ctcgfw/luci-app-vssr/luasrc/view/vssr/ssrurl.htm +++ b/package/ctcgfw/luci-app-vssr/luasrc/view/vssr/ssrurl.htm @@ -211,16 +211,16 @@ } else { url0 = ssu[1] } - var sstr = b64decsafe(url0); + var sstr = url0; document.getElementById('cbid.vssr.' + sid + '.type').value = "trojan"; document.getElementById('cbid.vssr.' + sid + '.type').dispatchEvent(event); var team = sstr.split('@'); - console.log(param); - var part1 = team[0].split(':'); - var part2 = team[1].split(':'); - document.getElementById('cbid.vssr.' + sid + '.server').value = part2[0]; - document.getElementById('cbid.vssr.' + sid + '.server_port').value = part2[1]; - document.getElementById('cbid.vssr.' + sid + '.password').value = part1[1]; + var password = team[0] + var serverPart = team[1].split(':'); + var port = serverPart[1].split('?')[0]; + document.getElementById('cbid.vssr.' + sid + '.server').value = serverPart[0]; + document.getElementById('cbid.vssr.' + sid + '.server_port').value = port; + document.getElementById('cbid.vssr.' + sid + '.password').value = password; if (param != undefined) { document.getElementById('cbid.vssr.' + sid + '.alias').value = decodeURI(param); } diff --git a/package/ctcgfw/luci-app-vssr/root/usr/bin/vssr-switch b/package/ctcgfw/luci-app-vssr/root/usr/bin/vssr-switch index 745bea3be4..108c921aca 100755 --- a/package/ctcgfw/luci-app-vssr/root/usr/bin/vssr-switch +++ b/package/ctcgfw/luci-app-vssr/root/usr/bin/vssr-switch @@ -16,7 +16,6 @@ NAME=vssr ENABLE_SERVER=nil CONFIG_SWTICH_FILE=/var/etc/${NAME}_t.json - [ -n "$1" ] && cycle_time=$1 [ -n "$2" ] && switch_time=$2 @@ -35,149 +34,136 @@ CURRENT_SERVER=$DEFAULT_SERVER #判断代理是否正常 check_proxy() { - local result=0 - local try_count=$(uci_get_by_type global switch_try_count 3) - for i in $(seq 1 $try_count) - do - /usr/bin/ssr-check www.google.com 80 $switch_time 1 - if [ "$?" == "0" ]; then - # echo "$(date "+%Y-%m-%d %H:%M:%S") Check Google Proxy Success, count=$i" >> /tmp/vssr.log - result=0 - break - else - # echo "$(date "+%Y-%m-%d %H:%M:%S") Check Google Proxy Fail, count=$i" >> /tmp/vssr.log - /usr/bin/ssr-check www.baidu.com 80 $switch_time 1 - if [ "$?" == "0" ]; then - result=1 - else - result=2 - fi - fi - sleep 1; - done - return $result; + local result=0 + local try_count=$(uci_get_by_type global switch_try_count 3) + for i in $(seq 1 $try_count); do + /usr/bin/ssr-check www.google.com 80 $switch_time 1 + if [ "$?" == "0" ]; then + # echo "$(date "+%Y-%m-%d %H:%M:%S") Check Google Proxy Success, count=$i" >> /tmp/vssr.log + result=0 + break + else + # echo "$(date "+%Y-%m-%d %H:%M:%S") Check Google Proxy Fail, count=$i" >> /tmp/vssr.log + /usr/bin/ssr-check www.baidu.com 80 $switch_time 1 + if [ "$?" == "0" ]; then + result=1 + else + result=2 + fi + fi + sleep 1 + done + return $result } - test_proxy() { -local servername=$(uci_get_by_name $1 server) -local serverport=$(uci_get_by_name $1 server_port) -ret=$(ping -c 3 $servername | grep 'loss' | awk -F ',' '{ print $3 }' | awk -F "%" '{ print $1 }') -[ -z "$ret" ] && return 1 -[ "$ret" -gt "50" ] && return 1 -ipset add ss_spec_wan_ac $servername 2>/dev/null -ret=$? -/usr/bin/ssr-check $servername $serverport $switch_time -local ret2=$? -if [ "$ret" = "0" ] ;then -ipset del ss_spec_wan_ac $servername 2>/dev/null -fi -if [ "$ret2" = "0" ] ;then -return 0 -else -return 1 -fi + local servername=$(uci_get_by_name $1 server) + local serverport=$(uci_get_by_name $1 server_port) + ret=$(ping -c 3 $servername | grep 'loss' | awk -F ',' '{ print $3 }' | awk -F "%" '{ print $1 }') + [ -z "$ret" ] && return 1 + [ "$ret" -gt "50" ] && return 1 + ipset add ss_spec_wan_ac $servername 2>/dev/null + ret=$? + /usr/bin/ssr-check $servername $serverport $switch_time + local ret2=$? + if [ "$ret" == "0" ]; then + ipset del ss_spec_wan_ac $servername 2>/dev/null + fi + if [ "$ret2" == "0" ]; then + return 0 + else + return 1 + fi } search_proxy() { -let server_count=server_count+1 -[ "$normal_flag" = "1" -a "$server_count" -le "$server_locate" ] && return 0 -[ "$(uci_get_by_name $1 switch_enable)" != "1" ] && return 1 -[ $ENABLE_SERVER != nil ] && return 0 -[ "$1" = "$CURRENT_SERVER" ] && return 0 -local servername=$(uci_get_by_name $1 server) -local serverport=$(uci_get_by_name $1 server_port) -ipset add ss_spec_wan_ac $servername 2>/dev/null -ret=$? - /usr/bin/ssr-check $servername $serverport $switch_time - local ret2=$? -if [ "$ret" = "0" ] ;then -ipset del ss_spec_wan_ac $servername 2>/dev/null -fi -if [ "$ret2" = "0" ] ;then -server_locate=$server_count -ENABLE_SERVER=$1 -return 0 -else -return 1 -fi + let server_count=server_count+1 + [ "$normal_flag" == "1" -a "$server_count" -le "$server_locate" ] && return 0 + [ "$(uci_get_by_name $1 switch_enable)" != "1" ] && return 1 + [ $ENABLE_SERVER != nil ] && return 0 + [ "$1" == "$CURRENT_SERVER" ] && return 0 + local servername=$(uci_get_by_name $1 server) + local serverport=$(uci_get_by_name $1 server_port) + ipset add ss_spec_wan_ac $servername 2>/dev/null + ret=$? + /usr/bin/ssr-check $servername $serverport $switch_time + local ret2=$? + if [ "$ret" == "0" ]; then + ipset del ss_spec_wan_ac $servername 2>/dev/null + fi + if [ "$ret2" == "0" ]; then + server_locate=$server_count + ENABLE_SERVER=$1 + return 0 + else + return 1 + fi } #选择可用的代理 select_proxy() { - -config_load $NAME -ENABLE_SERVER=nil -mkdir -p /var/run /var/etc -server_count=0 -config_foreach search_proxy servers - + config_load $NAME + ENABLE_SERVER=nil + mkdir -p /var/run /var/etc + server_count=0 + config_foreach search_proxy servers } #切换代理 switch_proxy() { -/etc/init.d/vssr restart $1 -return 0 + /etc/init.d/vssr restart $1 + return 0 } start() { -#不支持kcptun启用时的切换 -[ $(uci_get_by_name $DEFAULT_SERVER kcp_enable) = "1" ] && return 1 + #不支持kcptun启用时的切换 + [ $(uci_get_by_name $DEFAULT_SERVER kcp_enable) = "1" ] && return 1 -while [ "1" = "1" ] #死循环 -do - sleep $cycle_time - - LOGTIME=$(date "+%Y-%m-%d %H:%M:%S") - - - #判断当前代理是否为缺省服务器 - if [ "$CURRENT_SERVER" != "$DEFAULT_SERVER" ] ;then - #echo "not default proxy" - echo "$(date "+%Y-%m-%d %H:%M:%S") Current server is not default Main server, try to switch back." >> /tmp/vssr.log - - #检查缺省服务器是否正常 - if test_proxy $DEFAULT_SERVER ;then - #echo "switch to default proxy" - echo "$(date "+%Y-%m-%d %H:%M:%S") Main server is avilable." >> /tmp/vssr.log - #缺省服务器正常,切换回来 - CURRENT_SERVER=$DEFAULT_SERVER - switch_proxy $CURRENT_SERVER - echo "$(date "+%Y-%m-%d %H:%M:%S") switch to default ["$(uci_get_by_name $CURRENT_SERVER server)"] proxy!" >> /tmp/vssr.log - continue - else - echo "$(date "+%Y-%m-%d %H:%M:%S") Main server is NOT avilable.Continue using current server." >> /tmp/vssr.log - fi - fi - - #判断当前代理是否正常 - check_proxy - current_ret=$? - - if [ "$current_ret" = "1" ] ;then - #当前代理错误,判断有无可用的服务器 - #echo "current error" - echo "$(date "+%Y-%m-%d %H:%M:%S") Current server error, try to switch another server." >> /tmp/vssr.log - - select_proxy - if [ "$ENABLE_SERVER" != nil ] ;then - #有其他服务器可用,进行切换 - #echo $(uci_get_by_name $new_proxy server) - echo "$(date "+%Y-%m-%d %H:%M:%S") Another server is avilable, now switching server." >> /tmp/vssr.log - CURRENT_SERVER=$ENABLE_SERVER - switch_proxy $CURRENT_SERVER - normal_flag=1 - echo "$(date "+%Y-%m-%d %H:%M:%S") ShadowsocksR server switch OK" >> /tmp/vssr.log - else - switch_proxy $CURRENT_SERVER - normal_flag=1 - echo "$(date "+%Y-%m-%d %H:%M:%S") Try restart current server." >> /tmp/vssr.log - fi - else - normal_flag=0 - echo "$(date "+%Y-%m-%d %H:%M:%S") ShadowsocksR No Problem." >> /tmp/vssr.log - fi - - -done + while [ "1" == "1" ]; do #死循环 + sleep $cycle_time + LOGTIME=$(date "+%Y-%m-%d %H:%M:%S") + #判断当前代理是否为缺省服务器 + if [ "$CURRENT_SERVER" != "$DEFAULT_SERVER" ]; then + #echo "not default proxy" + echo "$(date "+%Y-%m-%d %H:%M:%S") Current server is not default Main server, try to switch back." >>/tmp/vssr.log + #检查缺省服务器是否正常 + if test_proxy $DEFAULT_SERVER; then + #echo "switch to default proxy" + echo "$(date "+%Y-%m-%d %H:%M:%S") Main server is avilable." >>/tmp/vssr.log + #缺省服务器正常,切换回来 + CURRENT_SERVER=$DEFAULT_SERVER + switch_proxy $CURRENT_SERVER + echo "$(date "+%Y-%m-%d %H:%M:%S") switch to default ["$(uci_get_by_name $CURRENT_SERVER server)"] proxy!" >>/tmp/vssr.log + continue + else + echo "$(date "+%Y-%m-%d %H:%M:%S") Main server is NOT avilable.Continue using current server." >>/tmp/vssr.log + fi + fi + #判断当前代理是否正常 + check_proxy + current_ret=$? + if [ "$current_ret" == "1" ]; then + #当前代理错误,判断有无可用的服务器 + #echo "current error" + echo "$(date "+%Y-%m-%d %H:%M:%S") Current server error, try to switch another server." >>/tmp/vssr.log + select_proxy + if [ "$ENABLE_SERVER" != nil ]; then + #有其他服务器可用,进行切换 + #echo $(uci_get_by_name $new_proxy server) + echo "$(date "+%Y-%m-%d %H:%M:%S") Another server is avilable, now switching server." >>/tmp/vssr.log + CURRENT_SERVER=$ENABLE_SERVER + switch_proxy $CURRENT_SERVER + normal_flag=1 + echo "$(date "+%Y-%m-%d %H:%M:%S") Hello World server switch OK" >>/tmp/vssr.log + else + switch_proxy $CURRENT_SERVER + normal_flag=1 + echo "$(date "+%Y-%m-%d %H:%M:%S") Try restart current server." >>/tmp/vssr.log + fi + else + normal_flag=0 + echo "$(date "+%Y-%m-%d %H:%M:%S") Hello World No Problem." >>/tmp/vssr.log + fi + done } + diff --git a/package/ctcgfw/luci-app-vssr/root/usr/share/vssr/subscribe.lua b/package/ctcgfw/luci-app-vssr/root/usr/share/vssr/subscribe.lua index 9cffbcdf3e..c16807b392 100644 --- a/package/ctcgfw/luci-app-vssr/root/usr/share/vssr/subscribe.lua +++ b/package/ctcgfw/luci-app-vssr/root/usr/share/vssr/subscribe.lua @@ -225,6 +225,10 @@ local function processData(szType, content) if not result.alias then result.alias = result.server .. ':' .. result.server_port end + + local flag = luci.sys.exec('/usr/share/'..name..'/getflag.sh "'..result.alias..'" '..result.server) + result.flag = string.gsub(flag, '\n', '') + -- alias 不参与 hashkey 计算 local alias = result.alias result.alias = nil diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/css/vssr.css b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/css/vssr.css index 2a3443294b..9f13a704f0 100644 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/css/vssr.css +++ b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/css/vssr.css @@ -312,7 +312,7 @@ https://github.com/pure-css/pure/blob/master/LICENSE.md position: relative; background: #CCFFFF; margin: 10px; - padding: 18px 18px 18px 88px; + padding: 18px 18px 18px 81px; box-shadow: 0 0 1rem 0 rgba(136,152,170,.75); border-radius: .5rem; border: 0;