73 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			73 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
// 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';
 | 
						|
 | 
						|
module.exports.run = function (directoryUrl, RSA, web, chType, email, accountKeypair, domainKeypair) {
 | 
						|
  console.log('[DEBUG] run', web, chType, email);
 | 
						|
 | 
						|
  var acme2 = require('../compat.js').ACME.create({ RSA: RSA });
 | 
						|
  acme2.getAcmeUrls(acme2.stagingServerUrl, function (err/*, directoryUrls*/) {
 | 
						|
    if (err) { console.log('err 1'); throw err; }
 | 
						|
 | 
						|
    var options = {
 | 
						|
      agreeToTerms: function (tosUrl, agree) {
 | 
						|
        agree(null, tosUrl);
 | 
						|
      }
 | 
						|
    , setChallenge: function (hostname, token, val, cb) {
 | 
						|
        var pathname;
 | 
						|
 | 
						|
        if ('http-01' === cb.type) {
 | 
						|
          pathname = hostname + acme2.acmeChallengePrefix + token;
 | 
						|
          console.log("Put the string '" + val /*keyAuthorization*/ + "' into a file at '" + pathname + "'");
 | 
						|
          console.log("echo '" + val /*keyAuthorization*/ + "' > '" + pathname + "'");
 | 
						|
          console.log("\nThen hit the 'any' key to continue...");
 | 
						|
        } else if ('dns-01' === cb.type) {
 | 
						|
          // forwards-backwards compat
 | 
						|
          pathname = acme2.challengePrefixes['dns-01'] + "." + hostname.replace(/^\*\./, '');
 | 
						|
          console.log("Put the string '" + cb.dnsAuthorization + "' into the TXT record '" + pathname + "'");
 | 
						|
          console.log("dig TXT " + pathname + " '" + cb.dnsAuthorization + "'");
 | 
						|
          console.log("\nThen hit the 'any' key to continue...");
 | 
						|
        } else {
 | 
						|
          cb(new Error("[acme-v2] unrecognized challenge type: " + cb.type));
 | 
						|
          return;
 | 
						|
        }
 | 
						|
 | 
						|
        function onAny() {
 | 
						|
          console.log("'any' key was hit");
 | 
						|
          process.stdin.pause();
 | 
						|
          process.stdin.removeListener('data', onAny);
 | 
						|
          process.stdin.setRawMode(false);
 | 
						|
          cb();
 | 
						|
        }
 | 
						|
 | 
						|
        process.stdin.setRawMode(true);
 | 
						|
        process.stdin.resume();
 | 
						|
        process.stdin.on('data', onAny);
 | 
						|
      }
 | 
						|
    , removeChallenge: function (hostname, key, cb) {
 | 
						|
        console.log('[DEBUG] remove challenge', hostname, key);
 | 
						|
        setTimeout(cb, 1 * 1000);
 | 
						|
      }
 | 
						|
    , challengeType: chType
 | 
						|
    , email: email
 | 
						|
    , accountKeypair: accountKeypair
 | 
						|
    , domainKeypair: domainKeypair
 | 
						|
    , domains: web
 | 
						|
    };
 | 
						|
 | 
						|
    acme2.registerNewAccount(options, function (err, account) {
 | 
						|
      if (err) { console.log('err 2'); throw err; }
 | 
						|
      if (options.debug) console.debug('account:');
 | 
						|
      if (options.debug) console.log(account);
 | 
						|
 | 
						|
      acme2.getCertificate(options, function (err, fullchainPem) {
 | 
						|
        if (err) { console.log('err 3'); throw err; }
 | 
						|
        console.log('[acme-v2] A fullchain.pem:');
 | 
						|
        console.log(fullchainPem);
 | 
						|
      });
 | 
						|
    });
 | 
						|
  });
 | 
						|
};
 |