74 lines
1.6 KiB
JavaScript
74 lines
1.6 KiB
JavaScript
var fs = require('fs');
|
|
|
|
var protocols = {
|
|
http : require('http'),
|
|
https : require('https')
|
|
}
|
|
|
|
var keys = {
|
|
cert : fs.readFileSync(__dirname + '/keys/ssl.cert'),
|
|
key : fs.readFileSync(__dirname + '/keys/ssl.key')
|
|
}
|
|
|
|
var helpers = {};
|
|
|
|
helpers.server = function(opts, cb) {
|
|
|
|
var defaults = {
|
|
code : 200,
|
|
headers : {'Content-Type': 'application/json'}
|
|
}
|
|
|
|
var mirror_response = function(req) {
|
|
return JSON.stringify({
|
|
headers: req.headers,
|
|
body: req.body
|
|
})
|
|
}
|
|
|
|
var get = function(what) {
|
|
if (!opts[what])
|
|
return defaults[what];
|
|
|
|
if (typeof opts[what] == 'function')
|
|
return opts[what](); // set them at runtime
|
|
else
|
|
return opts[what];
|
|
}
|
|
|
|
var finish = function(req, res) {
|
|
if (opts.handler) return opts.handler(req, res);
|
|
|
|
res.writeHead(get('code'), get('headers'));
|
|
res.end(opts.response || mirror_response(req));
|
|
}
|
|
|
|
var handler = function(req, res) {
|
|
|
|
req.setEncoding('utf8'); // get as string
|
|
req.body = '';
|
|
req.on('data', function(str) { req.body += str })
|
|
req.socket.on('error', function(e) {
|
|
// res.writeHead(500, {'Content-Type': 'text/plain'});
|
|
// res.end('Error: ' + e.message);
|
|
})
|
|
|
|
setTimeout(function(){
|
|
finish(req, res);
|
|
}, opts.wait || 0);
|
|
|
|
};
|
|
|
|
var protocol = opts.protocol || 'http';
|
|
var server;
|
|
|
|
if (protocol == 'https')
|
|
server = protocols[protocol].createServer(keys, handler);
|
|
else
|
|
server = protocols[protocol].createServer(handler);
|
|
|
|
server.listen(opts.port, cb);
|
|
return server;
|
|
}
|
|
|
|
module.exports = helpers; |