import { Terminal } from 'xterm'; import { AttachAddon } from 'xterm-addon-attach'; import { FitAddon } from 'xterm-addon-fit'; import { SearchAddon } from 'xterm-addon-search'; function main() { const urlParams = new URLSearchParams(window.location.search); const token = urlParams.get('token'); if(token==null) { alert("You need a token to use this."); return; } const host = `${window.location.hostname}`; var server = window.location.hash.replace('#', ''); var serverselect = document.getElementById('serverselect') var serverlabel = document.getElementById('server'); var socket; var term = new Terminal(); const fitAddon = new FitAddon(); const searchAddon = new SearchAddon(); term.loadAddon(fitAddon); term.loadAddon(searchAddon); fitAddon.fit(); serverlabel.innerText = server; getServers(token, host).then(servers => { if(servers==null) { alert("Invalid token"); return; } servers.forEach(element => { let opt = document.createElement('option'); opt.text = element; serverselect.add(opt); }); if(server == "") { server = serverselect.options[0].value; window.location.hash = serverselect.value; } serverselect.value = server; console.log(server, servers, servers.includes(server)); if(servers.includes(server)) { term.open(document.getElementById('terminal')); try { socket = new WebSocket(`wss://${host}/server/${server}/logs?token=${token}`); const attachAddon = new AttachAddon(socket); term.loadAddon(attachAddon); } catch(err) { alert("You are not allowed to use this server"); return; } } }); serverselect.addEventListener("click", (event) => { console.log(serverselect.value); window.location.hash = serverselect.value; server = serverselect.value; socket.close(); try { socket = new WebSocket(`wss://${host}/server/${server}/logs?token=${token}`); const attachAddon = new AttachAddon(socket); term.loadAddon(attachAddon); } catch(err) { alert("You are not allowed to use this server"); return; } //location.reload(); }) window.onbeforeunload = function() { socket.close(); console.log("Closing"); alert("Closing"); } const start = document.getElementById('start'); const stop = document.getElementById('stop'); const send = document.getElementById('send'); start.addEventListener('click', async _ => { try { const response = await fetch(`https://${host}/server/${server}/start?token=${token}`, { method: 'post', body: { // Your body } }); console.log('Completed!', response); if(await response.status==401) { alert("You are not allowed to start this server"); return } socket.close(); try { socket = new WebSocket(`wss://${host}/server/${server}/logs?token=${token}`); const attachAddon = new AttachAddon(socket); term.loadAddon(attachAddon); } catch(err) { alert("You are not allowed to use this server"); return; } //location.reload(); } catch(err) { console.error(`Error: ${err}`); } }); stop.addEventListener('click', async _ => { try { const response = await fetch(`https://${host}/server/${server}/stop?token=${token}`, { method: 'post', body: { // Your body } }); console.log('Completed!', response); if(await response.status==401) { alert("You are not allowed to stop this server"); return } } catch(err) { console.error(`Error: ${err}`); } socket.close(); }); send.onsubmit = async (e) => { e.preventDefault(); let formdata = new FormData(send); let command = btoa(formdata.get('send')); console.log(command); //let command = btoa('say hello') try { let response = await fetch(`https://${host}/server/${server}/command/${command}?token=${token}`, { method: 'POST' }); if(await response.status==401) { alert("You are not allowed to send commands to this server"); return } } catch(err) { console.error(`Error: ${err}`); } }; } async function getServers(token, host) { try { console.log(`https://${host}/user/servers?token=${token}`); let response = await fetch(`https://${host}/user/servers?token=${token}`, { method: 'GET' }); if(response.ok) return JSON.parse(await response.json()); else return null; } catch(err) { console.error(`Error: ${err}`); } } window.onload = main();