You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
74 lines
1.6 KiB
74 lines
1.6 KiB
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; |