2016-08-10 17:10:00 +00:00
|
|
|
'use strict';
|
|
|
|
|
2016-08-12 07:02:33 +00:00
|
|
|
// opts.approveDomains(options, certs, cb)
|
2016-08-10 17:10:00 +00:00
|
|
|
module.exports.create = function (opts) {
|
2016-08-16 01:15:16 +00:00
|
|
|
// accept all defaults for le.challenges, le.store, le.middleware
|
2018-05-10 08:15:17 +00:00
|
|
|
opts._communityPackage = 'greenlock-express.js';
|
2017-01-25 22:02:16 +00:00
|
|
|
var le = require('greenlock').create(opts);
|
2016-08-16 01:15:16 +00:00
|
|
|
|
2016-10-14 01:18:36 +00:00
|
|
|
opts.app = opts.app || function (req, res) {
|
2016-08-16 01:15:16 +00:00
|
|
|
res.end("Hello, World!\nWith Love,\nLet's Encrypt Express");
|
2016-09-14 21:07:15 +00:00
|
|
|
};
|
2016-08-16 01:15:16 +00:00
|
|
|
|
|
|
|
opts.listen = function (plainPort, port) {
|
2016-10-14 01:31:52 +00:00
|
|
|
var PromiseA;
|
|
|
|
try {
|
|
|
|
PromiseA = require('bluebird');
|
|
|
|
} catch(e) {
|
|
|
|
console.warn("Package 'bluebird' not installed. Using global.Promise instead");
|
|
|
|
console.warn("(want bluebird instead? npm install --save bluebird)");
|
|
|
|
PromiseA = global.Promise;
|
|
|
|
}
|
2016-08-16 01:15:16 +00:00
|
|
|
var promises = [];
|
|
|
|
var plainPorts = plainPort;
|
|
|
|
var ports = port;
|
|
|
|
var servers = [];
|
|
|
|
|
2016-12-21 09:13:36 +00:00
|
|
|
if (!plainPorts) {
|
2016-08-16 01:15:16 +00:00
|
|
|
plainPorts = 80;
|
2016-12-21 09:13:36 +00:00
|
|
|
}
|
|
|
|
if (!ports) {
|
2016-08-16 01:15:16 +00:00
|
|
|
ports = 443;
|
2016-08-10 17:10:00 +00:00
|
|
|
}
|
|
|
|
|
2016-08-16 01:15:16 +00:00
|
|
|
if (!Array.isArray(plainPorts)) {
|
|
|
|
plainPorts = [ plainPorts ];
|
|
|
|
ports = [ ports ];
|
|
|
|
}
|
2016-08-10 17:10:00 +00:00
|
|
|
|
2016-08-16 01:15:16 +00:00
|
|
|
plainPorts.forEach(function (p) {
|
|
|
|
promises.push(new PromiseA(function (resolve, reject) {
|
2016-08-16 17:05:41 +00:00
|
|
|
require('http').createServer(le.middleware(require('redirect-https')())).listen(p, function () {
|
|
|
|
console.log("Handling ACME challenges and redirecting to https on plain port " + p);
|
2016-08-16 01:15:16 +00:00
|
|
|
resolve();
|
|
|
|
}).on('error', reject);
|
|
|
|
}));
|
2016-08-10 17:10:00 +00:00
|
|
|
});
|
|
|
|
|
2016-08-16 01:15:16 +00:00
|
|
|
ports.forEach(function (p) {
|
|
|
|
promises.push(new PromiseA(function (resolve, reject) {
|
|
|
|
var server = require('https').createServer(le.httpsOptions, le.middleware(le.app)).listen(p, function () {
|
2016-08-16 17:05:41 +00:00
|
|
|
console.log("Handling ACME challenges and serving https " + p);
|
2016-08-16 01:15:16 +00:00
|
|
|
resolve();
|
|
|
|
}).on('error', reject);
|
|
|
|
servers.push(server);
|
|
|
|
}));
|
|
|
|
});
|
2016-08-11 07:07:20 +00:00
|
|
|
|
2016-08-16 01:15:16 +00:00
|
|
|
if (!Array.isArray(port)) {
|
|
|
|
servers = servers[0];
|
|
|
|
}
|
2016-08-10 17:10:00 +00:00
|
|
|
|
2016-08-16 01:15:16 +00:00
|
|
|
return servers;
|
2016-08-10 17:10:00 +00:00
|
|
|
};
|
|
|
|
|
2016-08-16 01:15:16 +00:00
|
|
|
|
|
|
|
return le;
|
2016-08-10 17:10:00 +00:00
|
|
|
};
|