The base set of tests for all ACME challenge strategies (including greenlock). Any acme-challenge- plugin should be able to pass these tests.
Go to file
AJ ONeal 649a8532d9 from tabs back to spaces 2019-06-13 01:36:25 -06:00
.gitignore initial commit 2019-04-07 15:55:48 -06:00
.prettierrc v3.2.0: support zones(), separate docs 2019-06-13 01:32:52 -06:00
LICENSE add LICENSE 2019-04-07 17:55:48 -06:00
README.md from tabs back to spaces 2019-06-13 01:36:25 -06:00
example.js from tabs back to spaces 2019-06-13 01:36:25 -06:00
index.js from tabs back to spaces 2019-06-13 01:36:25 -06:00
package.json v3.2.0: support zones(), separate docs 2019-06-13 01:32:52 -06:00

README.md

acme-challenge-test | a Root project

Test harness for ACME http-01 and dns-01 challenges for Let's Encrypt Free SSL integration.

This was specificially designed for ACME.js and Greenlock.js, but will be generically useful to any ACME module.

If you are building a plugin, please let us know. We may like to co-author and help maintain and promote your module.

This package has been split in two for the purpose of keeping the documentation clear and concise.

ACME http-01

Use this for quick-and-easy, average-joe kind of stuff.

See https://git.rootprojects.org/root/acme-http-01-test.js.git

ACME dns-01

Use this for wildcards, and private and local domains.

See https://git.rootprojects.org/root/acme-dns-01-test.js.git

Reference Implementations

These are plugins that use the v2.7+ (v3) API, and pass this test harness, which you should use as a model for any plugins that you create.

You can find other implementations by searching npm for acme-http-01- and acme-dns-01-.

Starter Template

Just so you have an idea, this is typically how you'd start passing the tests:

var tester = require('acme-challenge-test');

// The dry-run tests can pass on, literally, 'example.com'
// but the integration tests require that you have control over the domain
var domain = 'example.com';

tester
  .testRecord('http-01', domain, {
    set: function(opts) {
      console.log('set opts:', opts);
      throw new Error('set not implemented');
    },

    remove: function(opts) {
      console.log('remove opts:', opts);
      throw new Error('remove not implemented');
    },

    get: function(opts) {
      console.log('get opts:', opts);
      throw new Error('get not implemented');
    }
  })
  .then(function() {
    console.info('PASS');
  });