'use strict'; var Challenge = module.exports; Challenge.create = function (defaults) { return { getOptions: function () { return defaults || {}; } , set: Challenge.set , get: Challenge.get , remove: Challenge.remove , loopback: Challenge.loopback , test: Challenge.test }; }; // Show the user the token and key and wait for them to be ready to continue Challenge.set = function (args, domain, challenge, keyAuthorization, cb) { var keyAuthDigest = require('crypto').createHash('sha256').update(keyAuthorization||'').digest('base64') .replace(/\+/g, '-') .replace(/\//g, '_') .replace(/=+$/g, '') ; var challengeDomain = domain; if (this.leDnsResponse) { this.leDnsResponse(challenge, keyAuthorization, keyAuthDigest, challengeDomain, domain) .then(function (/*successMessage*/) { cb(null); }); } else { 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 Challenge and secret KeyAuthorization and Digest, in that order, respectively:"); console.info(challenge); console.info(keyAuthorization); console.info(keyAuthDigest); console.info(""); console.info(challengeDomain + "\tTXT " + keyAuthDigest + "\tTTL 60"); console.info(""); console.info(JSON.stringify({ domain: domain , challenge: challenge , keyAuthorization: keyAuthorization , keyAuthDigest: keyAuthDigest }, 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 (defaults, domain, challenge, cb) { cb(null); }; // might as well tell the user that whatever they were setting up has been checked Challenge.remove = function (args, domain, challenge, cb) { console.info("Challenge for '" + domain + "' complete. You may remove it."); cb(null); //}); };