greenlock.js/lib/middleware.js

55 lines
1.6 KiB
JavaScript
Raw Normal View History

2016-08-05 22:11:19 +00:00
'use strict';
2016-08-09 18:05:47 +00:00
var utils = require('./utils');
function log(debug) {
if (debug) {
var args = Array.prototype.slice.call(arguments);
args.shift();
args.unshift("[le/lib/middleware.js]");
console.log.apply(console, args);
}
}
module.exports.create = function (le) {
if (!le.challenge || !le.challenge.get) {
throw new Error("middleware requires challenge plugin with get method");
}
log(le.debug, "created middleware");
2016-08-05 22:11:19 +00:00
return function () {
var prefix = le.acmeChallengePrefix; // /.well-known/acme-challenge/:token
return function (req, res, next) {
if (0 !== req.url.indexOf(prefix)) {
2016-08-09 18:05:47 +00:00
log(le.debug, "no match, skipping middleware");
2016-08-05 22:11:19 +00:00
next();
return;
}
2016-08-09 18:05:47 +00:00
log(le.debug, "this must be tinder, 'cuz it's a match!");
var token = req.url.slice(prefix.length);
var hostname = req.hostname || (req.headers.host || '').toLowerCase().replace(/:.*/, '');
2016-08-05 22:11:19 +00:00
2016-08-09 18:05:47 +00:00
log(le.debug, "hostname", hostname, "token", token);
var copy = utils.merge({ domains: [ hostname ] }, le);
2016-08-09 18:05:47 +00:00
copy = utils.tplCopy(copy);
2016-08-05 22:11:19 +00:00
// TODO tpl copy?
2016-08-09 18:05:47 +00:00
le.challenge.get(copy, hostname, token, function (err, secret) {
if (err || !token) {
res.statusCode = 404;
res.setHeader('Content-Type', 'application/json; charset=utf-8');
res.end('{ "error": { "message": "Error: These aren\'t the tokens you\'re looking for. Move along." } }');
2016-08-05 22:11:19 +00:00
return;
}
2016-08-09 18:05:47 +00:00
res.setHeader('Content-Type', 'text/plain; charset=utf-8');
res.end(secret);
2016-08-05 22:11:19 +00:00
});
};
};
};