88 lines
2.5 KiB
JavaScript
88 lines
2.5 KiB
JavaScript
'use strict';
|
|
|
|
var http = require('http');
|
|
var https = require('https');
|
|
var express = require('express');
|
|
|
|
var middleware = module.exports.middleware = require('./middleware');
|
|
|
|
module.exports.create = function (opts) {
|
|
var httpsOptions = opts.httpsOptions || require('localhost.daplie.com-certificates');
|
|
var results = {
|
|
plainServers: []
|
|
, tlsServers: []
|
|
};
|
|
var app = express();
|
|
|
|
app.use('/', middleware(opts));
|
|
|
|
(opts.plainPorts||[]).forEach(function (plainPort) {
|
|
var plainServer = http.createServer();
|
|
plainServer.__plainPort = plainPort;
|
|
plainServer.on('request', app);
|
|
results.plainServers.push(plainServer);
|
|
});
|
|
|
|
(opts.tlsPorts||[]).forEach(function (tlsPort) {
|
|
var tlsServer = https.createServer(httpsOptions);
|
|
tlsServer.__tlsPort = tlsPort;
|
|
tlsServer.on('request', app);
|
|
results.tlsServers.push(tlsServer);
|
|
});
|
|
|
|
function onListen() {
|
|
/*jshint validthis: true*/
|
|
var server = this;
|
|
var addr = server.address();
|
|
var proto = 'honorCipherOrder' in server ? 'https' : 'http';
|
|
|
|
console.info('Listening on ' + proto + '://' + addr.address + ':' + addr.port);
|
|
}
|
|
|
|
process.nextTick(function () {
|
|
results.plainServers.forEach(function (plainServer) {
|
|
plainServer.on('error', function (err) {
|
|
plainServer.error = err;
|
|
console.warn("[HP loop] Error with plain HTTP server:");
|
|
console.warn(err.stack);
|
|
});
|
|
try {
|
|
plainServer.listen(
|
|
plainServer.__plainPort.internal || plainServer.__plainPort.port
|
|
, plainServer.__plainPort.address || '0.0.0.0'
|
|
, onListen
|
|
);
|
|
} catch(e) {
|
|
plainServer.error = e;
|
|
console.warn("[HP loop] Could not create plain HTTP listener:");
|
|
console.warn(e.stack);
|
|
}
|
|
});
|
|
results.tlsServers.forEach(function (tlsServer) {
|
|
tlsServer.on('error', function (err) {
|
|
tlsServer.error = err;
|
|
console.warn("[HP loop] Error with HTTPS server:");
|
|
console.warn(err.stack);
|
|
});
|
|
try {
|
|
tlsServer.listen(
|
|
tlsServer.__tlsPort.internal || tlsServer.__tlsPort.port
|
|
, tlsServer.__tlsPort.address || '0.0.0.0'
|
|
, onListen
|
|
);
|
|
} catch(e) {
|
|
tlsServer.error = e;
|
|
console.warn("[HP loop] Could not create HTTPS listener:");
|
|
console.warn(e.stack);
|
|
}
|
|
});
|
|
});
|
|
|
|
results.key = opts.key;
|
|
results.value = opts.value;
|
|
results.loopbackHostname = opts.loopbackHostname;
|
|
results.loopbackPrefix = opts.loopbackPrefix;
|
|
|
|
return results;
|
|
};
|