312 lines
9.1 KiB
HTML
312 lines
9.1 KiB
HTML
<%
|
|
local api = require "luci.model.cbi.passwall.api.api"
|
|
local dsp = require "luci.dispatcher"
|
|
local ipkg = require "luci.model.ipkg"
|
|
|
|
local function is_finded(e)
|
|
local result=luci.sys.exec("find /usr/*bin -iname "..e.." -type f")
|
|
if result~="" then
|
|
return true
|
|
end
|
|
return false
|
|
end
|
|
|
|
local tcp_node_num = api.uci_get_type("global_other", "tcp_node_num", 1)
|
|
local udp_node_num = api.uci_get_type("global_other", "udp_node_num", 1)
|
|
|
|
local status_show_check_port = api.uci_get_type("global_other", "status_show_check_port", 0)
|
|
local status_show_ip111 = api.uci_get_type("global_other", "status_show_ip111", 0)
|
|
-%>
|
|
|
|
<style>
|
|
/* @media screen and (min-width: 1600px) {
|
|
#_passwall_status_fieldset > fieldset {
|
|
padding: 0px;
|
|
}
|
|
|
|
#_passwall_status_fieldset > fieldset > div {
|
|
width: 200px;
|
|
height: 60px;
|
|
background: #f7fafd;
|
|
float: left;
|
|
margin: 5px;
|
|
padding: 0.3rem 1rem;
|
|
border-radius: 10px;
|
|
display: flex;
|
|
align-items: center;
|
|
clear: unset;
|
|
}
|
|
|
|
#_passwall_status_fieldset > fieldset > div > .cbi-value-title {
|
|
text-align: left;
|
|
width: unset;
|
|
padding-top: unset;
|
|
}
|
|
|
|
#_passwall_status_fieldset > fieldset > div > .cbi-value-field {
|
|
padding-top: unset;
|
|
}
|
|
|
|
#_passwall_status_fieldset > fieldset > div > .cbi-value-field > font {
|
|
padding-top: unset;
|
|
}
|
|
|
|
#_node_status > font {
|
|
display: block;
|
|
}
|
|
}
|
|
*/
|
|
</style>
|
|
|
|
<fieldset id="_passwall_status_fieldset" class="cbi-section">
|
|
<legend>
|
|
<%:Running Status%>
|
|
</legend>
|
|
<fieldset class="cbi-section">
|
|
<div class="cbi-value">
|
|
<label class="cbi-value-title">TCP
|
|
<%:Status%>
|
|
</label>
|
|
<div class="cbi-value-field" id="_tcp_node_status">
|
|
<%:Collecting data...%>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="cbi-value">
|
|
<label class="cbi-value-title">UDP
|
|
<%:Status%>
|
|
</label>
|
|
<div class="cbi-value-field" id="_udp_node_status">
|
|
<%:Collecting data...%>
|
|
</div>
|
|
</div>
|
|
|
|
<% if ipkg.installed("kcptun") or is_finded("kcptun*") then %>
|
|
<div class="cbi-value">
|
|
<label class="cbi-value-title">Kcptun
|
|
<%:Status%>
|
|
</label>
|
|
<div class="cbi-value-field" id="_kcptun_tcp_node_status">
|
|
<%:Collecting data...%>
|
|
</div>
|
|
</div>
|
|
<% end %>
|
|
|
|
<% if ipkg.installed("haproxy") or is_finded("haproxy*") then %>
|
|
<div class="cbi-value">
|
|
<label class="cbi-value-title">
|
|
<%:Load Balancing%>
|
|
</label>
|
|
<div class="cbi-value-field" id="_haproxy_status">
|
|
<%:Collecting data...%>
|
|
</div>
|
|
</div>
|
|
<% end %>
|
|
|
|
<div class="cbi-value">
|
|
<label class="cbi-value-title">DNS
|
|
<%:Status%>
|
|
</label>
|
|
<div class="cbi-value-field" id="_dns_mode_status">
|
|
<%:Collecting data...%>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="cbi-value">
|
|
<label class="cbi-value-title">
|
|
<%:Baidu Connection%>
|
|
</label>
|
|
<div class="cbi-value-field">
|
|
<input type="button" class="cbi-button cbi-input-apply" value="<%:Check%>" onclick="return check_connect(this, 'baidu', 'www.baidu.com')" />
|
|
<font id="_baidu_status"></font>
|
|
</div>
|
|
</div>
|
|
<div class="cbi-value">
|
|
<label class="cbi-value-title">
|
|
<%:Google Connection%>
|
|
</label>
|
|
<div class="cbi-value-field">
|
|
<input type="button" class="cbi-button cbi-input-apply" value="<%:Check%>" onclick="return check_connect(this, 'google', 'www.google.com/generate_204')" />
|
|
<font id="_google_status"></font>
|
|
</div>
|
|
</div>
|
|
<div class="cbi-value">
|
|
<label class="cbi-value-title">
|
|
<%:GitHub Connection%>
|
|
</label>
|
|
<div class="cbi-value-field">
|
|
<input type="button" class="cbi-button cbi-input-apply" value="<%:Check%>" onclick="return check_connect(this, 'github', 'https://github.com')" />
|
|
<font id="_github_status"></font>
|
|
</div>
|
|
</div>
|
|
<% if tonumber(status_show_check_port) == 1 then %>
|
|
<div class="cbi-value">
|
|
<label class="cbi-value-title">
|
|
<%:Node Check%>
|
|
</label>
|
|
<div class="cbi-value-field">
|
|
<input type="button" class="cbi-button cbi-input-apply" value="<%:Check%>" onclick="return check_port(this)" />
|
|
<font id="_node_status"></font>
|
|
<input id="clear_check_port_btn" type="button" class="cbi-button cbi-button-remove" style="display:none" value="<%:Clear%>" onclick="return clear_check_port(this)" />
|
|
</div>
|
|
</div>
|
|
<% end %>
|
|
<% if tonumber(status_show_ip111) == 1 then %>
|
|
<div class="cbi-value">
|
|
<label class="cbi-value-title"></label>
|
|
<div class="cbi-value-field">
|
|
<input type="button" class="cbi-button cbi-input-reload" value="IP111.cn" onclick="javascript:window.open('http://www.ip111.cn/','target');" />
|
|
</div>
|
|
</div>
|
|
<% end %>
|
|
</fieldset>
|
|
</fieldset>
|
|
|
|
<script type="text/javascript">
|
|
//<![CDATA[
|
|
var dns_mode_status = document.getElementById('_dns_mode_status');
|
|
var haproxy_status = document.getElementById('_haproxy_status');
|
|
var kcptun_status = document.getElementById('_kcptun_status');
|
|
var baidu_status = document.getElementById('_baidu_status');
|
|
var google_status = document.getElementById('_google_status');
|
|
XHR.poll(3, '<%=dsp.build_url("admin/vpn/passwall/status")%>', null,
|
|
function(x, json) {
|
|
if (x && x.status == 200) {
|
|
var tcp_node_status = document.getElementById('_tcp_node_status');
|
|
if (tcp_node_status) {
|
|
var tcp_node_num = <%=tcp_node_num%>;
|
|
if (tcp_node_num >= 1) {
|
|
var text = '';
|
|
if (tcp_node_num == 1) {
|
|
if (json["tcp_node1_status"])
|
|
text += '<font color="green"><%:RUNNING%> ✓</font>';
|
|
else
|
|
text += '<font color="red"><%:NOT RUNNING%> X</font>';
|
|
} else {
|
|
for(var i = 0; i < tcp_node_num; i++) {
|
|
var k = i + 1;
|
|
if (json["tcp_node" + k + "_status"])
|
|
text += '<font color="green" size="3"> ✓</font>';
|
|
else
|
|
text += '<font color="red" size="3"> X</font>';
|
|
}
|
|
}
|
|
tcp_node_status.innerHTML = text;
|
|
|
|
var kcptun_tcp_node_status = document.getElementById('_kcptun_tcp_node_status');
|
|
text = "";
|
|
if (tcp_node_num == 1) {
|
|
if (json["kcptun_tcp_node1_status"])
|
|
text += '<font color="green"><%:RUNNING%> ✓</font>';
|
|
else
|
|
text += '<font color="red"><%:NOT RUNNING%> X</font>';
|
|
} else {
|
|
for(var i = 0; i < tcp_node_num; i++) {
|
|
var k = i + 1;
|
|
if (json["tcp_node" + k + "_status"])
|
|
text += '<font color="green" size="3"> ✓</font>';
|
|
else
|
|
text += '<font color="red" size="3"> X</font>';
|
|
}
|
|
}
|
|
if(kcptun_tcp_node_status)
|
|
kcptun_tcp_node_status.innerHTML = text;
|
|
}
|
|
}
|
|
|
|
var udp_node_status = document.getElementById('_udp_node_status');
|
|
if (udp_node_status) {
|
|
var udp_node_num = <%=udp_node_num%>;
|
|
if (udp_node_num >= 1) {
|
|
var text = '';
|
|
if (udp_node_num == 1) {
|
|
if (json["udp_node1_status"])
|
|
text += '<font color="green"><%:RUNNING%> ✓</font>';
|
|
else
|
|
text += '<font color="red"><%:NOT RUNNING%> X</font>';
|
|
} else {
|
|
for(var i = 0; i < udp_node_num; i++) {
|
|
var k = i + 1;
|
|
if (json["udp_node" + k + "_status"])
|
|
text += '<font color="green" size="3"> ✓</font>';
|
|
else
|
|
text += '<font color="red" size="3"> X</font>';
|
|
}
|
|
}
|
|
udp_node_status.innerHTML = text;
|
|
}
|
|
}
|
|
if (haproxy_status)
|
|
haproxy_status.innerHTML = json.haproxy_status ? '<font color="green"><%:RUNNING%> ✓</font>' : '<font color="red"><%:NOT RUNNING%> X</font>';
|
|
if (dns_mode_status)
|
|
dns_mode_status.innerHTML = json.dns_mode_status ? '<font color="green"><%:RUNNING%> ✓</font>' : '<font color="red"><%:NOT RUNNING%> X</font>';
|
|
}
|
|
});
|
|
|
|
function check_connect(btn, type, url) {
|
|
btn.disabled = true;
|
|
btn.value = '<%:Check...%>';
|
|
var sendDate = (new Date()).getTime();
|
|
XHR.get('<%=dsp.build_url("admin/vpn/passwall/connect_status")%>', {
|
|
type: type,
|
|
url: url
|
|
},
|
|
function(x, rv) {
|
|
var s = document.getElementById('_' + type + '_status');
|
|
if (s) {
|
|
if (rv.ping_type && rv.ping_type == "curl") {
|
|
var use_time = rv.use_time;
|
|
var color="red";
|
|
if (use_time < 1000) {
|
|
color = "green";
|
|
} else if (use_time < 2000) {
|
|
color = "#b9b90b";
|
|
} else {
|
|
color = "red";
|
|
}
|
|
//s.setAttribute("color", color);
|
|
btn.setAttribute("style","color: " + color + " !important");
|
|
btn.value = use_time + " ms";;
|
|
} else if (rv.status) {
|
|
btn.setAttribute("style","color: green !important");
|
|
btn.value = "<%:Working...%>";
|
|
} else {
|
|
//s.setAttribute("color", "red");
|
|
btn.setAttribute("style","color: red !important");
|
|
btn.value = '<%:Problem detected!%> X';
|
|
}
|
|
}
|
|
btn.disabled = false;
|
|
//btn.value = '<%:Check%>';
|
|
}
|
|
);
|
|
return false;
|
|
}
|
|
|
|
function check_port(btn) {
|
|
btn.disabled = true;
|
|
btn.value = '<%:Check...%>';
|
|
XHR.get('<%=dsp.build_url("admin/vpn/passwall/check_port")%>', null,
|
|
function(x, rv) {
|
|
var s = document.getElementById('_node_status');
|
|
if (s) {
|
|
s.innerHTML = rv.ret;
|
|
var clear_btn = document.getElementById('clear_check_port_btn');
|
|
clear_btn.style.display = "inline-block";
|
|
}
|
|
btn.disabled = false;
|
|
btn.value = '<%:Check%>';
|
|
}
|
|
);
|
|
return false;
|
|
}
|
|
|
|
function clear_check_port(btn) {
|
|
btn.style.display = 'none';
|
|
var s = document.getElementById('_node_status');
|
|
s.innerHTML = "";
|
|
return false;
|
|
}
|
|
//]]>
|
|
</script>
|