updates, should all work
This commit is contained in:
parent
f81ab3bd45
commit
b83b665a1e
|
@ -81,11 +81,11 @@ cli.main(function(_, options) {
|
|||
var handlers;
|
||||
|
||||
if (args.standalone) {
|
||||
handlers = require('../lib/standalone');
|
||||
handlers = require('../lib/standalone').create();
|
||||
handlers.startServers(args.http01Ports || [80], args.tlsSni01Port || [443, 5001]);
|
||||
}
|
||||
else if (args.webrootPath) {
|
||||
handlers = require('../lib/webroot');
|
||||
handlers = require('../lib/webroot').create(args);
|
||||
}
|
||||
|
||||
LE.create({}, handlers).register(args, function (err, results) {
|
||||
|
|
|
@ -1,62 +1,69 @@
|
|||
'use strict';
|
||||
|
||||
var handlers = module.exports = {
|
||||
//
|
||||
// set,get,remove challenges
|
||||
//
|
||||
_challenges: {}
|
||||
, setChallenge: function (args, key, value, cb) {
|
||||
handlers._challenges[key] = value;
|
||||
cb(null);
|
||||
}
|
||||
, getChallenge: function (args, key, cb) {
|
||||
cb(null, handlers._challenges[key]);
|
||||
}
|
||||
, removeChallenge: function (args, key, cb) {
|
||||
delete handlers._challenges[key];
|
||||
cb(null);
|
||||
}
|
||||
|
||||
, _servers: []
|
||||
, httpResponder: function (req, res) {
|
||||
var acmeChallengePrefix = '/.well-known/acme-challenge/';
|
||||
|
||||
if (0 !== req.url.indexOf(acmeChallengePrefix)) {
|
||||
res.end('Hello World!');
|
||||
return;
|
||||
var handlers = module.exports.create = function () {
|
||||
return {
|
||||
//
|
||||
// set,get,remove challenges
|
||||
//
|
||||
// Note: this is fine for a one-off CLI tool
|
||||
// but a webserver using node-cluster or multiple
|
||||
// servers should use a database of some sort
|
||||
_challenges: {}
|
||||
, setChallenge: function (args, key, value, cb) {
|
||||
handlers._challenges[key] = value;
|
||||
cb(null);
|
||||
}
|
||||
, getChallenge: function (args, key, cb) {
|
||||
// TODO keep in mind that, generally get args are just args.domains
|
||||
// and it is disconnected from the flow of setChallenge and removeChallenge
|
||||
cb(null, handlers._challenges[key]);
|
||||
}
|
||||
, removeChallenge: function (args, key, cb) {
|
||||
delete handlers._challenges[key];
|
||||
cb(null);
|
||||
}
|
||||
|
||||
var key = req.url.slice(acmeChallengePrefix.length);
|
||||
, _servers: []
|
||||
, httpResponder: function (req, res) {
|
||||
var acmeChallengePrefix = '/.well-known/acme-challenge/';
|
||||
|
||||
handlers.getChallenge(req.headers.host, key, function (err, val) {
|
||||
res.end(val || '_');
|
||||
});
|
||||
}
|
||||
, startServers: function (plainPorts, tlsPorts) {
|
||||
var httpsOptions = require('localhost.daplie.com-certificates');
|
||||
var https = require('https');
|
||||
var http = require('http');
|
||||
if (0 !== req.url.indexOf(acmeChallengePrefix)) {
|
||||
res.end('Hello World!');
|
||||
return;
|
||||
}
|
||||
|
||||
// tls-sni-01-port
|
||||
if (handlers._servers.length) {
|
||||
return;
|
||||
var key = req.url.slice(acmeChallengePrefix.length);
|
||||
|
||||
handlers.getChallenge(req.headers.host, key, function (err, val) {
|
||||
res.end(val || '_');
|
||||
});
|
||||
}
|
||||
, startServers: function (plainPorts, tlsPorts) {
|
||||
var httpsOptions = require('localhost.daplie.com-certificates');
|
||||
var https = require('https');
|
||||
var http = require('http');
|
||||
|
||||
plainPorts.forEach(function (port) {
|
||||
http.createServer(handlers.httpResponder).listen(port, function () {
|
||||
console.info('Listening http on', this.address());
|
||||
// tls-sni-01-port
|
||||
if (handlers._servers.length) {
|
||||
return;
|
||||
}
|
||||
|
||||
plainPorts.forEach(function (port) {
|
||||
http.createServer(handlers.httpResponder).listen(port, function () {
|
||||
console.info('Listening http on', this.address());
|
||||
});
|
||||
});
|
||||
});
|
||||
tlsPorts.forEach(function (port) {
|
||||
https.createServer(httpsOptions, handlers.httpResponder).listen(port, function () {
|
||||
console.info('Listening https on', this.address());
|
||||
tlsPorts.forEach(function (port) {
|
||||
https.createServer(httpsOptions, handlers.httpResponder).listen(port, function () {
|
||||
console.info('Listening https on', this.address());
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
, closeServers: function () {
|
||||
handlers._servers.forEach(function (server) {
|
||||
server.close();
|
||||
});
|
||||
handlers._servers = [];
|
||||
}
|
||||
}
|
||||
, closeServers: function () {
|
||||
handlers._servers.forEach(function (server) {
|
||||
server.close();
|
||||
});
|
||||
handlers._servers = [];
|
||||
}
|
||||
};
|
||||
};
|
||||
|
|
|
@ -0,0 +1,51 @@
|
|||
'use strict';
|
||||
|
||||
var handlers = module.exports.create = function (defaults) {
|
||||
var fs = require('fs');
|
||||
var path = require('path');
|
||||
var mkdirp = require('mkdirp');
|
||||
|
||||
return {
|
||||
//
|
||||
// set,get,remove challenges
|
||||
//
|
||||
_challenges: {}
|
||||
, setChallenge: function (args, key, value, cb) {
|
||||
mkdirp(defaults.webrootPath, function (err) {
|
||||
if (err) {
|
||||
console.error("Could not create --webroot-path '" + defaults.webrootPath + "':", err.code);
|
||||
console.error("Try checking the permissions, maybe?");
|
||||
cb(err);
|
||||
return;
|
||||
}
|
||||
|
||||
var keyfile = path.join(defaults.webrootPath, key);
|
||||
|
||||
fs.writeFile(keyfile, value, 'utf8', function (err) {
|
||||
if (err) {
|
||||
console.error("Could not write '" + keyfile + "':", err.code);
|
||||
cb(err);
|
||||
return;
|
||||
}
|
||||
|
||||
cb(null);
|
||||
});
|
||||
});
|
||||
}
|
||||
// handled as file read by web server
|
||||
// , getChallenge: function (args, key, cb) {}
|
||||
, removeChallenge: function (args, key, cb) {
|
||||
var keyfile = path.join(defaults.webrootPath, key);
|
||||
|
||||
fs.unlink(keyfile, function (err) {
|
||||
if (err) {
|
||||
console.error("Could not unlink '" + keyfile + "':", err.code);
|
||||
cb(err);
|
||||
return;
|
||||
}
|
||||
|
||||
cb(null);
|
||||
});
|
||||
}
|
||||
};
|
||||
};
|
Loading…
Reference in New Issue