diff --git a/README.md b/README.md index f43425f..04fbc1d 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ # le-challenge-webroot -A fs-based strategy for node-letsencrypt for setting, retrieving, +An fs-based strategy for node-letsencrypt for setting, retrieving, and clearing ACME challenges issued by the ACME server This places the acme challenge in an appropriate directory in the specified `webrootPath` @@ -31,7 +31,9 @@ Usage ```bash var leChallenge = require('le-challenge-fs').create({ - webrootPath: '~/letsencrypt/srv/www/:hostname/.well-known/acme-challenge' + webrootPath: '~/letsencrypt/srv/www/:hostname/.well-known/acme-challenge' // defaults to os.tmpdir() +, loopbackPort: 5001 // defaults to 80 +, loopbackTimeout: 3000 // defaults to 3000ms , debug: false }); diff --git a/index.js b/index.js index 5d29e77..f82cb32 100644 --- a/index.js +++ b/index.js @@ -6,6 +6,7 @@ var path = require('path'); var myDefaults = { //webrootPath: [ '~', 'letsencrypt', 'var', 'lib' ].join(path.sep) webrootPath: path.join(require('os').tmpdir(), 'acme-challenge') +, loopbackTimeout: 5 * 1000 , debug: false }; @@ -69,7 +70,7 @@ Challenge.remove = function (defaults, domain, key, done) { }; Challenge.loopback = function (defaults, domain, key, done) { - var hostname = domain + (defaults.test ? ':' + defaults.test : ''); + var hostname = domain + (defaults.loopbackPort ? ':' + defaults.loopbackPort : ''); var urlstr = 'http://' + hostname + '/.well-known/acme-challenge/' + key; require('http').get(urlstr, function (res) { @@ -85,6 +86,8 @@ Challenge.loopback = function (defaults, domain, key, done) { var str = Buffer.concat(chunks).toString('utf8').trim(); done(null, str); }); + }).setTimeout(defaults.loopbackTimeout, function () { + done(new Error("loopback timeout, could not reach server")); }).on('error', function (err) { done(err); }); @@ -97,8 +100,7 @@ Challenge.test = function (args, domain, challenge, keyAuthorization, done) { me.set(args, domain, challenge, key, function (err) { if (err) { done(err); return; } - // test is actually the port to be used - myDefaults.test = args.test; + myDefaults.loopbackPort = args.loopbackPort; myDefaults.webrootPath = args.webrootPath; me.loopback(args, domain, challenge, function (err, _key) { if (err) { done(err); return; } diff --git a/test.js b/test.js index 03a0354..79a768c 100644 --- a/test.js +++ b/test.js @@ -59,7 +59,8 @@ function loopbackTest() { var port = server.address().port; opts.webrootPath = webrootPath; - opts.test = port; + opts.loopbackPort = port; + opts.loopbackTimeout = 500; challenge.test(opts, 'localhost', 'foo', 'bar', function (err) { server.close(); if (err) { console.error(err.stack); return; }