VaKeR CYBER ARMY
Logo of a company Server : Apache/2.4.41 (Ubuntu)
System : Linux absol.cf 5.4.0-198-generic #218-Ubuntu SMP Fri Sep 27 20:18:53 UTC 2024 x86_64
User : www-data ( 33)
PHP Version : 7.4.33
Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Directory :  /var/www/html/tech_preview/hr/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /var/www/html/tech_preview/hr/jsfilemanager.js
/*
    connector = filemanager.connect({
        (optional) host: "",
        mode: "session" / "inherit" / "token",
        username: "admin",
        password: "123456",
        (optional) onsuccess: function (),
        (optional) onfailed: function (content)
    });

    connector.loadFolder({
        index: 0,
        path: [],
        onsuccess: function (content),
        (optional) onfailed: function (content)
    });

    connector.download({
        index: 0,
        path: [],
        filename: "test.php",
        onsuccess: function (content),
        (optional) onprogress: function (content),
        (optional) onfailed: function (content)
    });

    connector.upload({
        index: 0,
        path: [],
        filehandle: filehandle,
        (optional) filename: "test.php",
        (optional) onsuccess: function (content),
        (optional) onprogress: function (content),
        (optional) onfailed: function (content)
    });

    connector.uploadFilesFromInput({
        index: 0,
        path: [],
        (optional) onsuccess: function (content),
        (optional) onprogress: function (content),
        (optional) onfailed: function (content)
    });

    connector.delete({
        index: 0,
        path: [],
        files: ["test.php"],
        (optional) onsuccess: function (),
        (optional) onfailed: function (content)
    });

    connector.mkdir({
        index: 0,
        path: [],
        foldername: "test",
        (optional) onsuccess: function (),
        (optional) onfailed: function (content)
    });

    connector.rmdir({
        index: 0,
        path: [],
        foldername: "test",
        (optional) onsuccess: function (),
        (optional) onfailed: function (content)
    });

    connector.logout({
        (optional) onsuccess: function (),
        (optional) onfailed: function (content)
    });

*/

