12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- /* 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);
- };
|