1
0
Fork 0
mirror of https://github.com/Ysurac/openmptcprouter-feeds.git synced 2025-02-13 19:11:51 +00:00
openmptcprouter-feeds/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm
2019-09-22 08:33:54 +02:00

420 lines
19 KiB
HTML

<%+header%>
<%
local uci = require("luci.model.uci").cursor()
local net = require "luci.model.network".init()
local fs = require "nixio.fs"
local sys = require "luci.sys"
local ut = require "luci.util"
local ifaces = sys.net:devices()
local servers_ip = {}
local server_ip = uci:get("shadowsocks-libev","sss0","server")
if server_ip == '127.0.0.1' then
local upstreams = uci:get("nginx-ha","ShadowSocks","upstreams")
for _, up in pairs(upstreams) do
local a = up:match("^([^:]+):")
table.insert(servers_ip,a)
end
else
table.insert(servers_ip,server_ip)
end
function device_notvirtual(dev)
for _, iface in ipairs(net:get_networks()) do
local ifacen = iface:name()
local ifacename = uci:get("network",ifacen,"ifname")
local ifacetype = uci:get("network",ifacen,"type") or ""
local ifaceproto = uci:get("network",ifacen,"proto") or ""
if ifacename == dev and (ifacetype == "macvlan" or ifacetype == "bridge" or ifaceproto == "6in4") then
return false
end
end
return true
end
%>
<script type="text/javascript" src="<%=resource%>/cbi.js?v=git-18.243.49640-2f13420" data-strings="{&#34;path&#34;:{&#34;resource&#34;:&#34;\/luci-static\/resources&#34;,&#34;browser&#34;:&#34;\/cgi-bin\/luci\/admin\/filebrowser&#34;}}"></script>
<script src="/luci-static/resources/xhr.js?v=git-18.324.48426-65adb4e"></script>
<script>
function jsshowadv() {
if(document.getElementById('showadv').checked){
document.getElementById('advancedsettings').style.display='inline';
} else {
document.getElementById('advancedsettings').style.display='none';
}
}
</script>
<% if stderr and #stderr > 0 then %><pre class="error"><%=pcdata(stderr)%></pre><% end %>
<form class="inline" method="post" action="<%=url('admin/system/openmptcprouter/wizard_add')%>" enctype="multipart/form-data">
<div class="cbi-map">
<h2 name="content"><%:Wizard%></h2>
<fieldset class="cbi-section" id="server">
<legend><%:Server settings%></legend>
<%
nbserver=0
uci:foreach("openmptcprouter","server", function(s)
nbserver=nbserver+1
end)
uci:foreach("openmptcprouter","server", function(s)
servername = s[".name"]
%>
<div class="cbi-section-remove right">
<input type="submit" name="deleteserver.<%=servername%>" value="<%:Delete%>" class="cbi-button" />
<input type="hidden" name="server.<%=servername%>" value="<%=servername%>" />
</div>
<h3><%=servername%></h3>
<div class="cbi-section-node" id="cbi-omr-wizard-<%=servername%>">
<div class="cbi-value">
<label class="cbi-value-title" for="server_ip"><%:Server IP%></label>
<div class="cbi-value-field">
<input name="<%=servername%>.server_ip" id="<%=servername%>.server_ip" placeholder="Server IP" class="cbi-input-text" value="<%=uci:get("openmptcprouter",servername,"ip")%>" data-optional="false">
<div class="cbi-value-description">
<%:Server IP will be set for ShadowSocks, Glorytun, OpenVPN and MLVPN%>
</div>
</div>
</div>
<br />
<div class="cbi-value">
<label class="cbi-value-title"><%:Server key%></label>
<div class="cbi-value-field">
<input type="text" name="<%=servername%>.openmptcprouter_vps_key" placeholder="Server key" class="cbi-input-text" value="<%=uci:get("openmptcprouter",servername,"password")%>" data-optional="false">
<br />
<div class="cbi-value-description">
<%:Key to configure and retrieve others keys from Server and to set server settings from OpenMPTCProuter.%>
</div>
</div>
</div>
<%
if nbserver > 1 then
%>
<br />
<div class="cbi-value">
<label class="cbi-value-title"><%:Set server as master%></label>
<div class="cbi-value-field">
<input class="cbi-input-radio" type="radio" name="master" value="<%=servername%>" <% if uci:get("openmptcprouter",servername,"master") == "1" then %>checked<% end %>/>
<br />
<div class="cbi-value-description">
<%:Only one server can be master, else all servers are set as backup.%>
</div>
</div>
</div>
<%
end
end)
%>
<div class="cbi-section-create">
<div>
<input type="text" class="cbi-section-create-name" id="cbi.cts.omr-bypass.server." name="add_server_name" data-type="uciname" data-optional="true" />
</div>
<input class="cbi-button cbi-button-add" type="submit" onclick="this.form.cbi_state='add-section'; return true" name="add_server" value="<%:Add server%>" />
</div>
</div>
</fieldset>
<fieldset class="cbi-section" id="server_common">
<legend><%:Common server settings%></legend>
<div class="cbi-value">
<label class="cbi-value-title"><%:Enable IPv6%></label>
<div class="cbi-value-field">
<input class="cbi-input-checkbox" type="checkbox" name="enableipv6" value="0" <% if uci:get("openmptcprouter","settings","disable_ipv6") == "0" then %>checked<% end %> />
<br />
<div class="cbi-value-description">
<%:You should disable IPv6 here if server doesn't provide IPv6.%>
</div>
</div>
</div>
<div class="cbi-value">
<label class="cbi-value-title"><%:Advanced settings%></label>
<div class="cbi-value-field">
<input type="checkbox" class="cbi-input-checkbox" id="showadv" value="1" onclick="jsshowadv()" />
</div>
</div>
</fieldset>
<span id="advancedsettings" style="display:none;">
<fieldset class="cbi-section" id="shadowsocks">
<legend><%:ShadowSocks settings%></legend>
<div class="cbi-section-descr"><%:By default ShadowSocks is used for TCP traffic.%></div>
<div class="cbi-value">
<label class="cbi-value-title"><%:ShadowSocks key%></label>
<div class="cbi-value-field">
<input type="text" name="shadowsocks_key" placeholder="ShadowSocks key" class="cbi-input-text" value="<%=uci:get("shadowsocks-libev","sss0","key")%>" />
<br />
<div class="cbi-value-description">
<%:ShadowSocks is used for TCP.%>
</div>
</div>
</div>
<div class="cbi-value">
<label class="cbi-value-title"><%:Disable ShadowSocks%></label>
<div class="cbi-value-field">
<input class="cbi-input-checkbox" type="checkbox" name="disableshadowsocks" value="1" <% if uci:get("shadowsocks-libev","sss0","disabled") == "1" then %>checked<% end %> />
</div>
</div>
<div class="cbi-value">
<label class="cbi-value-title"><%:Encryption%></label>
<div class="cbi-value-field">
<select class="cbi-input-select" name="encryption" size="1">
<%
local method=uci:get("shadowsocks-libev","sss0","method")
%>
<option value="none" <% if method == "none" then %>selected="selected"<% end %>><%:None%></option>
<option value="aes-256-gcm" <% if method == "aes-256-gcm" then %>selected="selected"<% end %>>AES-256-GCM</option>
<option value="chacha20" <% if method == "chacha20" then %>selected="selected"<% end %>>chacha20</option>
<option value="other" <% if method ~= "chacha20" and method ~= "aes-256-gcm" and method ~= "none" then %>selected="selected"<% end %>><%:other%></option>
</select>
<br />
<div class="cbi-value-description">
<%
if ut.trim(sys.exec("cat /proc/cpuinfo | grep aes")) ~= "" then
%>
<%:An Advanced Encryption Standard (AES) instruction set is integrated in the processor.%>
<% else %>
<%:There is no Advanced Encryption Standard (AES) instruction set integrated in the processor, you should use chacha20.%>
<% end %>
</div>
</div>
</div>
</fieldset>
<fieldset class="cbi-section" id="vpn">
<legend><%:VPN settings%></legend>
<div class="cbi-section-descr"><%:By default VPN is used for any traffic that is not TCP.%></div>
<% if nixio.fs.access("/usr/sbin/glorytun") or nixio.fs.access("/usr/sbin/glorytun-udp") then %>
<div class="cbi-value">
<label class="cbi-value-title"><%:Glorytun key%></label>
<div class="cbi-value-field">
<input type="text" name="glorytun_key" placeholder="Glorytun key" class="cbi-input-text" value="<%=uci:get("glorytun","vpn","key")%>">
<br />
<div class="cbi-value-description">
<%:Glorytun TCP is used by default for UDP and ICMP%>
</div>
</div>
</div>
<% end %>
<% if nixio.fs.access("/usr/sbin/dsvpn") then %>
<div class="cbi-value">
<label class="cbi-value-title"><%:A Dead Simple VPN key%></label>
<div class="cbi-value-field">
<input type="text" name="dsvpn_key" placeholder="A Dead Simple VPN key" class="cbi-input-text" value="<%=uci:get("dsvpn","vpn","key")%>">
<br />
<div class="cbi-value-description">
<%:A Dead Simple VPN is a TCP VPN that can replace Glorytun TCP%>
</div>
</div>
</div>
<% end %>
<% if nixio.fs.access("/usr/sbin/mlvpn") then %>
<div class="cbi-value">
<label class="cbi-value-title"><%:MLVPN password%></label>
<div class="cbi-value-field">
<input type="text" name="mlvpn_password" placeholder="MLVPN password" class="cbi-input-text" value="<%=uci:get("mlvpn","general","password")%>">
<br />
<div class="cbi-value-description">
<%:MLVPN can replace Glorytun with connections with same latency%>
</div>
</div>
</div>
<% end %>
<% if nixio.fs.access("/usr/sbin/openvpn") then %>
<div class="cbi-value">
<label class="cbi-value-title"><%:OpenVPN key%></label>
<div class="cbi-value-field">
<input type="file" name="openvpn_key" class="cbi-input-file">
<input type="text" class="cbi-input-text" data-update="change" value="<%=uci:get("openvpn","omr","secret")%>" />
<br />
<div class="cbi-value-description">
<%:You need to upload OpenVPN key file generated by server install script to use OpenVPN TCP%>
</div>
</div>
</div>
<% end %>
<div class="cbi-value">
<label class="cbi-value-title"><%:Default VPN%></label>
<div class="cbi-value-field">
<select class="cbi-input-select" name="default_vpn" size="1">
<%
local available_vpns = uci:get("openmptcprouter","vps","available_vpn") or ""
if available_vpns ~= "" then
if (type(available_vpns) ~= "table") then
available_vpns = {available_vpns}
end
for _, vpn in pairs(available_vpns) do
if vpn == "glorytun-tcp" then
%>
<% if nixio.fs.access("/usr/sbin/glorytun") then %><option value="glorytun_tcp" <% if uci:get("glorytun","vpn","enable") == "1" and uci:get("glorytun","vpn","proto") == "tcp" then %>selected="selected"<% end %>>Glorytun TCP</option><% end %>
<% elseif vpn == "glorytun-udp" then %>
<% if nixio.fs.access("/usr/sbin/glorytun-udp") then %><option value="glorytun_udp" <% if uci:get("glorytun","vpn","enable") == "1" and uci:get("glorytun","vpn","proto") == "udp" then %>selected="selected"<% end %>>Glorytun UDP</option><% end %>
<% elseif vpn == "dsvpn" then %>
<% if nixio.fs.access("/usr/sbin/dsvpn") then %><option value="dsvpn" <% if uci:get("dsvpn","vpn","enable") == "1" then %>selected="selected"<% end %>>A Dead Simple VPN</option><% end %>
<% elseif vpn == "mlvpn" then %>
<% if nixio.fs.access("/usr/sbin/mlvpn") then %><option value="mlvpn" <% if uci:get("mlvpn","general","enable") == "1" then %>selected="selected"<% end %>>MLVPN</option><% end %>
<% elseif vpn == "openvpn" then %>
<% if nixio.fs.access("/usr/sbin/openvpn") then %><option value="openvpn" <% if uci:get("openvpn","omr","enabled") == "1" then %>selected="selected"<% end %>>OpenVPN</option><% end %>
<%
end
end
%>
<option value="none" <% if uci:get("openmptcprouter","settings","vpn") == "none" then %>selected="selected"<% end %>>None</option>
<%
else
%>
<% if nixio.fs.access("/usr/sbin/glorytun") then %><option value="glorytun_tcp" <% if uci:get("glorytun","vpn","enable") == "1" and uci:get("glorytun","vpn","proto") == "tcp" then %>selected="selected"<% end %>>Glorytun TCP</option><% end %>
<% if nixio.fs.access("/usr/sbin/glorytun-udp") then %><option value="glorytun_udp" <% if uci:get("glorytun","vpn","enable") == "1" and uci:get("glorytun","vpn","proto") == "udp" then %>selected="selected"<% end %>>Glorytun UDP</option><% end %>
<% if nixio.fs.access("/usr/sbin/dsvpn") then %><option value="dsvpn" <% if uci:get("dsvpn","vpn","enable") == "1" then %>selected="selected"<% end %>>A Dead Simple VPN</option><% end %>
<% if nixio.fs.access("/usr/sbin/mlvpn") then %><option value="mlvpn" <% if uci:get("mlvpn","general","enable") == "1" then %>selected="selected"<% end %>>MLVPN</option><% end %>
<% if nixio.fs.access("/usr/sbin/openvpn") then %><option value="openvpn" <% if uci:get("openvpn","omr","enabled") == "1" then %>selected="selected"<% end %>>OpenVPN</option><% end %>
<option value="none" <% if uci:get("openmptcprouter","settings","vpn") == "none" then %>selected="selected"<% end %>>None</option>
<%
end
%>
</select>
<br />
<div class="cbi-value-description">
<%:Set the default VPN used for UDP and ICMP when ShadowSocks is enabled, for all traffic if ShadowSocks is disabled.%>
</div>
</div>
</div>
</fieldset>
</span>
<fieldset class="cbi-section" id="interfaces">
<legend><%:Interfaces settings%></legend>
<div class="cbi-section-descr"><%:You must disable DHCP on your modems and set IP in different networks.%></div>
<%
for _, iface in ipairs(net:get_networks()) do
local ifname = iface:name()
local multipath = uci:get("network",ifname,"multipath")
if multipath ~= "off" then
%>
<div class="cbi-section-remove right">
<input type="submit" name="delete.<%=ifname%>" value="<%:Delete%>" class="cbi-button" />
</div>
<h3><%=ifname%></h3>
<fieldset class="cbi-section-node" id="cbi-openmptcprouter-<%=ifname%>">
<input type="hidden" name="intf.<%=ifname%>" value="<%=ifname%>" />
<div class="cbi-value" id="cbi-network-<%=ifname%>-proto" data-index="1">
<label class="cbi-value-title"><%:Protocol%></label>
<div class="cbi-value-field">
<select class="cbi-input-select" data-update="change" id="cbid.network.<%=ifname%>.proto" name="cbid.network.<%=ifname%>.proto" size="1">
<option id="cbid.network.<%=ifname%>.proto-static" value="static"<% if uci:get("network",ifname,"proto") == "static" then %> selected="selected"<% end %>><%:Static address%></option>
<option id="cbid.network.<%=ifname%>.proto-dhcp" value="dhcp"<% if uci:get("network",ifname,"proto") == "dhcp" then %> selected="selected"<% end %>><%:DHCP%></option>
<option id="cbid.network.<%=ifname%>.proto-other" value="other"<% if uci:get("network",ifname,"proto") ~= "static" and uci:get("network",ifname,"proto") ~= "dhcp" then %> selected="selected"<% end %>><%:Other%></option>
</select>
<br />
<div class="cbi-value-description">
<%:You can use DHCP if you have multiple real ethernet ports. Select other if you want to use another protocol available in Network Interfaces page.%>
</div>
</div>
</div>
<div class="cbi-value" id="cbi-network-<%=ifname%>-address" data-depends="[{&#34;cbid.network.<%=ifname%>.proto&#34;:&#34;static&#34;}]" data-index="2">
<label class="cbi-value-title"><%:IPv4 address%></label>
<div class="cbi-value-field">
<input type="text" id="cbid.network.<%=ifname%>.ipaddr" name="cbid.network.<%=ifname%>.ipaddr" class="cbi-input-text" value="<%=uci:get("network",ifname,"ipaddr")%>" data-type="ip4addr">
<br />
<div class="cbi-value-description">
<%:Set an IP in the same network as the modem%>
</div>
</div>
</div>
<div class="cbi-value" id="cbi-network-<%=ifname%>-netmask" data-depends="[{&#34;cbid.network.<%=ifname%>.proto&#34;:&#34;static&#34;}]" data-index="3">
<label class="cbi-value-title"><%:IPv4 netmask%></label>
<div class="cbi-value-field">
<input type="text" id="cbid.network.<%=ifname%>.netmask" name="cbid.network.<%=ifname%>.netmask" class="cbi-input-text" value="<%=uci:get("network",ifname,"netmask") or "255.255.255.0"%>" data-type="ip4addr">
</div>
</div>
<div class="cbi-value" id="cbi-network-<%=ifname%>-gateway" data-depends="[{&#34;cbid.network.<%=ifname%>.proto&#34;:&#34;static&#34;}]" data-index="4">
<label class="cbi-value-title"><%:IPv4 gateway%></label>
<div class="cbi-value-field">
<input type="text" id="cbid.network.<%=ifname%>.gateway" name="cbid.network.<%=ifname%>.gateway" class="cbi-input-text" value="<%=uci:get("network",ifname,"gateway")%>" data-type="ip4addr">
<br />
<div class="cbi-value-description">
<%:Set here IP of the modem%>
</div>
</div>
</div>
<%
local download = "0"
local upload = "0"
download = uci:get("network",ifname,"downloadspeed") or "0"
upload = uci:get("network",ifname,"uploadspeed") or "0"
if download == "0" or upload == "0" then
if nixio.fs.access("/etc/init.d/sqm") then
download = uci:get("sqm",ifname,"download")
upload = uci:get("sqm",ifname,"upload")
else
download = uci:get("qos",ifname,"download")
upload = uci:get("qos",ifname,"upload")
end
end
%>
<div class="cbi-value" data-index="5">
<label class="cbi-value-title"><%:Enable SQM%></label>
<div class="cbi-value-field">
<input class="cbi-input-checkbox" type="checkbox" name="cbid.sqm.<%=ifname%>.enabled" value="1" <% if uci:get("sqm",ifname,"enabled") == 1 then %>checked<% end %> />
<br />
<div class="cbi-value-description">
<%:You should disable SQM for LTE or any interfaces with variable speed.%>
</div>
</div>
</div>
<div class="cbi-value" data-index="6">
<label class="cbi-value-title"><%:Download speed (Kb/s)%></label>
<div class="cbi-value-field">
<input type="text" name="cbid.sqm.<%=ifname%>.download" class="cbi-input-text" value="<%=download%>" data-type="uinteger">
<br />
<div class="cbi-value-description">
<%:Used by Glorytun UDP and SQM/QoS if enabled. 0 to use default value.%>
</div>
<!--
<br />
<div class="cbi-value-description">
<%:Set value between 80-95% of max download speed link. 0 to disable SQM/QoS.%>
</div>
-->
</div>
</div>
<div class="cbi-value" data-index="7">
<label class="cbi-value-title"><%:Upload speed (Kb/s)%></label>
<div class="cbi-value-field">
<input type="text" name="cbid.sqm.<%=ifname%>.upload" class="cbi-input-text" value="<%=upload%>" data-type="uinteger">
<br />
<div class="cbi-value-description">
<%:Used by Glorytun UDP and SQM/QoS if enabled. 0 to use default value.%>
</div>
<!--
<br />
<div class="cbi-value-description">
<%:Set value between 80-95% of max upload speed link. 0 to disable SQM/QoS.%>
</div>
-->
</div>
</div>
</fieldset>
<%
end
end
%>
<div class="cbi-section-create">
<select class="cbi-section-create-name" name="add_interface_ifname">
<%
for _, ifacea in ipairs(ifaces) do
if not (ifacea == "lo" or ifacea == "6in4-omr6in4" or ifacea:match("^ifb.*") or ifacea:match("^sit.*")) and device_notvirtual(ifacea) then
%>
<option value="<%=ifacea%>"><%=ifacea%></option>
<%
end
end
%>
</select>
<input class="cbi-button cbi-button-add" type="submit" name="add_interface" value="<%:Add an interface%>" title="<%:Add an interface%>" />
</div>
<div class="cbi-value-description">
<%:Select the device you want to base the interface on.%>
</div>
</fieldset>
</div>
<div class="cbi-page-actions">
<input type="hidden" name="token" value="<%=token%>" />
<input class="cbi-button cbi-button-apply" type="submit" value="<%:Save & Apply%>" /> <input class="cbi-button cbi-button-reset" type="button" value="Reset" onclick="location.href='<%=url('admin/system/openmptcprouter/wizard')%>'" />
</div>
</form>
<script type="text/javascript">cbi_init();</script>
<%+footer%>