blob: 98d4fc962a688cf3ba53d85ccd576cb49ea10565 [file] [log] [blame]
function fail2ban_callback(state, json) {
let obj = document.getElementById('results');
let resno = json.results.whitelist.length + json.results.banlist.length + json.results.iptables.length;
let header = _h2("Found %u results for %s".format(resno, state.source));
obj.innerHTML = '';
obj.inject(header);
// whitelist results?
if (json.results.whitelist.length > 0) {
let div = _div();
div.inject(_hr());
let wheader = _h3({class:'subtitle'},"Whitelist results (%u):".format(json.results.whitelist.length));
div.inject(wheader);
let tbl = new HTML('table');
let tbh = new HTML('thead');
let tbody = new HTML('tbody');
tbh.inject(new HTML('tr', {}, [
new HTML('th', 'Source'),
new HTML('th', 'Times out'),
new HTML('th', 'Description'),
new HTML('th', 'Actions')
]));
tbl.inject(tbh);
div.inject(tbl);
for (var i = 0; i < json.results.whitelist.length; i++) {
let res = json.results.whitelist[i];
let timeout = 'never';
if (res.timeout) {
timeout = moment(res.timeout*1000.0).fromNow();
}
let actions = [
new HTML('a', {href:'javascript:void();', onclick: "remove_whitelist('%s');".format(res.rid)}, "Remove whitelisting")
];
let tr = new HTML('tr', {}, [
new HTML('td', {}, _kbd(res.ip)),
new HTML('td', timeout),
new HTML('td', res.reason),
new HTML('td', {}, actions)
]);
tbody.inject(tr);
}
tbl.inject(tbody);
obj.inject(div);
}
// banlist results?
if (json.results.banlist.length > 0) {
let div = _div();
div.inject(_hr());
let wheader = _h3({class:'subtitle'},"Banlist results (%u):".format(json.results.banlist.length));
div.inject(wheader);
let tbl = new HTML('table');
let tbh = new HTML('thead');
let tbody = new HTML('tbody');
tbh.inject(new HTML('tr', {}, [
new HTML('th', 'Source'),
new HTML('th', 'Last updated'),
new HTML('th', 'Reason for ban'),
new HTML('th', 'Actions')
]));
tbl.inject(tbh);
div.inject(tbl);
for (var i = 0; i < json.results.banlist.length; i++) {
let res = json.results.banlist[i];
let timeout = 'unknown?';
if (res.epoch) {
timeout = moment(res.epoch*1000.0).fromNow();
}
let actions = [
new HTML('a', {href:'javascript:void();', onclick: "remove_banlist('%s');".format(res.rid)}, "Remove ban")
];
let tr = new HTML('tr', {}, [
new HTML('td', {}, _kbd(res.ip)),
new HTML('td', timeout),
new HTML('td', res.reason),
new HTML('td', {}, actions)
]);
tbody.inject(tr);
}
tbl.inject(tbody);
obj.inject(div);
}
// iptables stuff?
if (json.results.iptables.length > 0) {
let div = _div();
div.inject(_hr());
obj.inject(div);
let iheader = _h3({class:'subtitle'},"Local iptables results (%u):".format(json.results.iptables.length));
div.inject(iheader);
if (json.results.iptables.length == 10) {
div.inject(_i("We're only showing the first ten results, there may be many more!"));
}
for (var i = 0; i < json.results.iptables.length; i++) {
let res = json.results.iptables[i];
let txt = _div("Found on %s, iptables line %u in the %s chain, as %s".format(res.hostname, res.linenumber, res.chain, res.source));
let link = new HTML('a', {style: {marginLeft: '10px'}, href:"whitelist.html?%s".format(res.source)}, "Create whitelist rule")
div.inject(txt);
txt.inject(link);
if (res.msg) {
txt.inject(br());
txt.inject(_i({style: {color: '#963'}}, res.msg));
txt.style.marginBottom = '5px';
}
}
}
}
function old_fail2ban(e) {
if (e && e.state && e.state.what == 'search') {
search(e.state.source, true);
}
}
function fail2ban(source, nopush) {
let obj = document.getElementById('results');
let m = source.match(/([a-z0-9:.\/]+)/);
if (m) {
source = m[0];
obj.innerText = "Searching, hang on...";
if (!nopush) history.pushState({what: 'search', source: source}, "Search: " + source, '?' + source);
window.onpopstate = old_search;
let s = document.getElementById('source');
if (s) s.value = source;
POST('./api/fail2ban', fail2ban_callback, {source: source}, manage_error, {source: source});
} else if (source.length > 0) {
alert("Invalid IP or CIDR notation entered!")
}
return false
}