|
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- 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;
|