Spaces:
Running
Running
| /* 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); | |
| }; | |