Skip to content

Commit

Permalink
API Bug Fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
Nathanna committed Jan 13, 2021
1 parent 502292f commit 99f6e18
Show file tree
Hide file tree
Showing 11 changed files with 49 additions and 234 deletions.
Empty file added bin/pipeboard-releaser
Empty file.
7 changes: 6 additions & 1 deletion src/libs/phpparse/index.js
@@ -1,4 +1,5 @@
const fs = require('fs');
const ncmd = require('node-cmd');

exports.parseFile = function(path, exportstring, callback) {
var exec = require('child_process').exec;
Expand All @@ -10,9 +11,13 @@ exports.parseFile = function(path, exportstring, callback) {

fs.writeFileSync(path + ".tmp.php", cont);
var cmd = 'php ' + path + ".tmp.php";

function rmthep() {
ncmd.runSync("rm -f -r " + path + ".tmp.php");
}

exec(cmd, function(error, stdout, stderr) {
callback(stdout);
fs.rmSync(path + ".tmp.php");
rmthep();
});
}
66 changes: 35 additions & 31 deletions src/system/api.js
Expand Up @@ -10,48 +10,52 @@ const execPHP = require(path.join(__dirname, '../libs/phpparse/index.js'));

const app = express();
const server = require('http').createServer(app);

app.get('*', (req, res) => {
if(req.url.startsWith("/emit")) {
let resdataarchive = req.query.data;
server.listen(81);
const io = require('socket.io')(server);

execPHP.parseFile(path.join(__dirname, '../web/api/broadcast.php'), resdataarchive, function(render) {
res.write(render);
app.get("*", (req, res) => {
if(req.url.startsWith("/emit")) {
if(req.query.title == null || req.query.data == null) {
res.end();
});
} else if(req.url.startsWith("/run")) {
let resdataarchive = {
"url": req.url,
"params": req.query
return;
}
let datapost = btoa(JSON.stringify(req.query));

let exportstring = JSON.stringify(resdataarchive);
exportstring = btoa(exportstring);

execPHP.parseFile(path.join(__dirname, '../web/api/runner.php'), exportstring, function(render) {
res.write(render);
res.end();
execPHP.parseFile(path.join(__dirname, '../web/api/broadcast.php'), datapost, function(results) {
res.send(results);
});
} else if(req.url.startsWith("/favicon.ico")) {
res.sendFile(path.join(__dirname, '../web/api/favicon.png'));
} else {
let resdataarchive = {
"url": req.url,
"params": req.query
let namespace = req.url;
if(req.url.includes("?")) {
namespace = req.url.split("?")[0];
}

let exportstring = JSON.stringify(resdataarchive);
exportstring = btoa(exportstring);
function makeeventid() {
return 'xxxx-yxxxxx-xyxxx-xxxxxy-xxxx'.replace(/[xy]/g, function(c) {
var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);
return v.toString(16);
}).toUpperCase();
}

execPHP.parseFile(path.join(__dirname, '../web/api/interface.php'), exportstring, function(render) {
res.set("Content-Type", 'application/json');
res.write(render);
res.end();
});
}
});
let sid = makeeventid();

server.listen(81);
namespace = namespace.substring(1);
namespace2 = namespace;
namespace = namespace + "?" + sid;

const io = require('socket.io')(server);
if(req.query.token !== null) {
// TODO: Check token.

console.log("Event '" + sid + "' with '" + namespace2 + "'.");
require("./eventer.js").run(namespace);
}

res.end();
}
});

io.on('connection', socket => {
socket.on("event", (arg) => {
let namespacestring = arg;
Expand Down
2 changes: 1 addition & 1 deletion src/system/eventer.js
Expand Up @@ -16,7 +16,7 @@ function examplecallback(err, sid) {
"out": err.err
}
let datapost = btoa(JSON.stringify(data));
hlbrwsr.visit("http://localhost:81/emit?data=" + encodeURI(datapost), function(err, data) {
hlbrwsr.visit("http://localhost:81/emit?title=event_out&data=" + encodeURI(datapost), function(err, data) {
if(err) console.log(err);
});
}
Expand Down
2 changes: 1 addition & 1 deletion src/system/run.js
Expand Up @@ -3,7 +3,7 @@ const compose_nc = require("docker-compose-nocompose");
const path = require("path");
const eventer = require("./eventer.js");

require('./socket.js');
require('./api.js');
require('./web.js');

process.stdin.resume();
9 changes: 0 additions & 9 deletions src/system/socket.js

This file was deleted.

Empty file added src/system/web.js
Empty file.
10 changes: 6 additions & 4 deletions src/web/api/broadcast.php
@@ -1,16 +1,18 @@
<?php

$es = __EXSTRNG__;
$exs = __EXSTRNG__;

$es = json_decode(base64_decode($exs));
print_r($es);

?>
<head>
<title>Restricted API Page</title>
<title>/emit - Restricted API Page • Pipeboard</title>
</head>
<body>
<script src="/socket.io/socket.io.js"></script>
<script>
const socket = io();

socket.emit("event_out", '<?php echo $es; ?>');
socket.emit("<?php echo $es->title; ?>", '<?php echo $es->data; ?>');
</script>
</body>
Binary file added src/web/api/favicon.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
147 changes: 0 additions & 147 deletions src/web/api/interface.php
Expand Up @@ -12,153 +12,6 @@
$namespace = substr($namespace, 1);
}

// sio_message('event', $namespace);

function websocket_open($host='',$port=80,$headers='',&$error_string='',$timeout=10,$ssl=false, $persistant = false, $path = '/', $context = null){

$key=base64_encode(openssl_random_pseudo_bytes(16));

$header = "GET " . $path . " HTTP/1.1\r\n"
."Host: $host\r\n"
."pragma: no-cache\r\n"
."Upgrade: WebSocket\r\n"
."Connection: Upgrade\r\n"
."Sec-WebSocket-Key: $key\r\n"
."Sec-WebSocket-Version: 13\r\n";

if(!empty($headers)) foreach($headers as $h) $header.=$h."\r\n";

$header.="\r\n";

$host = $host ? $host : "127.0.0.1";
$port = $port <1 ? ( $ssl ? 443 : 80 ): $port;
$address = ($ssl ? 'ssl://' : '') . $host . ':' . $port;

$flags = STREAM_CLIENT_CONNECT | ( $persistant ? STREAM_CLIENT_PERSISTENT : 0 );
$ctx = $context ?? stream_context_create ();
$sp = stream_socket_client($address, $errno, $errstr, $timeout, $flags, $ctx);

if(!$sp){
$error_string = "Unable to connect to websocket server: $errstr ($errno)";
return false;
}

stream_set_timeout($sp,$timeout);

if (!$persistant or ftell($sp) === 0) {

$rc = fwrite($sp,$header);
if(!$rc){
$error_string
= "Unable to send upgrade header to websocket server: $errstr ($errno)";
return false;
}

$reaponse_header=fread($sp, 1024);

if (stripos($reaponse_header, ' 101 ') === false
|| stripos($reaponse_header, 'Sec-WebSocket-Accept: ') === false) {
$error_string = "Server did not accept to upgrade connection to websocket."
.$reaponse_header. E_USER_ERROR;
return false;
}

}
return $sp;
}

function websocket_write($sp,$data,$final=true,$binary=true){
if ($binary)
$header=chr(($final?0x80:0) | 0x02); // 0x02 binary mode
else
$header=chr(($final?0x80:0) | 0x01); // 0x01 text mode

if(strlen($data)<126) $header.=chr(0x80 | strlen($data));
elseif (strlen($data)<0xFFFF) $header.=chr(0x80 | 126) . pack("n",strlen($data));
else $header.=chr(0x80 | 127) . pack("N",0) . pack("N",strlen($data));

$mask=pack("N",rand(1,0x7FFFFFFF));
$header.=$mask;

for($i = 0; $i < strlen($data); $i++)
$data[$i]=chr(ord($data[$i]) ^ ord($mask[$i % 4]));

return fwrite($sp,$header.$data);
}

function websocket_read($sp,&$error_string=NULL){
$data="";

do{
$header=fread($sp,2);
if(!$header){
$error_string = "Reading header from websocket failed.";
return false;
}

$opcode = ord($header[0]) & 0x0F;
$final = ord($header[0]) & 0x80;
$masked = ord($header[1]) & 0x80;
$payload_len = ord($header[1]) & 0x7F;

$ext_len = 0;
if($payload_len >= 0x7E){
$ext_len = 2;
if($payload_len == 0x7F) $ext_len = 8;
$header=fread($sp,$ext_len);
if(!$header){
$error_string = "Reading header extension from websocket failed.";
return false;
}

$payload_len= 0;
for($i=0;$i<$ext_len;$i++)
$payload_len += ord($header[$i]) << ($ext_len-$i-1)*8;
}

if($masked){
$mask=fread($sp,4);
if(!$mask){
$error_string = "Reading header mask from websocket failed.";
return false;
}
}

$frame_data='';
do{
$frame= fread($sp,$payload_len);
if(!$frame){
$error_string = "Reading from websocket failed.";
return false;
}
$payload_len -= strlen($frame);
$frame_data.=$frame;
}while($payload_len>0);
if($opcode == 9){
fwrite($sp,chr(0x8A) . chr(0x80) . pack("N", rand(1,0x7FFFFFFF)));
continue;
} elseif($opcode == 8){
fclose($sp);
}elseif($opcode < 3){
$data_len=strlen($frame_data);
if($masked)
for ($i = 0; $i < $data_len; $i++)
$data.= $frame_data[$i] ^ $mask[$i % 4];
else
$data.= $frame_data;

}else
continue;

} while(!$final);

return $data;
}

if($ws = websocket_open('localhost', 81)) {
websocket_write($ws, "event");
}

echo json_encode(Array(
"status" => "ok",
"event" => $namespace,
Expand Down
40 changes: 0 additions & 40 deletions src/web/api/runner.php

This file was deleted.

0 comments on commit 99f6e18

Please sign in to comment.