An fs-based strategy for node-letsencrypt for setting, retrieving, and clearing ACME challenges issued by the ACME server
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.
 

75 lines
2.1 KiB

'use strict';
//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';
var token = 'token-id';
var key = 'secret-key';
challenge.remove(opts, domain, token, function () {
// ignore error, if any
challenge.set(opts, domain, token, key, function (err) {
// if there's an error, there's a problem
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; }
// should retrieve the key
if (key !== _key) {
throw new Error("FAIL: could not get key by token");
}
challenge.remove(opts, domain, token, function () {
// if there's an error, there's a problem
if (err) { throw err; }
challenge.get(opts, domain, token, function (err, _key) {
// error here is okay
// should NOT retrieve the key
if (_key) {
throw new Error("FAIL: should not get key");
}
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) {
// fail on purpose
//setTimeout(function () {
req.url = req.url.replace(/^\/\.well-known\/acme-challenge\//, '/');
serveStatic(req, res, finalhandler(req, res));
//}, 2000);
});
server.listen(0, function () {
var port = server.address().port;
opts.webrootPath = webrootPath;
opts.loopbackPort = port;
opts.loopbackTimeout = 500;
challenge.test(opts, 'localhost', 'foo', 'bar', function (err) {
server.close();
if (err) { console.error(err.stack); process.exit(1); return; }
console.info('[PASS] localhost loopback');
});
});
}
loopbackTest();