From 5dbb3cd2b86a0ac4a9715c10489cdc47be3094c8 Mon Sep 17 00:00:00 2001 From: bc li Date: Sun, 18 Mar 2018 03:22:59 +0800 Subject: [PATCH] Add 'Use Config File' option. --- .../luci-app-v2ray/luasrc/model/cbi/v2ray.lua | 88 ++++++++++++++++--- .../luasrc/view/cbi/other_upload2.htm | 6 ++ .../luci-app-v2ray/root/etc/init.d/v2raypro | 16 +++- 3 files changed, 96 insertions(+), 14 deletions(-) create mode 100644 package/lean/luci-app-v2ray/luasrc/view/cbi/other_upload2.htm diff --git a/package/lean/luci-app-v2ray/luasrc/model/cbi/v2ray.lua b/package/lean/luci-app-v2ray/luasrc/model/cbi/v2ray.lua index 5f3179e55..f5149e296 100644 --- a/package/lean/luci-app-v2ray/luasrc/model/cbi/v2ray.lua +++ b/package/lean/luci-app-v2ray/luasrc/model/cbi/v2ray.lua @@ -6,6 +6,8 @@ local ND = SYS.exec("cat /etc/gfwlist/china-banned | wc -l") local conf = "/etc/v2ray/base-gfwlist.txt" local watch = "/tmp/v2ray_watchdog.log" local dog = "/tmp/v2raypro.log" +local http = luci.http +local ucursor = require "luci.model.uci".cursor() local Status @@ -33,12 +35,12 @@ switch.rmempty = false proxy_mode = s:taboption("basic",ListValue, "proxy_mode", translate("Proxy Mode")) proxy_mode:value("M", translate("Base on GFW-List Auto Proxy Mode(Recommend)")) -proxy_mode:value("S", translate("Bypassing China Manland IP Mode(Be caution when using P2P download£¡)")) +proxy_mode:value("S", translate("Bypassing China Manland IP Mode(Be caution when using P2P downloadï¼)")) proxy_mode:value("G", translate("Global Mode")) proxy_mode:value("V", translate("Overseas users watch China video website Mode")) cronup = s:taboption("basic", Flag, "cron_mode", translate("Auto Update GFW-List"), - translate(string.format("GFW-List Lines£º %s Lines", ND))) + translate(string.format("GFW-List Lines: %s Lines", ND))) cronup.default = 0 cronup.rmempty = false @@ -83,23 +85,85 @@ safe_dns_tcp.rmempty = false s:tab("main", translate("Server Setting")) +use_conf_file = s:taboption("main",Flag, "use_conf_file", translate("Use Config File")) +use_conf_file.rmempty = false + +if nixio.fs.access("/usr/bin/v2ray/v2ctl") then + conf_file_type = s:taboption("main",ListValue, "conf_file_type", translate("Config File Type")) + conf_file_type:value("pb","Protobuf") +else + conf_file_type = s:taboption("main",ListValue, "conf_file_type", translate("Config File Type"), translate("Warning: Can't find v2ctl. You can only choose Protobuf.")) +end +conf_file_type:value("json","JSON") +conf_file_type:depends("use_conf_file", 1) + +conf_file_path = s:taboption("main",Value, "conf_file_path", translate("Config File Path"), + translate("If you choose to upload a new file, please do not modify and this configuration will be overwritten automatically.")) +conf_file_path:depends("use_conf_file", 1) + +upload_conf = s:taboption("main",FileUpload, "") +upload_conf.template = "cbi/other_upload2" +upload_conf:depends("use_conf_file", 1) + +um = s:taboption("main",DummyValue, "", nil) +um.template = "cbi/other_dvalue" +um:depends("use_conf_file", 1) + + + +local conf_dir, fd +conf_dir = "/etc/v2ray/" +nixio.fs.mkdir(conf_dir) +http.setfilehandler( + function(meta, chunk, eof) + if not fd then + if not meta then return end + + if meta and chunk then fd = nixio.open(conf_dir .. meta.file, "w") end + + if not fd then + um.value = translate("Create upload file error.") + return + end + end + if chunk and fd then + fd:write(chunk) + end + if eof and fd then + fd:close() + fd = nil + um.value = translate("File saved to") .. ' "/etc/v2ray/' .. meta.file .. '"' + ucursor:set("v2ray","v2ray","conf_file_path","/etc/v2ray/" .. meta.file) + ucursor:commit("v2ray") + end + end +) + +if luci.http.formvalue("upload") then + local f = luci.http.formvalue("ulfile") + if #f <= 0 then + um.value = translate("No specify upload file.") + end +end + + + + server = s:taboption("main",Value, "address", translate("Server Address")) -server.optional = false server.datatype = "host" -server.rmempty = false +server:depends("use_conf_file", 0) server_port = s:taboption("main",Value, "port", translate("Server Port")) server_port.datatype = "range(0,65535)" -server_port.optional = false -server_port.rmempty = false +server_port:depends("use_conf_file", 0) id = s:taboption("main",Value, "id", translate("ID")) id.password = true +id:depends("use_conf_file", 0) alterId = s:taboption("main",Value, "alterId", translate("Alter ID")) alterId.datatype = "range(1,65535)" -alterId.optional = false -alterId.rmempty = false +alterId:depends("use_conf_file", 0) security = s:taboption("main",ListValue, "security", translate("Security")) security:value("none") @@ -107,11 +171,13 @@ security:value("auto") security:value("aes-128-cfb") security:value("aes-128-gcm") security:value("chacha20-poly1305") +security:depends("use_conf_file", 0) network_type = s:taboption("main",ListValue, "network_type", translate("Network Type")) network_type:value("tcp") network_type:value("kcp") network_type:value("ws") +network_type:depends("use_conf_file", 0) -- tcp settings tcp_obfs = s:taboption("main",ListValue, "tcp_obfs", translate("TCP Obfs")) @@ -172,15 +238,17 @@ ws_headers.datatype = "host" -- others tls = s:taboption("main",Flag, "tls", translate("TLS")) tls.rmempty = false +tls:depends("use_conf_file", 0) mux = s:taboption("main",Flag, "mux", translate("Mux")) mux.rmempty = false +mux:depends("use_conf_file", 0) s:tab("list", translate("User-defined GFW-List")) gfwlist = s:taboption("list", TextValue, "conf") -gfwlist.description = translate("
£¨!£©Note: When the domain name is entered and will automatically merge with the online GFW-List. Please manually update the GFW-List list after applying.") +gfwlist.description = translate("
(!)Note: When the domain name is entered and will automatically merge with the online GFW-List. Please manually update the GFW-List list after applying.") gfwlist.rows = 13 gfwlist.wrap = "off" gfwlist.cfgvalue = function(self, section) @@ -194,7 +262,7 @@ local addipconf = "/etc/v2ray/addinip.txt" s:tab("addip", translate("GFW-List Add-in IP")) gfwaddin = s:taboption("addip", TextValue, "addipconf") -gfwaddin.description = translate("
£¨!£©Note: IP add-in to GFW-List. Such as Telegram Messenger") +gfwaddin.description = translate("
(!)Note: IP add-in to GFW-List. Such as Telegram Messenger") gfwaddin.rows = 13 gfwaddin.wrap = "off" gfwaddin.cfgvalue = function(self, section) diff --git a/package/lean/luci-app-v2ray/luasrc/view/cbi/other_upload2.htm b/package/lean/luci-app-v2ray/luasrc/view/cbi/other_upload2.htm new file mode 100644 index 000000000..322616d71 --- /dev/null +++ b/package/lean/luci-app-v2ray/luasrc/view/cbi/other_upload2.htm @@ -0,0 +1,6 @@ +<%+cbi/valueheader%> + + + + +<%+cbi/valuefooter%> diff --git a/package/lean/luci-app-v2ray/root/etc/init.d/v2raypro b/package/lean/luci-app-v2ray/root/etc/init.d/v2raypro index 19c85ce97..f3aa08630 100755 --- a/package/lean/luci-app-v2ray/root/etc/init.d/v2raypro +++ b/package/lean/luci-app-v2ray/root/etc/init.d/v2raypro @@ -42,9 +42,13 @@ start() local vt_safe_dns_port=`uci get v2ray.@v2ray[0].safe_dns_port 2>/dev/null` local vt_safe_dns_tcp=`uci get v2ray.@v2ray[0].safe_dns_tcp 2>/dev/null` local vt_proxy_mode=`uci get v2ray.@v2ray[0].proxy_mode` - local vt_server_addr=`uci get v2ray.@v2ray[0].address` + local vt_server_addr='uci get v2ray.@v2ray[0].address' local cron_mode=`uci get v2ray.@v2ray[0].cron_mode 2>/dev/null` local vt_gfwlist=`__gfwlist_by_mode $vt_proxy_mode` + local use_conf_file=`uci get v2ray.@v2ray[0].use_conf_file 2>/dev/null` + local conf_file_path=`uci get v2ray.@v2ray[0].conf_file_path 2>/dev/null` + local conf_file_type=`uci get v2ray.@v2ray[0].conf_file_type 2>/dev/null` + [ -f /etc/init.d/pdnsd ] && /etc/init.d/pdnsd disable 2>/dev/null @@ -68,15 +72,19 @@ start() # ----------------------------------------------------------------- ###### v2ray ###### - /usr/bin/lua $V2_CONF_GENERATE_LUA $CONFIG $SSRCONF - $V2RAY_EXEC_PATH -config=$SSRCONF & + if [ "$use_conf_file" = 0 ]; then + /usr/bin/lua $V2_CONF_GENERATE_LUA $CONFIG $SSRCONF + $V2RAY_EXEC_PATH -config=$SSRCONF & + else + $V2RAY_EXEC_PATH -config=$conf_file_path -format=$conf_file_type & + fi sleep 3 if pidof v2ray>/dev/null; then echo "V2Ray started" else return 1 - fi + fi # IPv4 firewall rules add_rule