diff --git a/README.md b/README.md
index e177f83dcd..c76236cb90 100644
--- a/README.md
+++ b/README.md
@@ -57,12 +57,14 @@ luci-theme-argonv3 source: [jerrykuku/luci-theme-argon](https://github.com/jerry
luci-theme-darkmatter source: [apollo-ng/luci-theme-darkmatter](https://github.com/apollo-ng/luci-theme-darkmatter).
luci-app-koolproxyR source: [Ameykyl/luci-app-koolproxyR](https://github.com/Ameykyl/luci-app-koolproxyR).
openwrt-chinadns-ng source: [pexcn/openwrt-chinadns-ng](https://github.com/pexcn/openwrt-chinadns-ng).
-luci-app-ssr-plus-jo source: [Leo-Jo/luci-app-ssr-plus-jo](https://github.com/Leo-Jo/luci-app-ssr-plus-jo).
+luci-app-ssr-plus-Jo source: [Leo-Jo-My/luci-app-ssr-plus-Jo](https://github.com/Leo-Jo-My/luci-app-ssr-plus-Jo).
openwrt-udpspeeder source: [pexcn/openwrt-udpspeeder](https://github.com/pexcn/openwrt-udpspeeder).
luci-app-onliner source: [rufengsuixing/luci-app-onliner](https://github.com/rufengsuixing/luci-app-onliner).
luci-app-dockerman source: [lisaac/luci-app-dockerman](https://github.com/lisaac/luci-app-dockerman).
luci-lib-docker source: [lisaac/luci-lib-docker](https://github.com/lisaac/luci-lib-docker).
-openwrt-iptvhelper source: [riverscn/openwrt-iptvhelper](https://github.com/riverscn/openwrt-iptvhelper).
+openwrt-iptvhelper source: [riverscn/openwrt-iptvhelper](https://github.com/riverscn/openwrt-iptvhelper).
+luci-app-autoipsetadder source: [rufengsuixing/luci-app-autoipsetadder](https://github.com/rufengsuixing/luci-app-autoipsetadder).
+luci-app-adguardhome source: [rufengsuixing/luci-app-adguardhome](https://github.com/rufengsuixing/luci-app-adguardhome).
# License
### [GPL v3](https://www.gnu.org/licenses/gpl-3.0.html).
diff --git a/package/ctcgfw/luci-app-ssr-plus-jo/Makefile b/package/ctcgfw/luci-app-ssr-plus-Jo/Makefile
similarity index 83%
rename from package/ctcgfw/luci-app-ssr-plus-jo/Makefile
rename to package/ctcgfw/luci-app-ssr-plus-Jo/Makefile
index 224210b677..cb0d255f8e 100644
--- a/package/ctcgfw/luci-app-ssr-plus-jo/Makefile
+++ b/package/ctcgfw/luci-app-ssr-plus-Jo/Makefile
@@ -1,10 +1,11 @@
include $(TOPDIR)/rules.mk
-PKG_NAME:=luci-app-ssr-plus-jo
-PKG_VERSION:=1.35
+PKG_NAME:=luci-app-ssr-plus-Jo
+PKG_VERSION:=1.41
PKG_RELEASE:=8
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_Kcptun:kcptun \
CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_ShadowsocksR_Server \
CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_Server \
@@ -12,11 +13,12 @@ PKG_CONFIG_DEPENDS:= CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks \
CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_Socks \
CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_dnscrypt_proxy \
CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_dnsforwarder \
- CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_ChinaDNS \
+ CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_Chinadns \
CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_haproxy \
CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_privoxy \
CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_simple-obfs\
CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_simple-obfs-server\
+ CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_ipt2socks\
CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_GoQuiet-client\
CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_GoQuiet-server\
CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_v2ray-plugin
@@ -32,9 +34,13 @@ config PACKAGE_$(PKG_NAME)_INCLUDE_V2ray
bool "Include V2ray"
default y
+config PACKAGE_$(PKG_NAME)_INCLUDE_Trojan
+ bool "Include Trojan"
+ default n
+
config PACKAGE_$(PKG_NAME)_INCLUDE_Kcptun
bool "Include Kcptun"
- default y
+ default n
config PACKAGE_$(PKG_NAME)_INCLUDE_ShadowsocksR_Server
bool "Include ShadowsocksR Server"
@@ -60,7 +66,7 @@ config PACKAGE_$(PKG_NAME)_INCLUDE_dnsforwarder
bool "dnsforwarder"
default n
-config PACKAGE_$(PKG_NAME)_INCLUDE_ChinaDNS
+config PACKAGE_$(PKG_NAME)_INCLUDE_Chinadns
bool "chiandns"
default n
@@ -79,6 +85,10 @@ config PACKAGE_$(PKG_NAME)_INCLUDE_simple-obfs
config PACKAGE_$(PKG_NAME)_INCLUDE_simple-obfs-server
bool "simple-obfs-server"
default n
+
+config PACKAGE_$(PKG_NAME)_INCLUDE_ipt2socks
+ bool "Include ipt2socks"
+ default n
config PACKAGE_$(PKG_NAME)_INCLUDE_GoQuiet-client
bool "GoQuiet-client"
@@ -93,15 +103,16 @@ config PACKAGE_$(PKG_NAME)_INCLUDE_v2ray-plugin
default n
endef
-define Package/luci-app-ssr-plus-jo
+define Package/luci-app-ssr-plus-Jo
SECTION:=luci
CATEGORY:=LuCI
SUBMENU:=3. Applications
TITLE:=SS/SSR/V2Ray LuCI interface
PKGARCH:=all
- DEPENDS:=+shadowsocksr-libev-alt +ipset +ip-full +iptables-mod-tproxy +dnsmasq-full +coreutils +coreutils-base64 +bash pdnsd-alt +wget \
+ DEPENDS:=+shadowsocksr-libev-alt +ipset +ip-full +iptables-mod-tproxy +dnsmasq-full +coreutils +coreutils-base64 +bash +pdnsd-alt +wget +unzip \
+PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks:shadowsocks-libev-ss-redir \
+PACKAGE_$(PKG_NAME)_INCLUDE_V2ray:v2ray \
+ +PACKAGE_$(PKG_NAME)_INCLUDE_Trojan:trojan \
+PACKAGE_$(PKG_NAME)_INCLUDE_Kcptun:kcptun-client \
+PACKAGE_$(PKG_NAME)_INCLUDE_ShadowsocksR_Server:shadowsocksr-libev-server \
+PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_Server:shadowsocks-libev-ss-server \
@@ -109,11 +120,12 @@ define Package/luci-app-ssr-plus-jo
+PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_Socks:shadowsocks-libev-ss-local \
+PACKAGE_$(PKG_NAME)_INCLUDE_dnscrypt_proxy:dnscrypt-proxy-full \
+PACKAGE_$(PKG_NAME)_INCLUDE_dnsforwarder:dnsforwarder \
- +PACKAGE_$(PKG_NAME)_INCLUDE_ChinaDNS:openwrt_chinadns \
+ +PACKAGE_$(PKG_NAME)_INCLUDE_Chinadns:openwrt_chinadns \
+PACKAGE_$(PKG_NAME)_INCLUDE_haproxy:haproxy \
+PACKAGE_$(PKG_NAME)_INCLUDE_privoxy:privoxy \
+PACKAGE_$(PKG_NAME)_INCLUDE_simple-obfs:simple-obfs \
+PACKAGE_$(PKG_NAME)_INCLUDE_simple-obfs-server:simple-obfs-server \
+ +PACKAGE_$(PKG_NAME)_INCLUDE_ipt2socks:ipt2socks \
+PACKAGE_$(PKG_NAME)_INCLUDE_GoQuiet-client:gq-client \
+PACKAGE_$(PKG_NAME)_INCLUDE_GoQuiet-server:gq-server \
+PACKAGE_$(PKG_NAME)_INCLUDE_v2ray-plugin:v2ray-plugin
@@ -125,7 +137,7 @@ endef
define Build/Compile
endef
-define Package/luci-app-ssr-plus-jo/install
+define Package/luci-app-ssr-plus-Jo/install
$(INSTALL_DIR) $(1)/usr/lib/lua/luci
cp -pR ./luasrc/* $(1)/usr/lib/lua/luci
$(INSTALL_DIR) $(1)/
@@ -134,7 +146,7 @@ define Package/luci-app-ssr-plus-jo/install
cp -pR ./po/zh-cn/ssr-plus.zh-cn.lmo $(1)/usr/lib/lua/luci/i18n/ssr-plus.zh-cn.lmo
endef
-define Package/luci-app-ssr-plus-jo/postinst
+define Package/luci-app-ssr-plus-Jo/postinst
#!/bin/sh
if [ -z "$${IPKG_INSTROOT}" ]; then
( . /etc/uci-defaults/luci-ssr-plus ) && rm -f /etc/uci-defaults/luci-ssr-plus
@@ -145,7 +157,7 @@ fi
exit 0
endef
-define Package/luci-app-ssr-plus-jo/prerm
+define Package/luci-app-ssr-plus-Jo/prerm
#!/bin/sh
if [ -z "$${IPKG_INSTROOT}" ]; then
/etc/init.d/shadowsocksr disable
@@ -154,4 +166,4 @@ fi
exit 0
endef
-$(eval $(call BuildPackage,luci-app-ssr-plus-jo))
+$(eval $(call BuildPackage,luci-app-ssr-plus-Jo))
diff --git a/package/ctcgfw/luci-app-ssr-plus-jo/luasrc/controller/shadowsocksr.lua b/package/ctcgfw/luci-app-ssr-plus-Jo/luasrc/controller/shadowsocksr.lua
similarity index 75%
rename from package/ctcgfw/luci-app-ssr-plus-jo/luasrc/controller/shadowsocksr.lua
rename to package/ctcgfw/luci-app-ssr-plus-Jo/luasrc/controller/shadowsocksr.lua
index 29b5a43cca..f17a2e3883 100644
--- a/package/ctcgfw/luci-app-ssr-plus-jo/luasrc/controller/shadowsocksr.lua
+++ b/package/ctcgfw/luci-app-ssr-plus-Jo/luasrc/controller/shadowsocksr.lua
@@ -7,37 +7,37 @@ function index()
return
end
if nixio.fs.access("/usr/bin/ssr-redir") then
- entry({"admin", "services", "shadowsocksr"},alias("admin", "services", "shadowsocksr", "client"), _("ShadowSocksR Plus+"),10).dependent = true
- entry({"admin", "services", "shadowsocksr", "client"},cbi("shadowsocksr/client"),_("SSR Client"),10).leaf = true
- entry({"admin", "services", "shadowsocksr", "servers"}, cbi("shadowsocksr/servers"), _("Severs Nodes"), 11).leaf = true
- entry({"admin", "services", "shadowsocksr", "servers"},arcombine(cbi("shadowsocksr/servers"), cbi("shadowsocksr/client-config")),_("Severs Nodes"), 11).leaf = true
+ entry({"admin", "vpn", "shadowsocksr"},alias("admin", "vpn", "shadowsocksr", "client"), _("ShadowSocksR Plus+"),10).dependent = true
+ entry({"admin", "vpn", "shadowsocksr", "client"},cbi("shadowsocksr/client"),_("SSR Client"),10).leaf = true
+ entry({"admin", "vpn", "shadowsocksr", "servers"}, cbi("shadowsocksr/servers"), _("Severs Nodes"), 11).leaf = true
+ entry({"admin", "vpn", "shadowsocksr", "servers"},arcombine(cbi("shadowsocksr/servers"), cbi("shadowsocksr/client-config")),_("Severs Nodes"), 11).leaf = true
- entry({"admin", "services", "shadowsocksr", "subscription"},cbi("shadowsocksr/subscription"), _("Subscription Managenent"),12).leaf = true
- entry({"admin", "services", "shadowsocksr", "control"},cbi("shadowsocksr/control"),_("Access Control"),13).leaf = true
-
- entry({"admin", "services", "shadowsocksr", "list"},cbi("shadowsocksr/list"),_("GFW List"),15).leaf = true
+ entry({"admin", "vpn", "shadowsocksr", "subscription"},cbi("shadowsocksr/subscription"), _("Subscription Managenent"),12).leaf = true
+ entry({"admin", "vpn", "shadowsocksr", "control"},cbi("shadowsocksr/control"),_("Access Control"),13).leaf = true
+ entry({"admin", "vpn", "shadowsocksr", "list"},cbi("shadowsocksr/list"),_("GFW List"),15).leaf = true
+entry({"admin", "vpn", "shadowsocksr", "appointlist"},form("shadowsocksr/appointlist"),_("Appointlist List"), 17).leaf = true
- entry({"admin", "services", "shadowsocksr", "automatic"},cbi("shadowsocksr/automatic"), _("Automatic Switching"),20).leaf = true
- entry({"admin", "services", "shadowsocksr", "advanced"},cbi("shadowsocksr/advanced"), _("Advanced Settings"),21).leaf = true
+ entry({"admin", "vpn", "shadowsocksr", "automatic"},cbi("shadowsocksr/automatic"), _("Automatic Switching"),20).leaf = true
+ entry({"admin", "vpn", "shadowsocksr", "advanced"},cbi("shadowsocksr/advanced"), _("Advanced Settings"),21).leaf = true
elseif nixio.fs.access("/usr/bin/ssr-server") then
- entry({"admin", "services", "shadowsocksr"},alias("admin", "services", "shadowsocksr", "server"), _("ShadowSocksR"),10).dependent = true
+ entry({"admin", "vpn", "shadowsocksr"},alias("admin", "vpn", "shadowsocksr", "server"), _("ShadowSocksR"),10).dependent = true
else
return
end
if nixio.fs.access("/usr/bin/ssr-server") then
- entry({"admin", "services", "shadowsocksr", "server"},arcombine(cbi("shadowsocksr/server"), cbi("shadowsocksr/server-config")),_("SSR Server"),22).leaf = true
+ entry({"admin", "vpn", "shadowsocksr", "server"},arcombine(cbi("shadowsocksr/server"), cbi("shadowsocksr/server-config")),_("SSR Server"),22).leaf = true
end
- entry({"admin", "services", "shadowsocksr", "status"},form("shadowsocksr/status"),_("Status"), 23).leaf = true
- entry({"admin", "services", "shadowsocksr", "log"}, cbi("shadowsocksr/log"), _("Log"), 30).leaf = true
+ entry({"admin", "vpn", "shadowsocksr", "status"},form("shadowsocksr/status"),_("Status"), 23).leaf = true
+ entry({"admin", "vpn", "shadowsocksr", "log"}, cbi("shadowsocksr/log"), _("Log"), 30).leaf = true
- entry({"admin", "services", "shadowsocksr", "refresh"}, call("refresh_data"))
- entry({"admin", "services", "shadowsocksr", "checkport"}, call("check_port"))
- entry({"admin", "services", "shadowsocksr", "checkports"}, call("check_ports"))
- entry({"admin", "services", "shadowsocksr", "run"}, call("act_status"))
- entry({"admin", "services", "shadowsocksr", "change"}, call("change_node"))
- entry({"admin", "services", "shadowsocksr", "allserver"}, call("get_servers"))
- entry({"admin", "services", "shadowsocksr", "ping"}, call("act_ping")).leaf=true
+ entry({"admin", "vpn", "shadowsocksr", "refresh"}, call("refresh_data"))
+ entry({"admin", "vpn", "shadowsocksr", "checkport"}, call("check_port"))
+ entry({"admin", "vpn", "shadowsocksr", "checkports"}, call("check_ports"))
+ entry({"admin", "vpn", "shadowsocksr", "run"}, call("act_status"))
+ entry({"admin", "vpn", "shadowsocksr", "change"}, call("change_node"))
+ entry({"admin", "vpn", "shadowsocksr", "allserver"}, call("get_servers"))
+ entry({"admin", "vpn", "shadowsocksr", "ping"}, call("act_ping")).leaf=true
end
@@ -47,19 +47,19 @@ function act_status()
--全局服务器
e.global=luci.sys.call("ps -w | grep ssr-retcp | grep -v grep >/dev/null") == 0
- --检测PDNSD状态
- if tonumber(luci.sys.exec("ps -w | grep pdnsd |grep -v grep| wc -l"))>0 then
- e.pdnsd= true
+ --检测chinadns状态
+ if tonumber(luci.sys.exec("ps -w | grep chinadns |grep -v grep| wc -l"))>0 then
+ e.chinadns= true
elseif tonumber(luci.sys.exec("ps -w | grep dnsparsing |grep -v grep| wc -l"))>0 then
- e.pdnsd= true
+ e.chinadns= true
elseif tonumber(luci.sys.exec("ps -w | grep dnscrypt-proxy |grep -v grep| wc -l"))>0 then
- e.pdnsd= true
- elseif tonumber(luci.sys.exec("ps -w | grep dns-forwarder |grep -v grep| wc -l"))>0 then
- e.pdnsd= true
+ e.chinadns= true
+ elseif tonumber(luci.sys.exec("ps -w | grep pdnsd |grep -v grep| wc -l"))>0 then
+ e.chinadns= true
+
elseif tonumber(luci.sys.exec("ps -w | grep dnsforwarder |grep -v grep| wc -l"))>0 then
- e.pdnsd= true
- elseif tonumber(luci.sys.exec("ps -w | grep https_dns_proxy |grep -v grep| wc -l"))>0 then
- e.pdnsd= true
+ e.chinadns= true
+
end
--检测SOCKS5状态
if tonumber(luci.sys.exec("ps -w | grep ssr-local |grep -v grep| wc -l"))>0 then
diff --git a/package/ctcgfw/luci-app-ssr-plus-jo/luasrc/model/cbi/shadowsocksr/advanced.lua b/package/ctcgfw/luci-app-ssr-plus-Jo/luasrc/model/cbi/shadowsocksr/advanced.lua
similarity index 100%
rename from package/ctcgfw/luci-app-ssr-plus-jo/luasrc/model/cbi/shadowsocksr/advanced.lua
rename to package/ctcgfw/luci-app-ssr-plus-Jo/luasrc/model/cbi/shadowsocksr/advanced.lua
diff --git a/package/ctcgfw/luci-app-ssr-plus-Jo/luasrc/model/cbi/shadowsocksr/appointlist.lua b/package/ctcgfw/luci-app-ssr-plus-Jo/luasrc/model/cbi/shadowsocksr/appointlist.lua
new file mode 100644
index 0000000000..124e525307
--- /dev/null
+++ b/package/ctcgfw/luci-app-ssr-plus-Jo/luasrc/model/cbi/shadowsocksr/appointlist.lua
@@ -0,0 +1,23 @@
+local fs = require "nixio.fs"
+local conffile = "/etc/dnsmasq.ssr/appoint_list.conf"
+
+f = SimpleForm("custom", translate("Appoint dns List"))
+
+t = f:field(TextValue, "conf")
+t.rmempty = true
+t.rows = 13
+function t.cfgvalue()
+ return fs.readfile(conffile) or ""
+end
+
+function f.handle(self, state, data)
+ if state == FORM_VALID then
+ if data.conf then
+ fs.writefile(conffile, data.conf:gsub("\r\n", "\n"))
+ luci.sys.call("/etc/init.d/dnsmasq restart")
+ end
+ end
+ return true
+end
+
+return f
\ No newline at end of file
diff --git a/package/ctcgfw/luci-app-ssr-plus-jo/luasrc/model/cbi/shadowsocksr/automatic.lua b/package/ctcgfw/luci-app-ssr-plus-Jo/luasrc/model/cbi/shadowsocksr/automatic.lua
similarity index 100%
rename from package/ctcgfw/luci-app-ssr-plus-jo/luasrc/model/cbi/shadowsocksr/automatic.lua
rename to package/ctcgfw/luci-app-ssr-plus-Jo/luasrc/model/cbi/shadowsocksr/automatic.lua
diff --git a/package/ctcgfw/luci-app-ssr-plus-jo/luasrc/model/cbi/shadowsocksr/client-config.lua b/package/ctcgfw/luci-app-ssr-plus-Jo/luasrc/model/cbi/shadowsocksr/client-config.lua
similarity index 90%
rename from package/ctcgfw/luci-app-ssr-plus-jo/luasrc/model/cbi/shadowsocksr/client-config.lua
rename to package/ctcgfw/luci-app-ssr-plus-Jo/luasrc/model/cbi/shadowsocksr/client-config.lua
index 5e6e707866..d7edf99cfc 100644
--- a/package/ctcgfw/luci-app-ssr-plus-jo/luasrc/model/cbi/shadowsocksr/client-config.lua
+++ b/package/ctcgfw/luci-app-ssr-plus-Jo/luasrc/model/cbi/shadowsocksr/client-config.lua
@@ -9,8 +9,7 @@ local fs = require "nixio.fs"
local sys = require "luci.sys"
local sid = arg[1]
local uuid = luci.sys.exec("cat /proc/sys/kernel/random/uuid")
-local http = luci.http
-local ucursor = require "luci.model.uci".cursor()
+
local function isKcptun(file)
if not fs.access(file, "rwx", "rx", "rx") then
@@ -89,7 +88,7 @@ local protocol = {
"auth_chain_f",
}
-obfs = {
+local obfs = {
"plain",
"http_simple",
"http_post",
@@ -97,12 +96,6 @@ obfs = {
"tls1.2_ticket_auth",
}
-local obfs_opts = {
- "none",
- "http",
- "tls",
-}
-
local securitys = {
"auto",
"none",
@@ -111,9 +104,8 @@ local securitys = {
}
-
m = Map(shadowsocksr, translate("Edit ShadowSocksR Server"))
-m.redirect = luci.dispatcher.build_url("admin/services/shadowsocksr/servers")
+m.redirect = luci.dispatcher.build_url("admin/vpn/shadowsocksr/servers")
if m.uci:get(shadowsocksr, sid) ~= "servers" then
luci.http.redirect(m.redirect)
return
@@ -124,25 +116,32 @@ s = m:section(NamedSection, sid, "servers")
s.anonymous = true
s.addremove = false
-o = s:option(DummyValue,"ssr_url","配置链接")
+o = s:option(DummyValue,"ssr_url","SS/SSR/V2RAY/TROJAN URL")
o.rawhtml = true
o.template = "shadowsocksr/ssrurl"
o.value =sid
-o:depends("type", "ssr")
+
o = s:option(ListValue, "type", translate("Server Node Type"))
-o:value("ssr", translate("ShadowsocksR"))
-if nixio.fs.access("/usr/bin/ss-redir") then
-o:value("ss", translate("Shadowsocks New Version"))
+if nixio.fs.access("/usr/sbin/trojan") then
+o:value("trojan", translate("Trojan"))
end
+
if nixio.fs.access("/usr/bin/v2ray/v2ray") then
o:value("v2ray", translate("V2Ray"))
end
+o:value("ssr", translate("ShadowsocksR"))
+if nixio.fs.access("/usr/bin/ss-redir") then
+o:value("ss", translate("Shadowsocks"))
+end
o.description = translate("Using incorrect encryption mothod may causes service fail to start")
+
+
o = s:option(Value, "alias", translate("Alias(optional)"))
o = s:option(Value, "server", translate("Server Address"))
+o.datatype = "host"
o.rmempty = false
o = s:option(Value, "server_port", translate("Server Port"))
@@ -164,6 +163,9 @@ o.password = true
o.rmempty = true
o:depends("type", "ssr")
o:depends("type", "ss")
+o:depends("type", "trojan")
+
+
o = s:option(ListValue, "encrypt_method", translate("Encrypt Method"))
for _, v in ipairs(encrypt_methods) do o:value(v) end
@@ -175,6 +177,28 @@ for _, v in ipairs(encrypt_methods_ss) do o:value(v) end
o.rmempty = true
o:depends("type", "ss")
+o = s:option(ListValue, "plugin", translate("plugin"))
+o:value("none", "None")
+if nixio.fs.access("/usr/bin/v2ray-plugin") then
+o:value("/usr/bin/v2ray-plugin", "v2ray-plugin")
+end
+if nixio.fs.access("/usr/bin/obfs-local") then
+o:value("/usr/bin/obfs-local", "obfs-local")
+end
+if nixio.fs.access("/usr/bin/goquiet-client") then
+o:value("/usr/bin/goquiet-client", "GoQuiet")
+end
+o.rmempty = false
+o.default = "none"
+o:depends("type", "ss")
+
+o = s:option(Value, "plugin_opts", translate("Plugin Opts"))
+o.rmempty = true
+o:depends("plugin", "/usr/bin/v2ray-plugin")
+o:depends("plugin", "/usr/bin/obfs-local")
+o:depends("plugin", "/usr/bin/goquiet-client")
+
+
o = s:option(ListValue, "protocol", translate("Protocol"))
for _, v in ipairs(protocol) do o:value(v) end
o.rmempty = true
@@ -188,21 +212,9 @@ for _, v in ipairs(obfs) do o:value(v) end
o.rmempty = true
o:depends("type", "ssr")
-o = s:option(ListValue, "obfs_opts", translate("Obfs (可选)"))
-for _, v in ipairs(obfs_opts) do o:value(v) end
-o.rmempty = true
-o:depends("type", "ss")
-
-
-o = s:option(Value, "obfs_host", translate("Obfs-host (可选)"))
-o:depends("type", "ss")
-
o = s:option(Value, "obfs_param", translate("Obfs param(optional)"))
o:depends("type", "ssr")
-
-
-
-- AlterId
o = s:option(Value, "alter_id", translate("AlterId"))
o.default = 100
@@ -353,12 +365,14 @@ o.rmempty = true
o = s:option(Flag, "insecure", translate("allowInsecure"))
o.rmempty = true
o:depends("type", "v2ray")
+o:depends("type", "trojan")
-- [[ TLS ]]--
o = s:option(Flag, "tls", translate("TLS"))
o.rmempty = true
o.default = "0"
o:depends("type", "v2ray")
+o:depends("type", "trojan")
-- [[ Mux ]]--
o = s:option(Flag, "mux", translate("Mux"))
@@ -377,6 +391,7 @@ o.rmempty = true
o.default = "0"
o:depends("type", "ssr")
o:depends("type", "ss")
+o:depends("type", "trojan")
o = s:option(Flag, "switch_enable", translate("Enable Auto Switch"))
o.rmempty = false
diff --git a/package/ctcgfw/luci-app-ssr-plus-jo/luasrc/model/cbi/shadowsocksr/client.lua b/package/ctcgfw/luci-app-ssr-plus-Jo/luasrc/model/cbi/shadowsocksr/client.lua
similarity index 98%
rename from package/ctcgfw/luci-app-ssr-plus-jo/luasrc/model/cbi/shadowsocksr/client.lua
rename to package/ctcgfw/luci-app-ssr-plus-Jo/luasrc/model/cbi/shadowsocksr/client.lua
index aa163f8d3c..e295d590c0 100644
--- a/package/ctcgfw/luci-app-ssr-plus-jo/luasrc/model/cbi/shadowsocksr/client.lua
+++ b/package/ctcgfw/luci-app-ssr-plus-Jo/luasrc/model/cbi/shadowsocksr/client.lua
@@ -123,6 +123,7 @@ o:depends("pdnsd_enable", "6")
o = s:option(Value, "tunnel_forward", translate("Anti-pollution DNS Server"))
o:value("0.0.0.0:53", translate("Using System Default DNS"))
+o:value("0.0.0.0:5333", translate("Using acceleration center DNS"))
o:value("8.8.4.4:53", translate("Google Public DNS (8.8.4.4)"))
o:value("8.8.8.8:53", translate("Google Public DNS (8.8.8.8)"))
o:value("208.67.222.222:53", translate("OpenDNS (208.67.222.222)"))
@@ -171,5 +172,5 @@ o.value =ip_count .. " " .. translate("Records")
o = s:option(Button,"check_port",translate("Check Server Port"))
o.template = "shadowsocksr/checkport"
o.value =translate("No Check")
-m:section(SimpleSection).template = "shadowsocksr/myip"
+
return m
diff --git a/package/ctcgfw/luci-app-ssr-plus-jo/luasrc/model/cbi/shadowsocksr/control.lua b/package/ctcgfw/luci-app-ssr-plus-Jo/luasrc/model/cbi/shadowsocksr/control.lua
similarity index 54%
rename from package/ctcgfw/luci-app-ssr-plus-jo/luasrc/model/cbi/shadowsocksr/control.lua
rename to package/ctcgfw/luci-app-ssr-plus-Jo/luasrc/model/cbi/shadowsocksr/control.lua
index c4685389d0..e75b31b655 100644
--- a/package/ctcgfw/luci-app-ssr-plus-jo/luasrc/model/cbi/shadowsocksr/control.lua
+++ b/package/ctcgfw/luci-app-ssr-plus-Jo/luasrc/model/cbi/shadowsocksr/control.lua
@@ -1,4 +1,5 @@
local m, s, o
+local NXFS = require "nixio.fs"
m = Map("shadowsocksr", translate("IP black-and-white list"))
@@ -14,7 +15,8 @@ o.datatype = "ip4addr"
o = s:taboption("wan_ac", DynamicList, "wan_fw_ips", translate("WAN Force Proxy IP"))
o.datatype = "ip4addr"
-
+o = s:taboption("wan_ac", DynamicList, "wan_fk_ips", translate("WAN Fk Proxy IP"))
+o.datatype = "ip4addr"
-- Part of LAN
s:tab("lan_ac", translate("LAN IP AC"))
@@ -34,6 +36,7 @@ luci.ip.neighbors({ family = 4 }, function(entry)
o:value(entry.dest:string())
end
end)
+
o = s:taboption("lan_ac", DynamicList, "lan_gm_ips", translate("Game Mode Host List"))
o.datatype = "ipaddr"
luci.ip.neighbors({ family = 4 }, function(entry)
@@ -42,14 +45,13 @@ luci.ip.neighbors({ family = 4 }, function(entry)
end
end)
+-- s = m:section(TypedSection, "domain_white_list", translate("Domain White List"))
+-- s.template = "cbi/tblsection"
+-- s.anonymous = true
+-- s.addremove = true
+-- s.sortable = true
-s = m:section(TypedSection, "domain_white_list", translate("Domain White List"))
-s.template = "cbi/tblsection"
-s.anonymous = true
-s.addremove = true
-s.sortable = true
-
-o = s:option(Value, "domain_names", translate("Domain name (keyword only)"))
+-- o = s:option(Value, "domain_names", translate("Domain name (keyword only)"))
-- Part of Self
-- s:tab("self_ac", translate("Router Self AC"))
@@ -59,4 +61,40 @@ o = s:option(Value, "domain_names", translate("Domain name (keyword only)"))
-- o:value("2", translatef("Forwarded Proxy"))
-- o.rmempty = false
+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.write = function(self, section, value)
+ 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"))
+
+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.write = function(self, section, value)
+ NXFS.writefile(blockconf, value:gsub("\r\n", "\n"))
+end
+o.remove = function(self, section, value)
+ NXFS.writefile(blockconf, "")
+end
+
+m:section(SimpleSection).template = "shadowsocksr/myip"
return m
diff --git a/package/ctcgfw/luci-app-ssr-plus-jo/luasrc/model/cbi/shadowsocksr/list.lua b/package/ctcgfw/luci-app-ssr-plus-Jo/luasrc/model/cbi/shadowsocksr/list.lua
similarity index 100%
rename from package/ctcgfw/luci-app-ssr-plus-jo/luasrc/model/cbi/shadowsocksr/list.lua
rename to package/ctcgfw/luci-app-ssr-plus-Jo/luasrc/model/cbi/shadowsocksr/list.lua
diff --git a/package/ctcgfw/luci-app-ssr-plus-jo/luasrc/model/cbi/shadowsocksr/log.lua b/package/ctcgfw/luci-app-ssr-plus-Jo/luasrc/model/cbi/shadowsocksr/log.lua
similarity index 100%
rename from package/ctcgfw/luci-app-ssr-plus-jo/luasrc/model/cbi/shadowsocksr/log.lua
rename to package/ctcgfw/luci-app-ssr-plus-Jo/luasrc/model/cbi/shadowsocksr/log.lua
diff --git a/package/ctcgfw/luci-app-ssr-plus-jo/luasrc/model/cbi/shadowsocksr/server-config.lua b/package/ctcgfw/luci-app-ssr-plus-Jo/luasrc/model/cbi/shadowsocksr/server-config.lua
similarity index 91%
rename from package/ctcgfw/luci-app-ssr-plus-jo/luasrc/model/cbi/shadowsocksr/server-config.lua
rename to package/ctcgfw/luci-app-ssr-plus-Jo/luasrc/model/cbi/shadowsocksr/server-config.lua
index c233e3eb44..c1b4032843 100644
--- a/package/ctcgfw/luci-app-ssr-plus-jo/luasrc/model/cbi/shadowsocksr/server-config.lua
+++ b/package/ctcgfw/luci-app-ssr-plus-Jo/luasrc/model/cbi/shadowsocksr/server-config.lua
@@ -103,7 +103,7 @@ local securitys = {
m = Map(shadowsocksr, translate("Edit ShadowSocksR Server"))
-m.redirect = luci.dispatcher.build_url("admin/services/shadowsocksr/server")
+m.redirect = luci.dispatcher.build_url("admin/vpn/shadowsocksr/server")
if m.uci:get(shadowsocksr, sid) ~= "server_config" then
luci.http.redirect(m.redirect)
return
@@ -163,24 +163,41 @@ o:depends("type", "ss")
+o = s:option(ListValue, "plugin", translate("plugin"))
+o:value("none", "None")
+if nixio.fs.access("/usr/bin/v2ray-plugin") then
+o:value("/usr/bin/v2ray-plugin", "v2ray-plugin")
+end
+if nixio.fs.access("/usr/bin/obfs-server") then
+o:value("/usr/bin/obfs-server", "obfs-server")
+end
+if nixio.fs.access("/usr/bin/gq-server") then
+o:value("/usr/bin/gq-server", "GoQuiet")
+end
+o.rmempty = false
+o.default = "none"
+o:depends("type", "ss")
+
+o = s:option(Value, "plugin_opts", translate("Plugin Opts"))
+o.rmempty = true
+o:depends("plugin", "/usr/bin/v2ray-plugin")
+o:depends("plugin", "/usr/bin/obfs-server")
+o:depends("plugin", "/usr/bin/gq-server")
+
o = s:option(ListValue, "protocol", translate("Protocol"))
for _, v in ipairs(protocol) do o:value(v) end
o.rmempty = true
o:depends("type", "ssr")
-o = s:option(Value, "protocol_param", translate("Protocol param(optional)"))
-o:depends("type", "ssr")
-
o = s:option(ListValue, "obfs", translate("Obfs"))
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")
+
-- AlterId
o = s:option(Value, "alter_id", translate("AlterId"))
o.default = 100
@@ -359,3 +376,4 @@ o.rmempty = true
o:depends("type", "ssr")
return m
+
diff --git a/package/ctcgfw/luci-app-ssr-plus-jo/luasrc/model/cbi/shadowsocksr/server.lua b/package/ctcgfw/luci-app-ssr-plus-Jo/luasrc/model/cbi/shadowsocksr/server.lua
similarity index 96%
rename from package/ctcgfw/luci-app-ssr-plus-jo/luasrc/model/cbi/shadowsocksr/server.lua
rename to package/ctcgfw/luci-app-ssr-plus-Jo/luasrc/model/cbi/shadowsocksr/server.lua
index 3f186b099b..d9d9380898 100644
--- a/package/ctcgfw/luci-app-ssr-plus-jo/luasrc/model/cbi/shadowsocksr/server.lua
+++ b/package/ctcgfw/luci-app-ssr-plus-Jo/luasrc/model/cbi/shadowsocksr/server.lua
@@ -77,7 +77,7 @@ sec.anonymous = true
sec.addremove = true
sec.sortable = true
sec.template = "cbi/tblsection"
-sec.extedit = luci.dispatcher.build_url("admin/services/shadowsocksr/server/%s")
+sec.extedit = luci.dispatcher.build_url("admin/vpn/shadowsocksr/server/%s")
function sec.create(...)
local sid = TypedSection.create(...)
if sid then
diff --git a/package/ctcgfw/luci-app-ssr-plus-jo/luasrc/model/cbi/shadowsocksr/servers.lua b/package/ctcgfw/luci-app-ssr-plus-Jo/luasrc/model/cbi/shadowsocksr/servers.lua
similarity index 97%
rename from package/ctcgfw/luci-app-ssr-plus-jo/luasrc/model/cbi/shadowsocksr/servers.lua
rename to package/ctcgfw/luci-app-ssr-plus-Jo/luasrc/model/cbi/shadowsocksr/servers.lua
index 0d094462d9..00c73d161e 100644
--- a/package/ctcgfw/luci-app-ssr-plus-jo/luasrc/model/cbi/shadowsocksr/servers.lua
+++ b/package/ctcgfw/luci-app-ssr-plus-Jo/luasrc/model/cbi/shadowsocksr/servers.lua
@@ -111,7 +111,7 @@ s.description = string.format(translate("Server Count") .. ": %d", server_count
s.addremove = true
s.sortable = true
s.template = "cbi/tblsection"
-s.extedit = luci.dispatcher.build_url("admin/services/shadowsocksr/servers/%s")
+s.extedit = luci.dispatcher.build_url("admin/vpn/shadowsocksr/servers/%s")
function s.create(...)
local sid = TypedSection.create(...)
if sid then
diff --git a/package/ctcgfw/luci-app-ssr-plus-jo/luasrc/model/cbi/shadowsocksr/status.lua b/package/ctcgfw/luci-app-ssr-plus-Jo/luasrc/model/cbi/shadowsocksr/status.lua
similarity index 88%
rename from package/ctcgfw/luci-app-ssr-plus-jo/luasrc/model/cbi/shadowsocksr/status.lua
rename to package/ctcgfw/luci-app-ssr-plus-Jo/luasrc/model/cbi/shadowsocksr/status.lua
index 3d99a98b4b..4a07090441 100644
--- a/package/ctcgfw/luci-app-ssr-plus-jo/luasrc/model/cbi/shadowsocksr/status.lua
+++ b/package/ctcgfw/luci-app-ssr-plus-Jo/luasrc/model/cbi/shadowsocksr/status.lua
@@ -1,7 +1,7 @@
-- Copyright (C) 2017 yushi studio
-- Licensed to the public under the GNU General Public License v3.
-local IPK_Version="20191116.118"
+local IPK_Version="20191202.120"
local m, s, o
local redir_run=0
local reudp_run=0
@@ -22,6 +22,7 @@ local gfwmode=0
local pdnsd_run=0
local dnsforwarder_run=0
local dnscrypt_proxy_run=0
+local chinadns_run=0
local haproxy_run=0
local privoxy_run=0
@@ -30,6 +31,8 @@ gfwmode=1
end
local shadowsocksr = "shadowsocksr"
+
+
-- html constants
font_blue = [[]]
font_off = [[]]
@@ -53,6 +56,7 @@ else
end
+
local udp2raw_version=translate("Unknown")
local udp2raw_file="/usr/bin/udp2raw"
if not fs.access(udp2raw_file) then
@@ -92,6 +96,9 @@ if nixio.fs.access("/etc/china_ssr.txt") then
ip_count = sys.exec("cat /etc/china_ssr.txt | wc -l")
end
+
+
+
local icount=sys.exec("ps -w | grep ssr-reudp |grep -v grep| wc -l")
if tonumber(icount)>0 then
reudp_run=1
@@ -131,6 +138,10 @@ if luci.sys.call("pidof ssr-server >/dev/null") == 0 then
server_run=1
end
+if luci.sys.call("busybox ps -w | grep ssr-tunnel |grep -v grep >/dev/null") == 0 then
+tunnel_run=1
+end
+
if luci.sys.call("pidof ss-server >/dev/null") == 0 then
sserver_run=1
end
@@ -149,7 +160,11 @@ end
if luci.sys.call("pidof udpspeeder >/dev/null") == 0 then
udpspeeder_run=1
-end
+end
+
+if luci.sys.call("pidof chinadns >/dev/null") == 0 then
+chinadns_run=1
+end
if luci.sys.call("pidof pdnsd >/dev/null") == 0 then
pdnsd_run=1
@@ -163,6 +178,7 @@ if luci.sys.call("pidof dnscrypt-proxy >/dev/null") == 0 then
dnscrypt_proxy_run=1
end
+
if luci.sys.call("pidof haproxy >/dev/null") == 0 then
haproxy_run=1
end
@@ -171,6 +187,8 @@ m = SimpleForm("Version")
m.reset = false
m.submit = false
+
+
s=m:field(DummyValue,"redir_run",translate("Global Client"))
s.rawhtml = true
if redir_run == 1 then
@@ -195,6 +213,16 @@ else
s.value = translate("Not Running")
end
+if nixio.fs.access("/usr/bin/chinadns") then
+s=m:field(DummyValue,"chinadns_run",translate("ChinaDNS"))
+s.rawhtml = true
+if chinadns_run == 1 then
+s.value =font_blue .. bold_on .. translate("Running") .. bold_off .. font_off
+else
+s.value = translate("Not Running")
+end
+end
+
s=m:field(DummyValue,"pdnsd_run",translate("PDNSD"))
s.rawhtml = true
if pdnsd_run == 1 then
@@ -222,6 +250,7 @@ end
+
if nixio.fs.access("/usr/bin/ssr-local") then
s=m:field(DummyValue,"sock5_run",translate("SOCKS5 Proxy"))
s.rawhtml = true
@@ -305,6 +334,7 @@ else
s.value = translate("Not Running")
end
end
+
s=m:field(DummyValue,"version",translate("IPK Version"))
s.rawhtml = true
s.value =IPK_Version
@@ -319,10 +349,7 @@ s.value =font_blue .. bold_on .. translate("Running") .. bold_off .. font_off
else
s.value = translate("Not Running")
end
-s=m:field(DummyValue,"udp2raw_project",translate("udp2raw tunnel Project"))
-s.rawhtml = true
-s.value =bold_on .. [[]]
- .. "https://github.com/wangyu-/udp2raw-tunnel" .. [[]] .. bold_off
+
s=m:field(DummyValue,"udpspeeder_version",translate("UDPspeeder Version"))
s.rawhtml = true
@@ -334,33 +361,9 @@ s.value =font_blue .. bold_on .. translate("Running") .. bold_off .. font_off
else
s.value = translate("Not Running")
end
-s=m:field(DummyValue,"udpspeeder_project",translate("UDPspeeder Project"))
-s.rawhtml = true
-s.value =bold_on .. [[]]
- .. "https://github.com/wangyu-/UDPspeeder" .. [[]] .. bold_off
-
-
-if gfwmode==1 then
-s=m:field(DummyValue,"gfw_data",translate("GFW List Data"))
-s.rawhtml = true
-s.template = "shadowsocksr/refresh"
-s.value =tostring(math.ceil(gfw_count)) .. " " .. translate("Records")
-
-
-s=m:field(DummyValue,"ad_data",translate("Advertising Data"))
-s.rawhtml = true
-s.template = "shadowsocksr/refresh"
-s.value =tostring(math.ceil(ad_count)) .. " " .. translate("Records")
-end
-s=m:field(DummyValue,"ip_data",translate("China IP Data"))
-s.rawhtml = true
-s.template = "shadowsocksr/refresh"
-s.value =ip_count .. " " .. translate("Records")
-
-s=m:field(DummyValue,"check_port",translate("Check Server Port"))
-s.template = "shadowsocksr/checkport"
-s.value =translate("No Check")
-
+s=m:field(DummyValue,"feedback",translate("Feedback"))
+s.template = "shadowsocksr/feedback"
+s.value =translate("No feedback")
return m
diff --git a/package/ctcgfw/luci-app-ssr-plus-jo/luasrc/model/cbi/shadowsocksr/subscription.lua b/package/ctcgfw/luci-app-ssr-plus-Jo/luasrc/model/cbi/shadowsocksr/subscription.lua
similarity index 77%
rename from package/ctcgfw/luci-app-ssr-plus-jo/luasrc/model/cbi/shadowsocksr/subscription.lua
rename to package/ctcgfw/luci-app-ssr-plus-Jo/luasrc/model/cbi/shadowsocksr/subscription.lua
index 3577dead75..80b2213198 100644
--- a/package/ctcgfw/luci-app-ssr-plus-jo/luasrc/model/cbi/shadowsocksr/subscription.lua
+++ b/package/ctcgfw/luci-app-ssr-plus-Jo/luasrc/model/cbi/shadowsocksr/subscription.lua
@@ -13,9 +13,9 @@ local fs = require "nixio.fs"
local sys = require "luci.sys"
m = Map(shadowsocksr)
m:section(SimpleSection).template = "shadowsocksr/status"
--- Server Subscribe
-s = m:section(TypedSection, "server_subscribe", translate("Servers subscription and manage"))
+
+s = m:section(TypedSection, "server_subscribe", translate("Node Subscribe"))
s.anonymous = true
o = s:option(Flag, "auto_update", translate("Auto Update"))
@@ -41,12 +41,6 @@ o.rmempty = false
o = s:option(DynamicList, "subscribe_url", translate("Subscribe URL"))
o.rmempty = true
-o = s:option(Button,"update_Sub",translate("Update Subscribe List"))
-o.inputstyle = "reload"
-o.description = translate("Update subscribe url list first")
-o.write = function()
- luci.http.redirect(luci.dispatcher.build_url("admin", "services", "shadowsocksr", "servers"))
-end
o = s:option(Flag, "proxy", translate("Through proxy update"))
o.rmempty = false
o.description = translate("Through proxy update list, Not Recommended ")
@@ -55,7 +49,7 @@ o = s:option(Button,"update",translate("Update All Subscribe Severs"))
o.inputstyle = "apply"
o.write = function()
luci.sys.exec("bash /usr/share/shadowsocksr/subscribe.sh >>/tmp/ssrplus.log 2>&1")
- luci.http.redirect(luci.dispatcher.build_url("admin", "services", "shadowsocksr", "servers"))
+ luci.http.redirect(luci.dispatcher.build_url("admin", "vpn", "shadowsocksr", "servers"))
end
o = s:option(Button,"update_v2ray",translate("Upgrade V2ray"))
@@ -71,8 +65,9 @@ o.write = function()
uci:delete_all("shadowsocksr", "servers", function(s) return true end)
uci:save("shadowsocksr")
luci.sys.call("uci commit shadowsocksr && /etc/init.d/shadowsocksr stop")
- luci.http.redirect(luci.dispatcher.build_url("admin", "services", "shadowsocksr", "servers"))
+ luci.http.redirect(luci.dispatcher.build_url("admin", "vpn", "shadowsocksr", "servers"))
return
end
return m
+
diff --git a/package/ctcgfw/luci-app-ssr-plus-jo/luasrc/view/shadowsocksr/check.htm b/package/ctcgfw/luci-app-ssr-plus-Jo/luasrc/view/shadowsocksr/check.htm
similarity index 89%
rename from package/ctcgfw/luci-app-ssr-plus-jo/luasrc/view/shadowsocksr/check.htm
rename to package/ctcgfw/luci-app-ssr-plus-Jo/luasrc/view/shadowsocksr/check.htm
index 7ff8a5e84e..e747afa1fd 100644
--- a/package/ctcgfw/luci-app-ssr-plus-jo/luasrc/view/shadowsocksr/check.htm
+++ b/package/ctcgfw/luci-app-ssr-plus-Jo/luasrc/view/shadowsocksr/check.htm
@@ -1,13 +1,12 @@
<%+cbi/valueheader%>
diff --git a/package/ctcgfw/luci-app-ssr-plus-jo/luasrc/view/shadowsocksr/checkport.htm b/package/ctcgfw/luci-app-ssr-plus-Jo/luasrc/view/shadowsocksr/checkport.htm
similarity index 85%
rename from package/ctcgfw/luci-app-ssr-plus-jo/luasrc/view/shadowsocksr/checkport.htm
rename to package/ctcgfw/luci-app-ssr-plus-Jo/luasrc/view/shadowsocksr/checkport.htm
index 285e5a3fb2..1db2c79c74 100644
--- a/package/ctcgfw/luci-app-ssr-plus-jo/luasrc/view/shadowsocksr/checkport.htm
+++ b/package/ctcgfw/luci-app-ssr-plus-Jo/luasrc/view/shadowsocksr/checkport.htm
@@ -1,30 +1,23 @@
<%+cbi/valueheader%>
diff --git a/package/ctcgfw/luci-app-ssr-plus-Jo/luasrc/view/shadowsocksr/feedback.htm b/package/ctcgfw/luci-app-ssr-plus-Jo/luasrc/view/shadowsocksr/feedback.htm
new file mode 100644
index 0000000000..db165daadc
--- /dev/null
+++ b/package/ctcgfw/luci-app-ssr-plus-Jo/luasrc/view/shadowsocksr/feedback.htm
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/package/ctcgfw/luci-app-ssr-plus-jo/luasrc/view/shadowsocksr/myip.htm b/package/ctcgfw/luci-app-ssr-plus-Jo/luasrc/view/shadowsocksr/myip.htm
similarity index 99%
rename from package/ctcgfw/luci-app-ssr-plus-jo/luasrc/view/shadowsocksr/myip.htm
rename to package/ctcgfw/luci-app-ssr-plus-Jo/luasrc/view/shadowsocksr/myip.htm
index 4cb89ae032..d62f5bb9c7 100644
--- a/package/ctcgfw/luci-app-ssr-plus-jo/luasrc/view/shadowsocksr/myip.htm
+++ b/package/ctcgfw/luci-app-ssr-plus-Jo/luasrc/view/shadowsocksr/myip.htm
@@ -1,4 +1,3 @@
-
@@ -74,7 +73,6 @@
text-overflow: ellipsis;
transform:translateY(10%);
}
-
.sk-text-success {
color: #32b643;
font-size:15px;
@@ -87,7 +85,6 @@
text-align: left;
transform:translateY(10%);
}
-
.sk-text-error {
color: #e85600;
font-size:15px;
@@ -100,20 +97,16 @@
text-align: left;
transform:translateY(10%);
}
-
h3 {
margin: 5px 0 6px;
}
-
p {
margin: 10px 0;
}
-
a {
text-decoration: none;
color: #666;
}
-