updates for http-01

This commit is contained in:
AJ ONeal 2019-07-30 21:46:43 -06:00
parent 560f0eddef
commit d89e3959fd
4 changed files with 41 additions and 45 deletions

View File

@ -1,8 +1,8 @@
# [acme-dns-01-{{servicename}}.js](https://git.rootprojects.org/root/acme-dns-01-{{servicename}}.js) | a [Root](https://rootprojects.org/) project # [acme-http-01-{{servicename}}.js](https://git.rootprojects.org/root/acme-http-01-{{servicename}}.js) | a [Root](https://rootprojects.org/) project
{{ Service Title }} DNS + Let's Encrypt for Node.js - ACME dns-01 challenges w/ ACME.js and Greenlock.js {{ Service Title }} Storage + Let's Encrypt for Node.js - ACME http-01 challenges w/ ACME.js and Greenlock.js
Handles ACME dns-01 challenges. Compatible with ACME.js and Greenlock.js. Passes acme-dns-01-test. Handles ACME http-01 challenges. Compatible with ACME.js and Greenlock.js. Passes acme-http-01-test.
# Features # Features
@ -18,7 +18,7 @@ Handles ACME dns-01 challenges. Compatible with ACME.js and Greenlock.js. Passes
# Install # Install
```js ```js
npm install --save acme-dns-01-{{servicename}} npm install --save acme-http-01-{{servicename}}
``` ```
{{ Service Title }} Token: {{ Service Title }} Token:
@ -31,7 +31,7 @@ npm install --save acme-dns-01-{{servicename}}
First you create an instance with your credentials: First you create an instance with your credentials:
```js ```js
var dns01 = require('acme-dns-01-{{servicename}}').create({ var http01 = require('acme-http-01-{{servicename}}').create({
baseUrl: '{{ api url }}', // default baseUrl: '{{ api url }}', // default
token: 'xxxx' token: 'xxxx'
}); });
@ -45,9 +45,9 @@ Then you can use it with any compatible ACME library, such as Greenlock.js or AC
var Greenlock = require('greenlock-express'); var Greenlock = require('greenlock-express');
var greenlock = Greenlock.create({ var greenlock = Greenlock.create({
challenges: { challenges: {
'dns-01': dns01 'http-01': http01
// ...
} }
// ...
}); });
``` ```
@ -63,32 +63,30 @@ See the [ACME.js](https://git.rootprojects.org/root/acme-v2.js) for more details
## Build your own ## Build your own
There are only 5 methods: There are only 4 methods:
- `init(config)` - `init(config)`
- `zones(opts)`
- `set(opts)` - `set(opts)`
- `get(opts)` - `get(opts)`
- `remove(opts)` - `remove(opts)`
```js ```js
dns01 http01
.set({ .set({
identifier: { value: 'foo.example.co.uk' }, altname: 'foo.example.co.uk',
wildcard: false, token: 'xxxx'
dnsZone: 'example.co.uk', keyAuthorization: 'xxxx.yyyy'
dnsPrefix: '_acme-challenge.foo',
dnsAuthorization: 'xxx_secret_xxx'
}) })
.then(function() { .then(function() {
console.log('TXT record set'); console.log('Saved ACME key authorization file');
}) })
.catch(function() { .catch(function(err) {
console.log('Failed to set TXT record'); console.error('Failed to save ACME key authorization file');
console.error(err);
}); });
``` ```
See acme-dns-01-test for more implementation details. See acme-http-01-test for more implementation details.
# Tests # Tests
@ -105,7 +103,7 @@ See AUTHORS for contact info.
# Legal # Legal
[acme-dns-01-{{servicename}}.js](https://git.coolaj86.com/coolaj86/acme-dns-01-{{servicename}}.js) | MPL-2.0 | [Terms of Use](https://therootcompany.com/legal/#terms) | [Privacy Policy](https://therootcompany.com/legal/#privacy) [acme-http-01-{{servicename}}.js](https://git.coolaj86.com/coolaj86/acme-http-01-{{servicename}}.js) | MPL-2.0 | [Terms of Use](https://therootcompany.com/legal/#terms) | [Privacy Policy](https://therootcompany.com/legal/#privacy)
Copyright 2019 AJ ONeal Copyright 2019 AJ ONeal
Copyright 2019 The Root Group LLC Copyright 2019 The Root Group LLC

View File

@ -9,27 +9,23 @@ module.exports.create = function(config) {
request = opts.request; request = opts.request;
return null; return null;
}, },
zones: function(data) {
//console.info('List Zones', data);
throw Error('listing zones not implemented');
},
set: function(data) { set: function(data) {
var ch = data.challenge; var ch = data.challenge;
if (!ch.dnsZone) { // console.info('Add Key Auth URL', data);
// zones() is not implemented for http-01 challenges, throw Error('setting key authorization not implemented');
// but it is almost always implemented for dns-01 challenges
throw new Error('No matching zone for ' + ch.dnsHost);
}
// console.info('Add TXT', data);
throw Error('setting TXT not implemented');
}, },
remove: function(data) { remove: function(data) {
// console.info('Remove TXT', data); var ch = data.challenge;
throw Error('removing TXT not implemented'); // console.info('Remove Key Auth URL', data);
throw Error('removing key authorization not implemented');
}, },
get: function(data) { get: function(data) {
// console.info('List TXT', data); var ch = data.challenge;
throw Error('listing TXTs not implemented'); // console.info('List Key Auth URL', data);
throw Error('retrieving key authorization not implemented');
} }
}; };
}; };

