mirror of
				https://github.com/therootcompany/greenlock.js.git
				synced 2024-11-16 17:29:00 +00:00 
			
		
		
		
	WIP more v3 compatibility work
This commit is contained in:
		
							parent
							
								
									082f0e4522
								
							
						
					
					
						commit
						51ef9be517
					
				
							
								
								
									
										34
									
								
								index.js
									
									
									
									
									
								
							
							
						
						
									
										34
									
								
								index.js
									
									
									
									
									
								
							@ -21,6 +21,25 @@ function promisifyAllSelf(obj) {
 | 
			
		||||
  obj.__promisified = true;
 | 
			
		||||
  return obj;
 | 
			
		||||
}
 | 
			
		||||
function promisifyAllStore(obj) {
 | 
			
		||||
  Object.keys(obj).forEach(function (key) {
 | 
			
		||||
    if ('function' !== typeof obj[key] || /Async$/.test(key)) { return; }
 | 
			
		||||
 | 
			
		||||
    var p;
 | 
			
		||||
    if (1 === obj[key].length) {
 | 
			
		||||
      // wrap just in case it's synchronous (or improperly throws)
 | 
			
		||||
      p = function (opts) {
 | 
			
		||||
        return PromiseA.resolve(obj[key](opts));
 | 
			
		||||
      };
 | 
			
		||||
    } else {
 | 
			
		||||
      p = util.promisify(obj[key]);
 | 
			
		||||
    }
 | 
			
		||||
    // internal backwards compat
 | 
			
		||||
    obj[key + 'Async'] = util.promisify(obj[key]);
 | 
			
		||||
  });
 | 
			
		||||
  obj.__promisified = true;
 | 
			
		||||
  return obj;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var Greenlock = module.exports;
 | 
			
		||||
Greenlock.Greenlock = Greenlock;
 | 
			
		||||
@ -88,12 +107,17 @@ Greenlock._undefine = function (gl) {
 | 
			
		||||
  return gl;
 | 
			
		||||
};
 | 
			
		||||
Greenlock.create = function (gl) {
 | 
			
		||||
  gl.store = gl.store || require('le-store-certbot').create({
 | 
			
		||||
  if (!gl.store) {
 | 
			
		||||
    console.warn("Deprecation Notice: You're haven't chosen a storage strategy."
 | 
			
		||||
      + " The old default is 'le-store-certbot', but the new default will be 'le-store-fs'."
 | 
			
		||||
      + " Please explicitly set `{ store: require('le-store-fs') }`.");
 | 
			
		||||
    gl.store = require('le-store-certbot').create({
 | 
			
		||||
      debug: gl.debug
 | 
			
		||||
    , configDir: gl.configDir
 | 
			
		||||
    , logsDir: gl.logsDir
 | 
			
		||||
    , webrootPath: gl.webrootPath
 | 
			
		||||
    });
 | 
			
		||||
  }
 | 
			
		||||
  gl.core = require('./lib/core');
 | 
			
		||||
  var log = gl.log || _log;
 | 
			
		||||
 | 
			
		||||
@ -264,7 +288,7 @@ Greenlock.create = function (gl) {
 | 
			
		||||
    gl.acme = gl.acme.create(gl);
 | 
			
		||||
  }
 | 
			
		||||
  gl.acme = promisifyAllSelf(gl.acme);
 | 
			
		||||
  gl._acmeOpts = gl.acme.options || gl.acme.getOptions();
 | 
			
		||||
  gl._acmeOpts = gl.acme.getOptions && gl.acme.getOptions() || gl.acme.options || {};
 | 
			
		||||
  Object.keys(gl._acmeOpts).forEach(function (key) {
 | 
			
		||||
    if (!(key in gl)) {
 | 
			
		||||
      gl[key] = gl._acmeOpts[key];
 | 
			
		||||
@ -274,8 +298,8 @@ Greenlock.create = function (gl) {
 | 
			
		||||
  try {
 | 
			
		||||
    if (gl.store.create) { gl.store = gl.store.create(gl); }
 | 
			
		||||
    gl.store = promisifyAllSelf(gl.store);
 | 
			
		||||
    gl.store.accounts = promisifyAllSelf(gl.store.accounts);
 | 
			
		||||
    gl.store.certificates = promisifyAllSelf(gl.store.certificates);
 | 
			
		||||
    gl.store.accounts = promisifyAllStore(gl.store.accounts);
 | 
			
		||||
    gl.store.certificates = promisifyAllStore(gl.store.certificates);
 | 
			
		||||
    gl._storeOpts = gl.store.options || gl.store.getOptions();
 | 
			
		||||
  } catch(e) {
 | 
			
		||||
    console.error(e);
 | 
			
		||||
@ -491,7 +515,7 @@ Greenlock.create = function (gl) {
 | 
			
		||||
 | 
			
		||||
        try {
 | 
			
		||||
          if (1 === gl.approveDomains.length) {
 | 
			
		||||
            gl.approveDomains(opts).then(cb2).catch(eb2);
 | 
			
		||||
            PromiseA.resolve(gl.approveDomains(opts)).then(cb2).catch(eb2);
 | 
			
		||||
          } else if (2 === gl.approveDomains.length) {
 | 
			
		||||
            gl.approveDomains(opts, mb2);
 | 
			
		||||
          } else {
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										40
									
								
								lib/core.js
									
									
									
									
									
								
							
							
						
						
									
										40
									
								
								lib/core.js
									
									
									
									
									
								
							@ -87,12 +87,12 @@ module.exports.create = function (gl) {
 | 
			
		||||
            // TODO import jwk or pem and return it here
 | 
			
		||||
            console.warn("TODO: implement accounts.checkKeypairAsync skipping");
 | 
			
		||||
          }
 | 
			
		||||
          var newKeypair = true;
 | 
			
		||||
          var accountKeypair;
 | 
			
		||||
          var newAccountKeypair = true;
 | 
			
		||||
          var promise = gl.store.accounts.checkKeypairAsync(args).then(function (keypair) {
 | 
			
		||||
            if (keypair) {
 | 
			
		||||
              // TODO keypairs
 | 
			
		||||
              newKeypair = false;
 | 
			
		||||
              newAccountKeypair = false;
 | 
			
		||||
              accountKeypair = RSA.import(keypair);
 | 
			
		||||
              return;
 | 
			
		||||
            }
 | 
			
		||||
@ -144,12 +144,18 @@ module.exports.create = function (gl) {
 | 
			
		||||
                var reg = {
 | 
			
		||||
                  keypair: keypair
 | 
			
		||||
                , receipt: receipt
 | 
			
		||||
                , kid: receipt && receipt.key && (receipt.key.kid || receipt.kid)
 | 
			
		||||
                , email: args.email
 | 
			
		||||
                , newRegUrl: args._acmeUrls.newReg
 | 
			
		||||
                , newAuthzUrl: args._acmeUrls.newAuthz
 | 
			
		||||
                };
 | 
			
		||||
 | 
			
		||||
                return gl.store.accounts.setKeypairAsync(args, keypair).then(function () {
 | 
			
		||||
                var accountKeypairPromise;
 | 
			
		||||
                args.keypair = keypair;
 | 
			
		||||
                if (newAccountKeypair) {
 | 
			
		||||
                  accountKeypairPromise = gl.store.accounts.setKeypairAsync(args, keypair);
 | 
			
		||||
                }
 | 
			
		||||
                return PromiseA.resolve(accountKeypairPromise).then(function () {
 | 
			
		||||
                // TODO move templating of arguments to right here?
 | 
			
		||||
                if (!gl.store.accounts.setAsync) { return PromiseA.resolve({ keypair: keypair }); }
 | 
			
		||||
                  return gl.store.accounts.setAsync(args, reg).then(function (account) {
 | 
			
		||||
@ -170,7 +176,11 @@ module.exports.create = function (gl) {
 | 
			
		||||
      // Accounts
 | 
			
		||||
      // (only used for keypair)
 | 
			
		||||
    , getAsync: function (args) {
 | 
			
		||||
        return core.accounts.checkAsync(args).then(function (account) {
 | 
			
		||||
        var accountPromise = null;
 | 
			
		||||
        if (gl.store.accounts.checkAsync) {
 | 
			
		||||
          accountPromise = core.accounts.checkAsync(args);
 | 
			
		||||
        }
 | 
			
		||||
        return PromiseA.resolve(accountPromise).then(function (account) {
 | 
			
		||||
          if (!account) { return core.accounts.registerAsync(args); }
 | 
			
		||||
          if (account.keypair) { return account; }
 | 
			
		||||
 | 
			
		||||
@ -188,7 +198,8 @@ module.exports.create = function (gl) {
 | 
			
		||||
      // Accounts
 | 
			
		||||
    , checkAsync: function (args) {
 | 
			
		||||
        var requiredArgs = ['accountId', 'email', 'domains', 'domain'];
 | 
			
		||||
        if (!requiredArgs.some(function (key) { return -1 !== Object.keys(args).indexOf(key); })) {
 | 
			
		||||
        if (!(args.account && (args.account.id || args.account.kid))
 | 
			
		||||
          && !requiredArgs.some(function (key) { return -1 !== Object.keys(args).indexOf(key); })) {
 | 
			
		||||
          return PromiseA.reject(new Error(
 | 
			
		||||
            "In order to register or retrieve an account one of '" + requiredArgs.join("', '") + "' must be present"
 | 
			
		||||
          ));
 | 
			
		||||
@ -201,7 +212,7 @@ module.exports.create = function (gl) {
 | 
			
		||||
 | 
			
		||||
        // we can re-register the same account until we're blue in the face and it's all the same
 | 
			
		||||
        // of course, we can also skip the lookup if we do store the account, but whatever
 | 
			
		||||
        if (!gl.store.accounts.checkAsync) { return null; }
 | 
			
		||||
        if (!gl.store.accounts.checkAsync) { return PromiseA.resolve(null); }
 | 
			
		||||
        return gl.store.accounts.checkAsync(args).then(function (account) {
 | 
			
		||||
 | 
			
		||||
          if (!account) {
 | 
			
		||||
@ -295,12 +306,14 @@ module.exports.create = function (gl) {
 | 
			
		||||
            console.warn("TODO: implement certificates.checkKeypairAsync skipping");
 | 
			
		||||
          }
 | 
			
		||||
          var domainKeypair;
 | 
			
		||||
          var newDomainKeypair = true;
 | 
			
		||||
          // This has been done in the getAsync already, so we skip it here
 | 
			
		||||
          // if approveDomains doesn't set subject, we set it here
 | 
			
		||||
          //args.subject = args.subject || args.domains[0];
 | 
			
		||||
          var promise = gl.store.certificates.checkKeypairAsync(args).then(function (keypair) {
 | 
			
		||||
            if (keypair) {
 | 
			
		||||
              domainKeypair = RSA.import(keypair);
 | 
			
		||||
              newDomainKeypair = false;
 | 
			
		||||
              return;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
@ -410,7 +423,12 @@ module.exports.create = function (gl) {
 | 
			
		||||
            // This has been done in the getAsync already, so we skip it here
 | 
			
		||||
            // if approveDomains doesn't set subject, we set it here
 | 
			
		||||
            //args.subject = args.subject || args.domains[0];
 | 
			
		||||
            return gl.store.certificates.setKeypairAsync(args, domainKeypair).then(function () {
 | 
			
		||||
            var promise;
 | 
			
		||||
            if (newDomainKeypair) {
 | 
			
		||||
              args.keypair = domainKeypair;
 | 
			
		||||
              promise = gl.store.certificates.setKeypairAsync(args, domainKeypair);
 | 
			
		||||
            }
 | 
			
		||||
            return PromiseA.resolve(promise).then(function () {
 | 
			
		||||
              return gl.store.certificates.setAsync(args).then(function () {
 | 
			
		||||
                return results;
 | 
			
		||||
              });
 | 
			
		||||
@ -480,7 +498,15 @@ module.exports.create = function (gl) {
 | 
			
		||||
            cert = utils.attachCertInfo(cert);
 | 
			
		||||
            if (utils.certHasDomain(cert, args.domain)) {
 | 
			
		||||
              log(args.debug, 'checkAsync found existing certificates');
 | 
			
		||||
 | 
			
		||||
              if (cert.privkey) {
 | 
			
		||||
                return cert;
 | 
			
		||||
              } else {
 | 
			
		||||
                return gl.store.certificates.checkKeypairAsync(args).then(function (keypair) {
 | 
			
		||||
                  cert.privkey = RSA.exportPrivatePem(keypair).privateKeyPem;
 | 
			
		||||
                  return cert;
 | 
			
		||||
                });
 | 
			
		||||
              }
 | 
			
		||||
            }
 | 
			
		||||
            log(args.debug, 'checkAsync found mismatched / incomplete certificates');
 | 
			
		||||
          }
 | 
			
		||||
 | 
			
		||||
@ -1,6 +1,6 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "greenlock",
 | 
			
		||||
  "version": "2.7.8",
 | 
			
		||||
  "version": "2.7.9-rc1",
 | 
			
		||||
  "description": "Let's Encrypt for node.js on npm",
 | 
			
		||||
  "main": "index.js",
 | 
			
		||||
  "files": [
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user