mirror of
				https://git.coolaj86.com/coolaj86/greenlock-cli.js
				synced 2025-11-04 11:02:47 +00:00 
			
		
		
		
	standalone works
This commit is contained in:
		
							parent
							
								
									23b74e0609
								
							
						
					
					
						commit
						e55a206973
					
				@ -2,6 +2,7 @@
 | 
			
		||||
'use strict';
 | 
			
		||||
 | 
			
		||||
var cli = require('cli');
 | 
			
		||||
var mkdirp = require('mkdirp');
 | 
			
		||||
 | 
			
		||||
cli.parse({
 | 
			
		||||
  email: [ false, " Email used for registration and recovery contact. (default: null)", 'email' ]
 | 
			
		||||
@ -9,8 +10,8 @@ cli.parse({
 | 
			
		||||
, duplicate: [ false, " Allow getting a certificate that duplicates an existing one", 'boolean', false ]
 | 
			
		||||
, 'agree-tos': [ false, " Agree to the Let's Encrypt Subscriber Agreement", 'boolean', false ]
 | 
			
		||||
, debug: [ false, " show traces and logs", 'boolean', false ]
 | 
			
		||||
, 'tls-sni-01-port': [ false, " Port number to perform tls-sni-01 challenge. Boulder in testing mode defaults to 5001. (default: 443 and 5001)", 'int' ]
 | 
			
		||||
, 'http-01-port': [ false, " Port used in the SimpleHttp challenge.", 'int', 80 ]
 | 
			
		||||
, 'tls-sni-01-port': [ false, " Port number to perform tls-sni-01 challenge. Boulder in testing mode defaults to 5001. (default: 443,5001)" ]
 | 
			
		||||
, 'http-01-port': [ false, " Port used in the SimpleHttp challenge. (default: 80)" ]
 | 
			
		||||
, 'rsa-key-size': [ false, " Size (in bits) of the RSA key.", 'int', 2048 ]
 | 
			
		||||
, 'cert-path': [ false, " Path to where new cert.pem is saved", 'string',':conf/live/:hostname/cert.pem' ]
 | 
			
		||||
, 'fullchain-path': [ false, " Path to where new fullchain.pem (cert + chain) is saved", 'string', ':conf/live/:hostname/fullchain.pem' ]
 | 
			
		||||
@ -53,23 +54,53 @@ cli.main(function(_, options) {
 | 
			
		||||
    args[key] = val;
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  var LE = require('letsencrypt');
 | 
			
		||||
  var handlers;
 | 
			
		||||
  
 | 
			
		||||
  if (args.standalone) {
 | 
			
		||||
    handlers = require('../lib/standalone');
 | 
			
		||||
  }
 | 
			
		||||
  else if (args.webrootPath) {
 | 
			
		||||
    handlers = require('../lib/webroot');
 | 
			
		||||
  if (args.domains) {
 | 
			
		||||
    args.domains = args.domains.split(',');
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  LE.create({}, handlers).register(args, function (err, results) {
 | 
			
		||||
  if (args.tlsSni01Port) {
 | 
			
		||||
    args.tlsSni01Port = args.tlsSni01Port.split(',').map(function (port) {
 | 
			
		||||
      return parseInt(port, 10);
 | 
			
		||||
    });
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (args.http01Port) {
 | 
			
		||||
    args.http01Port = args.http01Port.split(',').map(function (port) {
 | 
			
		||||
      return parseInt(port, 10);
 | 
			
		||||
    });
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  mkdirp(args.configDir, function (err) {
 | 
			
		||||
    if (err) {
 | 
			
		||||
      console.error(err.stack);
 | 
			
		||||
      console.error("Could not create --config-dir '" + args.configDir + "':", err.code);
 | 
			
		||||
      console.error("Try setting --config-dir '/tmp'");
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // should get back account, path to certs, pems, etc?
 | 
			
		||||
    console.log(results);
 | 
			
		||||
    var LE = require('letsencrypt');
 | 
			
		||||
    var handlers;
 | 
			
		||||
    
 | 
			
		||||
    if (args.standalone) {
 | 
			
		||||
      handlers = require('../lib/standalone');
 | 
			
		||||
      handlers.startServers(args.http01Ports || [80], args.tlsSni01Port || [443, 5001]);
 | 
			
		||||
    }
 | 
			
		||||
    else if (args.webrootPath) {
 | 
			
		||||
      handlers = require('../lib/webroot');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    LE.create({}, handlers).register(args, function (err, results) {
 | 
			
		||||
      if (err) {
 | 
			
		||||
        console.error(err.stack);
 | 
			
		||||
        return;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      if (handlers.closeServers) {
 | 
			
		||||
        handlers.closeServers();
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      // should get back account, path to certs, pems, etc?
 | 
			
		||||
      console.log('results');
 | 
			
		||||
      console.log(results);
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
@ -0,0 +1,62 @@
 | 
			
		||||
'use strict';
 | 
			
		||||
 | 
			
		||||
var handlers = module.exports = {
 | 
			
		||||
  //
 | 
			
		||||
  // set,get,remove challenges
 | 
			
		||||
  //
 | 
			
		||||
  _challenges: {}
 | 
			
		||||
, setChallenge: function (args, key, value, cb) {
 | 
			
		||||
    handlers._challenges[key] = value;
 | 
			
		||||
    cb(null);
 | 
			
		||||
  }
 | 
			
		||||
, getChallenge: function (args, key, cb) {
 | 
			
		||||
    cb(null, handlers._challenges[key]);
 | 
			
		||||
  }
 | 
			
		||||
, removeChallenge: function (args, key, cb) {
 | 
			
		||||
    delete handlers._challenges[key];
 | 
			
		||||
    cb(null);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
, _servers: []
 | 
			
		||||
, httpResponder: function (req, res) {
 | 
			
		||||
    var acmeChallengePrefix = '/.well-known/acme-challenge/';
 | 
			
		||||
 | 
			
		||||
    if (0 !== req.url.indexOf(acmeChallengePrefix)) {
 | 
			
		||||
      res.end('Hello World!');
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    var key = req.url.slice(acmeChallengePrefix.length);
 | 
			
		||||
 | 
			
		||||
    handlers.getChallenge(req.headers.host, key, function (err, val) {
 | 
			
		||||
      res.end(val || '_');
 | 
			
		||||
    });
 | 
			
		||||
  }
 | 
			
		||||
, startServers: function (plainPorts, tlsPorts) {
 | 
			
		||||
    var httpsOptions = require('localhost.daplie.com-certificates');
 | 
			
		||||
    var https = require('https');
 | 
			
		||||
    var http = require('http');
 | 
			
		||||
 | 
			
		||||
    // tls-sni-01-port
 | 
			
		||||
    if (handlers._servers.length) {
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    plainPorts.forEach(function (port) {
 | 
			
		||||
      http.createServer(handlers.httpResponder).listen(port, function () {
 | 
			
		||||
        console.info('Listening http on', this.address());
 | 
			
		||||
      });
 | 
			
		||||
    });
 | 
			
		||||
    tlsPorts.forEach(function (port) {
 | 
			
		||||
      https.createServer(httpsOptions, handlers.httpResponder).listen(port, function () {
 | 
			
		||||
        console.info('Listening https on', this.address());
 | 
			
		||||
      });
 | 
			
		||||
    });
 | 
			
		||||
  }
 | 
			
		||||
, closeServers: function () {
 | 
			
		||||
    handlers._servers.forEach(function (server) {
 | 
			
		||||
      server.close();
 | 
			
		||||
    });
 | 
			
		||||
    handlers._servers = [];
 | 
			
		||||
  }
 | 
			
		||||
};
 | 
			
		||||
@ -34,6 +34,8 @@
 | 
			
		||||
  "homepage": "https://github.com/Daplie/node-letsencrypt-cli",
 | 
			
		||||
  "dependencies": {
 | 
			
		||||
    "cli": "^0.11.1",
 | 
			
		||||
    "homedir": "^0.6.0"
 | 
			
		||||
    "homedir": "^0.6.0",
 | 
			
		||||
    "localhost.daplie.com-certificates": "^1.1.2",
 | 
			
		||||
    "mkdirp": "^0.5.1"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user