// Copyright 2018 AJ ONeal. All rights reserved /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 'use strict'; /* global Promise */ module.exports.run = function run( directoryUrl, RSA, web, chType, email, accountKeypair, domainKeypair ) { var acme2 = require('../').ACME.create({ RSA: RSA }); // [ 'test.ppl.family' ] 'coolaj86@gmail.com''http-01' acme2.init(directoryUrl).then(function() { var options = { 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(''); if ('http-01' === opts.type) { pathname = opts.hostname + acme2.challengePrefixes['http-01'] + '/' + 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.challengePrefixes['dns-01'] + '.' + opts.hostname.replace(/^\*\./, ''); console.log( "Put the string '" + opts.dnsAuthorization + "' into the TXT record '" + pathname + "'" ); console.log( 'dig 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) { 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: accountKeypair, domainKeypair: domainKeypair, domains: web }; acme2.accounts.create(options).then(function(account) { console.log('[acme-v2] account:'); console.log(account); acme2.certificates.create(options).then(function(fullchainPem) { console.log('[acme-v2] fullchain.pem:'); console.log(fullchainPem); }); }); }); };