v3.0.1: Doc and code updates
This commit is contained in:
parent
bda3a62e28
commit
ef562d2984
24
README.md
24
README.md
|
@ -1,18 +1,20 @@
|
|||
| [Greenlock](https://git.coolaj86.com/coolaj86/greenlock.js) (library)
|
||||
| [Greenlock CLI](https://git.coolaj86.com/coolaj86/greenlock-cli.js)
|
||||
| [greenlock-express](https://git.coolaj86.com/coolaj86/greenlock-express.js)
|
||||
| [greenlock-koa](https://git.coolaj86.com/coolaj86/greenlock-koa.js)
|
||||
| [greenlock-hapi](https://git.coolaj86.com/coolaj86/greenlock-hapi.js)
|
||||
|
|
||||
# [le-challenge-manual](https://git.coolaj86.com/coolaj86/le-challenge-manual.js.git)
|
||||
|
||||
le-challenge-manual
|
||||
===================
|
||||
| A [Root](https://rootprojects.org) Project |
|
||||
|
||||
A [Root](https://rootprojects.org) Project
|
||||
An extremely simple reference implementation
|
||||
of an ACME (Let's Encrypt) challenge strategy
|
||||
for [Greenlock](https://git.coolaj86.com/coolaj86/greenlock-express.js) v2.7+ (and v3).
|
||||
|
||||
A manual cli-based strategy for [Greenlock](https://git.coolaj86.com/coolaj86/greenlock-express.js) v2.7+ (and v3).
|
||||
* Prints the ACME challenge details to the terminal (and waits for you to hit enter before continuing)
|
||||
* Asks you to enter the change response.
|
||||
* Let's you know it's safeto remove the challenge.
|
||||
|
||||
Prints the ACME challenge Token and Key and then waits for you to hit enter before continuing.
|
||||
Other ACME Challenge Reference Implementations:
|
||||
|
||||
* [le-challenge-manual](https://git.coolaj86.com/coolaj86/le-challenge-manual.js.git)
|
||||
* [le-challenge-http](https://git.coolaj86.com/coolaj86/le-challenge-http.js.git)
|
||||
* [le-challenge-dns](https://git.coolaj86.com/coolaj86/le-challenge-dns.js.git)
|
||||
|
||||
Install
|
||||
-------
|
||||
|
|
42
index.js
42
index.js
|
@ -49,11 +49,11 @@ Challenge.create = function (config) {
|
|||
challenger.get = function (opts) {
|
||||
var ch = opts.challenge;
|
||||
if ('http-01' === ch.type) {
|
||||
return Challenge._getHttp(opts);
|
||||
return Challenge._get(opts);
|
||||
} else if ('dns-01' === ch.type) {
|
||||
return Challenge._getDns(opts);
|
||||
return Challenge._get(opts);
|
||||
} else {
|
||||
return Challenge._getAny(opts);
|
||||
return Challenge._get(opts);
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -79,18 +79,19 @@ Challenge._setHttp = function (args, cb) {
|
|||
// TODO let acme-v2 handle generating this url
|
||||
console.info('\tURL: http://' + ch.altname + '/.well-known/acme-challenge/' + ch.token);
|
||||
console.info("");
|
||||
if (args.debug) {
|
||||
console.info("And, if you need additional information for debugging:");
|
||||
console.info("");
|
||||
console.info(JSON.stringify(httpChallengeToJson(ch), null, 2).replace(/^/gm, '\t'));
|
||||
console.info("");
|
||||
}
|
||||
console.info("This message won't self-destruct, but you may press hit the any as soon as you're ready to continue...");
|
||||
console.info("");
|
||||
console.info("[Press the ANY key to continue...]");
|
||||
|
||||
process.stdin.resume();
|
||||
process.stdin.once('data', function () {
|
||||
process.stdin.pause();
|
||||
cb(null);
|
||||
cb(null, null);
|
||||
});
|
||||
};
|
||||
|
||||
|
@ -104,16 +105,19 @@ Challenge._setDns = function (args, cb) {
|
|||
console.info("");
|
||||
console.info(ch.dnsHost + "\tTXT\t" + ch.dnsKeyAuthorization + "\tTTL 60");
|
||||
console.info("");
|
||||
console.info("Next, wait, no... there is no next. That's it - but here's some stuff anyway:");
|
||||
console.info("Next, wait, no... there is no next.");
|
||||
if (args.debug) {
|
||||
console.log("Oh, did you want this?");
|
||||
console.info("");
|
||||
console.info(JSON.stringify(dnsChallengeToJson(ch), null, 2).replace(/^/gm, '\t'));
|
||||
console.info("");
|
||||
}
|
||||
console.info("[Press the ANY key to continue...]");
|
||||
|
||||
process.stdin.resume();
|
||||
process.stdin.once('data', function () {
|
||||
process.stdin.pause();
|
||||
cb(null);
|
||||
cb(null, null);
|
||||
});
|
||||
};
|
||||
|
||||
|
@ -128,9 +132,9 @@ Challenge._setAny = function (args, cb) {
|
|||
console.info("[Press the ANY key to continue...]");
|
||||
|
||||
process.stdin.resume();
|
||||
process.stdin.on('data', function () {
|
||||
process.stdin.once('data', function () {
|
||||
process.stdin.pause();
|
||||
cb(null);
|
||||
cb(null, null);
|
||||
});
|
||||
};
|
||||
|
||||
|
@ -169,29 +173,37 @@ Challenge._removeAny = function (args) {
|
|||
};
|
||||
|
||||
// nothing to do here, that's why it's manual
|
||||
Challenge._get = function (args, cb) {
|
||||
Challenge._get = function (args) {
|
||||
var ch = args.challenge;
|
||||
|
||||
if (!Challenge._getCache[ch.altname + ':' + ch.token]) {
|
||||
Challenge._getCache[ch.altname + ':' + ch.token] = true;
|
||||
console.info("");
|
||||
console.info("Woah! Hey, guess what!? That's right you guessed it:");
|
||||
console.info('GET http://' + ch.altname + '/.well-known/acme-challenge/' + ch.token);
|
||||
console.info("It's time to painstakingly type out the ACME challenge response with your bear hands. Yes. Your bear hands.");
|
||||
process.stdout.write("> ");
|
||||
}
|
||||
|
||||
// Using a promise here just to show that Promises are support
|
||||
// (in fact, they're the default)
|
||||
return new Promise(function (resolve, reject) {
|
||||
process.stdin.resume();
|
||||
process.stdin.on('error', reject);
|
||||
process.stdin.on('data', function (chunk) {
|
||||
process.stdin.once('error', reject);
|
||||
process.stdin.once('data', function (chunk) {
|
||||
process.stdin.pause();
|
||||
var result = chunk.toString();
|
||||
try {
|
||||
result = JSON.parse(result);
|
||||
} catch(e) {
|
||||
args.keyAuthorization = result;
|
||||
args.challenge.keyAuthorization = result;
|
||||
result = args.challenge;
|
||||
}
|
||||
cb(null);
|
||||
resolve(result);
|
||||
});
|
||||
});
|
||||
};
|
||||
// Because the ACME server will hammer us with requests, and that's confusing during a manual test:
|
||||
Challenge._getCache = {};
|
||||
|
||||
function httpChallengeToJson(ch) {
|
||||
return {
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "le-challenge-manual",
|
||||
"version": "3.0.0",
|
||||
"version": "3.0.1",
|
||||
"description": "A cli-based strategy for node-letsencrypt. Prints the ACME challenge Token and Key and then waits for you to hit enter before continuing.",
|
||||
"main": "index.js",
|
||||
"homepage": "https://git.coolaj86.com/coolaj86/le-challenge-manual.js",
|
||||
|
|
Loading…
Reference in New Issue