CliSite/index.js

325 lines
13 KiB
JavaScript
Raw Normal View History

2022-06-11 20:49:24 +02:00
"use strict";
exports.__esModule = true;
var SerAny = require('serialize-anything');
2022-06-11 19:57:41 +02:00
var http = require('http');
var express = require('express');
var app = express();
var server = http.createServer(app);
var port = process.env.PORT || 8480;
2022-06-11 20:49:24 +02:00
var fs = require('fs');
var Server = require("socket.io").Server;
var abort = require('process').abort;
var io = new Server(server);
app.get('/', function (req, res) {
2022-06-11 19:57:41 +02:00
res.sendFile(__dirname + '/index.html');
2022-06-11 20:49:24 +02:00
});
var buffer = {};
var filesystem = {};
var curdir = {};
var sessions = {};
var curdirx = {};
2022-06-11 19:57:41 +02:00
function sendbuffer(socket, bufferx) {
var bufx = bufferx[socket.id];
bufx += "\u2588";
socket.emit('buffer', bufx);
}
2022-06-11 20:49:24 +02:00
io.on('connection', function (socket) {
2022-06-11 19:57:41 +02:00
console.log('a user connected');
buffer[socket.id] = "";
filesystem[socket.id] = {};
curdir[socket.id] = filesystem[socket.id];
curdirx[socket.id] = [];
buffer[socket.id] = "Welcome to the console!\n";
buffer[socket.id] += "Type 'help' to see the available commands.\n";
buffer[socket.id] += "#";
sendbuffer(socket, buffer);
2022-06-11 20:49:24 +02:00
socket.on('keypress', function (data) {
2022-06-11 19:57:41 +02:00
console.log('a key was pressed');
var key = String.fromCharCode(data);
key = key.toLowerCase();
console.log(data);
2022-06-11 20:49:24 +02:00
if (data == 8) {
2022-06-11 19:57:41 +02:00
var lines = buffer[socket.id].split("\n");
if (lines[lines.length - 1] != "#") {
lines[lines.length - 1] = lines[lines.length - 1].slice(0, -1);
buffer[socket.id] = lines.join("\n");
}
}
2022-06-11 20:49:24 +02:00
else if (data == 13) {
var lines_1 = buffer[socket.id].split('\n');
var command = lines_1[lines_1.length - 1];
2022-06-11 19:57:41 +02:00
command = command.substring(1);
command = command.substring(command.indexOf('\n'), command.length);
2022-06-11 20:49:24 +02:00
var args = command.split(' ');
var commandName = args[0];
var commandArgs = args.slice(1);
commandArgs = commandArgs.map(function (arg) {
2022-06-11 19:57:41 +02:00
return arg.trim();
});
buffer[socket.id] += "\n";
console.log("Executing command: \"" + commandName + "\" with arguments: \"" + commandArgs + "\"");
resolveCommand(commandName, socket, commandArgs);
}
2022-06-11 20:49:24 +02:00
else {
2022-06-11 19:57:41 +02:00
buffer[socket.id] += key;
}
sendbuffer(socket, buffer);
});
});
2022-06-11 20:49:24 +02:00
io.on('disconnect', function (socket) {
2022-06-11 19:57:41 +02:00
console.log('user disconnected');
buffer[socket.id] = "";
});
function resolveCommand(commandname, socket, args) {
switch (commandname) {
case "help":
buffer[socket.id] += "Available commands:\n";
buffer[socket.id] += "help - shows this help\n";
buffer[socket.id] += "clear - clears the console\n";
buffer[socket.id] += "exit - exits the console\n";
buffer[socket.id] += "ls - lists the files in the current directory\n";
buffer[socket.id] += "cd - changes the current directory\n";
buffer[socket.id] += "echo - prints the arguments\n";
buffer[socket.id] += "mkdir - creates a new directory\n";
buffer[socket.id] += "cat - prints the contents of a file\n";
buffer[socket.id] += "touch - creates a new file\n";
buffer[socket.id] += "rm - removes a file\n";
buffer[socket.id] += "mv - moves a file\n";
buffer[socket.id] += "cp - copies a file\n";
buffer[socket.id] += "rmdir - removes a directory\n";
buffer[socket.id] += "spam - spams the console\n";
buffer[socket.id] += "write - writes the arguments to a file\n";
buffer[socket.id] += "screenshot - takes a screenshot\n";
break;
case "savesess":
if (args.length == 2) {
if (args[0] == "kryptic") {
sessions[args[1]] = [];
sessions[args[1]]["buffer"] = buffer[socket.id].slice();
sessions[args[1]]["filesystem"] = JSON.parse(JSON.stringify(filesystem[socket.id]));
sessions[args[1]]["curdir"] = JSON.parse(JSON.stringify(curdir[socket.id]));
2022-06-11 20:49:24 +02:00
var data = SerAny.serialize(sessions);
2022-06-11 19:57:41 +02:00
fs.writeFileSync("./sessions.json", data);
buffer[socket.id] += "Session saved.\n";
}
else {
buffer[socket.id] += "Invalid command.";
}
}
else {
buffer[socket.id] += "Invalid command.";
}
break;
case "loadsess":
if (args.length == 1) {
2022-06-11 20:49:24 +02:00
sessions = SerAny.deserialize(fs.readFileSync("./sessions.json"));
if (sessions[args[0]] != undefined) {
2022-06-11 19:57:41 +02:00
filesystem[socket.id] = sessions[args[0]]["filesystem"];
curdir[socket.id] = sessions[args[0]]["curdir"];
buffer[socket.id] = sessions[args[0]]["buffer"];
buffer[socket.id] += "Session loaded.\n";
}
}
else {
}
break;
case "wee":
buffer[socket.id] += "woo\n";
break;
case "woo":
buffer[socket.id] += "wee\n";
break;
case "screenshot":
curdir[socket.id][args[0]] = buffer[socket.id];
buffer[socket.id] += "Screenshot saved to " + args[0] + "\n";
break;
case "rm":
if (curdir[socket.id][args[0]] != undefined) {
if (typeof curdir[socket.id][args[0]] == "string") {
delete curdir[socket.id][args[0]];
buffer[socket.id] += "File " + args[0] + " removed\n";
}
else {
buffer[socket.id] += "Error: " + args[0] + " is not a file\n";
}
}
else {
buffer[socket.id] += "Error: " + args[0] + " does not exist\n";
}
break;
case "mv":
if (curdir[socket.id][args[0]] != undefined) {
if (typeof curdir[socket.id][args[0]] == "string") {
curdir[socket.id][args[1]] = curdir[socket.id][args[0]];
delete curdir[socket.id][args[0]];
buffer[socket.id] += "File " + args[0] + " moved to " + args[1] + "\n";
}
else {
buffer[socket.id] += "Error: " + args[0] + " is not a file\n";
}
}
else {
buffer[socket.id] += "Error: " + args[0] + " does not exist\n";
}
break;
case "cp":
if (curdir[socket.id][args[0]] != undefined) {
if (typeof curdir[socket.id][args[0]] == "string") {
curdir[socket.id][args[1]] = curdir[socket.id][args[0]].slice(0);
buffer[socket.id] += "File " + args[0] + " copied to " + args[1] + "\n";
}
else {
buffer[socket.id] += "Error: " + args[0] + " is not a file\n";
}
}
else {
buffer[socket.id] += "Error: " + args[0] + " does not exist\n";
}
break;
case "rmdir":
if (curdir[socket.id][args[0]] != undefined) {
if (typeof curdir[socket.id][args[0]] == "object") {
delete curdir[socket.id][args[0]];
buffer[socket.id] += "Directory " + args[0] + " removed\n";
}
else {
buffer[socket.id] += "Error: " + args[0] + " is not a directory\n";
}
}
else {
buffer[socket.id] += "Error: " + args[0] + " does not exist\n";
}
break;
case "spam":
2022-06-11 20:49:24 +02:00
for (var i = 0; i < parseInt(args[0]); i++) {
2022-06-11 19:57:41 +02:00
buffer[socket.id] += args.slice(1).join(" ") + "\n";
}
break;
case "touch":
if (args.length == 0) {
buffer[socket.id] += "touch: missing operand\n";
}
else {
2022-06-11 20:49:24 +02:00
curdir[socket.id][args[0]] = "";
2022-06-11 19:57:41 +02:00
}
break;
case "write":
if (args.length == 0) {
buffer[socket.id] += "write: missing operand\n";
}
else {
2022-06-11 20:49:24 +02:00
curdir[socket.id][args[0]] = "";
for (var i = 1; i < args.length; i++) {
curdir[socket.id][args[0]] += args[i] + " ";
2022-06-11 19:57:41 +02:00
}
2022-06-11 20:49:24 +02:00
}
2022-06-11 19:57:41 +02:00
break;
case "cat":
if (args.length == 0) {
buffer[socket.id] += "cat: missing operand\n";
}
else {
2022-06-11 20:49:24 +02:00
var file = args[0];
2022-06-11 19:57:41 +02:00
if (curdir[socket.id][file] == undefined) {
buffer[socket.id] += "cat: " + file + ": No such file or directory\n";
}
2022-06-11 20:49:24 +02:00
else if (typeof curdir[socket.id][file] == "string") {
2022-06-11 19:57:41 +02:00
buffer[socket.id] += curdir[socket.id][file] + "\n";
}
2022-06-11 20:49:24 +02:00
else {
2022-06-11 19:57:41 +02:00
buffer[socket.id] += "cat: " + file + ": Is not a file\n";
}
}
break;
case "echo":
buffer[socket.id] += args.join(' ');
buffer[socket.id] += "\n";
break;
case "clear":
buffer[socket.id] = "";
break;
case "exit":
buffer[socket.id] = "";
buffer[socket.id] += "Bye!\n";
socket.disconnect();
break;
case "ls":
buffer[socket.id] += "Files in the current directory:\n";
for (var key in curdir[socket.id]) {
if (typeof curdir[socket.id][key] == "string") {
buffer[socket.id] += key + " (file)\n";
}
else if (typeof curdir[socket.id][key] == "object") {
buffer[socket.id] += key + " (directory)\n";
}
else {
buffer[socket.id] += key + " (unknown)\n";
}
}
break;
case "cd":
if (args.length == 0) {
buffer[socket.id] += "Please specify a directory.\n";
}
else {
2022-06-11 20:49:24 +02:00
if (args[0] == "..") {
2022-06-11 19:57:41 +02:00
if (curdirx[socket.id].length > 0) {
2022-06-11 20:49:24 +02:00
var sync = "filesystem[socket.id]";
for (var i = 0; i < curdirx[socket.id].length; i++) {
2022-06-11 19:57:41 +02:00
sync += "['" + curdirx[socket.id][i] + "']";
}
2022-06-11 20:49:24 +02:00
sync += " = curdir[socket.id];";
console.log(sync);
eval(sync);
2022-06-11 19:57:41 +02:00
curdirx[socket.id].pop();
2022-06-11 20:49:24 +02:00
var cmdexec = "curdir[socket.id] = filesystem[socket.id]";
for (var i = 0; i < curdirx[socket.id].length; i++) {
2022-06-11 19:57:41 +02:00
cmdexec += "[(curdirx[socket.id][" + i + "])]";
}
2022-06-11 20:49:24 +02:00
eval(cmdexec);
}
2022-06-11 19:57:41 +02:00
}
else {
if (curdir[socket.id][args[0]] != undefined) {
if (typeof curdir[socket.id][args[0]] == "object") {
curdir[socket.id] = curdir[socket.id][args[0]];
buffer[socket.id] += "Changed directory to " + args[0] + "\n";
curdirx[socket.id].push(args[0]);
}
2022-06-11 20:49:24 +02:00
else {
2022-06-11 19:57:41 +02:00
buffer[socket.id] += "cd: " + args[0] + ": Is not a directory\n";
}
}
else {
buffer[socket.id] += "Directory " + args[0] + " does not exist.\n";
}
}
}
break;
case "pwd":
var curdirasstring = curdirx[socket.id].join("/");
buffer[socket.id] += "Current directory: " + curdirasstring + "\n";
break;
case "mkdir":
if (args.length == 0) {
buffer[socket.id] += "Please specify a directory.\n";
}
else {
2022-06-11 20:49:24 +02:00
if (curdir[socket.id][args[0]]) {
2022-06-11 19:57:41 +02:00
buffer[socket.id] += "Directory " + args[0] + " already exists.\n";
}
else {
curdir[socket.id][args[0]] = {};
buffer[socket.id] += "Created directory " + args[0] + "\n";
}
}
break;
default:
buffer[socket.id] += "Invalid command.\n";
}
buffer[socket.id] += "#";
}
2022-06-11 20:49:24 +02:00
server.listen(port, function () {
2022-06-11 19:57:41 +02:00
console.log('Server listening at port %d', port);
2022-06-11 20:49:24 +02:00
});
//# sourceMappingURL=index.js.map