157 lines
4.6 KiB
JavaScript
157 lines
4.6 KiB
JavaScript
import { Terminal } from 'xterm';
|
|
import { AttachAddon } from 'xterm-addon-attach';
|
|
import { FitAddon } from 'xterm-addon-fit';
|
|
import { SearchAddon } from 'xterm-addon-search';
|
|
import 'console.js';
|
|
|
|
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;
|
|
socket.close();
|
|
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();
|
|
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();
|