From 0071264d39e10a1815626c3d2ab4829b4fc1998a Mon Sep 17 00:00:00 2001 From: AJ ONeal Date: Fri, 12 Aug 2016 04:19:22 -0400 Subject: [PATCH] time to go nani nani... tired --- README.md | 11 ++----- master.js | 73 +++++++++++++++++++++++++++++++++++++++++++ package.json | 4 +-- worker.js | 87 ---------------------------------------------------- 4 files changed, 78 insertions(+), 97 deletions(-) delete mode 100644 worker.js diff --git a/README.md b/README.md index 24771e4..738b6b3 100644 --- a/README.md +++ b/README.md @@ -1,18 +1,13 @@ -letsencrypt-cluster +letsencrypt-express =================== -Use automatic letsencrypt with node on multiple cores or even multiple machines. - -* Take advantage of multi-core computing -* Process certificates in master -* Serve https from multiple workers -* Can work with any clustering strategy [#1](https://github.com/Daplie/letsencrypt-cluster/issues/1) +Use automatic letsencrypt with express and other node http frameworks. Install ======= ```bash -npm install --save letsencrypt-cluster@2.x +npm install --save letsencrypt-express@2.x ``` Usage diff --git a/master.js b/master.js index 05f594b..95cf321 100644 --- a/master.js +++ b/master.js @@ -87,5 +87,78 @@ module.exports.create = function (opts) { }); }; + return opts; +}; + +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; + } + + var err = new Error("___MESSAGE___"); + process.send({ type: 'LE_REQUEST', domain: domain, options: results.options, certs: results.certs }); + + process.on('message', function (msg) { + 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 = require('localhost.daplie.com-certificates').merge({ 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('letsencrypt/lib/middleware').create(opts); + + + return opts; }; diff --git a/package.json b/package.json index b2a0838..11fdf55 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { - "name": "letsencrypt-cluster", + "name": "letsencrypt-express", "version": "2.0.0", - "description": "Use automatic letsencrypt (free ssl certs) on multiple cores or even multiple machines", + "description": "Use automatic letsencrypt (free ssl certs) with node http frameworks such as express", "main": "index.js", "directories": { "example": "examples" diff --git a/worker.js b/worker.js deleted file mode 100644 index 73b9732..0000000 --- a/worker.js +++ /dev/null @@ -1,87 +0,0 @@ -'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; - } - - var err = new Error("___MESSAGE___"); - process.send({ type: 'LE_REQUEST', domain: domain, options: results.options, certs: results.certs }); - - process.on('message', function (msg) { - 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 = require('localhost.daplie.com-certificates').merge({ 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('letsencrypt/lib/middleware').create(opts); - - - - return opts; -};