This commit is contained in:
AJ ONeal 2016-08-09 23:20:19 -04:00
parent b7a7780136
commit 10b107d5d5
4 changed files with 153 additions and 2 deletions

View File

@ -1,2 +1,54 @@
# le-challenge-manual [![Join the chat at https://gitter.im/Daplie/letsencrypt-express](https://badges.gitter.im/Daplie/letsencrypt-express.svg)](https://gitter.im/Daplie/letsencrypt-express?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
A cli-based strategy for node-letsencrypt. Prints the ACME challenge Token and Key and then waits for you to hit enter before continuing.
| [letsencrypt](https://github.com/Daplie/node-letsencrypt) (library)
| [letsencrypt-cli](https://github.com/Daplie/letsencrypt-cli)
| [letsencrypt-express](https://github.com/Daplie/letsencrypt-express)
| [letsencrypt-koa](https://github.com/Daplie/letsencrypt-koa)
| [letsencrypt-hapi](https://github.com/Daplie/letsencrypt-hapi)
|
le-challenge-manual
===================
A manual cli-based strategy for node-letsencrypt.
Prints the ACME challenge Token and Key and then waits for you to hit enter before continuing.
Install
-------
```bash
npm install --save le-challenge-manual@2.x
```
Usage
-----
```bash
var leChallenge = require('le-challenge-manual').create({
, debug: false
});
var LE = require('letsencrypt');
LE.create({
server: LE.stagingServerUrl
, challenge: leChallenge
});
```
NOTE: If you request a certificate with 6 domains listed,
it will require 6 individual challenges.
Exposed Methods
---------------
For ACME Challenge:
* `set(opts, domain, key, val, done)`
* `get(defaults, domain, key, done)`
* `remove(defaults, domain, key, done)`
For node-letsencrypt internals:
* `getOptions()` returns the internal defaults merged with the user-supplied options

50
index.js Normal file
View File

@ -0,0 +1,50 @@
'use strict';
var Challenge = module.exports;
Challenge.create = function (defaults) {
return {
getOptions: function () {
return defaults;
}
, set: Challenge.set
, get: Challenge.get
, remove: Challenge.remove
};
};
// Show the user the token and key and wait for them to be ready to continue
Challenge.set = function (args, domain, token, secret, cb) {
console.info("");
console.info("Challenge for '" + domain + "'");
console.info("");
console.info("We now present (for you copy-and-paste pleasure) your ACME Challenge");
console.info("public Token and secret Key, in that order, respectively:");
console.info(token);
console.info(secret);
console.info("");
console.info(JSON.stringify({
domain: domain
, token: token
, key: secret
}, null, ' ').replace(/^/gm, '\t'));
console.info("");
console.info("hit enter to continue...");
process.stdin.resume();
process.stdin.on('data', function () {
process.stdin.pause();
cb(null);
});
};
// nothing to do here, that's why it's manual
Challenge.get = function (args, domain, token, cb) {
cb(null);
};
// might as well tell the user that whatever they were setting up has been checked
Challenge.remove = function (args, domain, token, cb) {
console.info("Challenge for '" + domain + "' complete.");
console.info("");
cb(null);
};

29
package.json Normal file
View File

@ -0,0 +1,29 @@
{
"name": "le-challenge-manual",
"version": "2.0.0",
"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",
"scripts": {
"test": "node test.js"
},
"repository": {
"type": "git",
"url": "git+https://github.com/Daplie/le-challenge-manual.git"
},
"keywords": [
"le-challenge",
"le-challenge-",
"manual",
"acme",
"letsencrypt",
"certbot",
"cli",
"commandline"
],
"author": "AJ ONeal <coolaj86@gmail.com> (https://coolaj86.com/)",
"license": "(MIT OR Apache-2.0)",
"bugs": {
"url": "https://github.com/Daplie/le-challenge-manual/issues"
},
"homepage": "https://github.com/Daplie/le-challenge-manual#readme"
}

20
test.js Normal file
View File

@ -0,0 +1,20 @@
'use strict';
var challenge = require('./').create({});
var opts = challenge.getOptions();
var domain = 'example.com';
var token = 'token-id';
var key = 'secret-key';
// this will cause the prompt to appear
challenge.set(opts, domain, token, key, function (err) {
// if there's an error, there's a problem
if (err) {
throw err;
}
// this will cause the final completion message to appear
challenge.remove(opts, domain, token, function () {
});
});