summaryrefslogtreecommitdiffstats
path: root/cholerab/knut/index.js
blob: e7278678711c30a9ecb12182e6347e7474f720c1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#! /usr/bin/env node

var host = '0.0.0.0';
var port = 42101;

var pipe = '/tmp/krebscode.painload.cholerab.ttycnser.' + process.env.LOGNAME;

var fs = require('fs');
var http = require('http');
var slurp = require('./src/io/slurp');
var spawn = require('child_process').spawn;

var plugs = process.argv.slice(2);

http.createServer(function (req, res) {
  return slurp(req, function (data) {
    try {
      var message = JSON.parse(data);
    } catch (exn) {
      console.error(exn.stack);
    };
    if (message) {
      plugs.forEach(function (plug) {

        var env = JSON.parse(JSON.stringify(process.env));
        Object.keys(message).forEach(function (key) {
          env[key] = message[key];
        });

        var child = spawn(__dirname + '/plugs/' + plug + '/index', [], {
          env: env
        });

        child.stdout.on('data', function (data) {
          console.log(plug, 'stdout:', data.toString());
        });

        child.stderr.on('data', function (data) {
          console.log(plug, 'stderr:', data.toString());
        });

        child.on('exit', function (code) {
          console.log(plug, 'exit:', code);
          if (code === 0) {
            res.writeHead(200, { 'Content-Length': 0 });
            res.end();
          } else {
            res.writeHead(500, { 'Content-Length': 0 });
            res.end();
          };
        });

      });
    } else {
      res.writeHead(400, 'You are made of stupid!', {
        'Content-Length': 0
      });
      res.end();
    };
  });
}).listen(port, host, function () {
  console.log('Serving HTTP on', host, 'port', port);
});