Codebase list fudgec2 / 9efa3053-3ebd-43b9-ba52-25607284fb4a/upstream ServerApp / static / ImplantController.js
9efa3053-3ebd-43b9-ba52-25607284fb4a/upstream

Tree @9efa3053-3ebd-43b9-ba52-25607284fb4a/upstream (Download .tar.gz)

ImplantController.js @9efa3053-3ebd-43b9-ba52-25607284fb4a/upstreamraw · history · blame

function sleep(ms) {
    return new Promise(resolve => setTimeout(resolve, ms));
}



// Reorders the response data of Get_ImplantCallback
function order_response_by_time ( response ){
    var a = 0;
    var ordered_list = [];
    var change = true;
    for ( element in response){
        ordered_list.push(response[element])
    }
    while ( change ){
        change = false;
        len = ordered_list.length;
        for (element in ordered_list){
            y = Number(element)+1;
            x = Number(element);
            if (y >= len){
            } else if (ordered_list[x].last_checked_in < ordered_list[y].last_checked_in) {
                var b = ordered_list[y];
                ordered_list[y] = ordered_list[x];
                ordered_list[x] = b;
                change = true;
                break;
            }
        }
    }
    return ordered_list
}

// Outputs the status of registered implants.
async function Get_ImplantCallback (cid){
    while(true){
        $.ajax({
            url:`/${cid}/implant/status`,
            type:"GET",
            success: function (response) {

                var implant_status_text = ""
                response = order_response_by_time ( response )
                for (element in response){
                    var pageContainer = document.getElementById('ImplantStatusValues')
                    var utcSeconds = response[element].last_checked_in;
                    var d = new Date(0);
                    d.setUTCSeconds(utcSeconds);
                    var date = new Date(response[element].last_checked_in*1000);
                    var year = date.getFullYear();
                    var month = date.getMonth();
                    var day = date.getDate();
                    var hours = date.getHours();
                    var minutes = "0" + date.getMinutes();
                    var seconds = "0" + date.getSeconds();
                    time_last_seen = hours+":"+minutes.substr(-2)+':'+seconds.substr(-2)+' '+day+'/'+month+'/'+year

                    var CodeColour = "text-primary"
                    if (response[element].status=='poor'){
                        var CodeColour="text-danger"
                    } else if (response[element].status=='normal') {
                        var CodeColour="text-warning"
                    } else if (response[element].status=='good') {
                        var CodeColour="text-success"
                    }
                    Entry = "<div class=''><p>Title: "+response[element].title+"<br>Time: "+time_last_seen+"<br>Status: <code class='"+CodeColour+"'>"+response[element].status+"</code></p></div><hr>"
                    implant_status_text += Entry;
                }
            document.getElementById('ImplantStatusValues').innerHTML = "" // Clear current implants before writing updated values.
            document.getElementById('ImplantStatusValues').innerHTML = implant_status_text
            }
        })
    // Import the handling of this loop
    await sleep(15000);
    }
};

// Output the commands which are registered and awaiting pickup by the implant.
async function Get_Awaiting_Cmds (cid){
    while(true){
        $.ajax({
            url:`/${cid}/waiting_commands`,
            type:"GET",
            success: function (response) {
                document.getElementById('awaiting').innerHTML = ""
                for (element in response){
                    if (response[element].read_by_implant == 0){
                        line="<p>Implant ID: "+response[element].uik+"</br>Command: "+response[element].log_entry+"</p>"
                        document.getElementById('awaiting').innerHTML =  document.getElementById('awaiting').innerHTML + line
                    } else {
                        //console.log(response[element].time)
                    }
                }
            }
        })
    await sleep(15000);
    }
};