diff --git a/package/ctcgfw/luci-app-vssr/Makefile b/package/ctcgfw/luci-app-vssr/Makefile
index 8113698733..43ed9d0fc1 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.15
-PKG_RELEASE:=20200825
+PKG_VERSION:=1.16
+PKG_RELEASE:=20200826
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 3ac6f8cf26..615268226c 100644
--- a/package/ctcgfw/luci-app-vssr/luasrc/controller/vssr.lua
+++ b/package/ctcgfw/luci-app-vssr/luasrc/controller/vssr.lua
@@ -97,19 +97,26 @@ end
-- 切换节点
function change_node()
+ local sockets = require "socket"
local e = {}
local uci = luci.model.uci.cursor()
local sid = luci.http.formvalue("set")
local server = luci.http.formvalue("server")
+ local flow_table = {"youtube","tw_video","netflix","disney","prime","tvb","custom"}
e.status = false
e.sid = sid
if sid ~= "" and server ~= "" then
- uci:set("vssr", '@global[0]', server..'_server', sid)
- if( server ~= "global" ) then
+ uci:set("vssr", '@global[0]', server..'_server', sid)
+ if( server ~= "global" and server ~= "udp_relay" ) then
uci:set("vssr", '@global[0]', 'v2ray_flow', "1")
+ for i, v in pairs(flow_table) do
+ if( v ~= server) then
+ uci:set("vssr", '@global[0]', v..'_server', 'nil')
+ end
+ end
end
uci:commit("vssr")
- luci.sys.exec("/etc/init.d/vssr restart")
+ luci.sys.call("/etc/init.d/vssr restart >/www/restartlog.htm 2>&1")
e.status = true
end
luci.http.prepare_content("application/json")
@@ -178,12 +185,18 @@ function check_ip()
local d = {}
local mm = require 'maxminddb'
local vssr = require "vssrutil"
+ local port = 80
local db = mm.open('/usr/share/vssr/GeoLite2-Country.mmdb')
local ip = vssr.wget("http://api.ipify.org/")
- local res = db:lookup(ip)
- local port = 80
- d.flag = string.lower(res:get("country", "iso_code"))
- d.country = res:get("country", "names", "zh-CN")
+ if (ip ~= "") then
+ local res = db:lookup(ip)
+ d.flag = string.lower(res:get("country", "iso_code"))
+ d.country = res:get("country", "names", "zh-CN")
+ else
+ d.flag = "un"
+ d.country = "Unknown"
+ ip = "Unknown"
+ end
e.outboard = ip
e.outboardip = d
e.baidu = vssr.check_site("www.baidu.com",port)
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 78305c26c0..69a221e0c8 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
@@ -6,6 +6,7 @@ local gfwmode = 0
local gfw_count = 0
local ip_count = 0
local ad_count = 0
+local server_count = 0
if nixio.fs.access("/etc/dnsmasq.ssr/gfw_list.conf") then gfwmode = 1 end
@@ -23,24 +24,11 @@ if nixio.fs.access("/etc/china_ssr.txt") then
ip_count = sys.exec("cat /etc/china_ssr.txt | wc -l")
end
-uci:foreach(vssr, "servers", function(s)
- if s["type"] == "v2ray" then
- if s.alias then
- server_table[s[".name"]] = "[%s]:%s" %
- {string.upper(s.type), s.alias}
- elseif s.server and s.server_port then
- server_table[s[".name"]] = "[%s]:%s:%s" %
- {
- string.upper(s.type), s.server, s.server_port
- }
- end
- end
+
+uci:foreach("vssr", "servers", function(s)
+ server_count = server_count + 1
end)
-local key_table = {}
-for key, _ in pairs(server_table) do table.insert(key_table, key) end
-
-table.sort(key_table)
m = Map(vssr)
-- [[ 服务器节点故障自动切换设置 ]]--
@@ -98,14 +86,22 @@ o = s:option(DummyValue, "", "")
o.rawhtml = true
o.template = "vssr/update_subscribe"
-o = s:option(Button, "delete", translate("Delete all severs"))
+o = s:option(Button,"delete",translate("Delete All Subscribe Severs"))
o.inputstyle = "reset"
+o.description = string.format(translate("Server Count") .. ": %d", server_count)
o.write = function()
- uci:delete_all("vssr", "servers", function(s) return true end)
- uci:commit("vssr")
- luci.sys.exec("/etc/init.d/vssr stop")
- luci.http.redirect(luci.dispatcher.build_url("admin", "services", "vssr",
- "advanced"))
+ uci:delete_all("vssr", "servers", function(s)
+ if s.hashkey or s.isSubscribe then
+ return true
+ else
+ return false
+ end
+ end)
+ uci:save("vssr")
+ uci:commit("vssr")
+ luci.sys.exec("/etc/init.d/vssr restart")
+ luci.http.redirect(luci.dispatcher.build_url("admin", "services", "vssr", "servers"))
+ return
end
-- [[ adblock ]]--
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 e5bf092829..97eb875467 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
@@ -18,85 +18,33 @@ end
local server_table = {}
local encrypt_methods = {
-"none",
-"table",
-"rc4",
-"rc4-md5-6",
-"rc4-md5",
-"aes-128-cfb",
-"aes-192-cfb",
-"aes-256-cfb",
-"aes-128-ctr",
-"aes-192-ctr",
-"aes-256-ctr",
-"bf-cfb",
-"camellia-128-cfb",
-"camellia-192-cfb",
-"camellia-256-cfb",
-"cast5-cfb",
-"des-cfb",
-"idea-cfb",
-"rc2-cfb",
-"seed-cfb",
-"salsa20",
-"chacha20",
-"chacha20-ietf",
+ "none", "table", "rc4", "rc4-md5-6", "rc4-md5", "aes-128-cfb",
+ "aes-192-cfb", "aes-256-cfb", "aes-128-ctr", "aes-192-ctr", "aes-256-ctr",
+ "bf-cfb", "camellia-128-cfb", "camellia-192-cfb", "camellia-256-cfb",
+ "cast5-cfb", "des-cfb", "idea-cfb", "rc2-cfb", "seed-cfb", "salsa20",
+ "chacha20", "chacha20-ietf"
}
local encrypt_methods_ss = {
--- aead
-"aes-128-gcm",
-"aes-192-gcm",
-"aes-256-gcm",
-"chacha20-ietf-poly1305",
-"xchacha20-ietf-poly1305",
--- stream
-"table",
-"rc4",
-"rc4-md5",
-"aes-128-cfb",
-"aes-192-cfb",
-"aes-256-cfb",
-"aes-128-ctr",
-"aes-192-ctr",
-"aes-256-ctr",
-"bf-cfb",
-"camellia-128-cfb",
-"camellia-192-cfb",
-"camellia-256-cfb",
-"salsa20",
-"chacha20",
-"chacha20-ietf",
+ -- aead
+ "aes-128-gcm", "aes-192-gcm", "aes-256-gcm", "chacha20-ietf-poly1305",
+ "xchacha20-ietf-poly1305", -- stream
+ "table", "rc4", "rc4-md5", "aes-128-cfb", "aes-192-cfb", "aes-256-cfb",
+ "aes-128-ctr", "aes-192-ctr", "aes-256-ctr", "bf-cfb", "camellia-128-cfb",
+ "camellia-192-cfb", "camellia-256-cfb", "salsa20", "chacha20",
+ "chacha20-ietf"
}
local protocol = {
-"origin",
-"verify_deflate",
-"auth_sha1_v4",
-"auth_aes128_sha1",
-"auth_aes128_md5",
-"auth_chain_a",
-"auth_chain_b",
-"auth_chain_c",
-"auth_chain_d",
-"auth_chain_e",
-"auth_chain_f",
+ "origin", "verify_deflate", "auth_sha1_v4", "auth_aes128_sha1",
+ "auth_aes128_md5", "auth_chain_a", "auth_chain_b", "auth_chain_c",
+ "auth_chain_d", "auth_chain_e", "auth_chain_f"
}
obfs = {
-"plain",
-"http_simple",
-"http_post",
-"random_head",
-"tls1.2_ticket_auth",
+ "plain", "http_simple", "http_post", "random_head", "tls1.2_ticket_auth"
}
-local securitys = {
-"auto",
-"none",
-"aes-128-gcm",
-"chacha20-poly1305"
-}
-
+local securitys = {"auto", "none", "aes-128-gcm", "chacha20-poly1305"}
m = Map(vssr, translate("Edit vssr Server"))
m.redirect = luci.dispatcher.build_url("admin/services/vssr/servers")
@@ -180,7 +128,6 @@ o = s:option(Value, "plugin_opts", translate("Plugin Opts"))
o.rmempty = true
o:depends("type", "ss")
-
o = s:option(ListValue, "protocol", translate("Protocol"))
for _, v in ipairs(protocol) do o:value(v) end
o.rmempty = true
@@ -194,8 +141,6 @@ for _, v in ipairs(obfs) do o:value(v) end
o.rmempty = true
o:depends("type", "ssr")
-
-
o = s:option(Value, "obfs_param", translate("Obfs param(optional)"))
o:depends("type", "ssr")
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 70a8a611f0..df90fd9596 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
@@ -1,104 +1,111 @@
-- Copyright (C) 2017 yushi studio github.com/ywb94
-- Copyright (C) 2018 lean github.com/coolsnowwolf
-- Licensed to the public under the GNU General Public License v3.
-
local m, s, sec, o, kcp_enable
local vssr = "vssr"
-local gfwmode=0
+local gfwmode = 0
-if nixio.fs.access("/etc/dnsmasq.ssr/gfw_list.conf") then
-gfwmode=1
-end
+if nixio.fs.access("/etc/dnsmasq.ssr/gfw_list.conf") then gfwmode = 1 end
local uci = luci.model.uci.cursor()
m = Map(vssr)
-m:section(SimpleSection).template = "vssr/status_top"
+m:section(SimpleSection).template = "vssr/status_top"
local server_table = {}
local tw_table = {}
local tvb_table = {}
uci:foreach(vssr, "servers", function(s)
- if s.alias then
- server_table[s[".name"]] = "[%s]:%s" %{string.upper(s.type), s.alias}
- elseif s.server and s.server_port then
- server_table[s[".name"]] = "[%s]:%s:%s" %{string.upper(s.type), s.server, s.server_port}
- end
-
- if s.flag == "tw" then
- if s.alias then
- tw_table[s[".name"]] = "[%s]:%s" %{string.upper(s.type), s.alias}
- elseif s.server and s.server_port then
- tw_table[s[".name"]] = "[%s]:%s:%s" %{string.upper(s.type), s.server, s.server_port}
- end
- end
-
- if s.flag == "hk" then
- if s.alias then
- tvb_table[s[".name"]] = "[%s]:%s" %{string.upper(s.type), s.alias}
- elseif s.server and s.server_port then
- tvb_table[s[".name"]] = "[%s]:%s:%s" %{string.upper(s.type), s.server, s.server_port}
- end
- end
+ if s.alias then
+ server_table[s[".name"]] = "[%s]:%s" % {string.upper(s.type), s.alias}
+ elseif s.server and s.server_port then
+ server_table[s[".name"]] = "[%s]:%s:%s" %
+ {
+ string.upper(s.type), s.server, s.server_port
+ }
+ end
+
+ if s.flag == "tw" then
+ if s.alias then
+ tw_table[s[".name"]] = "[%s]:%s" % {string.upper(s.type), s.alias}
+ elseif s.server and s.server_port then
+ tw_table[s[".name"]] = "[%s]:%s:%s" %
+ {
+ string.upper(s.type), s.server, s.server_port
+ }
+ end
+ end
+
+ if s.flag == "hk" then
+ if s.alias then
+ tvb_table[s[".name"]] = "[%s]:%s" % {string.upper(s.type), s.alias}
+ elseif s.server and s.server_port then
+ tvb_table[s[".name"]] = "[%s]:%s:%s" %
+ {
+ string.upper(s.type), s.server, s.server_port
+ }
+ end
+ end
end)
-local key_table = {}
-for key,_ in pairs(server_table) do
- table.insert(key_table,key)
-end
+local key_table = {}
+for key, _ in pairs(server_table) do table.insert(key_table, key) end
-local key_table_tw = {}
-for key,_ in pairs(tw_table) do
- table.insert(key_table_tw,key)
-end
+local key_table_tw = {}
+for key, _ in pairs(tw_table) do table.insert(key_table_tw, key) end
-local key_table_tvb = {}
-for key,_ in pairs(tvb_table) do
- table.insert(key_table_tvb,key)
-end
+local key_table_tvb = {}
+for key, _ in pairs(tvb_table) do table.insert(key_table_tvb, key) end
-
-
-table.sort(key_table)
+table.sort(key_table)
table.sort(key_table_tw)
table.sort(key_table_tvb)
-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"}
+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 = m:section(TypedSection, "global",
+ translate("Basic Settings [SS|SSR|V2ray|Trojan]"))
s.anonymous = true
o = s:option(ListValue, "global_server", translate("Main Server"))
o:value("nil", translate("Disable"))
-for _,key in pairs(key_table) do o:value(key,server_table[key]) end
+for _, key in pairs(key_table) do o:value(key, server_table[key]) end
o.default = "nil"
o.rmempty = false
o = s:option(ListValue, "udp_relay_server", translate("Game Mode UDP Server"))
o:value("", translate("Disable"))
o:value("same", translate("Same as Main Server"))
-for _,key in pairs(key_table) do o:value(key,server_table[key]) end
+for _, key in pairs(key_table) do o:value(key, server_table[key]) end
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.")
-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"))
- if(v == "tw_video_server") then
- for _,key in pairs(key_table_tw) do o:value(key,tw_table[key]) end
- elseif(v == "tvb_server") then
- for _,key in pairs(key_table_tvb) do o:value(key,tvb_table[key]) end
+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"))
+ if (v == "tw_video_server") then
+ for _, key in pairs(key_table_tw) do o:value(key, tw_table[key]) end
+ elseif (v == "tvb_server") then
+ for _, key in pairs(key_table_tvb) do
+ o:value(key, tvb_table[key])
+ end
else
- for _,key in pairs(key_table) do o:value(key,server_table[key]) end
+ for _, key in pairs(key_table) do o:value(key, server_table[key]) end
end
- o:depends("v2ray_flow", "1")
- o.default = "nil"
-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"))
@@ -118,7 +125,7 @@ o.default = "router"
o = s:option(ListValue, "dports", translate("Proxy Ports"))
o:value("1", translate("All Ports"))
o:value("2", translate("Only Common Ports"))
-o.default = 1
+o.default = 1
o = s:option(ListValue, "pdnsd_enable", translate("Resolve Dns Mode"))
o:value("1", translate("Use Pdnsd tcp query and cache"))
@@ -141,5 +148,5 @@ o:value("114.114.114.114:53", translate("Oversea Mode DNS-1 (114.114.114.114)"))
o:value("114.114.115.115:53", translate("Oversea Mode DNS-2 (114.114.115.115)"))
o:depends("pdnsd_enable", "1")
-m:section(SimpleSection).template = "vssr/status_bottom"
+m:section(SimpleSection).template = "vssr/status_bottom"
return m
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 bd841e4db4..d7dd23e47a 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
@@ -9,37 +9,36 @@ s.anonymous = true
-- Part of WAN
s:tab("wan_ac", translate("WAN IP AC"))
-o = s:taboption("wan_ac", DynamicList, "wan_bp_ips", translate("WAN White List IP"))
+o = s:taboption("wan_ac", DynamicList, "wan_bp_ips",
+ translate("WAN White List IP"))
o.datatype = "ip4addr"
-o = s:taboption("wan_ac", DynamicList, "wan_fw_ips", translate("WAN Force Proxy IP"))
+o = s:taboption("wan_ac", DynamicList, "wan_fw_ips",
+ translate("WAN Force Proxy IP"))
o.datatype = "ip4addr"
-- Part of LAN
s:tab("lan_ac", translate("LAN IP AC"))
-o = s:taboption("lan_ac", DynamicList, "lan_ac_ips", translate("LAN Bypassed Host List"))
+o = s:taboption("lan_ac", DynamicList, "lan_ac_ips",
+ translate("LAN Bypassed Host List"))
o.datatype = "ipaddr"
-luci.ip.neighbors({ family = 4 }, function(entry)
- if entry.reachable then
- o:value(entry.dest:string())
- end
+luci.ip.neighbors({family = 4}, function(entry)
+ if entry.reachable then o:value(entry.dest:string()) end
end)
-o = s:taboption("lan_ac", DynamicList, "lan_fp_ips", translate("LAN Force Proxy Host List"))
+o = s:taboption("lan_ac", DynamicList, "lan_fp_ips",
+ translate("LAN Force Proxy Host List"))
o.datatype = "ipaddr"
-luci.ip.neighbors({ family = 4 }, function(entry)
- if entry.reachable then
- o:value(entry.dest:string())
- end
+luci.ip.neighbors({family = 4}, function(entry)
+ if entry.reachable then o:value(entry.dest:string()) end
end)
-o = s:taboption("lan_ac", DynamicList, "lan_gm_ips", translate("Game Mode Host List"))
+o = s:taboption("lan_ac", DynamicList, "lan_gm_ips",
+ translate("Game Mode Host List"))
o.datatype = "ipaddr"
-luci.ip.neighbors({ family = 4 }, function(entry)
- if entry.reachable then
- o:value(entry.dest:string())
- end
+luci.ip.neighbors({family = 4}, function(entry)
+ if entry.reachable then o:value(entry.dest:string()) end
end)
-- Part of Self
@@ -50,44 +49,36 @@ end)
-- o:value("2", translatef("Forwarded Proxy"))
-- o.rmempty = false
-s:tab("esc", translate("Bypass Domain List"))
+s:tab("esc", translate("Bypass Domain List"))
local escconf = "/etc/config/white.list"
o = s:taboption("esc", TextValue, "escconf")
o.rows = 13
o.wrap = "off"
o.rmempty = true
-o.cfgvalue = function(self, section)
- return NXFS.readfile(escconf) or ""
-end
+o.cfgvalue = function(self, section) return NXFS.readfile(escconf) or "" end
o.write = function(self, section, value)
- NXFS.writefile(escconf, value:gsub("\r\n", "\n"))
-end
-o.remove = function(self, section, value)
- NXFS.writefile(escconf, "")
+ NXFS.writefile(escconf, value:gsub("\r\n", "\n"))
end
+o.remove = function(self, section, value) NXFS.writefile(escconf, "") end
-
-s:tab("block", translate("Black Domain List"))
+s:tab("block", translate("Black Domain List"))
local blockconf = "/etc/config/black.list"
o = s:taboption("block", TextValue, "blockconf")
o.rows = 13
o.wrap = "off"
o.rmempty = true
-o.cfgvalue = function(self, section)
- return NXFS.readfile(blockconf) or " "
-end
+o.cfgvalue = function(self, section) return NXFS.readfile(blockconf) or " " end
o.write = function(self, section, value)
- NXFS.writefile(blockconf, value:gsub("\r\n", "\n"))
-end
-o.remove = function(self, section, value)
- NXFS.writefile(blockconf, "")
+ NXFS.writefile(blockconf, value:gsub("\r\n", "\n"))
end
+o.remove = function(self, section, value) NXFS.writefile(blockconf, "") end
-s:tab("proxy", translate("Custom Proxy Domain Name"))
+s:tab("proxy", translate("Custom Proxy Domain Name"))
-o = s:taboption("proxy", DynamicList, "proxy_domain_name", translate("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
+return m
diff --git a/package/ctcgfw/luci-app-vssr/luasrc/model/cbi/vssr/log.lua b/package/ctcgfw/luci-app-vssr/luasrc/model/cbi/vssr/log.lua
index 5422596af3..f6359aaf5f 100644
--- a/package/ctcgfw/luci-app-vssr/luasrc/model/cbi/vssr/log.lua
+++ b/package/ctcgfw/luci-app-vssr/luasrc/model/cbi/vssr/log.lua
@@ -7,9 +7,10 @@ t = f:field(TextValue, "conf")
t.rmempty = true
t.rows = 20
function t.cfgvalue()
- luci.sys.exec("[ -f /tmp/vssr.log ] && sed '1!G;h;$!d' /tmp/vssr.log > /tmp/ssrpro.log")
- return fs.readfile(conffile) or ""
+ luci.sys.exec(
+ "[ -f /tmp/vssr.log ] && sed '1!G;h;$!d' /tmp/vssr.log > /tmp/ssrpro.log")
+ return fs.readfile(conffile) or ""
end
-t.readonly="readonly"
+t.readonly = "readonly"
-return f
\ No newline at end of file
+return f
diff --git a/package/ctcgfw/luci-app-vssr/luasrc/model/cbi/vssr/server-config.lua b/package/ctcgfw/luci-app-vssr/luasrc/model/cbi/vssr/server-config.lua
index 79a4d3eb23..9eaf7ae241 100644
--- a/package/ctcgfw/luci-app-vssr/luasrc/model/cbi/vssr/server-config.lua
+++ b/package/ctcgfw/luci-app-vssr/luasrc/model/cbi/vssr/server-config.lua
@@ -1,60 +1,33 @@
-- Copyright (C) 2017 yushi studio
-- Licensed to the public under the GNU General Public License v3.
-
local m, s, o
local vssr = "vssr"
local sid = arg[1]
local encrypt_methods = {
- "rc4-md5",
- "rc4-md5-6",
- "rc4",
- "table",
- "aes-128-cfb",
- "aes-192-cfb",
- "aes-256-cfb",
- "aes-128-ctr",
- "aes-192-ctr",
- "aes-256-ctr",
- "bf-cfb",
- "camellia-128-cfb",
- "camellia-192-cfb",
- "camellia-256-cfb",
- "cast5-cfb",
- "des-cfb",
- "idea-cfb",
- "rc2-cfb",
- "seed-cfb",
- "salsa20",
- "chacha20",
- "chacha20-ietf",
+ "rc4-md5", "rc4-md5-6", "rc4", "table", "aes-128-cfb", "aes-192-cfb",
+ "aes-256-cfb", "aes-128-ctr", "aes-192-ctr", "aes-256-ctr", "bf-cfb",
+ "camellia-128-cfb", "camellia-192-cfb", "camellia-256-cfb", "cast5-cfb",
+ "des-cfb", "idea-cfb", "rc2-cfb", "seed-cfb", "salsa20", "chacha20",
+ "chacha20-ietf"
}
-local protocol = {
- "origin",
-}
+local protocol = {"origin"}
-obfs = {
- "plain",
- "http_simple",
- "http_post",
-}
+obfs = {"plain", "http_simple", "http_post"}
m = Map(vssr, translate("Edit vssr Server"))
m.redirect = luci.dispatcher.build_url("admin/services/vssr/server")
if m.uci:get(vssr, sid) ~= "server_config" then
- luci.http.redirect(m.redirect)
- return
+ luci.http.redirect(m.redirect)
+ return
end
-
-
-
-- [[ Server Setting ]]--
s = m:section(NamedSection, sid, "server_config")
s.anonymous = true
-s.addremove = false
+s.addremove = false
o = s:option(Flag, "enable", translate("Enable"))
o.default = 1
@@ -82,7 +55,6 @@ o = s:option(ListValue, "protocol", translate("Protocol"))
for _, v in ipairs(protocol) do o:value(v) end
o.rmempty = false
-
o = s:option(ListValue, "obfs", translate("Obfs"))
for _, v in ipairs(obfs) do o:value(v) end
o.rmempty = false
diff --git a/package/ctcgfw/luci-app-vssr/luasrc/model/cbi/vssr/server.lua b/package/ctcgfw/luci-app-vssr/luasrc/model/cbi/vssr/server.lua
index 19cbe2ef6f..3c356240a5 100644
--- a/package/ctcgfw/luci-app-vssr/luasrc/model/cbi/vssr/server.lua
+++ b/package/ctcgfw/luci-app-vssr/luasrc/model/cbi/vssr/server.lua
@@ -1,67 +1,34 @@
-- Copyright (C) 2017 yushi studio
-- Licensed to the public under the GNU General Public License v3.
-
local m, sec, o
local vssr = "vssr"
local uci = luci.model.uci.cursor()
local ipkg = require("luci.model.ipkg")
-
m = Map(vssr, translate("vssr Server"))
local encrypt_methods = {
- "table",
- "rc4",
- "rc4-md5",
- "rc4-md5-6",
- "aes-128-cfb",
- "aes-192-cfb",
- "aes-256-cfb",
- "aes-128-ctr",
- "aes-192-ctr",
- "aes-256-ctr",
- "bf-cfb",
- "camellia-128-cfb",
- "camellia-192-cfb",
- "camellia-256-cfb",
- "cast5-cfb",
- "des-cfb",
- "idea-cfb",
- "rc2-cfb",
- "seed-cfb",
- "salsa20",
- "chacha20",
- "chacha20-ietf",
+ "table", "rc4", "rc4-md5", "rc4-md5-6", "aes-128-cfb", "aes-192-cfb",
+ "aes-256-cfb", "aes-128-ctr", "aes-192-ctr", "aes-256-ctr", "bf-cfb",
+ "camellia-128-cfb", "camellia-192-cfb", "camellia-256-cfb", "cast5-cfb",
+ "des-cfb", "idea-cfb", "rc2-cfb", "seed-cfb", "salsa20", "chacha20",
+ "chacha20-ietf"
}
local protocol = {
- "origin",
- "verify_deflate",
- "auth_sha1_v4",
- "auth_aes128_sha1",
- "auth_aes128_md5",
- "auth_chain_a",
+ "origin", "verify_deflate", "auth_sha1_v4", "auth_aes128_sha1",
+ "auth_aes128_md5", "auth_chain_a"
}
obfs = {
- "plain",
- "http_simple",
- "http_post",
- "random_head",
- "tls1.2_ticket_auth",
- "tls1.2_ticket_fastauth",
+ "plain", "http_simple", "http_post", "random_head", "tls1.2_ticket_auth",
+ "tls1.2_ticket_fastauth"
}
-
-
-
-
-- [[ Global Setting ]]--
sec = m:section(TypedSection, "server_global", translate("Global Setting"))
sec.anonymous = true
-
-
o = sec:option(Flag, "enable_server", translate("Enable Server"))
o.rmempty = false
@@ -72,43 +39,30 @@ sec.addremove = true
sec.template = "cbi/tblsection"
sec.extedit = luci.dispatcher.build_url("admin/services/vssr/server/%s")
function sec.create(...)
- local sid = TypedSection.create(...)
- if sid then
- luci.http.redirect(sec.extedit % sid)
- return
- end
+ local sid = TypedSection.create(...)
+ if sid then
+ luci.http.redirect(sec.extedit % sid)
+ return
+ end
end
o = sec:option(Flag, "enable", translate("Enable"))
-function o.cfgvalue(...)
- return Value.cfgvalue(...) or translate("0")
-end
+function o.cfgvalue(...) return Value.cfgvalue(...) or translate("0") end
o.rmempty = false
o = sec:option(DummyValue, "server_port", translate("Server Port"))
-function o.cfgvalue(...)
- return Value.cfgvalue(...) or "?"
-end
-
+function o.cfgvalue(...) return Value.cfgvalue(...) or "?" end
o = sec:option(DummyValue, "encrypt_method", translate("Encrypt Method"))
function o.cfgvalue(...)
- local v = Value.cfgvalue(...)
- return v and v:upper() or "?"
+ local v = Value.cfgvalue(...)
+ return v and v:upper() or "?"
end
o = sec:option(DummyValue, "protocol", translate("Protocol"))
-function o.cfgvalue(...)
- return Value.cfgvalue(...) or "?"
-end
-
-
+function o.cfgvalue(...) return Value.cfgvalue(...) or "?" end
o = sec:option(DummyValue, "obfs", translate("Obfs"))
-function o.cfgvalue(...)
- return Value.cfgvalue(...) or "?"
-end
-
-
+function o.cfgvalue(...) return Value.cfgvalue(...) or "?" end
return m
diff --git a/package/ctcgfw/luci-app-vssr/luasrc/model/cbi/vssr/socks5.lua b/package/ctcgfw/luci-app-vssr/luasrc/model/cbi/vssr/socks5.lua
index b896a44ff2..1242cdfc74 100644
--- a/package/ctcgfw/luci-app-vssr/luasrc/model/cbi/vssr/socks5.lua
+++ b/package/ctcgfw/luci-app-vssr/luasrc/model/cbi/vssr/socks5.lua
@@ -2,39 +2,36 @@ local vssr = "vssr"
local uci = luci.model.uci.cursor()
local server_table = {}
-
local sys = require "luci.sys"
m = Map(vssr)
-- [[ SOCKS5 Proxy ]]--
if nixio.fs.access("/usr/bin/v2ray/v2ray") then
-s = m:section(TypedSection, "socks5_proxy", translate("V2ray SOCKS5 Proxy"))
-s.anonymous = true
+ s = m:section(TypedSection, "socks5_proxy", translate("V2ray SOCKS5 Proxy"))
+ s.anonymous = true
-o = s:option(Flag, "enable_server", translate("Enable Servers"))
-o.rmempty = false
+ o = s:option(Flag, "enable_server", translate("Enable Servers"))
+ o.rmempty = false
-o = s:option(Flag, "enable_auth", translate("Enable Auth"))
-o.rmempty = false
+ o = s:option(Flag, "enable_auth", translate("Enable Auth"))
+ o.rmempty = false
-o = s:option(Value, "Socks_user", translate("Socks user"))
-o.default="user"
-o.rmempty = true
-o:depends("enable_auth", "1")
-
-o = s:option(Value, "Socks_pass", translate("Socks pass"))
-o.default="password"
-o.password = true
-o.rmempty = true
-o:depends("enable_auth", "1")
-
-o = s:option(Value, "local_port", translate("Local Port"))
-o.datatype = "port"
-o.default = 1080
-o.rmempty = false
+ o = s:option(Value, "Socks_user", translate("Socks user"))
+ o.default = "user"
+ o.rmempty = true
+ o:depends("enable_auth", "1")
+ o = s:option(Value, "Socks_pass", translate("Socks pass"))
+ o.default = "password"
+ o.password = true
+ o.rmempty = true
+ o:depends("enable_auth", "1")
+ o = s:option(Value, "local_port", translate("Local Port"))
+ o.datatype = "port"
+ o.default = 1080
+ o.rmempty = false
end
diff --git a/package/ctcgfw/luci-app-vssr/luasrc/view/vssr/licence.htm b/package/ctcgfw/luci-app-vssr/luasrc/view/vssr/licence.htm
index 61d011643b..af7630dd73 100644
--- a/package/ctcgfw/luci-app-vssr/luasrc/view/vssr/licence.htm
+++ b/package/ctcgfw/luci-app-vssr/luasrc/view/vssr/licence.htm
@@ -11,11 +11,12 @@
https://www.maxmind.com.
Flag-icon-css
- A collection of all country flags in SVG — plus the CSS for easier integration https://flagicons.lipis.dev
-
+ A collection of all country flags in SVG — plus the CSS for
+ easier integration https://flagicons.lipis.dev
+
-<%+footer%>
\ No newline at end of file
+<%+footer%>
diff --git a/package/ctcgfw/luci-app-vssr/luasrc/view/vssr/refresh.htm b/package/ctcgfw/luci-app-vssr/luasrc/view/vssr/refresh.htm
index 694128cc30..7487bee563 100644
--- a/package/ctcgfw/luci-app-vssr/luasrc/view/vssr/refresh.htm
+++ b/package/ctcgfw/luci-app-vssr/luasrc/view/vssr/refresh.htm
@@ -2,34 +2,34 @@
+ onclick="return refresh_data(this,'<%=self.option%>')" />
<%=self.value%>
-<%+cbi/valuefooter%>
\ No newline at end of file
+<%+cbi/valuefooter%>
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 81a92f5763..b301ca0411 100644
--- a/package/ctcgfw/luci-app-vssr/luasrc/view/vssr/ssrurl.htm
+++ b/package/ctcgfw/luci-app-vssr/luasrc/view/vssr/ssrurl.htm
@@ -52,7 +52,7 @@
str = padright(str, l, "=");
try {
return atob(str);
- }catch(err) {
+ } catch (err) {
return str;
}
}
@@ -131,59 +131,59 @@
return false;
} else if (ssu[0] == "ss") {
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];
- }
+ 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);
- }
+ 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);
+ }
- 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 = "";
- }
+ 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)
@@ -209,22 +209,22 @@
var part2 = team[1].split(':');
var others = part2[1].split('?');
var queryParam = {}
- if(others.length > 1) {
- var queryParams = others[1]
- var queryArray = queryParams.split('&')
- for (i = 0; i < queryArray.length; i++) {
- var params = queryArray[i].split('=');
- queryParam[decodeURIComponent(params[0])] = decodeURIComponent(params[1] || '');
- }
- }
+ if (others.length > 1) {
+ var queryParams = others[1]
+ var queryArray = queryParams.split('&')
+ for (i = 0; i < queryArray.length; i++) {
+ var params = queryArray[i].split('=');
+ queryParam[decodeURIComponent(params[0])] = decodeURIComponent(params[1] || '');
+ }
+ }
el('.server').value = part2[0];
el('.server_port').value = others[0];
el('.password').value = part1[1];
- if(queryParam.peer || queryParam.sni){
+ if (queryParam.peer || queryParam.sni) {
el('.tls').checked = true;
el('.peer').value = queryParam.peer || queryParam.sni;
}
-
+
if (param != undefined) {
rema = decodeURI(param)
el('.alias').value = decodeURI(param);
@@ -305,4 +305,4 @@
onclick="return import_ssr_url(this, '<%=self.option%>', '<%=self.value%>')" />
-<%+cbi/valuefooter%>
\ No newline at end of file
+<%+cbi/valuefooter%>
diff --git a/package/ctcgfw/luci-app-vssr/luasrc/view/vssr/status_bottom.htm b/package/ctcgfw/luci-app-vssr/luasrc/view/vssr/status_bottom.htm
index 1e47c7d522..1da8a7ce4e 100644
--- a/package/ctcgfw/luci-app-vssr/luasrc/view/vssr/status_bottom.htm
+++ b/package/ctcgfw/luci-app-vssr/luasrc/view/vssr/status_bottom.htm
@@ -20,7 +20,7 @@
\ No newline at end of file
+
diff --git a/package/ctcgfw/luci-app-vssr/luasrc/view/vssr/status_top.htm b/package/ctcgfw/luci-app-vssr/luasrc/view/vssr/status_top.htm
index 6d97e18300..40801eed08 100644
--- a/package/ctcgfw/luci-app-vssr/luasrc/view/vssr/status_top.htm
+++ b/package/ctcgfw/luci-app-vssr/luasrc/view/vssr/status_top.htm
@@ -1,4 +1,4 @@
-
+
@@ -90,4 +90,4 @@
);
//]]>
-
\ No newline at end of file
+
diff --git a/package/ctcgfw/luci-app-vssr/luasrc/view/vssr/tblsection.htm b/package/ctcgfw/luci-app-vssr/luasrc/view/vssr/tblsection.htm
index 874bad2c63..b23a504532 100644
--- a/package/ctcgfw/luci-app-vssr/luasrc/view/vssr/tblsection.htm
+++ b/package/ctcgfw/luci-app-vssr/luasrc/view/vssr/tblsection.htm
@@ -1,6 +1,6 @@
-
-
-
+
+
+