diff --git a/README.md b/README.md index a5202be..3b78172 100644 --- a/README.md +++ b/README.md @@ -23,10 +23,11 @@ In progress * Mar 20, 2018 - SUCCESS - got a test certificate (hard-coded) * Mar 21, 2018 - can now accept values (not hard coded) * Mar 21, 2018 - *mostly* matches le-acme-core.js API +* Apr 5, 2018 - completely match api for acme v1 (le-acme-core.js) Todo -* completely match api for acme v1 (le-acme-core.js) +* test wildcard * test http and dns challenges * export http and dns challenge tests * support ECDSA keys diff --git a/test.cb.js b/test.cb.js index 2484ffa..23a7874 100644 --- a/test.cb.js +++ b/test.cb.js @@ -35,7 +35,7 @@ module.exports.run = function run(web, chType, email, accountKeypair, domainKeyp console.log("Put the string '" + opts.keyAuthorization + "' into a file at '" + pathname + "'"); console.log("echo '" + opts.keyAuthorization + "' > '" + pathname + "'"); } else if ('dns-01' === opts.type) { - pathname = acme2.acmeChallengeDnsPrefix + "." + opts.hostname; + pathname = acme2.acmeChallengeDnsPrefix + "." + opts.hostname.replace(/^\*\./, ''); console.log("Put the string '" + opts.dnsAuthorization + "' into the TXT record '" + pathname + "'"); console.log("ddig TXT " + pathname + " '" + opts.dnsAuthorization + "'"); } else { diff --git a/test.js b/test.js index 12aec5c..6490e34 100644 --- a/test.js +++ b/test.js @@ -39,8 +39,8 @@ function getEmail(web, chType) { var accountKeypair = RSA.import({ privateKeyPem: require('fs').readFileSync(__dirname + '/account.privkey.pem') }); var domainKeypair = RSA.import({ privateKeyPem: require('fs').readFileSync(__dirname + '/privkey.pem') }); //require('./test.compat.js').run(web, chType, email, accountKeypair, domainKeypair); - require('./test.cb.js').run(web, chType, email, accountKeypair, domainKeypair); - //require('./test.promise.js').run(web, chType, email, accountKeypair, domainKeypair); + //require('./test.cb.js').run(web, chType, email, accountKeypair, domainKeypair); + require('./test.promise.js').run(web, chType, email, accountKeypair, domainKeypair); }); } diff --git a/test.promise.js b/test.promise.js index 4da5392..0b99aa2 100644 --- a/test.promise.js +++ b/test.promise.js @@ -1,82 +1,85 @@ 'use strict'; /* global Promise */ - -module.exports.run = function run(web, chType, email) { +module.exports.run = function run(web, chType, email, accountKeypair, domainKeypair) { var RSA = require('rsa-compat').RSA; var directoryUrl = 'https://acme-staging-v02.api.letsencrypt.org/directory'; - var acme2 = require('./compat').ACME.create({ RSA: RSA }); + var acme2 = require('./').ACME.create({ RSA: RSA }); // [ 'test.ppl.family' ] 'coolaj86@gmail.com''http-01' - console.log(web, chType, email); - return; - acme2.init(directoryUrl).then(function (body) { - console.log(body); - return; - + acme2.init(directoryUrl).then(function () { var options = { - agreeToTerms: function (tosUrl, agree) { - agree(null, tosUrl); + agreeToTerms: function (tosUrl) { + return Promise.resolve(tosUrl); } , setChallenge: function (opts) { + return new Promise(function (resolve, reject) { + var pathname; - console.log(""); - console.log('identifier:'); - console.log(opts.identifier); - console.log('hostname:'); - console.log(opts.hostname); - console.log('type:'); - console.log(opts.type); - console.log('token:'); - console.log(opts.token); - console.log('thumbprint:'); - console.log(opts.thumbprint); - console.log('keyAuthorization:'); - console.log(opts.keyAuthorization); - console.log('dnsAuthorization:'); - console.log(opts.dnsAuthorization); - console.log(""); + console.log(""); + console.log('identifier:'); + console.log(opts.identifier); + console.log('hostname:'); + console.log(opts.hostname); + console.log('type:'); + console.log(opts.type); + console.log('token:'); + console.log(opts.token); + console.log('thumbprint:'); + console.log(opts.thumbprint); + console.log('keyAuthorization:'); + console.log(opts.keyAuthorization); + console.log('dnsAuthorization:'); + console.log(opts.dnsAuthorization); + console.log(""); - console.log("Put the string '" + opts.keyAuthorization + "' into a file at '" + opts.hostname + "/" + opts.token + "'"); - console.log("\nThen hit the 'any' key to continue (must be specifically the 'any' key)..."); - - return new Promise(function (resolve) { - function onAny() { - process.stdin.pause(); - process.stdin.removeEventListener('data', onAny); - process.stdin.setRawMode(false); - - resolve(); + if ('http-01' === opts.type) { + pathname = opts.hostname + acme2.acmeChallengePrefix + "/" + opts.token; + console.log("Put the string '" + opts.keyAuthorization + "' into a file at '" + pathname + "'"); + console.log("echo '" + opts.keyAuthorization + "' > '" + pathname + "'"); + } else if ('dns-01' === opts.type) { + pathname = acme2.acmeChallengeDnsPrefix + "." + opts.hostname.replace(/^\*\./, '');; + console.log("Put the string '" + opts.dnsAuthorization + "' into the TXT record '" + pathname + "'"); + console.log("ddig TXT " + pathname + " '" + opts.dnsAuthorization + "'"); + } else { + reject(new Error("[acme-v2] unrecognized challenge type")); + return; } + console.log("\nThen hit the 'any' key to continue..."); + + function onAny() { + console.log("'any' key was hit"); + process.stdin.pause(); + process.stdin.removeListener('data', onAny); + process.stdin.setRawMode(false); + resolve(); + return; + } + process.stdin.setRawMode(true); process.stdin.resume(); process.stdin.on('data', onAny); }); } , removeChallenge: function (opts) { - // hostname, key - console.log('[DEBUG] remove challenge', opts.hostname, opts.keyAuthorization); - console.log("Remove the file '" + opts.hostname + "/" + opts.token + "'"); - + console.log('[acme-v2] remove challenge', opts.hostname, opts.keyAuthorization); return new Promise(function (resolve) { + // hostname, key setTimeout(resolve, 1 * 1000); }); } , challengeType: chType , email: email - , accountKeypair: RSA.import({ privateKeyPem: require('fs').readFileSync(__dirname + '/account.privkey.pem') }) - , domainKeypair: RSA.import({ privateKeyPem: require('fs').readFileSync(__dirname + '/privkey.pem') }) + , accountKeypair: accountKeypair + , domainKeypair: domainKeypair , domains: web }; - acme2.registerNewAccount(options).then(function (account) { - console.log('account:'); + acme2.accounts.create(options).then(function (account) { + console.log('[acme-v2] account:'); console.log(account); - acme2.getCertificate(options, function (fullchainPem) { - console.log('[acme-v2] A fullchain.pem:'); - console.log(fullchainPem); - }).then(function (fullchainPem) { - console.log('[acme-v2] B fullchain.pem:'); + acme2.certificates.create(options).then(function (fullchainPem) { + console.log('[acme-v2] fullchain.pem:'); console.log(fullchainPem); }); });