You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
78 lines
2.5 KiB
78 lines
2.5 KiB
"use strict";
|
|
|
|
function log(debug) {
|
|
if (!debug) {
|
|
return;
|
|
}
|
|
|
|
var args = Array.prototype.slice.call(arguments);
|
|
args.shift();
|
|
args.unshift("[le/lib/core.js]");
|
|
console.log.apply(console, args);
|
|
}
|
|
|
|
module.exports.create = function(opts) {
|
|
// if another worker updates the certs,
|
|
// receive a copy from master here as well
|
|
// and update the sni cache manually
|
|
process.on("message", function(msg) {
|
|
if ("LE_RESPONSE" === msg.type && msg.certs) {
|
|
opts.sni.cacheCerts(msg.certs);
|
|
}
|
|
});
|
|
|
|
opts.sni = require("le-sni-auto").create({
|
|
renewWithin: opts.renewWithin || 10 * 24 * 60 * 60 * 1000,
|
|
renewBy: opts.renewBy || 5 * 24 * 60 * 60 * 1000,
|
|
getCertificates: function(domain, certs, cb) {
|
|
var workerOptions = { domains: [domain] };
|
|
opts.approveDomains(workerOptions, certs, function(_err, results) {
|
|
if (_err) {
|
|
cb(_err);
|
|
return;
|
|
}
|
|
|
|
process.send({ type: "LE_REQUEST", domain: domain, options: results.options, certs: results.certs });
|
|
|
|
process.on("message", function(msg) {
|
|
var err = new Error("___MESSAGE___");
|
|
|
|
log(opts.debug, "Message from master");
|
|
log(opts.debug, msg);
|
|
|
|
if (msg.domain !== domain) {
|
|
return;
|
|
}
|
|
|
|
if (msg.error) {
|
|
err.message = msg.error.message || "unknown error sent from cluster master to worker";
|
|
err.stack.replace("___MESSAGE___", err.message);
|
|
err = {
|
|
message: err.message,
|
|
stack: err.stack,
|
|
data: { options: workerOptions, certs: certs }
|
|
};
|
|
} else {
|
|
err = null;
|
|
}
|
|
|
|
cb(err, msg.certs);
|
|
});
|
|
});
|
|
}
|
|
});
|
|
|
|
opts.httpsOptions = { SNICallback: opts.sni.sniCallback };
|
|
|
|
opts.challenge = {
|
|
get:
|
|
opts.getChallenge ||
|
|
(opts.challenge && opts.challenge.get) ||
|
|
require("le-challenge-fs").create({ webrootPath: opts.webrootPath }).get
|
|
};
|
|
|
|
// opts.challenge.get, opts.acmeChallengePrefix
|
|
opts.middleware = require("greenlock/lib/middleware").create(opts);
|
|
|
|
return opts;
|
|
};
|
|
|