function fail2ban_callback()

in server/site/js/blocky.js [1741:1853]


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';
            }
        }
    }
}