From a84dfdb21744cceda2fbe97562906c2e96a2609b Mon Sep 17 00:00:00 2001 From: Teaffanie <70811472+Teaffanie@users.noreply.github.com> Date: Tue, 8 Sep 2020 12:19:42 +0800 Subject: [PATCH] luci-app-passwall: bump to 3.9-56 --- package/lienol/luci-app-passwall/Makefile | 11 ++++- .../model/cbi/passwall/server/api/app.lua | 18 ++++++-- .../cbi/passwall/server/api/shadowsocks.lua | 19 ++++++++ .../model/cbi/passwall/server/index.lua | 1 + .../luasrc/model/cbi/passwall/server/user.lua | 45 +++++++++++++++++-- 5 files changed, 86 insertions(+), 8 deletions(-) create mode 100644 package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/server/api/shadowsocks.lua diff --git a/package/lienol/luci-app-passwall/Makefile b/package/lienol/luci-app-passwall/Makefile index 6ae9b986cc..5e32a9ce15 100644 --- a/package/lienol/luci-app-passwall/Makefile +++ b/package/lienol/luci-app-passwall/Makefile @@ -7,8 +7,8 @@ include $(TOPDIR)/rules.mk PKG_NAME:=luci-app-passwall PKG_VERSION:=3.9 -PKG_RELEASE:=54 -PKG_DATE:=20200905 +PKG_RELEASE:=56 +PKG_DATE:=20200907 PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION) @@ -21,6 +21,10 @@ config PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks bool "Include Shadowsocks" default y +config PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_Server + bool "Include Shadowsocks Server" + default y + config PACKAGE_$(PKG_NAME)_INCLUDE_ShadowsocksR bool "Include ShadowsocksR" default y @@ -84,9 +88,12 @@ define Package/$(PKG_NAME) DEPENDS:=+libmbedtls +iptables-mod-tproxy +ip +ipset +coreutils +coreutils-base64 +coreutils-nohup +luci-lib-jsonc \ +curl +ca-certificates +resolveip +unzip +dnsmasq-full +tcping +libuci-lua \ +ipt2socks \ + +ssocks \ + +ssocksd \ +pdnsd-alt \ +PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks:shadowsocks-libev-ss-redir \ +PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks:shadowsocks-libev-ss-local \ + +PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_Server:shadowsocks-libev-ss-server \ +PACKAGE_$(PKG_NAME)_INCLUDE_ShadowsocksR:shadowsocksr-libev-alt \ +PACKAGE_$(PKG_NAME)_INCLUDE_ShadowsocksR:shadowsocksr-libev-ssr-local \ +PACKAGE_$(PKG_NAME)_INCLUDE_ShadowsocksR_Server:shadowsocksr-libev-server \ diff --git a/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/server/api/app.lua b/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/server/api/app.lua index 68dcb76a17..7ae901f73f 100644 --- a/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/server/api/app.lua +++ b/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/server/api/app.lua @@ -68,14 +68,26 @@ local function start() local config_file = CONFIG_PATH .. "/" .. id .. ".json" local udp_forward = 1 local type = user.type or "" - if type == "SSR" then - config = require("luci.model.cbi.passwall.server.api.ssr").gen_config(user) + if type == "Socks" then + local port = user.port + local username = user.username + local password = user.password + if username and password then + local auth_file = CONFIG_PATH .. "/" .. id .. ".auth" + cmd(string.format('echo %s:%s > %s', username, password, auth_file)) + bin = ln_start("/usr/bin/ssocksd", "ssocksd_" .. id, "-p " .. port .. " -a " .. auth_file) + else + bin = ln_start("/usr/bin/ssocksd", "ssocksd_" .. id, "-p " .. port) + end + elseif type == "SS" or type == "SSR" then + config = require("luci.model.cbi.passwall.server.api.shadowsocks").gen_config(user) local udp_param = "" udp_forward = tonumber(user.udp_forward) or 1 if udp_forward == 1 then udp_param = "-u" end - bin = ln_start("/usr/bin/ssr-server", "ssr-server", "-c " .. config_file .. " " .. udp_param) + type = type:lower() + bin = ln_start("/usr/bin/" .. type .. "-server", type .. "-server", "-c " .. config_file .. " " .. udp_param) elseif type == "V2ray" then config = require("luci.model.cbi.passwall.server.api.v2ray").gen_config(user) bin = ln_start(_api.get_v2ray_path(), "v2ray", "-config=" .. config_file) diff --git a/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/server/api/shadowsocks.lua b/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/server/api/shadowsocks.lua new file mode 100644 index 0000000000..3ad4fa7f91 --- /dev/null +++ b/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/server/api/shadowsocks.lua @@ -0,0 +1,19 @@ +module("luci.model.cbi.passwall.server.api.shadowsocks", package.seeall) +function gen_config(user) + local config = {} + config.server = {"[::0]", "0.0.0.0"} + config.server_port = tonumber(user.port) + config.password = user.password + config.timeout = tonumber(user.timeout) + config.fast_open = (user.tcp_fast_open and user.tcp_fast_open == "true") and true or false + config.method = user.method + + if user.type == "SSR" then + config.protocol = user.protocol + config.protocol_param = user.protocol_param + config.obfs = user.obfs + config.obfs_param = user.obfs_param + end + + return config +end diff --git a/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/server/index.lua b/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/server/index.lua index f346fe2550..f77beaeaf2 100644 --- a/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/server/index.lua +++ b/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/server/index.lua @@ -14,6 +14,7 @@ e.rmempty = false t = m:section(TypedSection, "user", translate("Users Manager")) t.anonymous = true t.addremove = true +t.sortable = true t.template = "cbi/tblsection" t.extedit = d.build_url("admin", "services", "passwall", "server_user", "%s") function t.create(e, t) diff --git a/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/server/user.lua b/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/server/user.lua index 50aa25f275..33cb49013f 100644 --- a/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/server/user.lua +++ b/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/server/user.lua @@ -2,6 +2,15 @@ local d = require "luci.dispatcher" local uci = require"luci.model.uci".cursor() local api = require "luci.model.cbi.passwall.api.api" +local ss_encrypt_method_list = { + "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" +} + local ssr_encrypt_method_list = { "none", "table", "rc2-cfb", "rc4", "rc4-md5", "rc4-md5-6", "aes-128-cfb", "aes-192-cfb", "aes-256-cfb", "aes-128-ctr", "aes-192-ctr", "aes-256-ctr", @@ -60,6 +69,12 @@ remarks.default = translate("Remarks") remarks.rmempty = false type = s:option(ListValue, "type", translate("Type")) +if api.is_finded("ssocksd") then + type:value("Socks", translate("Socks")) +end +if api.is_finded("ss-server") then + type:value("SS", translate("Shadowsocks")) +end if api.is_finded("ssr-server") then type:value("SSR", translate("ShadowsocksR")) end @@ -91,7 +106,7 @@ protocol:value("mtproto", "MTProto") protocol:depends("type", "V2ray") -- Brook协议 -brook_protocol = s:option(ListValue, "brook_protocol", translate("Brook Protocol")) +brook_protocol = s:option(ListValue, "brook_protocol", translate("Protocol")) brook_protocol:value("server", "Brook") brook_protocol:value("wsserver", "WebSocket") brook_protocol:depends("type", "Brook") @@ -112,9 +127,12 @@ port.rmempty = false username = s:option(Value, "username", translate("Username")) username:depends("protocol", "http") username:depends("protocol", "socks") +username:depends("type", "Socks") -password = s:option(Value, "password", translate("Password"), translate("The MTProto protocol must be 32 characters and can only contain characters from 0 to 9 and a to f.")) +password = s:option(Value, "password", translate("Password")) password.password = true +password:depends("type", "Socks") +password:depends("type", "SS") password:depends("type", "SSR") password:depends("type", "Brook") password:depends("type", "Trojan") @@ -122,12 +140,31 @@ password:depends("type", "Trojan-Plus") password:depends({ type = "V2ray", protocol = "http" }) password:depends({ type = "V2ray", protocol = "socks" }) password:depends({ type = "V2ray", protocol = "shadowsocks" }) -password:depends({ type = "V2ray", protocol = "mtproto" }) + +mtproto_password = s:option(Value, "mtproto_password", translate("Password"), translate("The MTProto protocol must be 32 characters and can only contain characters from 0 to 9 and a to f.")) +mtproto_password:depends({ type = "V2ray", protocol = "mtproto" }) +mtproto_password.default = arg[1] +function mtproto_password.cfgvalue(self, section) + return m:get(section, "password") +end +function mtproto_password.write(self, section, value) + m:set(section, "password", value) +end decryption = s:option(Value, "decryption", translate("Encrypt Method")) decryption.default = "none" decryption:depends("protocol", "vless") +ss_encrypt_method = s:option(ListValue, "ss_encrypt_method", translate("Encrypt Method")) +for a, t in ipairs(ss_encrypt_method_list) do ss_encrypt_method:value(t) end +ss_encrypt_method:depends("type", "SS") +function ss_encrypt_method.cfgvalue(self, section) + return m:get(section, "method") +end +function ss_encrypt_method.write(self, section, value) + m:set(section, "method", value) +end + ssr_encrypt_method = s:option(ListValue, "ssr_encrypt_method", translate("Encrypt Method")) for a, t in ipairs(ssr_encrypt_method_list) do ssr_encrypt_method:value(t) end ssr_encrypt_method:depends("type", "SSR") @@ -188,11 +225,13 @@ obfs_param:depends("type", "SSR") timeout = s:option(Value, "timeout", translate("Connection Timeout")) timeout.datatype = "uinteger" timeout.default = 300 +timeout:depends("type", "SS") timeout:depends("type", "SSR") tcp_fast_open = s:option(ListValue, "tcp_fast_open", translate("TCP Fast Open"), translate("Need node support required")) tcp_fast_open:value("false") tcp_fast_open:value("true") +tcp_fast_open:depends("type", "SS") tcp_fast_open:depends("type", "SSR") tcp_fast_open:depends("type", "Trojan") tcp_fast_open:depends("type", "Trojan-Plus")