diff --git a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua index baf65e84e..d23fd355a 100644 --- a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua +++ b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua @@ -456,8 +456,8 @@ function wizard_add() if dsvpn_key ~= "" then ucic:set("dsvpn","vpn","port","65011") ucic:set("dsvpn","vpn","key",dsvpn_key) - ucic:set("glorytun","vpn","localip","10.255.251.2") - ucic:set("glorytun","vpn","remoteip","10.255.251.1") + ucic:set("dsvpn","vpn","localip","10.255.251.2") + ucic:set("dsvpn","vpn","remoteip","10.255.251.1") ucic:set("network","omr6in4","ipaddr","10.255.251.2") ucic:set("network","omr6in4","peeraddr","10.255.251.1") ucic:set("network","omrvpn","proto","none") @@ -764,6 +764,14 @@ end -- Modified by Ycarus (Yannick Chabanois) -- Under GPL3+ function interfaces_status() + local ut = require "luci.util" + local rv = ut.ubus("openmptcprouter", "status", {}) or {_=0} + + luci.http.prepare_content("application/json") + luci.http.write_json(rv) +end + +function old_interfaces_status() local ut = require "luci.util" local ntm = require "luci.model.network".init() local uci = require "luci.model.uci".cursor() diff --git a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm index bfbb4f88f..bdeff8c77 100644 --- a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm +++ b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm @@ -59,17 +59,25 @@ temp += ''; var equipmentIcon = ''; - if (mArray.openmptcprouter.remote_from_lease) + if (mArray.openmptcprouter.remote_addr) { - var title = String.format('
%s (%s)', mArray.openmptcprouter.remote_hostname ? mArray.openmptcprouter.remote_hostname : _('You'), mArray.openmptcprouter.remote_addr) + if (mArray.openmptcprouter.remote_from_lease) + { + var title = String.format('
%s (%s)', mArray.openmptcprouter.remote_hostname ? mArray.openmptcprouter.remote_hostname : _('You'), mArray.openmptcprouter.remote_addr) + var statusMessageClass = ""; + var statusIcon = "<%=resource%>/openmptcprouter/images/statusOK.png"; + var statusMessage = ""; + } else { + var title = String.format("%s (%s)",'You', mArray.openmptcprouter.remote_addr); + var statusMessageClass = "warning"; + var statusIcon = "<%=resource%>/openmptcprouter/images/statusWarning.png"; + var statusMessage = _('Your IP was not leased by this router'); + } + } else { + var title = String.format('
%s', _('You')) var statusMessageClass = ""; var statusIcon = "<%=resource%>/openmptcprouter/images/statusOK.png"; var statusMessage = ""; - } else { - var title = String.format("%s (%s)",'You', mArray.openmptcprouter.remote_addr); - var statusMessageClass = "warning"; - var statusIcon = "<%=resource%>/openmptcprouter/images/statusWarning.png"; - var statusMessage = _('Your IP was not leased by this router'); } var content = ""; diff --git a/luci-app-openmptcprouter/root/usr/libexec/rpcd/openmptcprouter b/luci-app-openmptcprouter/root/usr/libexec/rpcd/openmptcprouter index bfc1c9d90..a3a86e1ca 100755 --- a/luci-app-openmptcprouter/root/usr/libexec/rpcd/openmptcprouter +++ b/luci-app-openmptcprouter/root/usr/libexec/rpcd/openmptcprouter @@ -7,7 +7,7 @@ local json = require("luci.json") local fs = require("nixio.fs") local net = require "luci.model.network".init() local ucic = luci.model.uci.cursor() -local json = require "luci.jsonc" +local jsonc = require "luci.jsonc" function interface_from_device(dev) for _, iface in ipairs(net:get_networks()) do @@ -233,7 +233,7 @@ function default_vpn(default_vpn) vpn_intf = "tun0" --ucic:set("network","omrvpn","proto","dhcp") ucic:set("network","omrvpn","proto","none") - if default_vpn == "glorytun" then + if default_vpn == "glorytun_udp" then ucic:set("glorytun","vpn","proto","udp") ucic:set("glorytun","vpn","localip","10.255.254.2") ucic:set("glorytun","vpn","remoteip","10.255.254.1") @@ -251,10 +251,10 @@ function default_vpn(default_vpn) vpn_intf = "tun0" --ucic:set("network","omrvpn","proto","dhcp") ucic:set("network","omrvpn","proto","none") - ucic:set("dsvpn","vpn","localip","10.255.254.2") - ucic:set("dsvpn","vpn","remoteip","10.255.254.1") - ucic:set("network","omr6in4","ipaddr","10.255.254.2") - ucic:set("network","omr6in4","peeraddr","10.255.254.1") + ucic:set("dsvpn","vpn","localip","10.255.251.2") + ucic:set("dsvpn","vpn","remoteip","10.255.251.1") + ucic:set("network","omr6in4","ipaddr","10.255.251.2") + ucic:set("network","omr6in4","peeraddr","10.255.251.1") elseif default_vpn == "mlvpn" then vpn_port = 65201 vpn_intf = "mlvpn0" @@ -338,83 +338,6 @@ function server_settings(server,server_ip,openmptcprouter_vps_key) ucic:commit("shadowsocks-libev") end -function server_failover(server,master) - if master == server or master == "" then - ucic:set("openmptcprouter",server,"get_config","1") - ucic:set("openmptcprouter",server,"master","1") - ucic:set("openmptcprouter",server,"backup","0") - else - ucic:set("openmptcprouter",server,"get_config","0") - ucic:set("openmptcprouter",server,"master","0") - ucic:set("openmptcprouter",server,"backup","1") - end - - local ss_servers_nginx = {} - local ss_servers_ha = {} - local vpn_servers = {} - local k = 0 - local ss_ip - - -- We have an IP, so set it everywhere - if server_ip ~= "" then - -- Check if we have more than one IP, in this case use Nginx HA - if master == server then - ss_ip=server_ip - table.insert(ss_servers_nginx,server_ip .. ":65101 max_fails=2 fail_timeout=20s") - table.insert(ss_servers_ha,server_ip .. ":65101 check") - if vpn_port ~= "" then - table.insert(vpn_servers,server_ip .. ":" .. vpn_port .. " max_fails=2 fail_timeout=20s") - end - else - table.insert(ss_servers_nginx,server_ip .. ":65101 backup") - table.insert(ss_servers_ha,server_ip .. ":65101 backup") - if vpn_port ~= "" then - table.insert(vpn_servers,server_ip .. ":" .. vpn_port .. " backup") - end - end - k = k + 1 - ucic:set("nginx-ha","ShadowSocks","enable","1") - ucic:set("nginx-ha","VPN","enable","1") - ucic:set("nginx-ha","ShadowSocks","upstreams",ss_servers_nginx) - ucic:set("nginx-ha","VPN","upstreams",vpn_servers) - ucic:set("haproxy-tcp","general","enable","0") - ucic:set("haproxy-tcp","general","upstreams",ss_servers_ha) - server_ip = "127.0.0.1" - --ucic:set("shadowsocks-libev","sss0","server",ss_ip) - else - ucic:set("nginx-ha","ShadowSocks","enable","0") - ucic:set("nginx-ha","VPN","enable","0") - --ucic:set("shadowsocks-libev","sss0","server",server_ip) - --ucic:set("openmptcprouter","vps","ip",server_ip) - --ucic:save("openmptcprouter") - end - ucic:set("shadowsocks-libev","sss0","server",server_ip) - ucic:set("glorytun","vpn","host",server_ip) - ucic:set("dsvpn","vpn","host",server_ip) - ucic:set("mlvpn","general","host",server_ip) - luci.sys.call("uci -q del openvpn.omr.remote") - luci.sys.call("uci -q add_list openvpn.omr.remote=" .. server_ip) - ucic:set("qos","serverin","srchost",server_ip) - ucic:set("qos","serverout","dsthost",server_ip) - end - end - - ucic:save("qos") - ucic:commit("qos") - ucic:save("nginx-ha") - ucic:commit("nginx-ha") - ucic:save("openvpn") - ucic:commit("openvpn") - ucic:save("mlvpn") - ucic:commit("mlvpn") - ucic:save("dsvpn") - ucic:commit("dsvpn") - ucic:save("glorytun") - ucic:commit("glorytun") - ucic:save("shadowsocks-libev") - ucic:commit("shadowsocks-libev") -end - function set_shadowsocks(shadowsocks_key) -- Set ShadowSocks settings ucic:set("shadowsocks-libev","sss0","key",shadowsocks_key) @@ -925,8 +848,13 @@ function interfaces_status() mptcp[ipaddr].ipaddr= ipaddr end + + mArray.openmptcprouter['model'] = sys.exec("ubus call system board | jsonfilter -q -e '@.model' 2>/dev/nul") + local board_name = sys.exec("ubus call system board | jsonfilter -q -e '@.board_name' 2>/dev/nul") -- retrieve core temperature - --mArray.openmptcprouter["core_temp"] = sys.exec("cat /sys/devices/platform/coretemp.0/hwmon/hwmon0/temp2_input 2>/dev/null"):match("%d+") + if board_name:match("^raspberrypi.*") then + mArray.openmptcprouter["core_temp"] = sys.exec("cat /sys/class/thermal/thermal_zone0/temp 2>/dev/null"):match("%d+") + end mArray.openmptcprouter["loadavg"] = sys.exec("cat /proc/loadavg 2>/dev/null"):match("[%d%.]+ [%d%.]+ [%d%.]+") mArray.openmptcprouter["uptime"] = sys.exec("cat /proc/uptime 2>/dev/null"):match("[%d%.]+") @@ -1482,7 +1410,7 @@ local methods = { } local function parseInput() - local parse = json.new() + local parse = jsonc.new() local done, err while true do @@ -1495,7 +1423,7 @@ local function parseInput() end if not done then - print(json.stringify({ error = err or "Incomplete input" })) + print(jsonc.stringify({ error = err or "Incomplete input" })) os.exit(1) end @@ -1505,12 +1433,12 @@ end local function validateArgs(func, uargs) local method = methods[func] if not method then - print(json.stringify({ error = "Method not found" })) + print(jsonc.stringify({ error = "Method not found" })) os.exit(1) end if type(uargs) ~= "table" then - print(json.stringify({ error = "Invalid arguments" })) + print(jsonc.stringify({ error = "Invalid arguments" })) os.exit(1) end @@ -1522,7 +1450,7 @@ local function validateArgs(func, uargs) if margs[k] == nil or (v ~= nil and type(v) ~= type(margs[k])) then - print(json.stringify({ error = "Invalid arguments" })) + print(jsonc.stringify({ error = "Invalid arguments" })) os.exit(1) end end @@ -1532,11 +1460,11 @@ end if arg[1] == "list" then local _, method, rv = nil, nil, {} for _, method in pairs(methods) do rv[_] = method.args or {} end - print((json.stringify(rv):gsub(":%[%]", ":{}"))) + print((jsonc.stringify(rv):gsub(":%[%]", ":{}"))) elseif arg[1] == "call" then local args = parseInput() local method = validateArgs(arg[2], args) local result, code = method.call(args) - print((json.stringify(result):gsub("^%[%]$", "{}"))) + print((jsonc.stringify(result):gsub("^%[%]$", "{}"))) os.exit(code or 0) end \ No newline at end of file diff --git a/openmptcprouter/files/etc/init.d/openmptcprouter-vps b/openmptcprouter/files/etc/init.d/openmptcprouter-vps index c942956fc..308407acb 100755 --- a/openmptcprouter/files/etc/init.d/openmptcprouter-vps +++ b/openmptcprouter/files/etc/init.d/openmptcprouter-vps @@ -54,7 +54,7 @@ _set_json() { _set_glorytun_vps() { local enabled port key enabled="$(uci -q get glorytun.vpn.enable)" - [ "$enabled" != "1" ] && echo "Glorytun disabled" + [ "$enabled" != "1" ] && echo "Glorytun disabled" && return port="$(uci -q get glorytun.vpn.port)" key="$(uci -q get glorytun.vpn.key)" chacha="$(uci -q get glorytun.vpn.chacha20)" @@ -63,7 +63,7 @@ _set_glorytun_vps() { else chacha="false" fi - [ -z "$key" ] && echo "Glorytun key not set" + [ -z "$key" ] && echo "Glorytun key not set" && return local current_port current_key current_chacha [ -z "$vps_config" ] && vps_config=$(_get_json "config") [ -z "$vps_config" ] && return @@ -82,7 +82,7 @@ _set_glorytun_vps() { _set_openvpn_vps() { local enabled port key enabled="$(uci -q get openvpn.omr.enabled)" - [ "$enabled" != "1" ] && echo "OpenVPN disabled" + [ "$enabled" != "1" ] && echo "OpenVPN disabled" && return port="$(uci -q get openvpn.omr.port)" keyfile="$(uci -q get openvpn.omr.secret)" if [ -n "$keyfile" ]; then @@ -90,7 +90,7 @@ _set_openvpn_vps() { else key="" fi - [ -z "$key" ] && echo "OpenVPN key not set" + [ -z "$key" ] && echo "OpenVPN key not set" && return local current_port current_key [ -z "$vps_config" ] && vps_config=$(_get_json "config") [ -z "$vps_config" ] && return @@ -397,6 +397,16 @@ _set_config_from_vps() { [ -z "$vps_config" ] && vps_config=$(_get_json "config") [ -z "$vps_config" ] && return + # Set current VPN + current_vpn="$(echo "$vps_config" | jsonfilter -q -e '@.vpn.current')" + if [ -n "$current_vpn" ]; then + uci -q batch <<-EOF >/dev/null + set openmptcprouter.settings.vpn=${current_vpn} + EOF + fi + current_vpn="$(uci -q get openmptcprouter.settings.vpn)" + + # Shadowsocks settings shadowsocks_disabled="$(uci -q get openmptcprouter.settings.shadowsocks_disable)" [ -z "$shadowsocks_disabled" ] && shadowsocks_disabled=0 @@ -475,9 +485,15 @@ _set_config_from_vps() { echo $openvpn_key | base64 -d > /etc/luci-uploads/openvpn.key openvpn_port="$(echo "$vps_config" | jsonfilter -q -e '@.openvpn.port')" [ -z "$openvpn_port" ] && openvpn_port="65001" + vpn="$(uci -q get openmptcprouter.settings.vpn)" + openvpn_state=0 + if [ "$vpn" = "openvpn" ]; then + openvpn_state=1 + fi uci -q batch <<-EOF >/dev/null set openvpn.omr.port=$openvpn_port set openvpn.omr.secret="/etc/luci-uploads/openvpn.key" + set openvpn.omr.enabled=$openvpn_state commit openvpn EOF logger -t "OMR-VPS" "OpenVPN restart..." @@ -487,8 +503,14 @@ _set_config_from_vps() { # MLVPN settings mlvpn_key="$(echo "$vps_config" | jsonfilter -q -e '@.mlvpn.key')" if [ -n "$mlvpn_key" ] && [ "$mlvpn_key" != "$(uci -q get mlvpn.general.password)" ]; then + vpn="$(uci -q get openmptcprouter.settings.vpn)" + mlvpn_state=0 + if [ "$vpn" = "mlvpn" ]; then + mlvpn_state=1 + fi uci -q batch <<-EOF >/dev/null set mlvpn.general.password=$mlvpn_key + set mlvpn.general.enable=$mlvpn_state commit mlvpn EOF logger -t "OMR-VPS" "MLVPN restart..." @@ -498,8 +520,13 @@ _set_config_from_vps() { # DSVPN settings dsvpn_key="$(echo "$vps_config" | jsonfilter -q -e '@.dsvpn.key')" if [ -n "$dsvpn_key" ] && [ "$dsvpn_key" != "$(uci -q get dsvpn.vpn.key)" ]; then + dsvpn_state=0 + if [ "$vpn" = "dsvpn" ]; then + dsvpn_state=1 + fi uci -q batch <<-EOF >/dev/null set dsvpn.vpn.key=$dsvpn_key + set dsvpn.vpn.enable=$dsvpn_state commit dsvpn EOF logger -t "OMR-VPS" "DSVPN restart..." @@ -568,12 +595,6 @@ _set_config_from_vps() { commit iperf EOF - # Set current VPN - current_vpn="$(echo "$vps_config" | jsonfilter -q -e '@.vpn.current')" - uci -q batch <<-EOF >/dev/null - set openmptcprouter.settings.vpn=${current_vpn} - EOF - # Get available server available_vpn="$(echo "$vps_config" | jsonfilter -q -e '@.vpn.available' | sed -e 's/\[ //' -e 's/ \]//' -e 's/,//g')" uci -q batch <<-EOF >/dev/null @@ -588,6 +609,7 @@ _set_config_from_vps() { fi uci -q batch <<-EOF >/dev/null set openmptcprouter.${servername}.get_config=0 + commit openmptcprouter EOF }