async function prime_search()

in webui/js/blocky4.js [155:316]


async function prime_search(target, state) {
    if (!state) {
        window.history.pushState({}, '', `?search:${target}`);
    }
    let main = document.getElementById('main');
    main.innerHTML = '';
    if (target && target.length > 0) {
        let title = _h1("Search results for " + target + ":");
        main.appendChild(title);

        let p = _p("Searching, please wait...");
        main.appendChild(p);

        let results = await POST('search', {source: target});

        if (results.success === false) {
            p.innerText = results.message;
            return
        }

        main.removeChild(p);

        // Allow list results
        let h2 = _h2(`Allow list results (${results.allow.length})`);
        main.appendChild(h2);
        let allow_table = _table();
        allow_table.style.tableLayout = 'fixed';
        main.appendChild(allow_table);

        let theader = _tr();
        theader.appendChild(_th('Source IP', 300));
        theader.appendChild(_th('Added', 120));
        theader.appendChild(_th('Expires', 120));
        theader.appendChild(_th('Reason', 500));
        theader.appendChild(_th('Actions', 100));
        allow_table.appendChild(theader);

        let results_shown = 0;
        results.allow.sort((a,b) => b.timestamp - a.timestamp);  // sort desc by timestamp
        for (const entry of results.allow) {
            let tr = _tr();
            let td_ip = _td(entry.ip);
            let td_added = _td(moment(entry.timestamp * 1000.0).fromNow());
            let td_expires = _td(entry.expires > 0 ? moment(entry.expires * 1000.0).fromNow() : 'Never');
            let td_reason = _td(entry.reason);
            let td_action = _td();
            td_action.appendChild(unblock_link(entry, true));
            td_ip.style.fontFamily = "monospace";
            if (entry.ip.length > 16) td_ip.style.fontSize = "0.8rem";
            tr.appendChild(td_ip);
            tr.appendChild(td_added);
            tr.appendChild(td_expires);
            tr.appendChild(td_reason);
            tr.appendChild(td_action);
            allow_table.appendChild(tr);
            results_shown++;
            if (results_shown > 25 && results.block.length > 25) {
                break
            }
        }
        if (results_shown === 0) {
            let tr = _tr();
            tr.innerText = "No results found...";
            allow_table.appendChild(tr);
        }

        // Block list results
        let bh2 = _h2(`Block list results (${results.block.length})`);
        main.appendChild(bh2);
        let block_table = _table();
        block_table.style.tableLayout = 'fixed';
        main.appendChild(block_table);

        let btheader = _tr();
        btheader.appendChild(_th('Source IP', 300));
        btheader.appendChild(_th('Added', 120));
        btheader.appendChild(_th('Expires', 120));
        btheader.appendChild(_th('Reason', 500));
        btheader.appendChild(_th('Actions', 100));
        block_table.appendChild(btheader);

        results_shown = 0;
        results.block.sort((a,b) => b.timestamp - a.timestamp);  // sort desc by timestamp
        for (const entry of results.block) {
            let tr = _tr();
            let td_ip = _td(entry.ip);
            let td_added = _td(moment(entry.timestamp * 1000.0).fromNow());
            let td_expires = _td(entry.expires > 0 ? moment(entry.expires * 1000.0).fromNow() : 'Never');
            let td_reason = _td(entry.reason);
            let td_actions = _td('');
            td_actions.appendChild(unblock_link(entry));
            td_ip.style.fontFamily = "monospace";
            if (entry.ip.length > 16) td_ip.style.fontSize = "0.8rem";
            tr.appendChild(td_ip);
            tr.appendChild(td_added);
            tr.appendChild(td_expires);
            tr.appendChild(td_reason);
            tr.appendChild(td_actions);

            block_table.appendChild(tr);
            results_shown++;
            if (results_shown > 25 && results.block.length > 25) {
                break
            }
        }
        if (results_shown === 0) {
            let tr = _tr();
            tr.innerText = "No results found...";
            block_table.appendChild(tr);
        }

        // iptables results
        let ih2 = _h2(`Local iptables results (${results.iptables.length})`);
        main.appendChild(ih2);
        let iptables_table = _table();
        iptables_table.style.tableLayout = 'fixed';
        main.appendChild(iptables_table);

        let itheader = _tr();
        itheader.appendChild(_th('Source IP', 300));
        itheader.appendChild(_th('Host', 200));
        itheader.appendChild(_th('Chain', 100));
        itheader.appendChild(_th('Reason', 450));
        itheader.appendChild(_th('Actions', 100));
        iptables_table.appendChild(itheader);

        results_shown = 0;
        for (const entry of results.iptables) {
            let tr = _tr();
            let td_ip = _td(entry.source);
            let td_host = _td(entry.hostname);
            let td_chain = _td(entry.chain);
            let td_reason = _td(entry.extensions.replace(/\/\*\s*(.+)\s*\*\//, (b,a) => a));
            let td_actions = _td();
            td_actions.appendChild(unblock_iptables_link(entry));
            td_ip.style.fontFamily = "monospace";
            if (entry.source.length > 16) td_ip.style.fontSize = "0.8rem";
            tr.appendChild(td_ip);
            tr.appendChild(td_host);
            tr.appendChild(td_chain);
            tr.appendChild(td_reason);
            tr.appendChild(td_actions);

            iptables_table.appendChild(tr);
            results_shown++;
            if (results_shown > 25 && results.block.length > 25) {
                break
            }
        }
        if (results_shown === 0) {
            let tr = _tr();
            tr.innerText = "No results found...";
            iptables_table.appendChild(tr);
        }

    } else {
        //let x = await sleep(10);
        let p = _p("Use the search bar in the top left corner for now...");
        main.appendChild(p);
    }

}