added loopback test
This commit is contained in:
parent
6cb3909677
commit
ccd525a09a
56
index.js
56
index.js
|
@ -3,7 +3,7 @@
|
|||
var fs = require('fs');
|
||||
var path = require('path');
|
||||
|
||||
var defaults = {
|
||||
var myDefaults = {
|
||||
//webrootPath: [ '~', 'letsencrypt', 'var', 'lib' ].join(path.sep)
|
||||
webrootPath: path.join(require('os').tmpdir(), 'acme-challenge')
|
||||
, debug: false
|
||||
|
@ -19,9 +19,9 @@ Challenge.create = function (options) {
|
|||
});
|
||||
results.create = undefined;
|
||||
|
||||
Object.keys(defaults).forEach(function (key) {
|
||||
Object.keys(myDefaults).forEach(function (key) {
|
||||
if ('undefined' === typeof options[key]) {
|
||||
options[key] = defaults[key];
|
||||
options[key] = myDefaults[key];
|
||||
}
|
||||
});
|
||||
results._options = options;
|
||||
|
@ -67,3 +67,53 @@ Challenge.get = function (defaults, domain, key, done) {
|
|||
Challenge.remove = function (defaults, domain, key, done) {
|
||||
fs.unlink(path.join(defaults.webrootPath, key), done);
|
||||
};
|
||||
|
||||
Challenge.loopback = function (defaults, domain, key, done) {
|
||||
var hostname = domain + (defaults.test ? ':' + defaults.test : '');
|
||||
var urlstr = 'http://' + hostname + '/.well-known/acme-challenge/' + key;
|
||||
|
||||
require('http').get(urlstr, function (res) {
|
||||
if (200 !== res.statusCode) {
|
||||
done(new Error("local loopback failed with statusCode " + res.statusCode));
|
||||
return;
|
||||
}
|
||||
var chunks = [];
|
||||
res.on('data', function (chunk) {
|
||||
chunks.push(chunk);
|
||||
});
|
||||
res.on('end', function () {
|
||||
var str = Buffer.concat(chunks).toString('utf8').trim();
|
||||
done(null, str);
|
||||
});
|
||||
}).on('error', function (err) {
|
||||
done(err);
|
||||
});
|
||||
};
|
||||
|
||||
Challenge.test = function (args, domain, challenge, keyAuthorization, done) {
|
||||
var me = this;
|
||||
var key = keyAuthorization || challenge;
|
||||
|
||||
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.webrootPath = args.webrootPath;
|
||||
me.loopback(args, domain, challenge, function (err, _key) {
|
||||
if (err) { done(err); return; }
|
||||
|
||||
if (key !== _key) {
|
||||
err = new Error("keyAuthorization [original] '" + key + "'"
|
||||
+ " did not match [result] '" + _key + "'");
|
||||
return;
|
||||
}
|
||||
|
||||
me.remove(myDefaults, domain, challenge, function (_err) {
|
||||
if (_err) { done(_err); return; }
|
||||
|
||||
done(err);
|
||||
});
|
||||
});
|
||||
});
|
||||
};
|
||||
|
|
|
@ -29,5 +29,9 @@
|
|||
"homepage": "https://github.com/Daplie/le-challenge-fs#readme",
|
||||
"dependencies": {
|
||||
"mkdirp": "^0.5.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"finalhandler": "^0.5.0",
|
||||
"serve-static": "^1.11.1"
|
||||
}
|
||||
}
|
||||
|
|
42
test.js
42
test.js
|
@ -1,6 +1,8 @@
|
|||
'use strict';
|
||||
|
||||
var challenge = require('./').create({ debug: true, webrootPath: '/tmp/acme-challenge' });
|
||||
//var httpsOptions = require('localhost.daplie.com-certificates').merge({});
|
||||
var webrootPath = '/tmp/acme-challenge';
|
||||
var challenge = require('./').create({ debug: true, webrootPath: webrootPath });
|
||||
|
||||
var opts = challenge.getOptions();
|
||||
var domain = 'example.com';
|
||||
|
@ -12,17 +14,13 @@ challenge.remove(opts, domain, token, function () {
|
|||
|
||||
challenge.set(opts, domain, token, key, function (err) {
|
||||
// if there's an error, there's a problem
|
||||
if (err) {
|
||||
throw err;
|
||||
}
|
||||
if (err) { throw err; }
|
||||
|
||||
// throw new Error("manually check /tmp/acme-challenge");
|
||||
|
||||
challenge.get(opts, domain, token, function (err, _key) {
|
||||
// if there's an error, there's a problem
|
||||
if (err) {
|
||||
throw err;
|
||||
}
|
||||
if (err) { throw err; }
|
||||
|
||||
// should retrieve the key
|
||||
if (key !== _key) {
|
||||
|
@ -31,9 +29,7 @@ challenge.remove(opts, domain, token, function () {
|
|||
|
||||
challenge.remove(opts, domain, token, function () {
|
||||
// if there's an error, there's a problem
|
||||
if (err) {
|
||||
throw err;
|
||||
}
|
||||
if (err) { throw err; }
|
||||
|
||||
challenge.get(opts, domain, token, function (err, _key) {
|
||||
// error here is okay
|
||||
|
@ -43,9 +39,33 @@ challenge.remove(opts, domain, token, function () {
|
|||
throw new Error("FAIL: should not get key");
|
||||
}
|
||||
|
||||
console.info('PASS');
|
||||
console.info('[PASS] unit test');
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
function loopbackTest() {
|
||||
var http = require('http');
|
||||
var serveStatic = require('serve-static')(webrootPath, { dotfiles: 'allow' });
|
||||
var finalhandler = require('finalhandler');
|
||||
var server = http.createServer(function (req, res) {
|
||||
req.url = req.url.replace(/^\/\.well-known\/acme-challenge\//, '/');
|
||||
serveStatic(req, res, finalhandler(req, res));
|
||||
});
|
||||
|
||||
server.listen(0, function () {
|
||||
var port = server.address().port;
|
||||
|
||||
opts.webrootPath = webrootPath;
|
||||
opts.test = port;
|
||||
challenge.test(opts, 'localhost', 'foo', 'bar', function (err) {
|
||||
server.close();
|
||||
if (err) { console.error(err.stack); return; }
|
||||
|
||||
console.info('[PASS] localhost loopback');
|
||||
});
|
||||
});
|
||||
}
|
||||
loopbackTest();
|
||||
|
|
Loading…
Reference in New Issue