/* eslint-disable no-process-env */ /* eslint-disable no-sync */ var https = require('https'); var fs = require('fs'); var core = require('union/lib/core'); var RoutingStream = require('union/lib/routing-stream'); module.exports = function (options) { var isArray = Array.isArray(options.after); var credentials; if (!options) { throw new Error('options is required to create a server'); } function requestHandler(req, res) { var routingStream = new RoutingStream({ before: options.before, buffer: options.buffer, after: isArray && options.after.map(function (After) { return new After(); }), request: req, response: res, limit: options.limit, headers: options.headers }); routingStream.on('error', function (err) { var fn = options.onError || core.errorHandler; fn(err, routingStream, routingStream.target, function () { routingStream.target.emit('next'); }); }); req.pipe(routingStream); } var serverOptions; serverOptions = options.https; if (!serverOptions.key || !serverOptions.cert) { throw new Error( 'Both options key and cert are required.' ); } credentials = { key: fs.readFileSync(serverOptions.key), cert: fs.readFileSync(serverOptions.cert), passphrase: process.env.NODE_HTTP_SERVER_SSL_PASSPHRASE }; if (serverOptions.ca) { serverOptions.ca = !Array.isArray(serverOptions.ca) ? [serverOptions.ca] : serverOptions.ca; credentials.ca = serverOptions.ca.map(function (ca) { return fs.readFileSync(ca); }); } return https.createServer(credentials, requestHandler); };