View File

@ -1,7 +1,7 @@
{ {
"name": "acme-dns-01-{{servicename}}", "name": "acme-http-01-{{servicename}}",
"version": "0.0.1", "version": "0.0.1",
"description": "{{ Service Title }} + Let's Encrypt for Node.js - ACME dns-01 challenges w/ ACME.js and Greenlock.js", "description": "{{ Service Title }} + Let's Encrypt for Node.js - ACME http-01 challenges w/ ACME.js and Greenlock.js",
"main": "index.js", "main": "index.js",
"files": [ "files": [
"lib", "lib",
@ -12,12 +12,12 @@
}, },
"repository": { "repository": {
"type": "git", "type": "git",
"url": "https://git.coolaj86.com/coolaj86/acme-dns-01-{{servicename}}.js.git" "url": "https://git.coolaj86.com/coolaj86/acme-http-01-{{servicename}}.js.git"
}, },
"keywords": [ "keywords": [
"{{servicename}}", "{{servicename}}",
"dns", "storage",
"dns-01", "http-01",
"letsencrypt", "letsencrypt",
"acme", "acme",
"greenlock" "greenlock"

12
test.js
View File

@ -5,18 +5,20 @@
var tester = require('acme-challenge-test'); var tester = require('acme-challenge-test');
require('dotenv').config(); require('dotenv').config();
// Usage: node ./test.js example.com xxxxxxxxx // Usage: node ./test.js example.com username xxxxxxxxx
var zone = process.argv[2] || process.env.ZONE; var record = process.argv[2] || process.env.RECORD;
var challenger = require('./index.js').create({ var challenger = require('./index.js').create({
token: process.argv[3] || process.env.TOKEN webroot:
'/tmp/acme-tests/{domain}/.well-known/acme-challenges/' ||
process.env.WEBROOT
}); });
// The dry-run tests can pass on, literally, 'example.com' // The dry-run tests can pass on, literally, 'example.com'
// but the integration tests require that you have control over the domain // but the integration tests require that you have control over the domain
tester tester
.testZone('dns-01', zone, challenger) .testRecord('http-01', record, challenger)
.then(function() { .then(function() {
console.info('PASS', zone); console.info('PASS', record);
}) })
.catch(function(e) { .catch(function(e) {
console.error(e.message); console.error(e.message);