const filemanager = Object.freeze ({
    connect: function () {

        tcore = {};

        tcore.connect = function (core) {
            return function (local, username, password) {
                var f = function (local) {
                    return function (success, message) {
                        var r;
                        if (success) {
                            if (message.substr(0, 2) == "ok") {
                                r = EncodingClass.string.toVariable(message.substr(2));
                                if (r.result) {
                                    local.id = r.info.id;
                                    local.username = r.info.username;
                                    local.folders = r.info.folders;
                                    local.status = "connected";
                                    if (local.mode == "token") local.token = r.token;
                                    local.keepAliveThread = function (core, local) {
                                        return function () {
                                            setTimeout(function (core, local) {
                                                return function () {
                                                    core.keepAliveThread(local);
                                                }
                                            } (core, local), 300000);
                                        }
                                    } (core, local);
                                    local.keepAliveThread();
                                    if (local.onsuccess !== undefined) local.onsuccess();
                                }
                                else {
                                    local.status = "disconnected";
                                    if (local.onfailed !== undefined) local.onfailed({
                                        type: "response",
                                        message: r.message
                                    });
                                }
                            }
                            else {
                                local.status = "disconnected";
                                if (local.onfailed !== undefined) local.onfailed({
                                    type: "run-time",
                                    message: message
                                });
                            }
                        }
                        else {
                            local.status = "disconnected";
                            if (local.onfailed !== undefined) local.onfailed({
                                type: "system",
                                message: message
                            });
                        }
                    }
                } (local);
                switch (local.mode) {
                    case "token":
                    case "session":
                        FormClass.api_call({
                            url: local.host + "task_login.php",
                            params: [
                                {
                                    name: "username",
                                    value: username
                                },
                                {
                                    name: "password",
                                    value: password
                                },
                                {
                                    name: "mode",
                                    value: local.mode
                                }
                            ],
                            cors: true,
                            func: f
                        });
                        break;
                    case "inherit":
                        FormClass.api_call({
                            url: local.host + "task_inherit.php",
                            params: [],
                            cors: true,
                            func: f
                        });
                        break;
                }
            };
        } (tcore);

        tcore.keepAliveThread = function (core) {
            return function (local) {
                if (local.status != "connected") {
                    local.keepAliveThread();
                    return;
                }
                var params = [
                    {
                        name: "mode",
                        value: local.mode
                    }
                ];
                if (local.mode == "token") params.push({
                    name: "token",
                    value: local.token
                });
                FormClass.api_call({
                    url: local.host + "keepalive.php",
                    cors: true,
                    params: params,
                    func: function (local, index) {
                        return function (success, message) {
                            local.keepAliveThread();
                        }
                    } (local)
                });

            };
        } (tcore);

        tcore.loadcontent = function (local, index, path, onsuccess, onfailed) {
            if (local.status != "connected") {
                onfailed({
                    type: "system",
                    message: "invalid connection status"
                });
                return;
            }
            var f = function (onsuccess, onfailed) {
                return function (success, message) {
                    var r;
                    if (success) {
                        if (message.substr(0, 2) == "ok") {
                            r = EncodingClass.string.toVariable(message.substr(2));
                            if (r.result) {
                                onsuccess(r.content);
                            }
                            else {
                                onfailed({
                                    type: "response",
                                    message: r.message
                                });
                            }
                        }
                        else {
                            onfailed({
                                type: "run-time",
                                message: message
                            });
                        }
                    }
                    else {
                        onfailed({
                            type: "system",
                            message: message
                        });
                    }
                }
            } (onsuccess, onfailed);
            var params = [
                {
                    name: "index",
                    value: index
                },
                {
                    name: "path",
                    value: EncodingClass.string.fromVariable(path)
                },
                {
                    name: "mode",
                    value: local.mode
                }
            ];
            if (local.mode == "token") params.push({
                name: "token",
                value: local.token
            });
            FormClass.api_call({
                url: local.host + "task_loadcontent.php",
                cors: true,
                params: params,
                func: f
            });
        }

        tcore.download = function (local, index, path, filename, start, onsuccess, onfailed) {
            var f, params;
            if (local.status != "connected") {
                onfailed({
                    type: "system",
                    message: "invalid connection status"
                });
                return;
            }
            f = function (local, onsuccess, onfailed) {
                return function (success, message) {
                    var r, i, n;
                    if (success) {
                        if (message.substr(0, 2) == "ok") {
                            r = EncodingClass.string.toVariable(message.substr(2));
                            if (r.result) {
                                n = r.content.length;
                                if (n > 0) {
                                    for (i = 0; i < n; i++) {
                                        r.content[i] = String.fromCharCode(r.content[i]);
                                    }
                                    onsuccess(EncodingClass.string.merge(r.content));
                                }
                                else {
                                    onsuccess("");
                                }
                            }
                            else {
                                onfailed({
                                    type: "response",
                                    message: r.message
                                });
                            }
                        }
                        else {
                            onfailed({
                                type: "run-time",
                                message: message
                            });
                        }
                    }
                    else {
                        onfailed({
                            type: "system",
                            message: message
                        });
                    }
                }
            } (local, onsuccess, onfailed);
            if (local.mode == "token") {
                params = [
                    {
                        name: "mode",
                        value: "token"
                    },
                    {
                        name: "token",
                        value: local.token
                    }
                ];
            }
            else {
                params = [{
                    name: "mode",
                    value: "session"
                }];
            }
            params.push({
                name: "index",
                value: index
            });
            params.push({
                name: "start",
                value: start
            });
            params.push({
                name: "path",
                value: EncodingClass.string.fromVariable(path)
            });
            params.push({
                name: "filename",
                value: filename
            });
            FormClass.api_call({
                url: local.host + "task_download.php",
                params: params,
                cors: true,
                func: f
            });
        }

        tcore.upload = function (local, filename, privindex, path, content, partindex, isSinglePart, onsuccess, onfailed) {
            var params = [
                {
                    name: "index",
                    value: privindex
                },
                {
                    name: "filename",
                    value: filename
                },
                {
                    name: "partindex",
                    value: partindex
                },
                {
                    name: "singlepart",
                    value: isSinglePart
                },
                {
                    name: "path",
                    value: EncodingClass.string.fromVariable(path)
                }
            ];
            if (local.mode == "token") {
                params.push({
                    name: "mode",
                    value: "token"
                });
                params.push({
                    name: "token",
                    value: local.token
                });
            }
            else {
                params.push({
                    name: "mode",
                    value: "session"
                });
            }
            FormClass.api_call({
                url: local.host + "task_upload2.php",
                params: params,
                fileuploads: [{
                    name: "fcontent",
                    filename: filename,
                    content: content
                }],
                cors: true,
                func: function (onsuccess, onfailed) {
                    return function (success, message) {
                        if (success) {
                            if (message.substr(0, 2) == "ok") {
                                r = EncodingClass.string.toVariable(message.substr(2));
                                if (r.result) {
                                    onsuccess();
                                    return;
                                }
                                if (r.content !== undefined) {
                                    onfailed({
                                        type: "run-time",
                                        content: r.content
                                    });
                                }
                                else {
                                    onfailed({
                                        type: "run-time",
                                        message: "undefined content",
                                        content: r
                                    });
                                }
                            }
                            else {
                                onfailed({
                                    type: "run-time",
                                    content: message
                                });
                            }
                        }
                        else {
                            onfailed({
                                type: "system",
                                content: message
                            });
                        }
                    }
                } (onsuccess, onfailed)
            });
        }

        tcore.mergeUploadParts = function (local, content, index, filename, totalindex, path, onsuccess, onfailed) {
            var params = [
                {
                    name: "index",
                    value: index
                },
                {
                    name: "filename",
                    value: filename
                },
                {
                    name: "totalindex",
                    value: totalindex
                },
                {
                    name: "path",
                    value: EncodingClass.string.fromVariable(path)
                }
            ];
            if (local.mode == "token") {
                params.push({
                    name: "mode",
                    value: "token"
                });
                params.push({
                    name: "token",
                    value: local.token
                });
            }
            else {
                params.push({
                    name: "mode",
                    value: "session"
                });
            }
            FormClass.api_call({
                url: local.host + "task_upload2a.php",
                params: params,
                cors: true,
                func: function (content, onsuccess, onfailed) {
                    return function (success, message) {
                        if (message.substr(0, 2) == "ok") {
                            r = EncodingClass.string.toVariable(message.substr(2));
                            if (r.result) {
                                onsuccess({
                                    index: content.index,
                                    path: content.path,
                                    filename: content.filename,
                                    filesize: content.size
                                });
                            }
                            else {
                                onfailed({
                                    type: "run-time",
                                    index: content.index,
                                    path: content.path,
                                    filename: content.filename,
                                    message: "Can not merge partial files",
                                    content: r.message
                                });
                            }
                        }
                        else {
                            onfailed({
                                type: "system",
                                index: content.index,
                                path: content.path,
                                filename: content.filename,
                                message: "Can not merge partial files",
                                content: message
                            });
                        }
                    }
                } (content, onsuccess, onfailed)
            });
        }

        tcore.uploadThread = function (core) {
            return function (local, content, threadIndex, onsuccess, onprogress, onfailed) {
                var vbuf;
                var i, buflen;
                var usize = content.size;
                var singlepart, startpoint;

                buflen = 1048576;
                if (usize > content.start + buflen) usize = content.start + buflen;
                usize -= content.start;
                var f = new FileReader();
                onprogress({
                    index: content.index,
                    path: content.path,
                    filename: content.filename,
                    uploaded: content.start,
                    filesize: content.size
                });
                if ((content.partindex == 0) && (usize == content.size)) {
                    singlepart = 1;
                }
                else {
                    singlepart = 0;
                }
                f.onload = function (core, local, content, start, partindex, singlepart, usize) {
                    return function (e) {
                        core.upload(local, content.filename, content.index, content.path, e.target.result, partindex, singlepart,
                            function () {   // onsuccess
                                var i, n;
                                if (content.terminated) return;
                                if (content.start < content.size) {
                                    setTimeout(function (local, content, threadIndex, onsuccess, onprogress, onfailed) {
                                        return function () {
                                            core.uploadThread(local, content, threadIndex, onsuccess, onprogress, onfailed);
                                        }
                                    } (local, content, threadIndex, onsuccess, onprogress, onfailed), 10);
                                    return;
                                }
                                content.uploadThread[threadIndex] = true;
                                n = content.uploadThread.length;
                                for (i = 0; i < n; i++) {
                                    if (!content.uploadThread[i]) return;
                                }
                                setTimeout(function (local, content, onsuccess, onfailed) {
                                    return function () {
                                        if (content.partindex == 1) {
                                            onsuccess({
                                                index: content.index,
                                                path: content.path,
                                                filename: content.filename,
                                                filesize: content.size
                                            });
                                            return;
                                        }
                                        core.mergeUploadParts(local, content, content.index, content.filename, content.partindex, content.path, onsuccess, onfailed);
                                    }
                                } (local, content, onsuccess, onfailed), 10);
                            },
                            function (onfailed, start, usize, partindex) {   // onfailed
                                return function (failedcontent) {
                                    content.terminated = true;
                                    failedcontent.start = start;
                                    failedcontent.size = usize;
                                    failedcontent.partindex = partindex;
                                    onfailed(failedcontent);
                                }
                            } (onfailed, start, usize, partindex)
                        );
                    }
                } (core, local, content, content.start, content.partindex, singlepart, usize);
                startpoint = content.start;
                content.partindex++;
                content.start += usize;
                f.readAsBinaryString(content.buffer.slice(startpoint, startpoint + usize));
            }
        } (tcore);

        tcore.uploadProcess = function (core) {
            return function (local) {
                var i, content;
                if (local.uploadQueue.length == 0) return;
                content = local.uploadQueue[0];
                for (i = 0; (i < 8) && (content.start < content.size); i++) {
                    content.uploadThread.push(false);
                    core.uploadThread(local, content, i, content.onsuccess, content.onprogress, content.onfailed);
                }
            }
        } (tcore);

        tcore.addToUploadQueue = function (core) {
            return function (local, index, path, filename, filehandle, onsuccess, onprogress, onfailed) {
                var content = {
                    index: index,
                    filename: filename,
                    path: path,
                    size: filehandle.size,
                    buffer: filehandle,
                    start: 0,
                    partindex: 0,
                    uploadThread: [],
                    onsuccess: function (core, local, onsuccess) {
                        return function (successcontent) {
                            onsuccess(successcontent);
                            local.uploadQueue.shift();
                            if (local.uploadQueue.length > 0) core.uploadProcess(local);
                        }
                    } (core, local, onsuccess),
                    onprogress: onprogress,
                    onfailed: function (core, local, onfailed) {
                        return function (failedcontent) {
                            onfailed(failedcontent);
                            local.uploadQueue.shift();
                            if (local.uploadQueue.length > 0) core.uploadProcess(local);
                        }
                    } (core, local, onfailed),
                    terminated: false
                };
                local.uploadQueue.push(content);
                if (local.uploadQueue.length == 1) core.uploadProcess(local);
            }
        } (tcore);

        tcore.delete = function (local, index, path, files, onsuccess, onfailed) {
            if (local.status != "connected") {
                onfailed({
                    type: "system",
                    message: "invalid connection status"
                });
                return;
            }
            var f = function (onsuccess, onfailed) {
                return function (success, message) {
                    var r;
                    if (success) {
                        if (message.substr(0, 2) == "ok") {
                            r = EncodingClass.string.toVariable(message.substr(2));
                            if (r.result) {
                                onsuccess();
                            }
                            else {
                                onfailed({
                                    type: "response",
                                    message: r.message
                                });
                            }
                        }
                        else {
                            onfailed({
                                type: "run-time",
                                message: message
                            });
                        }
                    }
                    else {
                        onfailed({
                            type: "system",
                            message: message
                        });
                    }
                }
            } (onsuccess, onfailed);
            var params = [
                {
                    name: "index",
                    value: index
                },
                {
                    name: "data",
                    value: EncodingClass.string.fromVariable({
                        path: path,
                        files: files
                    })
                },
                {
                    name: "mode",
                    value: local.mode
                }
            ];
            if (local.mode == "token") params.push({
                name: "token",
                value: local.token
            });
            FormClass.api_call({
                url: local.host + "task_delete.php",
                cors: true,
                params: params,
                func: f
            });
        }

        tcore.mkdir = function (local, index, path, foldername, onsuccess, onfailed) {
            if (local.status != "connected") {
                onfailed({
                    type: "system",
                    message: "invalid connection status"
                });
                return;
            }
            var f = function (onsuccess, onfailed) {
                return function (success, message) {
                    var r;
                    if (success) {
                        if (message.substr(0, 2) == "ok") {
                            r = EncodingClass.string.toVariable(message.substr(2));
                            if (r.result) {
                                onsuccess();
                            }
                            else {
                                onfailed({
                                    type: "response",
                                    message: r.message
                                });
                            }
                        }
                        else {
                            onfailed({
                                type: "run-time",
                                message: message
                            });
                        }
                    }
                    else {
                        onfailed({
                            type: "system",
                            message: message
                        });
                    }
                }
            } (onsuccess, onfailed);
            var params = [
                {
                    name: "index",
                    value: index
                },
                {
                    name: "path",
                    value: EncodingClass.string.fromVariable(path)
                },
                {
                    name: "filename",
                    value: foldername
                },
                {
                    name: "mode",
                    value: local.mode
                }
            ];
            if (local.mode == "token") params.push({
                name: "token",
                value: local.token
            });
            FormClass.api_call({
                url: local.host + "task_mkdir.php",
                cors: true,
                params: params,
                func: f
            });
        }

        tcore.rmdir = function (local, index, path, foldername, onsuccess, onfailed) {
            if (local.status != "connected") {
                onfailed({
                    type: "system",
                    message: "invalid connection status"
                });
                return;
            }
            var f = function (onsuccess, onfailed) {
                return function (success, message) {
                    var r;
                    if (success) {
                        if (message.substr(0, 2) == "ok") {
                            r = EncodingClass.string.toVariable(message.substr(2));
                            if (r.result) {
                                onsuccess();
                            }
                            else {
                                onfailed({
                                    type: "response",
                                    message: r.message
                                });
                            }
                        }
                        else {
                            onfailed({
                                type: "run-time",
                                message: message
                            });
                        }
                    }
                    else {
                        onfailed({
                            type: "system",
                            message: message
                        });
                    }
                }
            } (onsuccess, onfailed);
            var params = [
                {
                    name: "index",
                    value: index
                },
                {
                    name: "path",
                    value: EncodingClass.string.fromVariable(path)
                },
                {
                    name: "fname",
                    value: foldername
                },
                {
                    name: "mode",
                    value: local.mode
                }
            ];
            if (local.mode == "token") params.push({
                name: "token",
                value: local.token
            });
            FormClass.api_call({
                url: local.host + "task_rmdir.php",
                cors: true,
                params: params,
                func: f
            });
        }

        tcore.logout = function (local, onsuccess, onfailed) {
            var f, params;
            if (local.status != "connected") {
                onfailed({
                    type: "system",
                    message: "invalid connection status"
                });
                return;
            }
            f = function (local, onsuccess, onfailed) {
                return function (success, message) {
                    var r;
                    if (success) {
                        if (message.substr(0, 2) == "ok") {
                            r = EncodingClass.string.toVariable(message.substr(2));
                            if (r.result) {
                                local.status = "disconnected";
                                local.keepAliveThread = function () {};
                                onsuccess();
                            }
                            else {
                                onfailed({
                                    type: "response",
                                    message: r.message
                                });
                            }
                        }
                        else {
                            onfailed({
                                type: "run-time",
                                message: message
                            });
                        }
                    }
                    else {
                        onfailed({
                            type: "system",
                            message: message
                        });
                    }
                }
            } (local, onsuccess, onfailed);
            if (local.mode == "token") {
                params = [
                    {
                        name: "mode",
                        value: "token"
                    },
                    {
                        name: "token",
                        value: local.token
                    }
                ];
            }
            else {
                params = [{
                    name: "mode",
                    value: "session"
                }];
            }
            FormClass.api_call({
                url: local.host + "task_logout.php",
                params: params,
                cors: true,
                func: f
            });
        }

        var fconnect = function (core) {
            return function (params) {
                var local = {
                    id: 0,
                    folders: [],
                    uploadQueue: []
                };
                var retval = {};
                var host, mode, username, password, onsuccess, onfailed;
                if (params === undefined) {
                    params = {
                        mode: "inherit"
                    };
                }
                if (params.host !== undefined) {
                    host = params.host;
                }
                else {
                    host = "";
                }
                if (host.length > 0) {
                    if (host.substr(host.length - 1, 1) != "/") host += "/";
                }
                local.host = host;
                Object.defineProperty(retval, "status", {
                    get: function (local) {
                        return function () {
                            return local.status;
                        }
                    } (local)
                });
                Object.defineProperty(retval, "id", {
                    get: function (local) {
                        return function () {
                            return local.id;
                        }
                    } (local)
                });
                Object.defineProperty(retval, "username", {
                    get: function (local) {
                        return function () {
                            return local.username;
                        }
                    } (local)
                });
                Object.defineProperty(retval, "folders", {
                    get: function (local) {
                        return function () {
                            return EncodingClass.string.duplicate(local.folders);
                        }
                    } (local)
                });
                Object.defineProperty(retval, "mode", {
                    get: function (local) {
                        return function () {
                            return local.mode;
                        }
                    } (local)
                });
                retval.loadFolder = function (local, core) {
                    return function (params) {
                        var i, onfailed;
                        if (params.index === undefined) {
                            console.error("no index");
                            console.trace();
                            return;
                        }
                        if (params.path === undefined) {
                            console.error("no path");
                            console.trace();
                            return;
                        }
                        if (!EncodingClass.type.isArray(params.path)) {
                            console.error("invalid path type (must be array)");
                            console.trace();
                            return;
                        }
                        for (i = 0; i < params.path.length; i++) {
                            if (!EncodingClass.type.isString(params.path[i])) {
                                console.error("invalid path [" + i + "] type (must be string)");
                                console.trace();
                                return;
                            }
                        }
                        if (params.onsuccess === undefined) {
                            console.error("no trigger");
                            console.trace();
                            return;
                        }
                        if (!EncodingClass.type.isFunction(params.onsuccess)) {
                            console.error("invalid onsuccess function");
                            console.trace();
                            return;
                        }
                        onfailed = function () {};
                        if (params.onfailed !== undefined) {
                            if (EncodingClass.type.isFunction(params.onfailed)) {
                                onfailed = params.onfailed;
                            }
                            else {
                                console.error("invalid onfailed function");
                                console.trace();
                            }
                        }
                        core.loadcontent(local, params.index, params.path, params.onsuccess, onfailed);
                    }
                } (local, core);
                retval.download = function (core, local) {
                    return function (params) {
                        var onsuccess = params.onsuccess, onprogress = params.onprogress, onfailed = params.onfailed;
                        var xp, f, i;
                        if (params.index === undefined) {
                            console.error("no index");
                            console.trace();
                            return;
                        }
                        if (params.path === undefined) {
                            console.error("no path");
                            console.trace();
                            return;
                        }
                        if (!EncodingClass.type.isArray(params.path)) {
                            console.error("invalid path type (must be array)");
                            console.trace();
                            return;
                        }
                        for (i = 0; i < params.path.length; i++) {
                            if (!EncodingClass.type.isString(params.path[i])) {
                                console.error("invalid path [" + i + "] type (must be string)");
                                console.trace();
                                return;
                            }
                        }
                        if (params.filename === undefined) {
                            console.error("no filename");
                            console.trace();
                            return;
                        }
                        if (!EncodingClass.type.isString(params.filename)) {
                            console.error("invalid filename type (must be string)");
                            console.trace();
                            return;
                        }
                        if (onsuccess === undefined) {
                            console.error("onsuccess function can not be missing");
                            console.trace();
                            return;
                        }
                        if (!EncodingClass.type.isFunction(onsuccess)) {
                            console.error("invalid onsuccess function");
                            console.trace();
                            return;
                        }
                        if (onprogress !== undefined) {
                            if (!EncodingClass.type.isFunction(onprogress)) onprogress = undefined;
                        }
                        if (onprogress === undefined) {
                            onprogress = function (content) {};
                        }
                        if (onfailed !== undefined) {
                            if (!EncodingClass.type.isFunction(onfailed)) onfailed = undefined;
                        }
                        if (onfailed === undefined) {
                            onfailed = function (content) {};
                        }
                        f = function (params) {
                            params.core.download(params.local, params.index, params.path, params.filename, params.start,
                                function (params) {     // onsuccess
                                    return function (content) {
                                        var n = content.length;
                                        if (n > 0) {
                                            params.content = params.content + content;
                                            params.onprogress({
                                                index: params.index,
                                                path: params.path,
                                                filename: params.filename,
                                                content: params.content
                                            });
                                            params.start += n;
                                            params.threadcall();
                                        }
                                        else {
                                            params.onsuccess({
                                                index: params.index,
                                                path: params.path,
                                                filename: params.filename,
                                                content: params.content
                                            });
                                        }
                                    }
                                } (params),
                                function (params) {     // onfailed
                                    return function (content) {
                                        params.onfailed({
                                            index: params.index,
                                            path: params.path,
                                            filename: params.filename,
                                            content: params.content,
                                            reason: content
                                        });
                                    }
                                } (params)
                            );
                        }
                        xp = {
                            index: params.index,
                            path: params.path,
                            filename: params.filename,
                            start: 0,
                            onsuccess: onsuccess,
                            onprogress: onprogress,
                            onfailed: onfailed,
                            core: core,
                            local: local,
                            content: ""
                        }
                        xp.threadcall = function (xp, func) {
                            return function () {
                                setTimeout(function (xp, func) {
                                    func(xp);
                                } (xp, func), 10);
                            }
                        } (xp, f);
                        xp.threadcall();
                    }
                } (core, local);
                retval.upload = function (core, local) {
                    return function (params) {
                        var index, path, filename, filehandle, onsuccess, onprogress, onfailed;
                        var i;
                        index = params.index;
                        path = params.path;
                        filename = params.filename;
                        filehandle = params.filehandle;
                        onsuccess = params.onsuccess;
                        onprogress = params.onprogress;
                        onfailed = params.onfailed;
                        if (index === undefined) {
                            console.error("index can not be missing");
                            console.trace();
                            return;
                        }
                        if (!EncodingClass.type.isNumber(index)) {
                            console.error("invalid index value");
                            console.trace();
                            return;
                        }
                        if (path === undefined) {
                            console.error("path can not be missing");
                            console.trace();
                            return;
                        }
                        if (!EncodingClass.type.isArray(path)) {
                            console.error("invalid path value");
                            console.trace();
                            return;
                        }
                        for (i = 0; i < path.length; i++) {
                            if (!EncodingClass.type.isString(path[i])) {
                                console.error("invalid path value [" + i + "]");
                                console.trace();
                                return;
                            }
                        }
                        if (filehandle === undefined) {
                            console.error("filehandle can not be missing");
                            console.trace();
                            return;
                        }
                        if (filename === undefined) filename = filehandle.name;
                        if (!EncodingClass.type.isString(filename)) {
                            console.error("invalid filename value");
                            console.trace();
                            return;
                        }
                        if (onsuccess === undefined) onsuccess = function (successcontent) {};
                        if (onprogress === undefined) onprogress = function (progresscontent) {};
                        if (onfailed === undefined) onfailed = function (failedcontent) {};
                        if (!EncodingClass.type.isFunction(onsuccess)) {
                            console.error("invalid onsuccess function");
                            console.trace();
                            return;
                        }
                        if (!EncodingClass.type.isFunction(onprogress)) {
                            console.error("invalid onprogress function");
                            console.trace();
                            return;
                        }
                        if (!EncodingClass.type.isFunction(onfailed)) {
                            console.error("invalid onfailed function");
                            console.trace();
                            return;
                        }
                        core.addToUploadQueue(local, index, path, filename, filehandle, onsuccess, onprogress, onfailed);
                    }
                } (core, local);
                retval.uploadFilesFromInput = function (core, local, connector) {
                    return function (params) {
                        var index, path, onsuccess, onprogress, onfailed;
                        var i;
                        index = params.index;
                        path = params.path;
                        onsuccess = params.onsuccess;
                        onprogress = params.onprogress;
                        onfailed = params.onfailed;
                        if (index === undefined) {
                            console.error("index can not be missing");
                            console.trace();
                            return;
                        }
                        if (!EncodingClass.type.isNumber(index)) {
                            console.error("invalid index value");
                            console.trace();
                            return;
                        }
                        if (path === undefined) {
                            console.error("path can not be missing");
                            console.trace();
                            return;
                        }
                        if (!EncodingClass.type.isArray(path)) {
                            console.error("invalid path value");
                            console.trace();
                            return;
                        }
                        for (i = 0; i < path.length; i++) {
                            if (!EncodingClass.type.isString(path[i])) {
                                console.error("invalid path value [" + i + "]");
                                console.trace();
                                return;
                            }
                        }
                        if (onsuccess === undefined) onsuccess = function (successcontent) {};
                        if (onprogress === undefined) onprogress = function (progresscontent) {};
                        if (onfailed === undefined) onfailed = function (failedcontent) {};
                        if (!EncodingClass.type.isFunction(onsuccess)) {
                            console.error("invalid onsuccess function");
                            console.trace();
                            return;
                        }
                        if (!EncodingClass.type.isFunction(onprogress)) {
                            console.error("invalid onprogress function");
                            console.trace();
                            return;
                        }
                        if (!EncodingClass.type.isFunction(onfailed)) {
                            console.error("invalid onfailed function");
                            console.trace();
                            return;
                        }
                        var x = DOMElement.input({
                            attrs: {
                                type: "file",
                                onchange: function (connector, index, path, onsuccess, onprogress, onfailed) {
                                    return function (event, me) {
                                        var i, n = me.files.length;
                                        if (n == 0) return;
                                        for (i = 0; i < n; i++) {
                                            connector.upload({
                                                index: index,
                                                path: path,
                                                filename: me.files[i].name,
                                                filehandle: me.files[i],
                                                onsuccess: onsuccess,
                                                onprogress: onprogress,
                                                onfailed: onfailed
                                            });
                                        }
                                    }
                                } (connector, index, path, onsuccess, onprogress, onfailed),
                                multiple: true
                            }
                        });
                        document.body.appendChild(x);
                        x.click();
                        document.body.removeChild(x);
                    }
                } (core, local, retval);
                retval.delete = function (core, local) {
                    return function (params) {
                        var onsuccess = params.onsuccess, onfailed = params.onfailed;
                        var i;
                        if (params.index === undefined) {
                            console.error("no index");
                            console.trace();
                            return;
                        }
                        if (params.path === undefined) {
                            console.error("no path");
                            console.trace();
                            return;
                        }
                        if (!EncodingClass.type.isArray(params.path)) {
                            console.error("invalid path type (must be array)");
                            console.trace();
                            return;
                        }
                        for (i = 0; i < params.path.length; i++) {
                            if (!EncodingClass.type.isString(params.path[i])) {
                                console.error("invalid path [" + i + "] type (must be string)");
                                console.trace();
                                return;
                            }
                        }
                        if (params.files === undefined) {
                            console.error("no filelist");
                            console.trace();
                            return;
                        }
                        if (!EncodingClass.type.isArray(params.files)) {
                            console.error("invalid filelist type (must be array)");
                            console.trace();
                            return;
                        }
                        for (i = 0; i < params.files.length; i++) {
                            if (!EncodingClass.type.isString(params.files[i])) {
                                console.error("invalid filename(" + i + ") type (must be string)");
                                console.trace();
                                return;
                            }
                        }
                        if (onsuccess !== undefined) {
                            if (!EncodingClass.type.isFunction(onsuccess)) onsuccess = undefined;
                        }
                        if (onsuccess === undefined) {
                            onsuccess = function () {};
                        }
                        if (onfailed !== undefined) {
                            if (!EncodingClass.type.isFunction(onfailed)) onfailed = undefined;
                        }
                        if (onfailed === undefined) {
                            onfailed = function (content) {};
                        }
                        core.delete(local, params.index, params.path, params.files, onsuccess, onfailed);
                    }
                } (core, local);
                retval.mkdir = function (core, local) {
                    return function (params) {
                        var onsuccess = params.onsuccess, onfailed = params.onfailed;
                        var i;
                        if (params.index === undefined) {
                            console.error("no index");
                            console.trace();
                            return;
                        }
                        if (params.path === undefined) {
                            console.error("no path");
                            console.trace();
                            return;
                        }
                        if (!EncodingClass.type.isArray(params.path)) {
                            console.error("invalid path type (must be array)");
                            console.trace();
                            return;
                        }
                        for (i = 0; i < params.path.length; i++) {
                            if (!EncodingClass.type.isString(params.path[i])) {
                                console.error("invalid path [" + i + "] type (must be string)");
                                console.trace();
                                return;
                            }
                        }
                        if (params.foldername === undefined) {
                            console.error("no foldername");
                            console.trace();
                            return;
                        }
                        if (!EncodingClass.type.isString(params.foldername)) {
                            console.error("invalid foldername type (must be string)");
                            console.trace();
                            return;
                        }
                        if (onsuccess !== undefined) {
                            if (!EncodingClass.type.isFunction(onsuccess)) onsuccess = undefined;
                        }
                        if (onsuccess === undefined) {
                            onsuccess = function () {};
                        }
                        if (onfailed !== undefined) {
                            if (!EncodingClass.type.isFunction(onfailed)) onfailed = undefined;
                        }
                        if (onfailed === undefined) {
                            onfailed = function (content) {};
                        }
                        core.mkdir(local, params.index, params.path, params.foldername, onsuccess, onfailed);
                    }
                } (core, local);
                retval.rmdir = function (core, local) {
                    return function (params) {
                        var onsuccess = params.onsuccess, onfailed = params.onfailed;
                        var i;
                        if (params.index === undefined) {
                            console.error("no index");
                            console.trace();
                            return;
                        }
                        if (params.path === undefined) {
                            console.error("no path");
                            console.trace();
                            return;
                        }
                        if (!EncodingClass.type.isArray(params.path)) {
                            console.error("invalid path type (must be array)");
                            console.trace();
                            return;
                        }
                        for (i = 0; i < params.path.length; i++) {
                            if (!EncodingClass.type.isString(params.path[i])) {
                                console.error("invalid path [" + i + "] type (must be string)");
                                console.trace();
                                return;
                            }
                        }
                        if (params.foldername === undefined) {
                            console.error("no foldername");
                            console.trace();
                            return;
                        }
                        if (!EncodingClass.type.isString(params.foldername)) {
                            console.error("invalid foldername type (must be string)");
                            console.trace();
                            return;
                        }
                        if (onsuccess !== undefined) {
                            if (!EncodingClass.type.isFunction(onsuccess)) onsuccess = undefined;
                        }
                        if (onsuccess === undefined) {
                            onsuccess = function () {};
                        }
                        if (onfailed !== undefined) {
                            if (!EncodingClass.type.isFunction(onfailed)) onfailed = undefined;
                        }
                        if (onfailed === undefined) {
                            onfailed = function (content) {};
                        }
                        core.rmdir(local, params.index, params.path, params.foldername, onsuccess, onfailed);
                    }
                } (core, local);
                retval.logout = function (core, local) {
                    return function (params) {
                        var onsuccess = params.onsuccess, onfailed = params.onfailed;
                        if (onsuccess === undefined) {
                            onsuccess = function () {};
                        }
                        if (!EncodingClass.type.isFunction(onsuccess)) {
                            onsuccess = function () {};
                        }
                        if (onfailed === undefined) {
                            onfailed = function () {};
                        }
                        if (!EncodingClass.type.isFunction(onfailed)) {
                            onfailed = function () {};
                        }
                        core.logout(local, onsuccess, onfailed);
                    }
                } (core, local);
                if (params.mode == "inherit") {
                    local.mode = "inherit";
                }
                else if (params.mode == "token") {
                    local.mode = "token";
                }
                else {
                    local.mode = "session";
                }
                if (local.mode != "inherit") {
                    retval.reconnect = function (local) {
                        return function () {
                            if (local.status == "disconnected") local.reconnect();
                        }
                    } (local);
                }
                username = params.username;
                password = params.password;
                if (params.onsuccess !== undefined) {
                    if (EncodingClass.type.isFunction(params.onsuccess)) local.onsuccess = params.onsuccess;
                }
                if (params.onfailed !== undefined) {
                    if (EncodingClass.type.isFunction(params.onfailed)) local.onfailed = params.onfailed;
                }
                if ((local.mode != "inherit") && ((username === undefined) || (password === undefined))) {
                    console.error("no username or password");
                    console.trace();
                    return undefined;
                }
                local.reconnect = function (core, local, username, password) {
                    return function () {
                        local.status = "connecting";
                        core.connect(local, username, password);
                    }
                } (core, local, username, password);
                local.reconnect();
                return retval;
            }
        } (tcore);
        return fconnect;
    } ()
});

VaKeR 2022