🎉 Initial commit

master
KaKi87 2021-02-06 22:54:58 +01:00
commit 6002bbb686
2 changed files with 78 additions and 0 deletions

74
index.js Normal file
View File

@ -0,0 +1,74 @@
const
{ version } = require('./package.json'),
http = require('http');
const servers = {};
module.exports = {
/**
* @function remote
* @description Create HTTP servers for remote Thornhill OS code execution
* @param Window
* @param Ouput
* @param _
* @param help
* @param portToOpen - Port for new server to listen to
* @param portToClose - Port from existing server to stop listening to
* @param closeAll - Stop all listening servers
*/
default: async ({ Window, Ouput }, _, { help, open: portToOpen, close: portToClose, closeAll }) => {
let res = '';
if(help){
return `remote v${version}`
+ `\nUsage : remote [--open <port>]`
+ `\n remote [--close <port>]`
+ `\n remote [--close-all]`;
}
if(portToOpen){
if(servers[portToOpen])
res += `Port ${portToOpen} already open.\n`;
else {
const server = http.createServer((req, res) => {
if(req.method === 'POST'){
let body = '';
req.on('data', chunk => body += chunk.toString());
req.on('end', () => {
try {
const _res = eval(body);
if(_res) res.write(_res.toString());
res.writeHead(200);
} catch(error){
res.write(error.stack);
res.writeHead(400);
}
res.end();
});
}
else {
res.writeHead(405);
res.end();
}
});
await new Promise(resolve => server.listen(portToOpen, () => resolve()));
servers[portToOpen] = server;
res += `Port ${portToOpen} open.\n`;
}
}
if(portToClose){
if(servers[portToClose]){
await new Promise(resolve => servers[portToClose].close(resolve));
delete servers[portToClose];
res += `Port ${portToClose} closed.\n`;
}
else res += `Port ${portToClose} wasn't open.\n`;
}
if(closeAll){
for(const [port, server] of Object.entries(servers)){
await new Promise(resolve => server.close(resolve));
delete servers[port];
res += `Port ${port} closed.\n`;
}
}
return res.trim();
}
};

4
package.json Normal file
View File

@ -0,0 +1,4 @@
{
"name": "@thornhill-corp/remote",
"version": "0.1.0"
}